From a5082df6ff40a09cff37e3a6f8c852563701d5a0 Mon Sep 17 00:00:00 2001 From: MK Date: Thu, 16 Jan 2025 18:49:43 +0000 Subject: [PATCH 1/6] chore: provider not set on wagmi adapter --- packages/adapters/wagmi/src/client.ts | 3 +- .../adapters/wagmi/src/tests/client.test.ts | 31 +++++++++++++++++-- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/packages/adapters/wagmi/src/client.ts b/packages/adapters/wagmi/src/client.ts index b5855dc6d1..d71621a9e2 100644 --- a/packages/adapters/wagmi/src/client.ts +++ b/packages/adapters/wagmi/src/client.ts @@ -410,7 +410,7 @@ export class WagmiAdapter extends AdapterBlueprint { return formatUnits(params.value, params.decimals) } - private addWagmiConnector(connector: Connector, options: AppKitOptions) { + private async addWagmiConnector(connector: Connector, options: AppKitOptions) { /* * We don't need to set auth connector or walletConnect connector * from wagmi since we already set it in chain adapter blueprint @@ -433,6 +433,7 @@ export class WagmiAdapter extends AdapterBlueprint { connector.id === CommonConstantsUtil.CONNECTOR_ID.INJECTED ? undefined : { rdns: connector.id }, + provider: (await connector.getProvider().catch(() => undefined)) as Provider | undefined, chain: this.namespace as ChainNamespace, chains: [] }) diff --git a/packages/adapters/wagmi/src/tests/client.test.ts b/packages/adapters/wagmi/src/tests/client.test.ts index 8cee2c208d..69608320c1 100644 --- a/packages/adapters/wagmi/src/tests/client.test.ts +++ b/packages/adapters/wagmi/src/tests/client.test.ts @@ -66,7 +66,10 @@ const mockCaipNetworks = CaipNetworksUtil.extendCaipNetworks(mockNetworks, { const mockWagmiConfig = { connectors: [ { - id: 'test-connector' + id: 'test-connector', + getProvider() { + return Promise.resolve({ connect: vi.fn(), request: vi.fn() }) + } } ], _internal: { @@ -101,11 +104,14 @@ describe('WagmiAdapter', () => { expect(adapter.namespace).toBe('eip155') }) - it('should set wagmi connectors', () => { + it('should set wagmi connectors', async () => { vi.spyOn(wagmiCore, 'watchConnectors').mockImplementation(vi.fn()) adapter.syncConnectors({ networks: [mainnet], projectId: 'YOUR_PROJECT_ID' }, mockAppKit) + // Wait for connectors to be set + await new Promise(resolve => setTimeout(resolve, 200)) + expect(adapter.connectors).toStrictEqual([ { chain: 'eip155', @@ -115,6 +121,10 @@ describe('WagmiAdapter', () => { imageId: undefined, imageUrl: undefined, info: { rdns: 'test-connector' }, + provider: { + connect: expect.any(Function), + request: expect.any(Function) + }, name: undefined, type: 'EXTERNAL' } @@ -156,6 +166,23 @@ describe('WagmiAdapter', () => { `https://cloudflare-eth.com` ) }) + + it('should add connector with provider', async () => { + const mockConnector = { + id: 'injected', + name: 'Injected Wallet', + type: 'injected', + getProvider() { + return Promise.resolve({ connect: vi.fn(), request: vi.fn() }) + } + } as unknown as wagmiCore.Connector + + await (adapter as any).addWagmiConnector(mockConnector) + + const provider = adapter.connectors?.find(c => c.id === mockConnector.id)?.provider + + expect(provider).toBeDefined() + }) }) describe('WagmiAdapter - signMessage', () => { From 4ad8c8d34444067502ae27c66a0a81b92b5c2bf1 Mon Sep 17 00:00:00 2001 From: MK Date: Thu, 16 Jan 2025 18:51:35 +0000 Subject: [PATCH 2/6] chore: changeset --- .changeset/selfish-rivers-shout.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 .changeset/selfish-rivers-shout.md diff --git a/.changeset/selfish-rivers-shout.md b/.changeset/selfish-rivers-shout.md new file mode 100644 index 0000000000..01175b6f32 --- /dev/null +++ b/.changeset/selfish-rivers-shout.md @@ -0,0 +1,23 @@ +--- +'@reown/appkit-adapter-wagmi': patch +'@reown/appkit-adapter-bitcoin': patch +'@reown/appkit-adapter-ethers': patch +'@reown/appkit-adapter-ethers5': patch +'@reown/appkit-adapter-solana': patch +'@reown/appkit': patch +'@reown/appkit-utils': patch +'@reown/appkit-cdn': patch +'@reown/appkit-cli': patch +'@reown/appkit-common': patch +'@reown/appkit-core': patch +'@reown/appkit-experimental': patch +'@reown/appkit-polyfills': patch +'@reown/appkit-scaffold-ui': patch +'@reown/appkit-siwe': patch +'@reown/appkit-siwx': patch +'@reown/appkit-ui': patch +'@reown/appkit-wallet': patch +'@reown/appkit-wallet-button': patch +--- + +Fixed an issue where the `walletProvider` from the `useAppKitProvider` hook was `undefined` when the wallet was connected. This issue occurred only when using the WagmiAdapter. From a9e8343f82212af7bc597e6927ef5aa7543dd6d6 Mon Sep 17 00:00:00 2001 From: MK Date: Thu, 16 Jan 2025 18:56:50 +0000 Subject: [PATCH 3/6] chore: tweak test --- .../adapters/wagmi/src/tests/client.test.ts | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/packages/adapters/wagmi/src/tests/client.test.ts b/packages/adapters/wagmi/src/tests/client.test.ts index 69608320c1..11c45f7bbf 100644 --- a/packages/adapters/wagmi/src/tests/client.test.ts +++ b/packages/adapters/wagmi/src/tests/client.test.ts @@ -179,9 +179,23 @@ describe('WagmiAdapter', () => { await (adapter as any).addWagmiConnector(mockConnector) - const provider = adapter.connectors?.find(c => c.id === mockConnector.id)?.provider - - expect(provider).toBeDefined() + expect(adapter.connectors).toStrictEqual([ + { + chain: 'eip155', + chains: [], + explorerId: undefined, + id: 'injected', + imageId: '07ba87ed-43aa-4adf-4540-9e6a2b9cae00', + imageUrl: undefined, + info: undefined, + name: 'Browser Wallet', + provider: { + connect: expect.any(Function), + request: expect.any(Function) + }, + type: 'INJECTED' + } + ]) }) }) From 8d49a597ba3b3989e08238b9939b3be85149e88d Mon Sep 17 00:00:00 2001 From: MK Date: Thu, 16 Jan 2025 18:59:03 +0000 Subject: [PATCH 4/6] chore: tweak changeset --- .changeset/selfish-rivers-shout.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/selfish-rivers-shout.md b/.changeset/selfish-rivers-shout.md index 01175b6f32..ff379384ab 100644 --- a/.changeset/selfish-rivers-shout.md +++ b/.changeset/selfish-rivers-shout.md @@ -20,4 +20,4 @@ '@reown/appkit-wallet-button': patch --- -Fixed an issue where the `walletProvider` from the `useAppKitProvider` hook was `undefined` when the wallet was connected. This issue occurred only when using the WagmiAdapter. +Fixed an issue where the `walletProvider` from the `useAppKitProvider` hook was `undefined` when the wallet was connected. This issue occurred only when using wagmi adapter. From 4e923bffaf389510f511a3e388af667d0cc6c631 Mon Sep 17 00:00:00 2001 From: MK Date: Thu, 16 Jan 2025 18:59:22 +0000 Subject: [PATCH 5/6] chore: tweak changeset --- .changeset/selfish-rivers-shout.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/selfish-rivers-shout.md b/.changeset/selfish-rivers-shout.md index ff379384ab..29764b5c42 100644 --- a/.changeset/selfish-rivers-shout.md +++ b/.changeset/selfish-rivers-shout.md @@ -20,4 +20,4 @@ '@reown/appkit-wallet-button': patch --- -Fixed an issue where the `walletProvider` from the `useAppKitProvider` hook was `undefined` when the wallet was connected. This issue occurred only when using wagmi adapter. +Fixed an issue where `walletProvider` from the `useAppKitProvider` hook was `undefined` when the wallet was connected. This issue occurred only when using wagmi adapter. From 4f41fc49e0ca3528e12f34b78455fddbe8343fe3 Mon Sep 17 00:00:00 2001 From: MK Date: Thu, 16 Jan 2025 19:09:04 +0000 Subject: [PATCH 6/6] chore: cleanup --- packages/adapters/wagmi/src/client.ts | 10 +++++++--- packages/adapters/wagmi/src/tests/client.test.ts | 8 ++++---- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/packages/adapters/wagmi/src/client.ts b/packages/adapters/wagmi/src/client.ts index d71621a9e2..037db3d43d 100644 --- a/packages/adapters/wagmi/src/client.ts +++ b/packages/adapters/wagmi/src/client.ts @@ -422,6 +422,8 @@ export class WagmiAdapter extends AdapterBlueprint { return } + const provider = (await connector.getProvider().catch(() => undefined)) as Provider | undefined + this.addConnector({ id: connector.id, explorerId: PresetsUtil.ConnectorExplorerIds[connector.id], @@ -433,18 +435,20 @@ export class WagmiAdapter extends AdapterBlueprint { connector.id === CommonConstantsUtil.CONNECTOR_ID.INJECTED ? undefined : { rdns: connector.id }, - provider: (await connector.getProvider().catch(() => undefined)) as Provider | undefined, + provider, chain: this.namespace as ChainNamespace, chains: [] }) } - public syncConnectors(options: AppKitOptions, appKit: AppKit) { + public async syncConnectors(options: AppKitOptions, appKit: AppKit) { // Add wagmi connectors this.addWagmiConnectors(options, appKit) // Add current wagmi connectors to chain adapter blueprint - this.wagmiConfig.connectors.forEach(connector => this.addWagmiConnector(connector, options)) + await Promise.all( + this.wagmiConfig.connectors.map(connector => this.addWagmiConnector(connector, options)) + ) /* * Watch for new connectors. This is needed because some EIP6963 diff --git a/packages/adapters/wagmi/src/tests/client.test.ts b/packages/adapters/wagmi/src/tests/client.test.ts index 11c45f7bbf..b70c70e415 100644 --- a/packages/adapters/wagmi/src/tests/client.test.ts +++ b/packages/adapters/wagmi/src/tests/client.test.ts @@ -107,10 +107,10 @@ describe('WagmiAdapter', () => { it('should set wagmi connectors', async () => { vi.spyOn(wagmiCore, 'watchConnectors').mockImplementation(vi.fn()) - adapter.syncConnectors({ networks: [mainnet], projectId: 'YOUR_PROJECT_ID' }, mockAppKit) - - // Wait for connectors to be set - await new Promise(resolve => setTimeout(resolve, 200)) + await adapter.syncConnectors( + { networks: [mainnet], projectId: 'YOUR_PROJECT_ID' }, + mockAppKit + ) expect(adapter.connectors).toStrictEqual([ {