@reown/appkit-wagmi-react-native 0.0.0-feat-multi-siwe-20250623183423 → 0.0.0-feat-onramp-20250625192635

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/lib/commonjs/client.js +516 -0
  2. package/lib/commonjs/client.js.map +1 -0
  3. package/lib/commonjs/connectors/WalletConnectConnector.js +355 -0
  4. package/lib/commonjs/connectors/WalletConnectConnector.js.map +1 -0
  5. package/lib/commonjs/index.js +121 -8
  6. package/lib/commonjs/index.js.map +1 -1
  7. package/lib/commonjs/utils/defaultWagmiConfig.js +46 -0
  8. package/lib/commonjs/utils/defaultWagmiConfig.js.map +1 -0
  9. package/lib/commonjs/utils/helpers.js +44 -16
  10. package/lib/commonjs/utils/helpers.js.map +1 -1
  11. package/lib/module/client.js +510 -0
  12. package/lib/module/client.js.map +1 -0
  13. package/lib/module/connectors/WalletConnectConnector.js +350 -0
  14. package/lib/module/connectors/WalletConnectConnector.js.map +1 -0
  15. package/lib/module/index.js +92 -3
  16. package/lib/module/index.js.map +1 -1
  17. package/lib/module/utils/defaultWagmiConfig.js +40 -0
  18. package/lib/module/utils/defaultWagmiConfig.js.map +1 -0
  19. package/lib/module/utils/helpers.js +39 -13
  20. package/lib/module/utils/helpers.js.map +1 -1
  21. package/lib/typescript/client.d.ts +40 -0
  22. package/lib/typescript/client.d.ts.map +1 -0
  23. package/lib/typescript/connectors/WalletConnectConnector.d.ts +74 -0
  24. package/lib/typescript/connectors/WalletConnectConnector.d.ts.map +1 -0
  25. package/lib/typescript/index.d.ts +24 -3
  26. package/lib/typescript/index.d.ts.map +1 -1
  27. package/lib/typescript/utils/defaultWagmiConfig.d.ts +11 -0
  28. package/lib/typescript/utils/defaultWagmiConfig.d.ts.map +1 -0
  29. package/lib/typescript/utils/helpers.d.ts +13 -3
  30. package/lib/typescript/utils/helpers.d.ts.map +1 -1
  31. package/package.json +5 -5
  32. package/src/client.ts +644 -0
  33. package/src/connectors/WalletConnectConnector.ts +472 -0
  34. package/src/index.tsx +121 -3
  35. package/src/utils/defaultWagmiConfig.ts +53 -0
  36. package/src/utils/helpers.ts +56 -17
  37. package/lib/commonjs/adapter.js +0 -143
  38. package/lib/commonjs/adapter.js.map +0 -1
  39. package/lib/commonjs/connectors/UniversalConnector.js +0 -214
  40. package/lib/commonjs/connectors/UniversalConnector.js.map +0 -1
  41. package/lib/module/adapter.js +0 -136
  42. package/lib/module/adapter.js.map +0 -1
  43. package/lib/module/connectors/UniversalConnector.js +0 -208
  44. package/lib/module/connectors/UniversalConnector.js.map +0 -1
  45. package/lib/typescript/adapter.d.ts +0 -24
  46. package/lib/typescript/adapter.d.ts.map +0 -1
  47. package/lib/typescript/connectors/UniversalConnector.d.ts +0 -5
  48. package/lib/typescript/connectors/UniversalConnector.d.ts.map +0 -1
  49. package/src/adapter.ts +0 -180
  50. package/src/connectors/UniversalConnector.ts +0 -228
@@ -1,208 +0,0 @@
1
- import { getAddress, numberToHex, SwitchChainError, UserRejectedRequestError } from 'viem';
2
- import { ChainNotConfiguredError, createConnector, ProviderNotFoundError } from 'wagmi';
3
- import { formatNetwork } from '../utils/helpers';
4
- export function UniversalConnector(appKitProvidedConnector) {
5
- let provider;
6
- let accountsChangedHandler;
7
- let chainChangedHandler;
8
- let disconnectHandler;
9
- return createConnector(config => ({
10
- id: 'walletconnect',
11
- name: 'WalletConnect',
12
- type: 'walletconnect',
13
- ready: !!appKitProvidedConnector.getProvider(),
14
- async setup() {
15
- provider = appKitProvidedConnector.getProvider();
16
- if (provider?.on) {
17
- accountsChangedHandler = accounts => {
18
- const hexAccounts = accounts.map(acc => getAddress(acc));
19
- config.emitter.emit('change', {
20
- accounts: hexAccounts
21
- });
22
- if (hexAccounts.length === 0) {
23
- config.emitter.emit('disconnect');
24
- }
25
- };
26
- chainChangedHandler = chainId => {
27
- const newChainId = typeof chainId === 'string' ? parseInt(chainId, 10) : chainId;
28
- config.emitter.emit('change', {
29
- chainId: newChainId
30
- });
31
- };
32
- disconnectHandler = error => {
33
- config.emitter.emit('disconnect');
34
- if (error) config.emitter.emit('error', {
35
- error
36
- });
37
- };
38
- if (accountsChangedHandler) provider.on('accountsChanged', accountsChangedHandler);
39
- if (chainChangedHandler) provider.on('chainChanged', chainChangedHandler);
40
- if (disconnectHandler) provider.on('disconnect', disconnectHandler);
41
- if (disconnectHandler) provider.on('session_delete', disconnectHandler);
42
- }
43
- },
44
- async connect({
45
- chainId
46
- } = {}) {
47
- try {
48
- const _provider = await this.getProvider();
49
- if (!_provider) throw new ProviderNotFoundError();
50
-
51
- // AppKit connector is already connected or handles its own connection.
52
- // We just need to sync its state with Wagmi.
53
- const accountAddresses = await this.getAccounts();
54
- if (!accountAddresses || accountAddresses.length === 0) {
55
- throw new UserRejectedRequestError(new Error('No accounts found or user rejected connection via AppKit.'));
56
- }
57
- let currentChainId = await this.getChainId();
58
-
59
- // Handle chain switching if requested and different
60
- if (chainId && currentChainId !== chainId) {
61
- await this.switchChain?.({
62
- chainId
63
- });
64
- currentChainId = chainId;
65
- }
66
- this.ready = true;
67
- return {
68
- accounts: accountAddresses,
69
- chainId: currentChainId
70
- };
71
- } catch (error) {
72
- if (error instanceof UserRejectedRequestError) throw error;
73
- throw new UserRejectedRequestError(error); // Generalize other errors as user rejection for simplicity
74
- }
75
- },
76
-
77
- async disconnect() {
78
- await appKitProvidedConnector.disconnect();
79
- config.emitter.emit('message', {
80
- type: 'externalDisconnect'
81
- });
82
- if (provider?.off && accountsChangedHandler && chainChangedHandler && disconnectHandler) {
83
- provider.off('accountsChanged', accountsChangedHandler);
84
- provider.off('chainChanged', chainChangedHandler);
85
- provider.off('disconnect', disconnectHandler);
86
- provider.off('session_delete', disconnectHandler);
87
- accountsChangedHandler = undefined;
88
- chainChangedHandler = undefined;
89
- disconnectHandler = undefined;
90
- }
91
- this.ready = false;
92
- },
93
- async getAccounts() {
94
- const namespaces = appKitProvidedConnector.getNamespaces();
95
- // @ts-ignore
96
- const eip155Accounts = namespaces?.eip155?.accounts;
97
- if (!eip155Accounts) return [];
98
- return eip155Accounts.map(caipAddr => {
99
- const parts = caipAddr.split(':');
100
- return parts.length === 3 ? parts[2] : null;
101
- }).filter(addrPart => !!addrPart).map(addrPart => getAddress(addrPart));
102
- },
103
- async getChainId() {
104
- const chainId = appKitProvidedConnector.getChainId('eip155')?.split(':')[1];
105
- if (chainId) return parseInt(chainId, 10);
106
-
107
- // Fallback: Try to get from CAIP accounts if available
108
- const namespaces = appKitProvidedConnector.getNamespaces();
109
- // @ts-ignore
110
- const eip155Accounts = namespaces?.eip155?.accounts;
111
- if (eip155Accounts && eip155Accounts.length > 0) {
112
- const parts = eip155Accounts[0]?.split(':');
113
- if (parts && parts.length > 1 && typeof parts[1] === 'string') {
114
- const chainIdNum = parseInt(parts[1], 10);
115
- if (!isNaN(chainIdNum)) {
116
- return chainIdNum;
117
- }
118
- }
119
- }
120
- if (config.chains && config.chains.length > 0) return config.chains[0].id;
121
- throw new Error('Unable to determine chainId.');
122
- },
123
- async getProvider() {
124
- if (!provider) {
125
- provider = appKitProvidedConnector.getProvider();
126
- }
127
- const chainId = await this.getChainId();
128
-
129
- //TODO: Review this with gancho
130
- const _provider = {
131
- ...provider,
132
- request: args => {
133
- return provider?.request(args, `eip155:${chainId}`);
134
- }
135
- };
136
- return Promise.resolve(_provider);
137
- },
138
- async isAuthorized() {
139
- try {
140
- const accounts = await this.getAccounts();
141
- return !!(accounts && accounts.length > 0);
142
- } catch {
143
- return false;
144
- }
145
- },
146
- async switchChain({
147
- chainId
148
- }) {
149
- const _provider = await this.getProvider();
150
- if (!_provider) throw new Error('Provider not available for switching chain.');
151
- const newChain = config.chains.find(c => c.id === chainId);
152
- if (!newChain) throw new SwitchChainError(new ChainNotConfiguredError());
153
- try {
154
- await _provider.request({
155
- method: 'wallet_switchEthereumChain',
156
- params: [{
157
- chainId: numberToHex(chainId)
158
- }]
159
- });
160
- config.emitter.emit('change', {
161
- chainId
162
- });
163
- return newChain;
164
- } catch (error) {
165
- // Try to add chain if switch failed (common pattern)
166
- //4902 in MetaMask: Unrecognized chain ID
167
- if (error?.code === 4902 || error?.data?.originalError?.code === 4902) {
168
- try {
169
- await _provider.request({
170
- method: 'wallet_addEthereumChain',
171
- params: [{
172
- chainId: numberToHex(chainId),
173
- chainName: newChain.name,
174
- nativeCurrency: newChain.nativeCurrency,
175
- rpcUrls: [newChain.rpcUrls.default?.http[0] ?? ''],
176
- // Take first default HTTP RPC URL
177
- blockExplorerUrls: [newChain.blockExplorers?.default?.url]
178
- }]
179
- });
180
- await appKitProvidedConnector.switchNetwork(formatNetwork(newChain));
181
- config.emitter.emit('change', {
182
- chainId
183
- });
184
- return newChain;
185
- } catch (addError) {
186
- throw new UserRejectedRequestError(addError);
187
- }
188
- }
189
- throw new SwitchChainError(error);
190
- }
191
- },
192
- onAccountsChanged(accounts) {
193
- if (accounts.length === 0) this.onDisconnect();else config.emitter.emit('change', {
194
- accounts: accounts.map(x => getAddress(x))
195
- });
196
- },
197
- onChainChanged(chain) {
198
- const chainId = Number(chain);
199
- config.emitter.emit('change', {
200
- chainId
201
- });
202
- },
203
- onDisconnect: () => {
204
- config.emitter.emit('disconnect');
205
- }
206
- }));
207
- }
208
- //# sourceMappingURL=UniversalConnector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["getAddress","numberToHex","SwitchChainError","UserRejectedRequestError","ChainNotConfiguredError","createConnector","ProviderNotFoundError","formatNetwork","UniversalConnector","appKitProvidedConnector","provider","accountsChangedHandler","chainChangedHandler","disconnectHandler","config","id","name","type","ready","getProvider","setup","on","accounts","hexAccounts","map","acc","emitter","emit","length","chainId","newChainId","parseInt","error","connect","_provider","accountAddresses","getAccounts","Error","currentChainId","getChainId","switchChain","disconnect","off","undefined","namespaces","getNamespaces","eip155Accounts","eip155","caipAddr","parts","split","filter","addrPart","chainIdNum","isNaN","chains","request","args","Promise","resolve","isAuthorized","newChain","find","c","method","params","code","data","originalError","chainName","nativeCurrency","rpcUrls","default","http","blockExplorerUrls","blockExplorers","url","switchNetwork","addError","onAccountsChanged","onDisconnect","x","onChainChanged","chain","Number"],"sourceRoot":"../../../src","sources":["connectors/UniversalConnector.ts"],"mappings":"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"}
@@ -1,24 +0,0 @@
1
- import { EVMAdapter, WalletConnector, type AppKitNetwork, type CaipAddress, type ChainNamespace, type GetBalanceParams, type GetBalanceResponse } from '@reown/appkit-common-react-native';
2
- import { type Config, type CreateConfigParameters, type Connector } from '@wagmi/core';
3
- import type { Chain } from 'wagmi/chains';
4
- type ConfigParams = Partial<CreateConfigParameters> & {
5
- networks: readonly [Chain, ...Chain[]];
6
- projectId: string;
7
- connectors?: Connector[];
8
- };
9
- export declare class WagmiAdapter extends EVMAdapter {
10
- private static supportedNamespace;
11
- wagmiChains: readonly Chain[] | undefined;
12
- wagmiConfig: Config;
13
- private wagmiConfigConnector?;
14
- constructor(configParams: ConfigParams);
15
- private createWagmiInternalConfig;
16
- switchNetwork(network: AppKitNetwork): Promise<void>;
17
- getBalance(params: GetBalanceParams): Promise<GetBalanceResponse>;
18
- getAccounts(): CaipAddress[] | undefined;
19
- disconnect(): Promise<void>;
20
- getSupportedNamespace(): ChainNamespace;
21
- setConnector(_connector: WalletConnector): void;
22
- }
23
- export {};
24
- //# sourceMappingURL=adapter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,eAAe,EACf,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACxB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,KAAK,MAAM,EACX,KAAK,sBAAsB,EAM3B,KAAK,SAAS,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAK1C,KAAK,YAAY,GAAG,OAAO,CAAC,sBAAsB,CAAC,GAAG;IACpD,QAAQ,EAAE,SAAS,CAAC,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;CAC1B,CAAC;AAEF,qBAAa,YAAa,SAAQ,UAAU;IAC1C,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAA4B;IACtD,WAAW,EAAE,SAAS,KAAK,EAAE,GAAG,SAAS,CAAC;IAC1C,WAAW,EAAG,MAAM,CAAC;IAC5B,OAAO,CAAC,oBAAoB,CAAC,CAAY;gBAE7B,YAAY,EAAE,YAAY;IAStC,OAAO,CAAC,yBAAyB;IAoB3B,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAWpD,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAuCvE,WAAW,IAAI,WAAW,EAAE,GAAG,SAAS;IAgBlC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAejC,qBAAqB,IAAI,cAAc;IAI9B,YAAY,CAAC,UAAU,EAAE,eAAe,GAAG,IAAI;CA6BzD"}
@@ -1,5 +0,0 @@
1
- import type { Provider, WalletConnector } from '@reown/appkit-common-react-native';
2
- export declare function UniversalConnector(appKitProvidedConnector: WalletConnector): import("wagmi").CreateConnectorFn<Provider, {
3
- ready: boolean;
4
- }, Record<string, unknown>>;
5
- //# sourceMappingURL=UniversalConnector.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"UniversalConnector.d.ts","sourceRoot":"","sources":["../../../src/connectors/UniversalConnector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EAER,eAAe,EAChB,MAAM,mCAAmC,CAAC;AAW3C,wBAAgB,kBAAkB,CAAC,uBAAuB,EAAE,eAAe;WAO/B,OAAO;4BA6MlD"}
package/src/adapter.ts DELETED
@@ -1,180 +0,0 @@
1
- import {
2
- EVMAdapter,
3
- WalletConnector,
4
- type AppKitNetwork,
5
- type CaipAddress,
6
- type ChainNamespace,
7
- type GetBalanceParams,
8
- type GetBalanceResponse
9
- } from '@reown/appkit-common-react-native';
10
- import {
11
- type Config,
12
- type CreateConfigParameters,
13
- createConfig,
14
- getBalance as getBalanceWagmi,
15
- switchChain as switchChainWagmi,
16
- disconnect as disconnectWagmiCore,
17
- connect as connectWagmi,
18
- type Connector
19
- } from '@wagmi/core';
20
- import type { Chain } from 'wagmi/chains';
21
- import { getTransport } from './utils/helpers';
22
- import { formatUnits, type Hex } from 'viem';
23
- import { UniversalConnector } from './connectors/UniversalConnector';
24
-
25
- type ConfigParams = Partial<CreateConfigParameters> & {
26
- networks: readonly [Chain, ...Chain[]];
27
- projectId: string;
28
- connectors?: Connector[];
29
- };
30
-
31
- export class WagmiAdapter extends EVMAdapter {
32
- private static supportedNamespace: ChainNamespace = 'eip155';
33
- public wagmiChains: readonly Chain[] | undefined;
34
- public wagmiConfig!: Config;
35
- private wagmiConfigConnector?: Connector;
36
-
37
- constructor(configParams: ConfigParams) {
38
- super({
39
- projectId: configParams.projectId,
40
- supportedNamespace: WagmiAdapter.supportedNamespace
41
- });
42
- this.wagmiChains = configParams.networks;
43
- this.wagmiConfig = this.createWagmiInternalConfig(configParams);
44
- }
45
-
46
- private createWagmiInternalConfig(configParams: ConfigParams): Config {
47
- // Connectors are typically added via wagmiConfig.connectors, but here AppKit manages the connection.
48
- // We'll use the `connect` action with our dynamically created connector instance.
49
- // So, the `connectors` array for createConfig can be empty and is added later.
50
- const initialConnectors: (() => Connector)[] = [];
51
-
52
- const transportsArr = configParams.networks.map(chain => [
53
- chain.id,
54
- getTransport({ chainId: chain.id, projectId: configParams.projectId })
55
- ]);
56
- const transports = Object.fromEntries(transportsArr);
57
-
58
- return createConfig({
59
- chains: configParams.networks,
60
- connectors: initialConnectors, // Empty, as we connect programmatically
61
- transports,
62
- multiInjectedProviderDiscovery: false
63
- });
64
- }
65
-
66
- async switchNetwork(network: AppKitNetwork): Promise<void> {
67
- if (!this.wagmiConfigConnector) {
68
- throw new Error('WagmiAdapter: AppKit connector not set or not connected via Wagmi.');
69
- }
70
-
71
- await switchChainWagmi(this.wagmiConfig, {
72
- chainId: network.id as number,
73
- connector: this.wagmiConfigConnector
74
- });
75
- }
76
-
77
- async getBalance(params: GetBalanceParams): Promise<GetBalanceResponse> {
78
- const { network, address, tokens } = params;
79
-
80
- if (!this.connector) throw new Error('No active AppKit connector (EVMAdapter.connector)');
81
- if (!network) throw new Error('No network provided');
82
-
83
- if (!this.wagmiConfigConnector) {
84
- throw new Error('WagmiAdapter: AppKit connector not properly configured with Wagmi.');
85
- }
86
-
87
- const balanceAddress =
88
- address ||
89
- this.getAccounts()?.find((acc: CaipAddress) => acc.includes(network.id.toString()));
90
-
91
- if (!balanceAddress) {
92
- return Promise.resolve({ amount: '0.00', symbol: network.nativeCurrency.symbol || 'ETH' });
93
- }
94
-
95
- const accountHex = balanceAddress.split(':')[2] as Hex;
96
-
97
- const token = network?.caipNetworkId && (tokens?.[network.caipNetworkId]?.address as Hex);
98
-
99
- const balance = await getBalanceWagmi(this.wagmiConfig, {
100
- address: accountHex,
101
- chainId: network.id as number,
102
- token
103
- });
104
-
105
- const formattedBalance = {
106
- amount: formatUnits(balance.value, balance.decimals),
107
- symbol: balance.symbol,
108
- contractAddress: token ? (`${network.caipNetworkId}:${token}` as CaipAddress) : undefined
109
- };
110
-
111
- this.emit('balanceChanged', { address: balanceAddress, balance: formattedBalance });
112
-
113
- return Promise.resolve(formattedBalance);
114
- }
115
-
116
- getAccounts(): CaipAddress[] | undefined {
117
- if (!this.connector) {
118
- return undefined;
119
- }
120
-
121
- const namespaces = this.connector.getNamespaces();
122
- if (!namespaces) {
123
- return undefined;
124
- }
125
-
126
- const supportedNamespaceKey = this.getSupportedNamespace();
127
- const accountsForNamespace = namespaces[supportedNamespaceKey];
128
-
129
- return accountsForNamespace?.accounts;
130
- }
131
-
132
- async disconnect(): Promise<void> {
133
- if (this.wagmiConfigConnector) {
134
- await disconnectWagmiCore(this.wagmiConfig, { connector: this.wagmiConfigConnector });
135
- this.wagmiConfigConnector = undefined;
136
- } else if (this.connector) {
137
- await this.connector.disconnect();
138
- this.onDisconnect();
139
- }
140
-
141
- const evmAdapterInstance = this as any;
142
- if ('connector' in evmAdapterInstance) {
143
- evmAdapterInstance.connector = undefined;
144
- }
145
- }
146
-
147
- getSupportedNamespace(): ChainNamespace {
148
- return WagmiAdapter.supportedNamespace;
149
- }
150
-
151
- override setConnector(_connector: WalletConnector): void {
152
- super.setConnector(_connector);
153
-
154
- if (_connector && this.wagmiChains) {
155
- if (!this.wagmiConfigConnector) {
156
- // Manually add the connector to the wagmiConfig
157
- const connectorInstance = this.wagmiConfig._internal.connectors.setup(
158
- UniversalConnector(_connector)
159
- );
160
-
161
- this.wagmiConfig._internal.connectors.setState(prev => [...prev, connectorInstance]);
162
- this.wagmiConfigConnector = connectorInstance;
163
-
164
- connectorInstance.emitter.on('message', ({ type }: { type: string }) => {
165
- if (type === 'externalDisconnect') {
166
- this.onDisconnect();
167
-
168
- this.wagmiConfigConnector = undefined;
169
- }
170
- });
171
-
172
- try {
173
- connectWagmi(this.wagmiConfig, { connector: connectorInstance });
174
- } catch (error) {
175
- this.wagmiConfigConnector = undefined;
176
- }
177
- }
178
- }
179
- }
180
- }
@@ -1,228 +0,0 @@
1
- import type {
2
- Provider,
3
- RequestArguments,
4
- WalletConnector
5
- } from '@reown/appkit-common-react-native';
6
- import {
7
- getAddress,
8
- numberToHex,
9
- SwitchChainError,
10
- UserRejectedRequestError,
11
- type Hex
12
- } from 'viem';
13
- import { ChainNotConfiguredError, createConnector, ProviderNotFoundError } from 'wagmi';
14
- import { formatNetwork } from '../utils/helpers';
15
-
16
- export function UniversalConnector(appKitProvidedConnector: WalletConnector) {
17
- let provider: Provider | undefined;
18
-
19
- let accountsChangedHandler: ((accounts: string[]) => void) | undefined;
20
- let chainChangedHandler: ((chainId: string | number) => void) | undefined;
21
- let disconnectHandler: ((error?: Error) => void) | undefined;
22
-
23
- type AppKitConnectorProperties = { ready: boolean };
24
-
25
- return createConnector<Provider, AppKitConnectorProperties>(config => ({
26
- id: 'walletconnect',
27
- name: 'WalletConnect',
28
- type: 'walletconnect' as const,
29
- ready: !!appKitProvidedConnector.getProvider(),
30
-
31
- async setup() {
32
- provider = appKitProvidedConnector.getProvider();
33
- if (provider?.on) {
34
- accountsChangedHandler = (accounts: string[]) => {
35
- const hexAccounts = accounts.map(acc => getAddress(acc));
36
- config.emitter.emit('change', { accounts: hexAccounts });
37
- if (hexAccounts.length === 0) {
38
- config.emitter.emit('disconnect');
39
- }
40
- };
41
- chainChangedHandler = (chainId: string | number) => {
42
- const newChainId = typeof chainId === 'string' ? parseInt(chainId, 10) : chainId;
43
- config.emitter.emit('change', { chainId: newChainId });
44
- };
45
- disconnectHandler = (error?: Error) => {
46
- config.emitter.emit('disconnect');
47
- if (error) config.emitter.emit('error', { error });
48
- };
49
-
50
- if (accountsChangedHandler) provider.on('accountsChanged', accountsChangedHandler);
51
- if (chainChangedHandler) provider.on('chainChanged', chainChangedHandler);
52
- if (disconnectHandler) provider.on('disconnect', disconnectHandler);
53
- if (disconnectHandler) provider.on('session_delete', disconnectHandler);
54
- }
55
- },
56
-
57
- async connect({ chainId } = {}) {
58
- try {
59
- const _provider = await this.getProvider();
60
- if (!_provider) throw new ProviderNotFoundError();
61
-
62
- // AppKit connector is already connected or handles its own connection.
63
- // We just need to sync its state with Wagmi.
64
- const accountAddresses = await this.getAccounts();
65
- if (!accountAddresses || accountAddresses.length === 0) {
66
- throw new UserRejectedRequestError(
67
- new Error('No accounts found or user rejected connection via AppKit.')
68
- );
69
- }
70
-
71
- let currentChainId = await this.getChainId();
72
-
73
- // Handle chain switching if requested and different
74
- if (chainId && currentChainId !== chainId) {
75
- await this.switchChain?.({ chainId });
76
- currentChainId = chainId;
77
- }
78
-
79
- this.ready = true;
80
-
81
- return { accounts: accountAddresses, chainId: currentChainId };
82
- } catch (error) {
83
- if (error instanceof UserRejectedRequestError) throw error;
84
- throw new UserRejectedRequestError(error as Error); // Generalize other errors as user rejection for simplicity
85
- }
86
- },
87
-
88
- async disconnect() {
89
- await appKitProvidedConnector.disconnect();
90
- config.emitter.emit('message', { type: 'externalDisconnect' });
91
- if (provider?.off && accountsChangedHandler && chainChangedHandler && disconnectHandler) {
92
- provider.off('accountsChanged', accountsChangedHandler);
93
- provider.off('chainChanged', chainChangedHandler);
94
- provider.off('disconnect', disconnectHandler);
95
- provider.off('session_delete', disconnectHandler);
96
- accountsChangedHandler = undefined;
97
- chainChangedHandler = undefined;
98
- disconnectHandler = undefined;
99
- }
100
- this.ready = false;
101
- },
102
-
103
- async getAccounts() {
104
- const namespaces = appKitProvidedConnector.getNamespaces();
105
- // @ts-ignore
106
- const eip155Accounts = namespaces?.eip155?.accounts;
107
- if (!eip155Accounts) return [] as readonly Hex[];
108
-
109
- return eip155Accounts
110
- .map((caipAddr: string) => {
111
- const parts = caipAddr.split(':');
112
-
113
- return parts.length === 3 ? parts[2] : null;
114
- })
115
- .filter((addrPart): addrPart is string => !!addrPart)
116
- .map((addrPart: string) => getAddress(addrPart)) as readonly Hex[];
117
- },
118
-
119
- async getChainId() {
120
- const chainId = appKitProvidedConnector.getChainId('eip155')?.split(':')[1];
121
-
122
- if (chainId) return parseInt(chainId, 10);
123
-
124
- // Fallback: Try to get from CAIP accounts if available
125
- const namespaces = appKitProvidedConnector.getNamespaces();
126
- // @ts-ignore
127
- const eip155Accounts = namespaces?.eip155?.accounts;
128
- if (eip155Accounts && eip155Accounts.length > 0) {
129
- const parts = eip155Accounts[0]?.split(':');
130
- if (parts && parts.length > 1 && typeof parts[1] === 'string') {
131
- const chainIdNum = parseInt(parts[1], 10);
132
- if (!isNaN(chainIdNum)) {
133
- return chainIdNum;
134
- }
135
- }
136
- }
137
- if (config.chains && config.chains.length > 0) return config.chains[0].id;
138
- throw new Error('Unable to determine chainId.');
139
- },
140
-
141
- async getProvider() {
142
- if (!provider) {
143
- provider = appKitProvidedConnector.getProvider();
144
- }
145
-
146
- const chainId = await this.getChainId();
147
-
148
- //TODO: Review this with gancho
149
- const _provider = {
150
- ...provider,
151
- request: (args: RequestArguments) => {
152
- return provider?.request(args, `eip155:${chainId}`);
153
- }
154
- };
155
-
156
- return Promise.resolve(_provider as Provider);
157
- },
158
-
159
- async isAuthorized() {
160
- try {
161
- const accounts = await this.getAccounts();
162
-
163
- return !!(accounts && accounts.length > 0);
164
- } catch {
165
- return false;
166
- }
167
- },
168
-
169
- async switchChain({ chainId }) {
170
- const _provider = await this.getProvider();
171
- if (!_provider) throw new Error('Provider not available for switching chain.');
172
- const newChain = config.chains.find(c => c.id === chainId);
173
-
174
- if (!newChain) throw new SwitchChainError(new ChainNotConfiguredError());
175
-
176
- try {
177
- await _provider.request({
178
- method: 'wallet_switchEthereumChain',
179
- params: [{ chainId: numberToHex(chainId) }]
180
- });
181
-
182
- config.emitter.emit('change', { chainId });
183
-
184
- return newChain;
185
- } catch (error) {
186
- // Try to add chain if switch failed (common pattern)
187
- //4902 in MetaMask: Unrecognized chain ID
188
- if ((error as any)?.code === 4902 || (error as any)?.data?.originalError?.code === 4902) {
189
- try {
190
- await _provider.request({
191
- method: 'wallet_addEthereumChain',
192
- params: [
193
- {
194
- chainId: numberToHex(chainId),
195
- chainName: newChain.name,
196
- nativeCurrency: newChain.nativeCurrency,
197
- rpcUrls: [newChain.rpcUrls.default?.http[0] ?? ''], // Take first default HTTP RPC URL
198
- blockExplorerUrls: [newChain.blockExplorers?.default?.url]
199
- }
200
- ]
201
- });
202
- await appKitProvidedConnector.switchNetwork(formatNetwork(newChain));
203
- config.emitter.emit('change', { chainId });
204
-
205
- return newChain;
206
- } catch (addError) {
207
- throw new UserRejectedRequestError(addError as Error);
208
- }
209
- }
210
- throw new SwitchChainError(error as Error);
211
- }
212
- },
213
-
214
- onAccountsChanged(accounts: string[]) {
215
- if (accounts.length === 0) this.onDisconnect();
216
- else config.emitter.emit('change', { accounts: accounts.map(x => getAddress(x)) });
217
- },
218
-
219
- onChainChanged(chain: string) {
220
- const chainId = Number(chain);
221
- config.emitter.emit('change', { chainId });
222
- },
223
-
224
- onDisconnect: () => {
225
- config.emitter.emit('disconnect');
226
- }
227
- }));
228
- }