From 895f28e873af7c8eda5ca85734ff67c8979fd950 Mon Sep 17 00:00:00 2001 From: awkweb Date: Mon, 5 Feb 2024 17:32:00 -0500 Subject: [PATCH] refactor: remove connector warnings (#3558) * refactor: connector warnings * fix: catch reconnect * chore: next bundle analyzer * chore: changeset * test: up --- .changeset/empty-gifts-cover.md | 6 ++ packages/connectors/src/coinbaseWallet.ts | 6 +- .../connectors/src/exports/index.test-d.ts | 4 - packages/connectors/src/metaMask.ts | 5 +- packages/connectors/src/safe.ts | 27 +++--- packages/connectors/src/walletConnect.ts | 11 ++- packages/connectors/tsconfig.build.json | 2 +- packages/core/src/actions/reconnect.ts | 5 +- .../hooks/useBlockTransactionCount.test.ts | 4 +- playgrounds/next/next.config.mjs | 8 +- playgrounds/next/package.json | 5 +- pnpm-lock.yaml | 85 ++++++++++++++++--- 12 files changed, 127 insertions(+), 41 deletions(-) create mode 100644 .changeset/empty-gifts-cover.md delete mode 100644 packages/connectors/src/exports/index.test-d.ts diff --git a/.changeset/empty-gifts-cover.md b/.changeset/empty-gifts-cover.md new file mode 100644 index 0000000000..456e59d933 --- /dev/null +++ b/.changeset/empty-gifts-cover.md @@ -0,0 +1,6 @@ +--- +"@wagmi/connectors": patch +"@wagmi/core": patch +--- + +Fixed connector warnings. diff --git a/packages/connectors/src/coinbaseWallet.ts b/packages/connectors/src/coinbaseWallet.ts index be100cfc4c..08a38ac087 100644 --- a/packages/connectors/src/coinbaseWallet.ts +++ b/packages/connectors/src/coinbaseWallet.ts @@ -1,6 +1,6 @@ import { type CoinbaseWalletProvider, - CoinbaseWalletSDK, + type CoinbaseWalletSDK, } from '@coinbase/wallet-sdk' import { ChainNotConfiguredError, @@ -110,10 +110,12 @@ export function coinbaseWallet(parameters: CoinbaseWalletParameters) { }, async getChainId() { const provider = await this.getProvider() - return normalizeChainId(provider.chainId) + const chainId = await provider.request({ method: 'eth_chainId' }) + return normalizeChainId(chainId) }, async getProvider() { if (!walletProvider) { + const { CoinbaseWalletSDK } = await import('@coinbase/wallet-sdk') sdk = new CoinbaseWalletSDK({ reloadOnDisconnect, ...parameters }) // Mock implementations to retrieve private `walletExtension` method from the Coinbase Wallet SDK. diff --git a/packages/connectors/src/exports/index.test-d.ts b/packages/connectors/src/exports/index.test-d.ts deleted file mode 100644 index b056d56358..0000000000 --- a/packages/connectors/src/exports/index.test-d.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { expectTypeOf } from 'vitest' - -// noop test because vitest typecheck fails unless each workspace project has type test -expectTypeOf(1).toEqualTypeOf() diff --git a/packages/connectors/src/metaMask.ts b/packages/connectors/src/metaMask.ts index 8f4d5cd147..26dfbc23bf 100644 --- a/packages/connectors/src/metaMask.ts +++ b/packages/connectors/src/metaMask.ts @@ -1,8 +1,8 @@ import { EventType, - MetaMaskSDK, + type MetaMaskSDK, type MetaMaskSDKOptions, - SDKProvider, + type SDKProvider, } from '@metamask/sdk' import { ChainNotConfiguredError, @@ -174,6 +174,7 @@ export function metaMask(parameters: MetaMaskParameters = {}) { async getProvider() { if (!walletProvider) { if (!sdk || !sdk?.isInitialized()) { + const { MetaMaskSDK } = await import('@metamask/sdk') sdk = new MetaMaskSDK({ enableDebug: false, dappMetadata: { name: 'wagmi' }, diff --git a/packages/connectors/src/safe.ts b/packages/connectors/src/safe.ts index 5416523fc9..518fcdcaa8 100644 --- a/packages/connectors/src/safe.ts +++ b/packages/connectors/src/safe.ts @@ -1,5 +1,5 @@ -import { SafeAppProvider } from '@safe-global/safe-apps-provider' -import { type Opts, default as SafeAppsSDK } from '@safe-global/safe-apps-sdk' +import { type SafeAppProvider } from '@safe-global/safe-apps-provider' +import { type Opts } from '@safe-global/safe-apps-sdk' import { ProviderNotFoundError, createConnector, @@ -31,14 +31,6 @@ export function safe(parameters: SafeParameters = {}) { type StorageItem = { 'safe.disconnected': true } let provider_: Provider | undefined - let SDK: typeof SafeAppsSDK.default - if ( - typeof SafeAppsSDK !== 'function' && - typeof SafeAppsSDK.default === 'function' - ) - SDK = SafeAppsSDK.default - else SDK = SafeAppsSDK as unknown as typeof SafeAppsSDK.default - const sdk = new SDK(parameters) return createConnector((config) => ({ id: 'safe', @@ -82,8 +74,23 @@ export function safe(parameters: SafeParameters = {}) { if (!isIframe) return if (!provider_) { + const { default: SafeAppsSDK } = await import( + '@safe-global/safe-apps-sdk' + ) + let SDK: typeof SafeAppsSDK.default + if ( + typeof SafeAppsSDK !== 'function' && + typeof SafeAppsSDK.default === 'function' + ) + SDK = SafeAppsSDK.default + else SDK = SafeAppsSDK as unknown as typeof SafeAppsSDK.default + const sdk = new SDK(parameters) + const safe = await sdk.safe.getInfo() if (!safe) throw new Error('Could not load Safe information') + const { SafeAppProvider } = await import( + '@safe-global/safe-apps-provider' + ) provider_ = new SafeAppProvider(safe, sdk) } return provider_ diff --git a/packages/connectors/src/walletConnect.ts b/packages/connectors/src/walletConnect.ts index 5b2b253b40..1030ee459a 100644 --- a/packages/connectors/src/walletConnect.ts +++ b/packages/connectors/src/walletConnect.ts @@ -4,8 +4,12 @@ import { createConnector, normalizeChainId, } from '@wagmi/core' -import type { Evaluate, ExactPartial, Omit } from '@wagmi/core/internal' -import { EthereumProvider } from '@walletconnect/ethereum-provider' +import { + type Evaluate, + type ExactPartial, + type Omit, +} from '@wagmi/core/internal' +import { type EthereumProvider } from '@walletconnect/ethereum-provider' import { type Address, type ProviderConnectInfo, @@ -197,6 +201,9 @@ export function walletConnect(parameters: WalletConnectParameters) { async function initProvider() { const optionalChains = config.chains.map((x) => x.id) as [number] if (!optionalChains.length) return + const { EthereumProvider } = await import( + '@walletconnect/ethereum-provider' + ) return await EthereumProvider.init({ ...parameters, disableProviderPing: true, diff --git a/packages/connectors/tsconfig.build.json b/packages/connectors/tsconfig.build.json index 45ae2069ef..fbed2b1036 100644 --- a/packages/connectors/tsconfig.build.json +++ b/packages/connectors/tsconfig.build.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.base.json", "include": ["src/**/*.ts"], - "exclude": ["src/**/*.test.ts"], + "exclude": ["src/**/*.test.ts", "src/**/*.test-d.ts"], "compilerOptions": { "sourceMap": true } diff --git a/packages/core/src/actions/reconnect.ts b/packages/core/src/actions/reconnect.ts index 26e1fd7cf7..1efaa2f78e 100644 --- a/packages/core/src/actions/reconnect.ts +++ b/packages/core/src/actions/reconnect.ts @@ -43,7 +43,10 @@ export async function reconnect( } else connectors.push(...config.connectors) // Try recently-used connectors first - const recentConnectorId = await config.storage?.getItem('recentConnectorId') + let recentConnectorId + try { + recentConnectorId = await config.storage?.getItem('recentConnectorId') + } catch {} const scores: Record = {} for (const [, connection] of config.state.connections) { scores[connection.connector.id] = 1 diff --git a/packages/react/src/hooks/useBlockTransactionCount.test.ts b/packages/react/src/hooks/useBlockTransactionCount.test.ts index 5c5aab45a7..dad6c95506 100644 --- a/packages/react/src/hooks/useBlockTransactionCount.test.ts +++ b/packages/react/src/hooks/useBlockTransactionCount.test.ts @@ -1,4 +1,4 @@ -import { chain, testClient } from '@wagmi/test' +import { chain } from '@wagmi/test' import { renderHook, waitFor } from '@wagmi/test/react' import { expect, test } from 'vitest' @@ -47,8 +47,6 @@ test('default', async () => { }) test('parameters: chainId', async () => { - await testClient.mainnet2.mine({ blocks: 1 }) - const { result } = renderHook(() => useBlockTransactionCount({ chainId: chain.mainnet2.id }), ) diff --git a/playgrounds/next/next.config.mjs b/playgrounds/next/next.config.mjs index a0a950fa76..8831ff653a 100644 --- a/playgrounds/next/next.config.mjs +++ b/playgrounds/next/next.config.mjs @@ -1,3 +1,9 @@ +import bundleAnalyzer from '@next/bundle-analyzer' + +const withBundleAnalyzer = bundleAnalyzer({ + enabled: process.env.ANALYZE === 'true', +}) + /** @type {import('next').NextConfig} */ const nextConfig = { experimental: { @@ -11,4 +17,4 @@ const nextConfig = { }, } -export default nextConfig +export default withBundleAnalyzer(nextConfig) diff --git a/playgrounds/next/package.json b/playgrounds/next/package.json index 95027c0b14..5cb5c0bc7d 100644 --- a/playgrounds/next/package.json +++ b/playgrounds/next/package.json @@ -3,15 +3,16 @@ "private": true, "scripts": { "dev": "next dev", - "build": "next build", + "build": "ANALYZE=true next build", "start": "next start", "lint": "next lint" }, "dependencies": { + "@next/bundle-analyzer": "^14.1.0", "@tanstack/react-query": "5.0.5", + "next": "13.5.3", "react": "^18.2.0", "react-dom": "^18.2.0", - "next": "13.5.3", "viem": "2.0.0", "wagmi": "workspace:*" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bdb1c5d005..24560b0cca 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -100,7 +100,7 @@ importers: version: 2.0.0(bufferutil@4.0.8)(typescript@5.3.2)(utf-8-validate@6.0.3) vite: specifier: ^4.4.9 - version: 4.4.9(@types/node@20.11.5) + version: 4.4.9(@types/node@20.7.0) vitepress: specifier: 1.0.0-rc.20 version: 1.0.0-rc.20(@types/react@18.2.23)(react@18.2.0) @@ -350,6 +350,9 @@ importers: playgrounds/next: dependencies: + '@next/bundle-analyzer': + specifier: ^14.1.0 + version: 14.1.0(bufferutil@4.0.8)(utf-8-validate@6.0.3) '@tanstack/react-query': specifier: 5.0.5 version: 5.0.5(react-dom@18.2.0)(react@18.2.0) @@ -429,7 +432,7 @@ importers: version: 6.0.3 vite: specifier: ^4.4.9 - version: 4.4.9(@types/node@20.11.5) + version: 4.4.9(@types/node@20.7.0) playgrounds/vite-react: dependencies: @@ -475,7 +478,7 @@ importers: version: 6.0.3 vite: specifier: ^4.4.9 - version: 4.4.9(@types/node@20.11.5) + version: 4.4.9(@types/node@20.7.0) playgrounds/vite-ssr-react: dependencies: @@ -1347,6 +1350,11 @@ packages: '@jridgewell/trace-mapping': 0.3.9 dev: false + /@discoveryjs/json-ext@0.5.7: + resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} + engines: {node: '>=10.0.0'} + dev: false + /@docsearch/css@3.5.2: resolution: {integrity: sha512-SPiDHaWKQZpwR2siD0KQUwlStvIAnEyK6tAE2h2Wuoq8ue9skzhlyVQ1ddzOxX6khULnAALDiR/isSF3bnuciA==} dev: true @@ -2852,6 +2860,15 @@ packages: strict-event-emitter: 0.5.1 dev: true + /@next/bundle-analyzer@14.1.0(bufferutil@4.0.8)(utf-8-validate@6.0.3): + resolution: {integrity: sha512-RJWjnlMp/1WSW0ahAdawV22WgJiC6BVaFS5Xfhw6gP7NJEX3cAJjh4JqSHKGr8GnLNRaFCVTQdDPoX84E421BA==} + dependencies: + webpack-bundle-analyzer: 4.10.1(bufferutil@4.0.8)(utf-8-validate@6.0.3) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + /@next/env@13.5.3: resolution: {integrity: sha512-X4te86vsbjsB7iO4usY9jLPtZ827Mbx+WcwNBGUOIuswuTAKQtzsuoxc/6KLxCMvogKG795MhrR1LDhYgDvasg==} dev: false @@ -4446,7 +4463,7 @@ packages: chokidar: 3.5.3 fast-glob: 3.3.1 magic-string: 0.30.2 - vite: 4.4.9(@types/node@20.11.5) + vite: 4.4.9(@types/node@20.7.0) transitivePeerDependencies: - rollup dev: true @@ -4475,7 +4492,7 @@ packages: '@babel/plugin-transform-react-jsx-source': 7.22.5(@babel/core@7.23.0) '@types/babel__core': 7.20.2 react-refresh: 0.14.0 - vite: 4.4.9(@types/node@20.11.5) + vite: 4.4.9(@types/node@20.7.0) transitivePeerDependencies: - supports-color @@ -4849,7 +4866,7 @@ packages: '@walletconnect/jsonrpc-utils': 1.0.8 '@walletconnect/safe-json': 1.0.2 events: 3.3.0 - ws: 7.5.9 + ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@6.0.3) transitivePeerDependencies: - bufferutil - utf-8-validate @@ -5901,6 +5918,11 @@ packages: engines: {node: '>= 6'} dev: true + /commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + dev: false + /compose-function@3.0.3: resolution: {integrity: sha512-xzhzTJ5eC+gmIzvZq+C3kCJHsp9os6tJkrigDRZclyGtOKINbZtE8n1Tzmeh32jW+BUDPbvZpibwvJHBLGMVwg==} dependencies: @@ -6138,6 +6160,10 @@ packages: resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} dev: true + /debounce@1.2.1: + resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} + dev: false + /debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -6383,7 +6409,6 @@ packages: /duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - dev: true /duplexify@4.1.2: resolution: {integrity: sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==} @@ -7497,7 +7522,6 @@ packages: engines: {node: '>=10'} dependencies: duplexer: 0.1.2 - dev: true /h3@1.9.0: resolution: {integrity: sha512-+F3ZqrNV/CFXXfZ2lXBINHi+rM4Xw3CDC5z2CDK3NMPocjonKipGLLDSkrqY9DOrioZNPTIdDMWfQKm//3X2DA==} @@ -7588,7 +7612,7 @@ packages: typescript: 5.3.2 undici: 5.24.0 uuid: 8.3.2 - ws: 7.5.9 + ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@6.0.3) transitivePeerDependencies: - bufferutil - supports-color @@ -7702,7 +7726,6 @@ packages: /html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - dev: true /html-parse-stringify@3.0.1: resolution: {integrity: sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==} @@ -8077,6 +8100,11 @@ packages: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} + /is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + dev: false + /is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} dev: true @@ -9395,6 +9423,11 @@ packages: is-wsl: 2.2.0 dev: false + /opener@1.5.2: + resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} + hasBin: true + dev: false + /optionator@0.8.3: resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} engines: {node: '>= 0.8.0'} @@ -11719,6 +11752,7 @@ packages: rollup: 3.28.0 optionalDependencies: fsevents: 2.3.3 + dev: true /vite@4.4.9(@types/node@20.7.0): resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==} @@ -11754,7 +11788,6 @@ packages: rollup: 3.28.0 optionalDependencies: fsevents: 2.3.3 - dev: false /vitepress-plugin-shiki-twoslash@0.0.6(typescript@5.3.2)(vitepress@1.0.0-rc.20): resolution: {integrity: sha512-CjMF01Vb/zwOKKCqq6QmkJbTJnRxipv8oiPjRWTjzH2jPaQH4gGCF2fZHS7uY53J3gbU3GwtrXI02J6axLYmbg==} @@ -11790,7 +11823,7 @@ packages: mark.js: 8.11.1 minisearch: 6.1.0 shiki: 0.14.4 - vite: 4.4.9(@types/node@20.11.5) + vite: 4.4.9(@types/node@20.7.0) vue: 3.3.4 transitivePeerDependencies: - '@algolia/client-search' @@ -11976,6 +12009,29 @@ packages: engines: {node: '>=12'} dev: true + /webpack-bundle-analyzer@4.10.1(bufferutil@4.0.8)(utf-8-validate@6.0.3): + resolution: {integrity: sha512-s3P7pgexgT/HTUSYgxJyn28A+99mmLq4HsJepMPzu0R8ImJc52QNqaFYW1Z2z2uIb1/J3eYgaAWVpaC+v/1aAQ==} + engines: {node: '>= 10.13.0'} + hasBin: true + dependencies: + '@discoveryjs/json-ext': 0.5.7 + acorn: 8.10.0 + acorn-walk: 8.2.0 + commander: 7.2.0 + debounce: 1.2.1 + escape-string-regexp: 4.0.0 + gzip-size: 6.0.0 + html-escaper: 2.0.2 + is-plain-object: 5.0.0 + opener: 1.5.2 + picocolors: 1.0.0 + sirv: 2.0.3 + ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@6.0.3) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + /whatwg-encoding@2.0.0: resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} engines: {node: '>=12'} @@ -12127,7 +12183,7 @@ packages: optional: true dev: true - /ws@7.5.9: + /ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@6.0.3): resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} engines: {node: '>=8.3.0'} peerDependencies: @@ -12138,6 +12194,9 @@ packages: optional: true utf-8-validate: optional: true + dependencies: + bufferutil: 4.0.8 + utf-8-validate: 6.0.3 /ws@8.11.0(bufferutil@4.0.8)(utf-8-validate@6.0.3): resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==}