@reown/appkit-wagmi-react-native 2.0.0-alpha.4 → 2.0.0-alpha.5

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.
@@ -6,45 +6,25 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.UniversalConnector = UniversalConnector;
7
7
  var _viem = require("viem");
8
8
  var _wagmi = require("wagmi");
9
- var _helpers = require("../utils/helpers");
10
9
  function UniversalConnector(appKitProvidedConnector) {
11
10
  let provider;
12
- let accountsChangedHandler;
13
- let chainChangedHandler;
14
- let disconnectHandler;
11
+ let accountsChanged;
12
+ let chainChanged;
13
+ let sessionDelete;
14
+ let disconnect;
15
15
  return (0, _wagmi.createConnector)(config => ({
16
16
  id: 'walletconnect',
17
17
  name: 'WalletConnect',
18
18
  type: 'walletconnect',
19
19
  ready: !!appKitProvidedConnector.getProvider('eip155'),
20
20
  async setup() {
21
- provider = appKitProvidedConnector.getProvider('eip155');
22
- if (provider?.on) {
23
- accountsChangedHandler = accounts => {
24
- const hexAccounts = accounts.map(acc => (0, _viem.getAddress)(acc));
25
- config.emitter.emit('change', {
26
- accounts: hexAccounts
27
- });
28
- if (hexAccounts.length === 0) {
29
- config.emitter.emit('disconnect');
30
- }
31
- };
32
- chainChangedHandler = chainId => {
33
- const newChainId = typeof chainId === 'string' ? parseInt(chainId, 10) : chainId;
34
- config.emitter.emit('change', {
35
- chainId: newChainId
36
- });
37
- };
38
- disconnectHandler = error => {
39
- config.emitter.emit('disconnect');
40
- if (error) config.emitter.emit('error', {
41
- error
42
- });
43
- };
44
- if (accountsChangedHandler) provider.on('accountsChanged', accountsChangedHandler);
45
- if (chainChangedHandler) provider.on('chainChanged', chainChangedHandler);
46
- if (disconnectHandler) provider.on('disconnect', disconnectHandler);
47
- if (disconnectHandler) provider.on('session_delete', disconnectHandler);
21
+ const _provider = await this.getProvider().catch(() => null);
22
+ if (!_provider) {
23
+ return;
24
+ }
25
+ if (!sessionDelete) {
26
+ sessionDelete = this.onSessionDelete.bind(this);
27
+ _provider.on('session_delete', sessionDelete);
48
28
  }
49
29
  },
50
30
  async connect({
@@ -69,7 +49,22 @@ function UniversalConnector(appKitProvidedConnector) {
69
49
  });
70
50
  currentChainId = chainId;
71
51
  }
72
- this.ready = true;
52
+ if (!accountsChanged) {
53
+ accountsChanged = this.onAccountsChanged.bind(this);
54
+ _provider.on('accountsChanged', accountsChanged);
55
+ }
56
+ if (!chainChanged) {
57
+ chainChanged = this.onChainChanged.bind(this);
58
+ _provider.on('chainChanged', chainChanged);
59
+ }
60
+ if (!disconnect) {
61
+ disconnect = this.onDisconnect.bind(this);
62
+ _provider.on('disconnect', disconnect);
63
+ }
64
+ if (!sessionDelete) {
65
+ sessionDelete = this.onSessionDelete.bind(this);
66
+ _provider.on('session_delete', sessionDelete);
67
+ }
73
68
  return {
74
69
  accounts: accountAddresses,
75
70
  chainId: currentChainId
@@ -80,20 +75,34 @@ function UniversalConnector(appKitProvidedConnector) {
80
75
  }
81
76
  },
82
77
  async disconnect() {
83
- await appKitProvidedConnector.disconnect();
84
- config.emitter.emit('message', {
85
- type: 'externalDisconnect'
86
- });
87
- if (provider?.off && accountsChangedHandler && chainChangedHandler && disconnectHandler) {
88
- provider.off('accountsChanged', accountsChangedHandler);
89
- provider.off('chainChanged', chainChangedHandler);
90
- provider.off('disconnect', disconnectHandler);
91
- provider.off('session_delete', disconnectHandler);
92
- accountsChangedHandler = undefined;
93
- chainChangedHandler = undefined;
94
- disconnectHandler = undefined;
78
+ const _provider = await this.getProvider().catch(() => null);
79
+ try {
80
+ await appKitProvidedConnector.disconnect();
81
+ config.emitter.emit('message', {
82
+ type: 'externalDisconnect'
83
+ });
84
+ } catch (error) {
85
+ if (!/No matching key/i.test(error.message)) {
86
+ throw error;
87
+ }
88
+ } finally {
89
+ if (chainChanged) {
90
+ _provider?.off('chainChanged', chainChanged);
91
+ chainChanged = undefined;
92
+ }
93
+ if (disconnect) {
94
+ _provider?.off('disconnect', disconnect);
95
+ disconnect = undefined;
96
+ }
97
+ if (accountsChanged) {
98
+ _provider?.off('accountsChanged', accountsChanged);
99
+ accountsChanged = undefined;
100
+ }
101
+ if (sessionDelete) {
102
+ _provider?.off('session_delete', sessionDelete);
103
+ sessionDelete = undefined;
104
+ }
95
105
  }
96
- this.ready = false;
97
106
  },
98
107
  async getAccounts() {
99
108
  const namespaces = appKitProvidedConnector.getNamespaces();
@@ -153,29 +162,23 @@ function UniversalConnector(appKitProvidedConnector) {
153
162
  chainId: (0, _viem.numberToHex)(chainId)
154
163
  }]
155
164
  });
156
- config.emitter.emit('change', {
157
- chainId
158
- });
159
165
  return newChain;
160
- } catch (error) {
161
- // Try to add chain if switch failed (common pattern)
162
- //4902 in MetaMask: Unrecognized chain ID
166
+ } catch (err) {
167
+ const error = err;
168
+ if (/(user rejected)/i.test(error.message)) throw new _viem.UserRejectedRequestError(error);
163
169
  if (error?.code === 4902 || error?.data?.originalError?.code === 4902) {
170
+ // Indicates chain is not added to provider
164
171
  try {
172
+ const addEthereumChainParams = {
173
+ chainId: (0, _viem.numberToHex)(chainId),
174
+ chainName: newChain.name,
175
+ nativeCurrency: newChain.nativeCurrency,
176
+ rpcUrls: [newChain.rpcUrls.default?.http[0] ?? ''],
177
+ blockExplorerUrls: [newChain.blockExplorers?.default?.url]
178
+ };
165
179
  await _provider.request({
166
180
  method: 'wallet_addEthereumChain',
167
- params: [{
168
- chainId: (0, _viem.numberToHex)(chainId),
169
- chainName: newChain.name,
170
- nativeCurrency: newChain.nativeCurrency,
171
- rpcUrls: [newChain.rpcUrls.default?.http[0] ?? ''],
172
- // Take first default HTTP RPC URL
173
- blockExplorerUrls: [newChain.blockExplorers?.default?.url]
174
- }]
175
- });
176
- await appKitProvidedConnector.switchNetwork((0, _helpers.formatNetwork)(newChain));
177
- config.emitter.emit('change', {
178
- chainId
181
+ params: [addEthereumChainParams]
179
182
  });
180
183
  return newChain;
181
184
  } catch (addError) {
@@ -186,18 +189,64 @@ function UniversalConnector(appKitProvidedConnector) {
186
189
  }
187
190
  },
188
191
  onAccountsChanged(accounts) {
189
- if (accounts.length === 0) this.onDisconnect();else config.emitter.emit('change', {
192
+ //Only emit if the account is an evm account
193
+ const shouldEmit = accounts.some(account => account.startsWith('0x'));
194
+ if (accounts.length === 0) this.onDisconnect();else if (shouldEmit) config.emitter.emit('change', {
190
195
  accounts: accounts.map(x => (0, _viem.getAddress)(x))
191
196
  });
192
197
  },
193
198
  onChainChanged(chain) {
194
199
  const chainId = Number(chain);
195
- config.emitter.emit('change', {
196
- chainId
197
- });
200
+
201
+ //Only emit if the chain is in the config (evm)
202
+ const shouldEmit = config.chains.some(c => c.id === chainId);
203
+ if (shouldEmit) {
204
+ config.emitter.emit('change', {
205
+ chainId
206
+ });
207
+ }
198
208
  },
199
- onDisconnect: () => {
209
+ async onDisconnect() {
200
210
  config.emitter.emit('disconnect');
211
+ try {
212
+ const _provider = await this.getProvider();
213
+
214
+ // Clean up event listeners
215
+ if (accountsChanged) {
216
+ _provider.off('accountsChanged', accountsChanged);
217
+ accountsChanged = undefined;
218
+ }
219
+ if (chainChanged) {
220
+ _provider.off('chainChanged', chainChanged);
221
+ chainChanged = undefined;
222
+ }
223
+ if (disconnect) {
224
+ _provider.off('disconnect', disconnect);
225
+ disconnect = undefined;
226
+ }
227
+ if (sessionDelete) {
228
+ _provider.off('session_delete', sessionDelete);
229
+ sessionDelete = undefined;
230
+ }
231
+ } catch (error) {
232
+ // If provider is not available, still clean up local references
233
+ // to prevent memory leaks
234
+ if (accountsChanged) {
235
+ accountsChanged = undefined;
236
+ }
237
+ if (chainChanged) {
238
+ chainChanged = undefined;
239
+ }
240
+ if (disconnect) {
241
+ disconnect = undefined;
242
+ }
243
+ if (sessionDelete) {
244
+ sessionDelete = undefined;
245
+ }
246
+ }
247
+ },
248
+ onSessionDelete() {
249
+ this.onDisconnect();
201
250
  }
202
251
  }));
203
252
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_viem","require","_wagmi","_helpers","UniversalConnector","appKitProvidedConnector","provider","accountsChangedHandler","chainChangedHandler","disconnectHandler","createConnector","config","id","name","type","ready","getProvider","setup","on","accounts","hexAccounts","map","acc","getAddress","emitter","emit","length","chainId","newChainId","parseInt","error","connect","_provider","ProviderNotFoundError","accountAddresses","getAccounts","UserRejectedRequestError","Error","currentChainId","getChainId","switchChain","disconnect","off","undefined","namespaces","getNamespaces","eip155Accounts","eip155","caipAddr","parts","split","filter","addrPart","chainIdNum","isNaN","chains","isAuthorized","newChain","find","c","SwitchChainError","ChainNotConfiguredError","request","method","params","numberToHex","code","data","originalError","chainName","nativeCurrency","rpcUrls","default","http","blockExplorerUrls","blockExplorers","url","switchNetwork","formatNetwork","addError","onAccountsChanged","onDisconnect","x","onChainChanged","chain","Number"],"sourceRoot":"../../../src","sources":["connectors/UniversalConnector.ts"],"mappings":";;;;;;AACA,IAAAA,KAAA,GAAAC,OAAA;AAOA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AAEO,SAASG,kBAAkBA,CAACC,uBAAwC,EAAE;EAC3E,IAAIC,QAA8B;EAElC,IAAIC,sBAAkE;EACtE,IAAIC,mBAAqE;EACzE,IAAIC,iBAAwD;EAI5D,OAAO,IAAAC,sBAAe,EAAsCC,MAAM,KAAK;IACrEC,EAAE,EAAE,eAAe;IACnBC,IAAI,EAAE,eAAe;IACrBC,IAAI,EAAE,eAAwB;IAC9BC,KAAK,EAAE,CAAC,CAACV,uBAAuB,CAACW,WAAW,CAAC,QAAQ,CAAC;IAEtD,MAAMC,KAAKA,CAAA,EAAG;MACZX,QAAQ,GAAGD,uBAAuB,CAACW,WAAW,CAAC,QAAQ,CAAC;MACxD,IAAIV,QAAQ,EAAEY,EAAE,EAAE;QAChBX,sBAAsB,GAAIY,QAAkB,IAAK;UAC/C,MAAMC,WAAW,GAAGD,QAAQ,CAACE,GAAG,CAACC,GAAG,IAAI,IAAAC,gBAAU,EAACD,GAAG,CAAC,CAAC;UACxDX,MAAM,CAACa,OAAO,CAACC,IAAI,CAAC,QAAQ,EAAE;YAAEN,QAAQ,EAAEC;UAAY,CAAC,CAAC;UACxD,IAAIA,WAAW,CAACM,MAAM,KAAK,CAAC,EAAE;YAC5Bf,MAAM,CAACa,OAAO,CAACC,IAAI,CAAC,YAAY,CAAC;UACnC;QACF,CAAC;QACDjB,mBAAmB,GAAImB,OAAwB,IAAK;UAClD,MAAMC,UAAU,GAAG,OAAOD,OAAO,KAAK,QAAQ,GAAGE,QAAQ,CAACF,OAAO,EAAE,EAAE,CAAC,GAAGA,OAAO;UAChFhB,MAAM,CAACa,OAAO,CAACC,IAAI,CAAC,QAAQ,EAAE;YAAEE,OAAO,EAAEC;UAAW,CAAC,CAAC;QACxD,CAAC;QACDnB,iBAAiB,GAAIqB,KAAa,IAAK;UACrCnB,MAAM,CAACa,OAAO,CAACC,IAAI,CAAC,YAAY,CAAC;UACjC,IAAIK,KAAK,EAAEnB,MAAM,CAACa,OAAO,CAACC,IAAI,CAAC,OAAO,EAAE;YAAEK;UAAM,CAAC,CAAC;QACpD,CAAC;QAED,IAAIvB,sBAAsB,EAAED,QAAQ,CAACY,EAAE,CAAC,iBAAiB,EAAEX,sBAAsB,CAAC;QAClF,IAAIC,mBAAmB,EAAEF,QAAQ,CAACY,EAAE,CAAC,cAAc,EAAEV,mBAAmB,CAAC;QACzE,IAAIC,iBAAiB,EAAEH,QAAQ,CAACY,EAAE,CAAC,YAAY,EAAET,iBAAiB,CAAC;QACnE,IAAIA,iBAAiB,EAAEH,QAAQ,CAACY,EAAE,CAAC,gBAAgB,EAAET,iBAAiB,CAAC;MACzE;IACF,CAAC;IAED,MAAMsB,OAAOA,CAAC;MAAEJ;IAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;MAC9B,IAAI;QACF,MAAMK,SAAS,GAAG3B,uBAAuB,CAACW,WAAW,CAAC,QAAQ,CAAC;QAC/D,IAAI,CAACgB,SAAS,EAAE,MAAM,IAAIC,4BAAqB,CAAC,CAAC;;QAEjD;QACA;QACA,MAAMC,gBAAgB,GAAG,MAAM,IAAI,CAACC,WAAW,CAAC,CAAC;QACjD,IAAI,CAACD,gBAAgB,IAAIA,gBAAgB,CAACR,MAAM,KAAK,CAAC,EAAE;UACtD,MAAM,IAAIU,8BAAwB,CAChC,IAAIC,KAAK,CAAC,2DAA2D,CACvE,CAAC;QACH;QAEA,IAAIC,cAAc,GAAG,MAAM,IAAI,CAACC,UAAU,CAAC,CAAC;;QAE5C;QACA,IAAIZ,OAAO,IAAIW,cAAc,KAAKX,OAAO,EAAE;UACzC,MAAM,IAAI,CAACa,WAAW,GAAG;YAAEb;UAAQ,CAAC,CAAC;UACrCW,cAAc,GAAGX,OAAO;QAC1B;QAEA,IAAI,CAACZ,KAAK,GAAG,IAAI;QAEjB,OAAO;UAAEI,QAAQ,EAAEe,gBAAgB;UAAEP,OAAO,EAAEW;QAAe,CAAC;MAChE,CAAC,CAAC,OAAOR,KAAK,EAAE;QACd,IAAIA,KAAK,YAAYM,8BAAwB,EAAE,MAAMN,KAAK;QAC1D,MAAM,IAAIM,8BAAwB,CAACN,KAAc,CAAC,CAAC,CAAC;MACtD;IACF,CAAC;IAED,MAAMW,UAAUA,CAAA,EAAG;MACjB,MAAMpC,uBAAuB,CAACoC,UAAU,CAAC,CAAC;MAC1C9B,MAAM,CAACa,OAAO,CAACC,IAAI,CAAC,SAAS,EAAE;QAAEX,IAAI,EAAE;MAAqB,CAAC,CAAC;MAC9D,IAAIR,QAAQ,EAAEoC,GAAG,IAAInC,sBAAsB,IAAIC,mBAAmB,IAAIC,iBAAiB,EAAE;QACvFH,QAAQ,CAACoC,GAAG,CAAC,iBAAiB,EAAEnC,sBAAsB,CAAC;QACvDD,QAAQ,CAACoC,GAAG,CAAC,cAAc,EAAElC,mBAAmB,CAAC;QACjDF,QAAQ,CAACoC,GAAG,CAAC,YAAY,EAAEjC,iBAAiB,CAAC;QAC7CH,QAAQ,CAACoC,GAAG,CAAC,gBAAgB,EAAEjC,iBAAiB,CAAC;QACjDF,sBAAsB,GAAGoC,SAAS;QAClCnC,mBAAmB,GAAGmC,SAAS;QAC/BlC,iBAAiB,GAAGkC,SAAS;MAC/B;MACA,IAAI,CAAC5B,KAAK,GAAG,KAAK;IACpB,CAAC;IAED,MAAMoB,WAAWA,CAAA,EAAG;MAClB,MAAMS,UAAU,GAAGvC,uBAAuB,CAACwC,aAAa,CAAC,CAAC;MAC1D;MACA,MAAMC,cAAc,GAAGF,UAAU,EAAEG,MAAM,EAAE5B,QAAQ;MACnD,IAAI,CAAC2B,cAAc,EAAE,OAAO,EAAE;MAE9B,OAAOA,cAAc,CAClBzB,GAAG,CAAE2B,QAAgB,IAAK;QACzB,MAAMC,KAAK,GAAGD,QAAQ,CAACE,KAAK,CAAC,GAAG,CAAC;QAEjC,OAAOD,KAAK,CAACvB,MAAM,KAAK,CAAC,GAAGuB,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;MAC7C,CAAC,CAAC,CACDE,MAAM,CAAEC,QAAQ,IAAyB,CAAC,CAACA,QAAQ,CAAC,CACpD/B,GAAG,CAAE+B,QAAgB,IAAK,IAAA7B,gBAAU,EAAC6B,QAAQ,CAAC,CAAC;IACpD,CAAC;IAED,MAAMb,UAAUA,CAAA,EAAG;MACjB,MAAMZ,OAAO,GAAGtB,uBAAuB,CAACkC,UAAU,CAAC,QAAQ,CAAC,EAAEW,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;MAE3E,IAAIvB,OAAO,EAAE,OAAOE,QAAQ,CAACF,OAAO,EAAE,EAAE,CAAC;;MAEzC;MACA,MAAMiB,UAAU,GAAGvC,uBAAuB,CAACwC,aAAa,CAAC,CAAC;MAC1D;MACA,MAAMC,cAAc,GAAGF,UAAU,EAAEG,MAAM,EAAE5B,QAAQ;MACnD,IAAI2B,cAAc,IAAIA,cAAc,CAACpB,MAAM,GAAG,CAAC,EAAE;QAC/C,MAAMuB,KAAK,GAAGH,cAAc,CAAC,CAAC,CAAC,EAAEI,KAAK,CAAC,GAAG,CAAC;QAC3C,IAAID,KAAK,IAAIA,KAAK,CAACvB,MAAM,GAAG,CAAC,IAAI,OAAOuB,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;UAC7D,MAAMI,UAAU,GAAGxB,QAAQ,CAACoB,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;UACzC,IAAI,CAACK,KAAK,CAACD,UAAU,CAAC,EAAE;YACtB,OAAOA,UAAU;UACnB;QACF;MACF;MACA,IAAI1C,MAAM,CAAC4C,MAAM,IAAI5C,MAAM,CAAC4C,MAAM,CAAC7B,MAAM,GAAG,CAAC,EAAE,OAAOf,MAAM,CAAC4C,MAAM,CAAC,CAAC,CAAC,CAAC3C,EAAE;MACzE,MAAM,IAAIyB,KAAK,CAAC,8BAA8B,CAAC;IACjD,CAAC;IAED,MAAMrB,WAAWA,CAAA,EAAG;MAClB,IAAI,CAACV,QAAQ,EAAE;QACbA,QAAQ,GAAGD,uBAAuB,CAACW,WAAW,CAAC,QAAQ,CAAC;MAC1D;MAEA,OAAOV,QAAQ;IACjB,CAAC;IAED,MAAMkD,YAAYA,CAAA,EAAG;MACnB,IAAI;QACF,MAAMrC,QAAQ,GAAG,MAAM,IAAI,CAACgB,WAAW,CAAC,CAAC;QAEzC,OAAO,CAAC,EAAEhB,QAAQ,IAAIA,QAAQ,CAACO,MAAM,GAAG,CAAC,CAAC;MAC5C,CAAC,CAAC,MAAM;QACN,OAAO,KAAK;MACd;IACF,CAAC;IAED,MAAMc,WAAWA,CAAC;MAAEb;IAAQ,CAAC,EAAE;MAC7B,MAAMK,SAAS,GAAG3B,uBAAuB,CAACW,WAAW,CAAC,QAAQ,CAAC;MAC/D,IAAI,CAACgB,SAAS,EAAE,MAAM,IAAIK,KAAK,CAAC,6CAA6C,CAAC;MAC9E,MAAMoB,QAAQ,GAAG9C,MAAM,CAAC4C,MAAM,CAACG,IAAI,CAACC,CAAC,IAAIA,CAAC,CAAC/C,EAAE,KAAKe,OAAO,CAAC;MAE1D,IAAI,CAAC8B,QAAQ,EAAE,MAAM,IAAIG,sBAAgB,CAAC,IAAIC,8BAAuB,CAAC,CAAC,CAAC;MAExE,IAAI;QACF,MAAM7B,SAAS,CAAC8B,OAAO,CAAC;UACtBC,MAAM,EAAE,4BAA4B;UACpCC,MAAM,EAAE,CAAC;YAAErC,OAAO,EAAE,IAAAsC,iBAAW,EAACtC,OAAO;UAAE,CAAC;QAC5C,CAAC,CAAC;QAEFhB,MAAM,CAACa,OAAO,CAACC,IAAI,CAAC,QAAQ,EAAE;UAAEE;QAAQ,CAAC,CAAC;QAE1C,OAAO8B,QAAQ;MACjB,CAAC,CAAC,OAAO3B,KAAK,EAAE;QACd;QACA;QACA,IAAKA,KAAK,EAAUoC,IAAI,KAAK,IAAI,IAAKpC,KAAK,EAAUqC,IAAI,EAAEC,aAAa,EAAEF,IAAI,KAAK,IAAI,EAAE;UACvF,IAAI;YACF,MAAMlC,SAAS,CAAC8B,OAAO,CAAC;cACtBC,MAAM,EAAE,yBAAyB;cACjCC,MAAM,EAAE,CACN;gBACErC,OAAO,EAAE,IAAAsC,iBAAW,EAACtC,OAAO,CAAC;gBAC7B0C,SAAS,EAAEZ,QAAQ,CAAC5C,IAAI;gBACxByD,cAAc,EAAEb,QAAQ,CAACa,cAAc;gBACvCC,OAAO,EAAE,CAACd,QAAQ,CAACc,OAAO,CAACC,OAAO,EAAEC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAAE;gBACpDC,iBAAiB,EAAE,CAACjB,QAAQ,CAACkB,cAAc,EAAEH,OAAO,EAAEI,GAAG;cAC3D,CAAC;YAEL,CAAC,CAAC;YACF,MAAMvE,uBAAuB,CAACwE,aAAa,CAAC,IAAAC,sBAAa,EAACrB,QAAQ,CAAC,CAAC;YACpE9C,MAAM,CAACa,OAAO,CAACC,IAAI,CAAC,QAAQ,EAAE;cAAEE;YAAQ,CAAC,CAAC;YAE1C,OAAO8B,QAAQ;UACjB,CAAC,CAAC,OAAOsB,QAAQ,EAAE;YACjB,MAAM,IAAI3C,8BAAwB,CAAC2C,QAAiB,CAAC;UACvD;QACF;QACA,MAAM,IAAInB,sBAAgB,CAAC9B,KAAc,CAAC;MAC5C;IACF,CAAC;IAEDkD,iBAAiBA,CAAC7D,QAAkB,EAAE;MACpC,IAAIA,QAAQ,CAACO,MAAM,KAAK,CAAC,EAAE,IAAI,CAACuD,YAAY,CAAC,CAAC,CAAC,KAC1CtE,MAAM,CAACa,OAAO,CAACC,IAAI,CAAC,QAAQ,EAAE;QAAEN,QAAQ,EAAEA,QAAQ,CAACE,GAAG,CAAC6D,CAAC,IAAI,IAAA3D,gBAAU,EAAC2D,CAAC,CAAC;MAAE,CAAC,CAAC;IACpF,CAAC;IAEDC,cAAcA,CAACC,KAAa,EAAE;MAC5B,MAAMzD,OAAO,GAAG0D,MAAM,CAACD,KAAK,CAAC;MAC7BzE,MAAM,CAACa,OAAO,CAACC,IAAI,CAAC,QAAQ,EAAE;QAAEE;MAAQ,CAAC,CAAC;IAC5C,CAAC;IAEDsD,YAAY,EAAEA,CAAA,KAAM;MAClBtE,MAAM,CAACa,OAAO,CAACC,IAAI,CAAC,YAAY,CAAC;IACnC;EACF,CAAC,CAAC,CAAC;AACL","ignoreList":[]}
1
+ {"version":3,"names":["_viem","require","_wagmi","UniversalConnector","appKitProvidedConnector","provider","accountsChanged","chainChanged","sessionDelete","disconnect","createConnector","config","id","name","type","ready","getProvider","setup","_provider","catch","onSessionDelete","bind","on","connect","chainId","ProviderNotFoundError","accountAddresses","getAccounts","length","UserRejectedRequestError","Error","currentChainId","getChainId","switchChain","onAccountsChanged","onChainChanged","onDisconnect","accounts","error","emitter","emit","test","message","off","undefined","namespaces","getNamespaces","eip155Accounts","eip155","map","caipAddr","parts","split","filter","addrPart","getAddress","parseInt","chainIdNum","isNaN","chains","isAuthorized","newChain","find","c","SwitchChainError","ChainNotConfiguredError","request","method","params","numberToHex","err","code","data","originalError","addEthereumChainParams","chainName","nativeCurrency","rpcUrls","default","http","blockExplorerUrls","blockExplorers","url","addError","shouldEmit","some","account","startsWith","x","chain","Number"],"sourceRoot":"../../../src","sources":["connectors/UniversalConnector.ts"],"mappings":"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","ignoreList":[]}
@@ -2,45 +2,25 @@
2
2
 
3
3
  import { getAddress, numberToHex, SwitchChainError, UserRejectedRequestError } from 'viem';
4
4
  import { ChainNotConfiguredError, createConnector, ProviderNotFoundError } from 'wagmi';
5
- import { formatNetwork } from '../utils/helpers';
6
5
  export function UniversalConnector(appKitProvidedConnector) {
7
6
  let provider;
8
- let accountsChangedHandler;
9
- let chainChangedHandler;
10
- let disconnectHandler;
7
+ let accountsChanged;
8
+ let chainChanged;
9
+ let sessionDelete;
10
+ let disconnect;
11
11
  return createConnector(config => ({
12
12
  id: 'walletconnect',
13
13
  name: 'WalletConnect',
14
14
  type: 'walletconnect',
15
15
  ready: !!appKitProvidedConnector.getProvider('eip155'),
16
16
  async setup() {
17
- provider = appKitProvidedConnector.getProvider('eip155');
18
- if (provider?.on) {
19
- accountsChangedHandler = accounts => {
20
- const hexAccounts = accounts.map(acc => getAddress(acc));
21
- config.emitter.emit('change', {
22
- accounts: hexAccounts
23
- });
24
- if (hexAccounts.length === 0) {
25
- config.emitter.emit('disconnect');
26
- }
27
- };
28
- chainChangedHandler = chainId => {
29
- const newChainId = typeof chainId === 'string' ? parseInt(chainId, 10) : chainId;
30
- config.emitter.emit('change', {
31
- chainId: newChainId
32
- });
33
- };
34
- disconnectHandler = error => {
35
- config.emitter.emit('disconnect');
36
- if (error) config.emitter.emit('error', {
37
- error
38
- });
39
- };
40
- if (accountsChangedHandler) provider.on('accountsChanged', accountsChangedHandler);
41
- if (chainChangedHandler) provider.on('chainChanged', chainChangedHandler);
42
- if (disconnectHandler) provider.on('disconnect', disconnectHandler);
43
- if (disconnectHandler) provider.on('session_delete', disconnectHandler);
17
+ const _provider = await this.getProvider().catch(() => null);
18
+ if (!_provider) {
19
+ return;
20
+ }
21
+ if (!sessionDelete) {
22
+ sessionDelete = this.onSessionDelete.bind(this);
23
+ _provider.on('session_delete', sessionDelete);
44
24
  }
45
25
  },
46
26
  async connect({
@@ -65,7 +45,22 @@ export function UniversalConnector(appKitProvidedConnector) {
65
45
  });
66
46
  currentChainId = chainId;
67
47
  }
68
- this.ready = true;
48
+ if (!accountsChanged) {
49
+ accountsChanged = this.onAccountsChanged.bind(this);
50
+ _provider.on('accountsChanged', accountsChanged);
51
+ }
52
+ if (!chainChanged) {
53
+ chainChanged = this.onChainChanged.bind(this);
54
+ _provider.on('chainChanged', chainChanged);
55
+ }
56
+ if (!disconnect) {
57
+ disconnect = this.onDisconnect.bind(this);
58
+ _provider.on('disconnect', disconnect);
59
+ }
60
+ if (!sessionDelete) {
61
+ sessionDelete = this.onSessionDelete.bind(this);
62
+ _provider.on('session_delete', sessionDelete);
63
+ }
69
64
  return {
70
65
  accounts: accountAddresses,
71
66
  chainId: currentChainId
@@ -76,20 +71,34 @@ export function UniversalConnector(appKitProvidedConnector) {
76
71
  }
77
72
  },
78
73
  async disconnect() {
79
- await appKitProvidedConnector.disconnect();
80
- config.emitter.emit('message', {
81
- type: 'externalDisconnect'
82
- });
83
- if (provider?.off && accountsChangedHandler && chainChangedHandler && disconnectHandler) {
84
- provider.off('accountsChanged', accountsChangedHandler);
85
- provider.off('chainChanged', chainChangedHandler);
86
- provider.off('disconnect', disconnectHandler);
87
- provider.off('session_delete', disconnectHandler);
88
- accountsChangedHandler = undefined;
89
- chainChangedHandler = undefined;
90
- disconnectHandler = undefined;
74
+ const _provider = await this.getProvider().catch(() => null);
75
+ try {
76
+ await appKitProvidedConnector.disconnect();
77
+ config.emitter.emit('message', {
78
+ type: 'externalDisconnect'
79
+ });
80
+ } catch (error) {
81
+ if (!/No matching key/i.test(error.message)) {
82
+ throw error;
83
+ }
84
+ } finally {
85
+ if (chainChanged) {
86
+ _provider?.off('chainChanged', chainChanged);
87
+ chainChanged = undefined;
88
+ }
89
+ if (disconnect) {
90
+ _provider?.off('disconnect', disconnect);
91
+ disconnect = undefined;
92
+ }
93
+ if (accountsChanged) {
94
+ _provider?.off('accountsChanged', accountsChanged);
95
+ accountsChanged = undefined;
96
+ }
97
+ if (sessionDelete) {
98
+ _provider?.off('session_delete', sessionDelete);
99
+ sessionDelete = undefined;
100
+ }
91
101
  }
92
- this.ready = false;
93
102
  },
94
103
  async getAccounts() {
95
104
  const namespaces = appKitProvidedConnector.getNamespaces();
@@ -149,29 +158,23 @@ export function UniversalConnector(appKitProvidedConnector) {
149
158
  chainId: numberToHex(chainId)
150
159
  }]
151
160
  });
152
- config.emitter.emit('change', {
153
- chainId
154
- });
155
161
  return newChain;
156
- } catch (error) {
157
- // Try to add chain if switch failed (common pattern)
158
- //4902 in MetaMask: Unrecognized chain ID
162
+ } catch (err) {
163
+ const error = err;
164
+ if (/(user rejected)/i.test(error.message)) throw new UserRejectedRequestError(error);
159
165
  if (error?.code === 4902 || error?.data?.originalError?.code === 4902) {
166
+ // Indicates chain is not added to provider
160
167
  try {
168
+ const addEthereumChainParams = {
169
+ chainId: numberToHex(chainId),
170
+ chainName: newChain.name,
171
+ nativeCurrency: newChain.nativeCurrency,
172
+ rpcUrls: [newChain.rpcUrls.default?.http[0] ?? ''],
173
+ blockExplorerUrls: [newChain.blockExplorers?.default?.url]
174
+ };
161
175
  await _provider.request({
162
176
  method: 'wallet_addEthereumChain',
163
- params: [{
164
- chainId: numberToHex(chainId),
165
- chainName: newChain.name,
166
- nativeCurrency: newChain.nativeCurrency,
167
- rpcUrls: [newChain.rpcUrls.default?.http[0] ?? ''],
168
- // Take first default HTTP RPC URL
169
- blockExplorerUrls: [newChain.blockExplorers?.default?.url]
170
- }]
171
- });
172
- await appKitProvidedConnector.switchNetwork(formatNetwork(newChain));
173
- config.emitter.emit('change', {
174
- chainId
177
+ params: [addEthereumChainParams]
175
178
  });
176
179
  return newChain;
177
180
  } catch (addError) {
@@ -182,18 +185,64 @@ export function UniversalConnector(appKitProvidedConnector) {
182
185
  }
183
186
  },
184
187
  onAccountsChanged(accounts) {
185
- if (accounts.length === 0) this.onDisconnect();else config.emitter.emit('change', {
188
+ //Only emit if the account is an evm account
189
+ const shouldEmit = accounts.some(account => account.startsWith('0x'));
190
+ if (accounts.length === 0) this.onDisconnect();else if (shouldEmit) config.emitter.emit('change', {
186
191
  accounts: accounts.map(x => getAddress(x))
187
192
  });
188
193
  },
189
194
  onChainChanged(chain) {
190
195
  const chainId = Number(chain);
191
- config.emitter.emit('change', {
192
- chainId
193
- });
196
+
197
+ //Only emit if the chain is in the config (evm)
198
+ const shouldEmit = config.chains.some(c => c.id === chainId);
199
+ if (shouldEmit) {
200
+ config.emitter.emit('change', {
201
+ chainId
202
+ });
203
+ }
194
204
  },
195
- onDisconnect: () => {
205
+ async onDisconnect() {
196
206
  config.emitter.emit('disconnect');
207
+ try {
208
+ const _provider = await this.getProvider();
209
+
210
+ // Clean up event listeners
211
+ if (accountsChanged) {
212
+ _provider.off('accountsChanged', accountsChanged);
213
+ accountsChanged = undefined;
214
+ }
215
+ if (chainChanged) {
216
+ _provider.off('chainChanged', chainChanged);
217
+ chainChanged = undefined;
218
+ }
219
+ if (disconnect) {
220
+ _provider.off('disconnect', disconnect);
221
+ disconnect = undefined;
222
+ }
223
+ if (sessionDelete) {
224
+ _provider.off('session_delete', sessionDelete);
225
+ sessionDelete = undefined;
226
+ }
227
+ } catch (error) {
228
+ // If provider is not available, still clean up local references
229
+ // to prevent memory leaks
230
+ if (accountsChanged) {
231
+ accountsChanged = undefined;
232
+ }
233
+ if (chainChanged) {
234
+ chainChanged = undefined;
235
+ }
236
+ if (disconnect) {
237
+ disconnect = undefined;
238
+ }
239
+ if (sessionDelete) {
240
+ sessionDelete = undefined;
241
+ }
242
+ }
243
+ },
244
+ onSessionDelete() {
245
+ this.onDisconnect();
197
246
  }
198
247
  }));
199
248
  }
@@ -1 +1 @@
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","isAuthorized","newChain","find","c","request","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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","ignoreList":[]}
1
+ {"version":3,"names":["getAddress","numberToHex","SwitchChainError","UserRejectedRequestError","ChainNotConfiguredError","createConnector","ProviderNotFoundError","UniversalConnector","appKitProvidedConnector","provider","accountsChanged","chainChanged","sessionDelete","disconnect","config","id","name","type","ready","getProvider","setup","_provider","catch","onSessionDelete","bind","on","connect","chainId","accountAddresses","getAccounts","length","Error","currentChainId","getChainId","switchChain","onAccountsChanged","onChainChanged","onDisconnect","accounts","error","emitter","emit","test","message","off","undefined","namespaces","getNamespaces","eip155Accounts","eip155","map","caipAddr","parts","split","filter","addrPart","parseInt","chainIdNum","isNaN","chains","isAuthorized","newChain","find","c","request","method","params","err","code","data","originalError","addEthereumChainParams","chainName","nativeCurrency","rpcUrls","default","http","blockExplorerUrls","blockExplorers","url","addError","shouldEmit","some","account","startsWith","x","chain","Number"],"sourceRoot":"../../../src","sources":["connectors/UniversalConnector.ts"],"mappings":";;AAEA,SACEA,UAAU,EACVC,WAAW,EAEXC,gBAAgB,EAChBC,wBAAwB,QAEnB,MAAM;AACb,SACEC,uBAAuB,EACvBC,eAAe,EACfC,qBAAqB,QAEhB,OAAO;AAUd,OAAO,SAASC,kBAAkBA,CAACC,uBAAwC,EAAE;EAC3E,IAAIC,QAA8B;EAElC,IAAIC,eAAoE;EACxE,IAAIC,YAA8D;EAClE,IAAIC,aAAgE;EACpE,IAAIC,UAA0D;EAE9D,OAAOR,eAAe,CAAuBS,MAAM,KAAK;IACtDC,EAAE,EAAE,eAAe;IACnBC,IAAI,EAAE,eAAe;IACrBC,IAAI,EAAE,eAAwB;IAC9BC,KAAK,EAAE,CAAC,CAACV,uBAAuB,CAACW,WAAW,CAAC,QAAQ,CAAC;IAEtD,MAAMC,KAAKA,CAAA,EAAG;MACZ,MAAMC,SAAS,GAAG,MAAM,IAAI,CAACF,WAAW,CAAC,CAAC,CAACG,KAAK,CAAC,MAAM,IAAI,CAAC;MAC5D,IAAI,CAACD,SAAS,EAAE;QACd;MACF;MACA,IAAI,CAACT,aAAa,EAAE;QAClBA,aAAa,GAAG,IAAI,CAACW,eAAe,CAACC,IAAI,CAAC,IAAI,CAAC;QAC/CH,SAAS,CAACI,EAAE,CAAC,gBAAgB,EAAEb,aAAa,CAAC;MAC/C;IACF,CAAC;IAED,MAAMc,OAAOA,CAAC;MAAEC;IAAQ,CAAC,GAAG,CAAC,CAAC,EAAE;MAC9B,IAAI;QACF,MAAMN,SAAS,GAAGb,uBAAuB,CAACW,WAAW,CAAC,QAAQ,CAAC;QAC/D,IAAI,CAACE,SAAS,EAAE,MAAM,IAAIf,qBAAqB,CAAC,CAAC;;QAEjD;QACA;QACA,MAAMsB,gBAAgB,GAAG,MAAM,IAAI,CAACC,WAAW,CAAC,CAAC;QACjD,IAAI,CAACD,gBAAgB,IAAIA,gBAAgB,CAACE,MAAM,KAAK,CAAC,EAAE;UACtD,MAAM,IAAI3B,wBAAwB,CAChC,IAAI4B,KAAK,CAAC,2DAA2D,CACvE,CAAC;QACH;QAEA,IAAIC,cAAc,GAAG,MAAM,IAAI,CAACC,UAAU,CAAC,CAAC;;QAE5C;QACA,IAAIN,OAAO,IAAIK,cAAc,KAAKL,OAAO,EAAE;UACzC,MAAM,IAAI,CAACO,WAAW,GAAG;YAAEP;UAAQ,CAAC,CAAC;UACrCK,cAAc,GAAGL,OAAO;QAC1B;QACA,IAAI,CAACjB,eAAe,EAAE;UACpBA,eAAe,GAAG,IAAI,CAACyB,iBAAiB,CAACX,IAAI,CAAC,IAAI,CAAC;UACnDH,SAAS,CAACI,EAAE,CAAC,iBAAiB,EAAEf,eAAe,CAAC;QAClD;QACA,IAAI,CAACC,YAAY,EAAE;UACjBA,YAAY,GAAG,IAAI,CAACyB,cAAc,CAACZ,IAAI,CAAC,IAAI,CAAC;UAC7CH,SAAS,CAACI,EAAE,CAAC,cAAc,EAAEd,YAAY,CAAC;QAC5C;QACA,IAAI,CAACE,UAAU,EAAE;UACfA,UAAU,GAAG,IAAI,CAACwB,YAAY,CAACb,IAAI,CAAC,IAAI,CAAC;UACzCH,SAAS,CAACI,EAAE,CAAC,YAAY,EAAEZ,UAAU,CAAC;QACxC;QACA,IAAI,CAACD,aAAa,EAAE;UAClBA,aAAa,GAAG,IAAI,CAACW,eAAe,CAACC,IAAI,CAAC,IAAI,CAAC;UAC/CH,SAAS,CAACI,EAAE,CAAC,gBAAgB,EAAEb,aAAa,CAAC;QAC/C;QAEA,OAAO;UAAE0B,QAAQ,EAAEV,gBAAgB;UAAED,OAAO,EAAEK;QAAe,CAAC;MAChE,CAAC,CAAC,OAAOO,KAAK,EAAE;QACd,IAAIA,KAAK,YAAYpC,wBAAwB,EAAE,MAAMoC,KAAK;QAC1D,MAAM,IAAIpC,wBAAwB,CAACoC,KAAc,CAAC,CAAC,CAAC;MACtD;IACF,CAAC;IAED,MAAM1B,UAAUA,CAAA,EAAG;MACjB,MAAMQ,SAAS,GAAG,MAAM,IAAI,CAACF,WAAW,CAAC,CAAC,CAACG,KAAK,CAAC,MAAM,IAAI,CAAC;MAC5D,IAAI;QACF,MAAMd,uBAAuB,CAACK,UAAU,CAAC,CAAC;QAC1CC,MAAM,CAAC0B,OAAO,CAACC,IAAI,CAAC,SAAS,EAAE;UAAExB,IAAI,EAAE;QAAqB,CAAC,CAAC;MAChE,CAAC,CAAC,OAAOsB,KAAK,EAAE;QACd,IAAI,CAAC,kBAAkB,CAACG,IAAI,CAAEH,KAAK,CAAWI,OAAO,CAAC,EAAE;UACtD,MAAMJ,KAAK;QACb;MACF,CAAC,SAAS;QACR,IAAI5B,YAAY,EAAE;UAChBU,SAAS,EAAEuB,GAAG,CAAC,cAAc,EAAEjC,YAAY,CAAC;UAC5CA,YAAY,GAAGkC,SAAS;QAC1B;QACA,IAAIhC,UAAU,EAAE;UACdQ,SAAS,EAAEuB,GAAG,CAAC,YAAY,EAAE/B,UAAU,CAAC;UACxCA,UAAU,GAAGgC,SAAS;QACxB;QACA,IAAInC,eAAe,EAAE;UACnBW,SAAS,EAAEuB,GAAG,CAAC,iBAAiB,EAAElC,eAAe,CAAC;UAClDA,eAAe,GAAGmC,SAAS;QAC7B;QACA,IAAIjC,aAAa,EAAE;UACjBS,SAAS,EAAEuB,GAAG,CAAC,gBAAgB,EAAEhC,aAAa,CAAC;UAC/CA,aAAa,GAAGiC,SAAS;QAC3B;MACF;IACF,CAAC;IAED,MAAMhB,WAAWA,CAAA,EAAG;MAClB,MAAMiB,UAAU,GAAGtC,uBAAuB,CAACuC,aAAa,CAAC,CAAC;MAC1D;MACA,MAAMC,cAAc,GAAGF,UAAU,EAAEG,MAAM,EAAEX,QAAQ;MACnD,IAAI,CAACU,cAAc,EAAE,OAAO,EAAE;MAE9B,OAAOA,cAAc,CAClBE,GAAG,CAAEC,QAAgB,IAAK;QACzB,MAAMC,KAAK,GAAGD,QAAQ,CAACE,KAAK,CAAC,GAAG,CAAC;QAEjC,OAAOD,KAAK,CAACtB,MAAM,KAAK,CAAC,GAAGsB,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;MAC7C,CAAC,CAAC,CACDE,MAAM,CAAEC,QAAQ,IAAyB,CAAC,CAACA,QAAQ,CAAC,CACpDL,GAAG,CAAEK,QAAgB,IAAKvD,UAAU,CAACuD,QAAQ,CAAC,CAAC;IACpD,CAAC;IAED,MAAMtB,UAAUA,CAAA,EAAG;MACjB,MAAMN,OAAO,GAAGnB,uBAAuB,CAACyB,UAAU,CAAC,QAAQ,CAAC,EAAEoB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;MAE3E,IAAI1B,OAAO,EAAE,OAAO6B,QAAQ,CAAC7B,OAAO,EAAE,EAAE,CAAC;;MAEzC;MACA,MAAMmB,UAAU,GAAGtC,uBAAuB,CAACuC,aAAa,CAAC,CAAC;MAC1D;MACA,MAAMC,cAAc,GAAGF,UAAU,EAAEG,MAAM,EAAEX,QAAQ;MACnD,IAAIU,cAAc,IAAIA,cAAc,CAAClB,MAAM,GAAG,CAAC,EAAE;QAC/C,MAAMsB,KAAK,GAAGJ,cAAc,CAAC,CAAC,CAAC,EAAEK,KAAK,CAAC,GAAG,CAAC;QAC3C,IAAID,KAAK,IAAIA,KAAK,CAACtB,MAAM,GAAG,CAAC,IAAI,OAAOsB,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;UAC7D,MAAMK,UAAU,GAAGD,QAAQ,CAACJ,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;UACzC,IAAI,CAACM,KAAK,CAACD,UAAU,CAAC,EAAE;YACtB,OAAOA,UAAU;UACnB;QACF;MACF;MACA,IAAI3C,MAAM,CAAC6C,MAAM,IAAI7C,MAAM,CAAC6C,MAAM,CAAC7B,MAAM,GAAG,CAAC,EAAE,OAAOhB,MAAM,CAAC6C,MAAM,CAAC,CAAC,CAAC,CAAC5C,EAAE;MACzE,MAAM,IAAIgB,KAAK,CAAC,8BAA8B,CAAC;IACjD,CAAC;IAED,MAAMZ,WAAWA,CAAA,EAAG;MAClB,IAAI,CAACV,QAAQ,EAAE;QACbA,QAAQ,GAAGD,uBAAuB,CAACW,WAAW,CAAC,QAAQ,CAAC;MAC1D;MAEA,OAAOV,QAAQ;IACjB,CAAC;IAED,MAAMmD,YAAYA,CAAA,EAAG;MACnB,IAAI;QACF,MAAMtB,QAAQ,GAAG,MAAM,IAAI,CAACT,WAAW,CAAC,CAAC;QAEzC,OAAO,CAAC,EAAES,QAAQ,IAAIA,QAAQ,CAACR,MAAM,GAAG,CAAC,CAAC;MAC5C,CAAC,CAAC,MAAM;QACN,OAAO,KAAK;MACd;IACF,CAAC;IAED,MAAMI,WAAWA,CAAC;MAAEP;IAAQ,CAAC,EAAE;MAC7B,MAAMN,SAAS,GAAGb,uBAAuB,CAACW,WAAW,CAAC,QAAQ,CAAC;MAC/D,IAAI,CAACE,SAAS,EAAE,MAAM,IAAIU,KAAK,CAAC,6CAA6C,CAAC;MAC9E,MAAM8B,QAAQ,GAAG/C,MAAM,CAAC6C,MAAM,CAACG,IAAI,CAACC,CAAC,IAAIA,CAAC,CAAChD,EAAE,KAAKY,OAAO,CAAC;MAE1D,IAAI,CAACkC,QAAQ,EAAE,MAAM,IAAI3D,gBAAgB,CAAC,IAAIE,uBAAuB,CAAC,CAAC,CAAC;MAExE,IAAI;QACF,MAAMiB,SAAS,CAAC2C,OAAO,CAAC;UACtBC,MAAM,EAAE,4BAA4B;UACpCC,MAAM,EAAE,CAAC;YAAEvC,OAAO,EAAE1B,WAAW,CAAC0B,OAAO;UAAE,CAAC;QAC5C,CAAC,CAAC;QAEF,OAAOkC,QAAQ;MACjB,CAAC,CAAC,OAAOM,GAAG,EAAE;QACZ,MAAM5B,KAAK,GAAG4B,GAAe;QAE7B,IAAI,kBAAkB,CAACzB,IAAI,CAACH,KAAK,CAACI,OAAO,CAAC,EAAE,MAAM,IAAIxC,wBAAwB,CAACoC,KAAK,CAAC;QAErF,IAAKA,KAAK,EAAU6B,IAAI,KAAK,IAAI,IAAK7B,KAAK,EAAU8B,IAAI,EAAEC,aAAa,EAAEF,IAAI,KAAK,IAAI,EAAE;UACvF;UACA,IAAI;YACF,MAAMG,sBAAsB,GAAG;cAC7B5C,OAAO,EAAE1B,WAAW,CAAC0B,OAAO,CAAC;cAC7B6C,SAAS,EAAEX,QAAQ,CAAC7C,IAAI;cACxByD,cAAc,EAAEZ,QAAQ,CAACY,cAAc;cACvCC,OAAO,EAAE,CAACb,QAAQ,CAACa,OAAO,CAACC,OAAO,EAAEC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;cAClDC,iBAAiB,EAAE,CAAChB,QAAQ,CAACiB,cAAc,EAAEH,OAAO,EAAEI,GAAG;YAC3D,CAAC;YAED,MAAM1D,SAAS,CAAC2C,OAAO,CAAC;cACtBC,MAAM,EAAE,yBAAyB;cACjCC,MAAM,EAAE,CAACK,sBAAsB;YACjC,CAAC,CAAC;YAEF,OAAOV,QAAQ;UACjB,CAAC,CAAC,OAAOmB,QAAQ,EAAE;YACjB,MAAM,IAAI7E,wBAAwB,CAAC6E,QAAiB,CAAC;UACvD;QACF;QACA,MAAM,IAAI9E,gBAAgB,CAACqC,KAAc,CAAC;MAC5C;IACF,CAAC;IAEDJ,iBAAiBA,CAACG,QAAkB,EAAE;MACpC;MACA,MAAM2C,UAAU,GAAG3C,QAAQ,CAAC4C,IAAI,CAACC,OAAO,IAAIA,OAAO,CAACC,UAAU,CAAC,IAAI,CAAC,CAAC;MAErE,IAAI9C,QAAQ,CAACR,MAAM,KAAK,CAAC,EAAE,IAAI,CAACO,YAAY,CAAC,CAAC,CAAC,KAC1C,IAAI4C,UAAU,EACjBnE,MAAM,CAAC0B,OAAO,CAACC,IAAI,CAAC,QAAQ,EAAE;QAAEH,QAAQ,EAAEA,QAAQ,CAACY,GAAG,CAACmC,CAAC,IAAIrF,UAAU,CAACqF,CAAC,CAAC;MAAE,CAAC,CAAC;IACjF,CAAC;IAEDjD,cAAcA,CAACkD,KAAa,EAAE;MAC5B,MAAM3D,OAAO,GAAG4D,MAAM,CAACD,KAAK,CAAC;;MAE7B;MACA,MAAML,UAAU,GAAGnE,MAAM,CAAC6C,MAAM,CAACuB,IAAI,CAACnB,CAAC,IAAIA,CAAC,CAAChD,EAAE,KAAKY,OAAO,CAAC;MAC5D,IAAIsD,UAAU,EAAE;QACdnE,MAAM,CAAC0B,OAAO,CAACC,IAAI,CAAC,QAAQ,EAAE;UAAEd;QAAQ,CAAC,CAAC;MAC5C;IACF,CAAC;IAED,MAAMU,YAAYA,CAAA,EAAG;MACnBvB,MAAM,CAAC0B,OAAO,CAACC,IAAI,CAAC,YAAY,CAAC;MAEjC,IAAI;QACF,MAAMpB,SAAS,GAAG,MAAM,IAAI,CAACF,WAAW,CAAC,CAAC;;QAE1C;QACA,IAAIT,eAAe,EAAE;UACnBW,SAAS,CAACuB,GAAG,CAAC,iBAAiB,EAAElC,eAAe,CAAC;UACjDA,eAAe,GAAGmC,SAAS;QAC7B;QACA,IAAIlC,YAAY,EAAE;UAChBU,SAAS,CAACuB,GAAG,CAAC,cAAc,EAAEjC,YAAY,CAAC;UAC3CA,YAAY,GAAGkC,SAAS;QAC1B;QACA,IAAIhC,UAAU,EAAE;UACdQ,SAAS,CAACuB,GAAG,CAAC,YAAY,EAAE/B,UAAU,CAAC;UACvCA,UAAU,GAAGgC,SAAS;QACxB;QACA,IAAIjC,aAAa,EAAE;UACjBS,SAAS,CAACuB,GAAG,CAAC,gBAAgB,EAAEhC,aAAa,CAAC;UAC9CA,aAAa,GAAGiC,SAAS;QAC3B;MACF,CAAC,CAAC,OAAON,KAAK,EAAE;QACd;QACA;QACA,IAAI7B,eAAe,EAAE;UACnBA,eAAe,GAAGmC,SAAS;QAC7B;QACA,IAAIlC,YAAY,EAAE;UAChBA,YAAY,GAAGkC,SAAS;QAC1B;QACA,IAAIhC,UAAU,EAAE;UACdA,UAAU,GAAGgC,SAAS;QACxB;QACA,IAAIjC,aAAa,EAAE;UACjBA,aAAa,GAAGiC,SAAS;QAC3B;MACF;IACF,CAAC;IAEDtB,eAAeA,CAAA,EAAG;MAChB,IAAI,CAACc,YAAY,CAAC,CAAC;IACrB;EACF,CAAC,CAAC,CAAC;AACL","ignoreList":[]}
@@ -1,5 +1,9 @@
1
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>>;
2
+ type Properties = {
3
+ onSessionDelete(data: {
4
+ topic: string;
5
+ }): void;
6
+ };
7
+ export declare function UniversalConnector(appKitProvidedConnector: WalletConnector): import("wagmi").CreateConnectorFn<Provider, Properties, Record<string, unknown>>;
8
+ export {};
5
9
  //# sourceMappingURL=UniversalConnector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"UniversalConnector.d.ts","sourceRoot":"","sources":["../../../src/connectors/UniversalConnector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAWnF,wBAAgB,kBAAkB,CAAC,uBAAuB,EAAE,eAAe;WAO/B,OAAO;4BAmMlD"}
1
+ {"version":3,"file":"UniversalConnector.d.ts","sourceRoot":"","sources":["../../../src/connectors/UniversalConnector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAqBnF,KAAK,UAAU,GAAG;IAChB,eAAe,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAChD,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,uBAAuB,EAAE,eAAe,oFAuQ1E"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reown/appkit-wagmi-react-native",
3
- "version": "2.0.0-alpha.4",
3
+ "version": "2.0.0-alpha.5",
4
4
  "main": "lib/commonjs/index.js",
5
5
  "types": "lib/typescript/index.d.ts",
6
6
  "module": "lib/module/index.js",
@@ -31,18 +31,19 @@
31
31
  "repository": "https://github.com/reown-com/appkit-react-native",
32
32
  "author": "Reown (https://discord.gg/reown)",
33
33
  "homepage": "https://reown.com/appkit",
34
- "license": "Apache-2.0",
34
+ "license": "SEE LICENSE IN LICENSE.md",
35
35
  "bugs": {
36
36
  "url": "https://github.com/reown-com/appkit-react-native/issues"
37
37
  },
38
38
  "publishConfig": {
39
39
  "registry": "https://registry.npmjs.org/",
40
- "access": "public"
40
+ "access": "public",
41
+ "provenance": true
41
42
  },
42
43
  "dependencies": {
43
- "@reown/appkit-common-react-native": "2.0.0-alpha.4",
44
- "@reown/appkit-react-native": "2.0.0-alpha.4",
45
- "@reown/appkit-siwe-react-native": "2.0.0-alpha.4"
44
+ "@reown/appkit-common-react-native": "2.0.0-alpha.5",
45
+ "@reown/appkit-react-native": "2.0.0-alpha.5",
46
+ "@reown/appkit-siwe-react-native": "2.0.0-alpha.5"
46
47
  },
47
48
  "peerDependencies": {
48
49
  "@react-native-community/netinfo": "*",
@@ -1,52 +1,50 @@
1
1
  import type { Provider, WalletConnector } from '@reown/appkit-common-react-native';
2
+
2
3
  import {
3
4
  getAddress,
4
5
  numberToHex,
6
+ RpcError,
5
7
  SwitchChainError,
6
8
  UserRejectedRequestError,
7
9
  type Hex
8
10
  } from 'viem';
9
- import { ChainNotConfiguredError, createConnector, ProviderNotFoundError } from 'wagmi';
10
- import { formatNetwork } from '../utils/helpers';
11
+ import {
12
+ ChainNotConfiguredError,
13
+ createConnector,
14
+ ProviderNotFoundError,
15
+ type Connector
16
+ } from 'wagmi';
17
+
18
+ type UniversalConnector = Connector & {
19
+ onSessionDelete(data: { topic: string }): void;
20
+ };
21
+
22
+ type Properties = {
23
+ onSessionDelete(data: { topic: string }): void;
24
+ };
11
25
 
12
26
  export function UniversalConnector(appKitProvidedConnector: WalletConnector) {
13
27
  let provider: Provider | undefined;
14
28
 
15
- let accountsChangedHandler: ((accounts: string[]) => void) | undefined;
16
- let chainChangedHandler: ((chainId: string | number) => void) | undefined;
17
- let disconnectHandler: ((error?: Error) => void) | undefined;
18
-
19
- type AppKitConnectorProperties = { ready: boolean };
29
+ let accountsChanged: UniversalConnector['onAccountsChanged'] | undefined;
30
+ let chainChanged: UniversalConnector['onChainChanged'] | undefined;
31
+ let sessionDelete: UniversalConnector['onSessionDelete'] | undefined;
32
+ let disconnect: UniversalConnector['onDisconnect'] | undefined;
20
33
 
21
- return createConnector<Provider, AppKitConnectorProperties>(config => ({
34
+ return createConnector<Provider, Properties>(config => ({
22
35
  id: 'walletconnect',
23
36
  name: 'WalletConnect',
24
37
  type: 'walletconnect' as const,
25
38
  ready: !!appKitProvidedConnector.getProvider('eip155'),
26
39
 
27
40
  async setup() {
28
- provider = appKitProvidedConnector.getProvider('eip155');
29
- if (provider?.on) {
30
- accountsChangedHandler = (accounts: string[]) => {
31
- const hexAccounts = accounts.map(acc => getAddress(acc));
32
- config.emitter.emit('change', { accounts: hexAccounts });
33
- if (hexAccounts.length === 0) {
34
- config.emitter.emit('disconnect');
35
- }
36
- };
37
- chainChangedHandler = (chainId: string | number) => {
38
- const newChainId = typeof chainId === 'string' ? parseInt(chainId, 10) : chainId;
39
- config.emitter.emit('change', { chainId: newChainId });
40
- };
41
- disconnectHandler = (error?: Error) => {
42
- config.emitter.emit('disconnect');
43
- if (error) config.emitter.emit('error', { error });
44
- };
45
-
46
- if (accountsChangedHandler) provider.on('accountsChanged', accountsChangedHandler);
47
- if (chainChangedHandler) provider.on('chainChanged', chainChangedHandler);
48
- if (disconnectHandler) provider.on('disconnect', disconnectHandler);
49
- if (disconnectHandler) provider.on('session_delete', disconnectHandler);
41
+ const _provider = await this.getProvider().catch(() => null);
42
+ if (!_provider) {
43
+ return;
44
+ }
45
+ if (!sessionDelete) {
46
+ sessionDelete = this.onSessionDelete.bind(this);
47
+ _provider.on('session_delete', sessionDelete);
50
48
  }
51
49
  },
52
50
 
@@ -71,8 +69,22 @@ export function UniversalConnector(appKitProvidedConnector: WalletConnector) {
71
69
  await this.switchChain?.({ chainId });
72
70
  currentChainId = chainId;
73
71
  }
74
-
75
- this.ready = true;
72
+ if (!accountsChanged) {
73
+ accountsChanged = this.onAccountsChanged.bind(this);
74
+ _provider.on('accountsChanged', accountsChanged);
75
+ }
76
+ if (!chainChanged) {
77
+ chainChanged = this.onChainChanged.bind(this);
78
+ _provider.on('chainChanged', chainChanged);
79
+ }
80
+ if (!disconnect) {
81
+ disconnect = this.onDisconnect.bind(this);
82
+ _provider.on('disconnect', disconnect);
83
+ }
84
+ if (!sessionDelete) {
85
+ sessionDelete = this.onSessionDelete.bind(this);
86
+ _provider.on('session_delete', sessionDelete);
87
+ }
76
88
 
77
89
  return { accounts: accountAddresses, chainId: currentChainId };
78
90
  } catch (error) {
@@ -82,18 +94,32 @@ export function UniversalConnector(appKitProvidedConnector: WalletConnector) {
82
94
  },
83
95
 
84
96
  async disconnect() {
85
- await appKitProvidedConnector.disconnect();
86
- config.emitter.emit('message', { type: 'externalDisconnect' });
87
- if (provider?.off && accountsChangedHandler && chainChangedHandler && disconnectHandler) {
88
- provider.off('accountsChanged', accountsChangedHandler);
89
- provider.off('chainChanged', chainChangedHandler);
90
- provider.off('disconnect', disconnectHandler);
91
- provider.off('session_delete', disconnectHandler);
92
- accountsChangedHandler = undefined;
93
- chainChangedHandler = undefined;
94
- disconnectHandler = undefined;
97
+ const _provider = await this.getProvider().catch(() => null);
98
+ try {
99
+ await appKitProvidedConnector.disconnect();
100
+ config.emitter.emit('message', { type: 'externalDisconnect' });
101
+ } catch (error) {
102
+ if (!/No matching key/i.test((error as Error).message)) {
103
+ throw error;
104
+ }
105
+ } finally {
106
+ if (chainChanged) {
107
+ _provider?.off('chainChanged', chainChanged);
108
+ chainChanged = undefined;
109
+ }
110
+ if (disconnect) {
111
+ _provider?.off('disconnect', disconnect);
112
+ disconnect = undefined;
113
+ }
114
+ if (accountsChanged) {
115
+ _provider?.off('accountsChanged', accountsChanged);
116
+ accountsChanged = undefined;
117
+ }
118
+ if (sessionDelete) {
119
+ _provider?.off('session_delete', sessionDelete);
120
+ sessionDelete = undefined;
121
+ }
95
122
  }
96
- this.ready = false;
97
123
  },
98
124
 
99
125
  async getAccounts() {
@@ -139,7 +165,7 @@ export function UniversalConnector(appKitProvidedConnector: WalletConnector) {
139
165
  provider = appKitProvidedConnector.getProvider('eip155');
140
166
  }
141
167
 
142
- return provider as Provider;
168
+ return provider;
143
169
  },
144
170
 
145
171
  async isAuthorized() {
@@ -165,28 +191,27 @@ export function UniversalConnector(appKitProvidedConnector: WalletConnector) {
165
191
  params: [{ chainId: numberToHex(chainId) }]
166
192
  });
167
193
 
168
- config.emitter.emit('change', { chainId });
169
-
170
194
  return newChain;
171
- } catch (error) {
172
- // Try to add chain if switch failed (common pattern)
173
- //4902 in MetaMask: Unrecognized chain ID
195
+ } catch (err) {
196
+ const error = err as RpcError;
197
+
198
+ if (/(user rejected)/i.test(error.message)) throw new UserRejectedRequestError(error);
199
+
174
200
  if ((error as any)?.code === 4902 || (error as any)?.data?.originalError?.code === 4902) {
201
+ // Indicates chain is not added to provider
175
202
  try {
203
+ const addEthereumChainParams = {
204
+ chainId: numberToHex(chainId),
205
+ chainName: newChain.name,
206
+ nativeCurrency: newChain.nativeCurrency,
207
+ rpcUrls: [newChain.rpcUrls.default?.http[0] ?? ''],
208
+ blockExplorerUrls: [newChain.blockExplorers?.default?.url]
209
+ };
210
+
176
211
  await _provider.request({
177
212
  method: 'wallet_addEthereumChain',
178
- params: [
179
- {
180
- chainId: numberToHex(chainId),
181
- chainName: newChain.name,
182
- nativeCurrency: newChain.nativeCurrency,
183
- rpcUrls: [newChain.rpcUrls.default?.http[0] ?? ''], // Take first default HTTP RPC URL
184
- blockExplorerUrls: [newChain.blockExplorers?.default?.url]
185
- }
186
- ]
213
+ params: [addEthereumChainParams]
187
214
  });
188
- await appKitProvidedConnector.switchNetwork(formatNetwork(newChain));
189
- config.emitter.emit('change', { chainId });
190
215
 
191
216
  return newChain;
192
217
  } catch (addError) {
@@ -198,17 +223,67 @@ export function UniversalConnector(appKitProvidedConnector: WalletConnector) {
198
223
  },
199
224
 
200
225
  onAccountsChanged(accounts: string[]) {
226
+ //Only emit if the account is an evm account
227
+ const shouldEmit = accounts.some(account => account.startsWith('0x'));
228
+
201
229
  if (accounts.length === 0) this.onDisconnect();
202
- else config.emitter.emit('change', { accounts: accounts.map(x => getAddress(x)) });
230
+ else if (shouldEmit)
231
+ config.emitter.emit('change', { accounts: accounts.map(x => getAddress(x)) });
203
232
  },
204
233
 
205
234
  onChainChanged(chain: string) {
206
235
  const chainId = Number(chain);
207
- config.emitter.emit('change', { chainId });
236
+
237
+ //Only emit if the chain is in the config (evm)
238
+ const shouldEmit = config.chains.some(c => c.id === chainId);
239
+ if (shouldEmit) {
240
+ config.emitter.emit('change', { chainId });
241
+ }
208
242
  },
209
243
 
210
- onDisconnect: () => {
244
+ async onDisconnect() {
211
245
  config.emitter.emit('disconnect');
246
+
247
+ try {
248
+ const _provider = await this.getProvider();
249
+
250
+ // Clean up event listeners
251
+ if (accountsChanged) {
252
+ _provider.off('accountsChanged', accountsChanged);
253
+ accountsChanged = undefined;
254
+ }
255
+ if (chainChanged) {
256
+ _provider.off('chainChanged', chainChanged);
257
+ chainChanged = undefined;
258
+ }
259
+ if (disconnect) {
260
+ _provider.off('disconnect', disconnect);
261
+ disconnect = undefined;
262
+ }
263
+ if (sessionDelete) {
264
+ _provider.off('session_delete', sessionDelete);
265
+ sessionDelete = undefined;
266
+ }
267
+ } catch (error) {
268
+ // If provider is not available, still clean up local references
269
+ // to prevent memory leaks
270
+ if (accountsChanged) {
271
+ accountsChanged = undefined;
272
+ }
273
+ if (chainChanged) {
274
+ chainChanged = undefined;
275
+ }
276
+ if (disconnect) {
277
+ disconnect = undefined;
278
+ }
279
+ if (sessionDelete) {
280
+ sessionDelete = undefined;
281
+ }
282
+ }
283
+ },
284
+
285
+ onSessionDelete() {
286
+ this.onDisconnect();
212
287
  }
213
288
  }));
214
289
  }