@wagmi/connectors 3.1.1-cjs → 4.0.0-alpha.0

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 (73) hide show
  1. package/dist/esm/coinbaseWallet.js +141 -0
  2. package/dist/esm/coinbaseWallet.js.map +1 -0
  3. package/dist/esm/index.js +7 -0
  4. package/dist/esm/index.js.map +1 -0
  5. package/dist/esm/index.test-d.js +4 -0
  6. package/dist/esm/index.test-d.js.map +1 -0
  7. package/dist/esm/injected.js +372 -0
  8. package/dist/esm/injected.js.map +1 -0
  9. package/dist/esm/ledger.js +162 -0
  10. package/dist/esm/ledger.js.map +1 -0
  11. package/dist/esm/safe.js +88 -0
  12. package/dist/esm/safe.js.map +1 -0
  13. package/dist/esm/tsconfig.build.tsbuildinfo +1 -0
  14. package/dist/esm/version.js +2 -0
  15. package/dist/esm/version.js.map +1 -0
  16. package/dist/esm/walletConnect.js +280 -0
  17. package/dist/esm/walletConnect.js.map +1 -0
  18. package/dist/types/coinbaseWallet.d.ts +21 -0
  19. package/dist/types/coinbaseWallet.d.ts.map +1 -0
  20. package/dist/types/index.d.ts +7 -0
  21. package/dist/types/index.d.ts.map +1 -0
  22. package/dist/types/index.test-d.d.ts +2 -0
  23. package/dist/types/index.test-d.d.ts.map +1 -0
  24. package/dist/types/injected.d.ts +382 -0
  25. package/dist/types/injected.d.ts.map +1 -0
  26. package/dist/types/ledger.d.ts +18 -0
  27. package/dist/types/ledger.d.ts.map +1 -0
  28. package/dist/types/safe.d.ts +18 -0
  29. package/dist/types/safe.d.ts.map +1 -0
  30. package/dist/types/version.d.ts +2 -0
  31. package/dist/types/version.d.ts.map +1 -0
  32. package/dist/types/walletConnect.d.ts +63 -0
  33. package/dist/types/walletConnect.d.ts.map +1 -0
  34. package/package.json +44 -82
  35. package/src/coinbaseWallet.ts +207 -0
  36. package/src/index.ts +17 -0
  37. package/src/injected.ts +535 -0
  38. package/src/ledger.ts +210 -0
  39. package/src/safe.ts +114 -0
  40. package/src/version.ts +1 -0
  41. package/src/walletConnect.ts +394 -0
  42. package/README.md +0 -46
  43. package/coinbaseWallet/package.json +0 -4
  44. package/dist/base-70e3a8a9.d.ts +0 -142
  45. package/dist/chunk-2UFLHRLT.js +0 -391
  46. package/dist/chunk-OQILYQDO.js +0 -15
  47. package/dist/chunk-UGBGYVBH.js +0 -22
  48. package/dist/chunk-W65LBPLT.js +0 -58
  49. package/dist/coinbaseWallet.d.ts +0 -62
  50. package/dist/coinbaseWallet.js +0 -216
  51. package/dist/index.d.ts +0 -20
  52. package/dist/index.js +0 -16
  53. package/dist/injected.d.ts +0 -64
  54. package/dist/injected.js +0 -9
  55. package/dist/ledger.d.ts +0 -69
  56. package/dist/ledger.js +0 -261
  57. package/dist/metaMask.d.ts +0 -33
  58. package/dist/metaMask.js +0 -144
  59. package/dist/mock/index.d.ts +0 -80
  60. package/dist/mock/index.js +0 -200
  61. package/dist/safe.d.ts +0 -53
  62. package/dist/safe.js +0 -129
  63. package/dist/walletConnect.d.ts +0 -109
  64. package/dist/walletConnect.js +0 -325
  65. package/dist/walletConnectLegacy.d.ts +0 -38
  66. package/dist/walletConnectLegacy.js +0 -179
  67. package/injected/package.json +0 -4
  68. package/ledger/package.json +0 -4
  69. package/metaMask/package.json +0 -4
  70. package/mock/package.json +0 -4
  71. package/safe/package.json +0 -4
  72. package/walletConnect/package.json +0 -4
  73. package/walletConnectLegacy/package.json +0 -4
@@ -0,0 +1,141 @@
1
+ import { CoinbaseWalletSDK, } from '@coinbase/wallet-sdk';
2
+ import { ChainNotConfiguredError, createConnector, normalizeChainId, } from '@wagmi/core';
3
+ import { SwitchChainError, UserRejectedRequestError, getAddress, numberToHex, } from 'viem';
4
+ export function coinbaseWallet(parameters) {
5
+ const reloadOnDisconnect = false;
6
+ let sdk;
7
+ let provider_;
8
+ return createConnector((config) => ({
9
+ id: 'coinbaseWallet',
10
+ name: 'Coinbase Wallet',
11
+ async connect({ chainId } = {}) {
12
+ try {
13
+ const provider = await this.getProvider();
14
+ const accounts = (await provider.request({
15
+ method: 'eth_requestAccounts',
16
+ })).map(getAddress);
17
+ provider.on('accountsChanged', this.onAccountsChanged);
18
+ provider.on('chainChanged', this.onChainChanged);
19
+ provider.on('disconnect', this.onDisconnect.bind(this));
20
+ // Switch to chain if provided
21
+ let currentChainId = await this.getChainId();
22
+ if (chainId && currentChainId !== chainId) {
23
+ const chain = await this.switchChain({ chainId }).catch(() => ({
24
+ id: currentChainId,
25
+ }));
26
+ currentChainId = chain?.id ?? currentChainId;
27
+ }
28
+ return { accounts, chainId: currentChainId };
29
+ }
30
+ catch (error) {
31
+ if (/(user closed modal|accounts received is empty)/i.test(error.message))
32
+ throw new UserRejectedRequestError(error);
33
+ throw error;
34
+ }
35
+ },
36
+ async disconnect() {
37
+ const provider = await this.getProvider();
38
+ provider.removeListener('accountsChanged', this.onAccountsChanged);
39
+ provider.removeListener('chainChanged', this.onChainChanged);
40
+ provider.removeListener('disconnect', this.onDisconnect.bind(this));
41
+ provider.disconnect();
42
+ provider.close();
43
+ },
44
+ async getAccounts() {
45
+ const provider = await this.getProvider();
46
+ return (await provider.request({
47
+ method: 'eth_accounts',
48
+ })).map(getAddress);
49
+ },
50
+ async getProvider() {
51
+ if (!provider_) {
52
+ sdk = new CoinbaseWalletSDK({ reloadOnDisconnect, ...parameters });
53
+ /**
54
+ * Mock implementations to retrieve private `walletExtension` method
55
+ * from the Coinbase Wallet SDK.
56
+ */
57
+ class WalletProvider {
58
+ }
59
+ class SDK {
60
+ }
61
+ const walletExtensionChainId = sdk.walletExtension?.getChainId();
62
+ const chain = config.chains.find((chain) => parameters.chainId
63
+ ? chain.id === parameters.chainId
64
+ : chain.id === walletExtensionChainId) || config.chains[0];
65
+ const chainId = parameters.chainId || chain?.id;
66
+ const jsonRpcUrl = parameters.jsonRpcUrl || chain?.rpcUrls.default.http[0];
67
+ provider_ = sdk.makeWeb3Provider(jsonRpcUrl, chainId);
68
+ }
69
+ return provider_;
70
+ },
71
+ async getChainId() {
72
+ const provider = await this.getProvider();
73
+ return normalizeChainId(provider.chainId);
74
+ },
75
+ async isAuthorized() {
76
+ try {
77
+ const accounts = await this.getAccounts();
78
+ return !!accounts.length;
79
+ }
80
+ catch {
81
+ return false;
82
+ }
83
+ },
84
+ async switchChain({ chainId }) {
85
+ const chain = config.chains.find((chain) => chain.id === chainId);
86
+ if (!chain)
87
+ throw new SwitchChainError(new ChainNotConfiguredError());
88
+ const provider = await this.getProvider();
89
+ const chainId_ = numberToHex(chain.id);
90
+ try {
91
+ await provider.request({
92
+ method: 'wallet_switchEthereumChain',
93
+ params: [{ chainId: chainId_ }],
94
+ });
95
+ return chain;
96
+ }
97
+ catch (error) {
98
+ // Indicates chain is not added to provider
99
+ if (error.code === 4902) {
100
+ try {
101
+ await provider.request({
102
+ method: 'wallet_addEthereumChain',
103
+ params: [
104
+ {
105
+ chainId: chainId_,
106
+ chainName: chain.name,
107
+ nativeCurrency: chain.nativeCurrency,
108
+ rpcUrls: [chain.rpcUrls.public?.http[0] ?? ''],
109
+ blockExplorerUrls: [chain.blockExplorers?.default],
110
+ },
111
+ ],
112
+ });
113
+ return chain;
114
+ }
115
+ catch (error) {
116
+ throw new UserRejectedRequestError(error);
117
+ }
118
+ }
119
+ throw new SwitchChainError(error);
120
+ }
121
+ },
122
+ onAccountsChanged(accounts) {
123
+ if (accounts.length === 0)
124
+ config.emitter.emit('disconnect');
125
+ else
126
+ config.emitter.emit('change', { accounts: accounts.map(getAddress) });
127
+ },
128
+ onChainChanged(chain) {
129
+ const chainId = normalizeChainId(chain);
130
+ config.emitter.emit('change', { chainId });
131
+ },
132
+ async onDisconnect(_error) {
133
+ config.emitter.emit('disconnect');
134
+ const provider = await this.getProvider();
135
+ provider.removeListener('accountsChanged', this.onAccountsChanged);
136
+ provider.removeListener('chainChanged', this.onChainChanged);
137
+ provider.removeListener('disconnect', this.onDisconnect.bind(this));
138
+ },
139
+ }));
140
+ }
141
+ //# sourceMappingURL=coinbaseWallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coinbaseWallet.js","sourceRoot":"","sources":["../../src/coinbaseWallet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export { coinbaseWallet, } from './coinbaseWallet.js';
2
+ export { injected } from './injected.js';
3
+ export { ledger } from './ledger.js';
4
+ export { safe } from './safe.js';
5
+ export { walletConnect, } from './walletConnect.js';
6
+ export { version } from './version.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,GACf,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAA2B,QAAQ,EAAE,MAAM,eAAe,CAAA;AAEjE,OAAO,EAAyB,MAAM,EAAE,MAAM,aAAa,CAAA;AAE3D,OAAO,EAAuB,IAAI,EAAE,MAAM,WAAW,CAAA;AAErD,OAAO,EAEL,aAAa,GACd,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { expectTypeOf } from 'vitest';
2
+ // noop test because vitest typecheck fails unless each workspace project has type test
3
+ expectTypeOf(1).toEqualTypeOf();
4
+ //# sourceMappingURL=index.test-d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test-d.js","sourceRoot":"","sources":["../../src/index.test-d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAErC,uFAAuF;AACvF,YAAY,CAAC,CAAC,CAAC,CAAC,aAAa,EAAU,CAAA"}
@@ -0,0 +1,372 @@
1
+ import { ChainNotConfiguredError, ProviderNotFoundError, createConnector, normalizeChainId, } from '@wagmi/core';
2
+ import { ProviderRpcError, ResourceUnavailableRpcError, RpcError, SwitchChainError, UserRejectedRequestError, getAddress, numberToHex, } from 'viem';
3
+ const targetMap = {
4
+ coinbaseWallet: {
5
+ name: 'Coinbase Wallet',
6
+ provider(window) {
7
+ if (window?.coinbaseWalletExtension)
8
+ return window.coinbaseWalletExtension;
9
+ return findProvider(window, 'isCoinbaseWallet');
10
+ },
11
+ },
12
+ metaMask: {
13
+ name: 'MetaMask',
14
+ provider(window) {
15
+ return findProvider(window, (windowProvider) => {
16
+ if (!windowProvider.isMetaMask)
17
+ return false;
18
+ // Brave tries to make itself look like MetaMask
19
+ // Could also try RPC `web3_clientVersion` if following is unreliable
20
+ if (windowProvider.isBraveWallet &&
21
+ !windowProvider._events &&
22
+ !windowProvider._state)
23
+ return false;
24
+ // Other wallets that try to look like MetaMask
25
+ const flags = [
26
+ 'isApexWallet',
27
+ 'isAvalanche',
28
+ 'isBitKeep',
29
+ 'isBlockWallet',
30
+ 'isKuCoinWallet',
31
+ 'isMathWallet',
32
+ 'isOkxWallet',
33
+ 'isOKExWallet',
34
+ 'isOneInchIOSWallet',
35
+ 'isOneInchAndroidWallet',
36
+ 'isOpera',
37
+ 'isPortal',
38
+ 'isRabby',
39
+ 'isTokenPocket',
40
+ 'isTokenary',
41
+ 'isZerion',
42
+ ];
43
+ for (const flag of flags)
44
+ if (windowProvider[flag])
45
+ return false;
46
+ return true;
47
+ });
48
+ },
49
+ features: ['wallet_requestPermissions'],
50
+ },
51
+ phantom: {
52
+ name: 'Phantom',
53
+ provider(window) {
54
+ if (window?.phantom?.ethereum)
55
+ return window.phantom?.ethereum;
56
+ return findProvider(window, 'isPhantom');
57
+ },
58
+ },
59
+ };
60
+ export function injected(parameters = {}) {
61
+ const shimDisconnect = parameters.shimDisconnect ?? true;
62
+ const unstable_shimAsyncInject = parameters.unstable_shimAsyncInject;
63
+ function getWindowProvider() {
64
+ const target = parameters.target;
65
+ if (typeof target === 'function') {
66
+ const result = target();
67
+ if (result)
68
+ return result;
69
+ }
70
+ if (typeof target === 'string')
71
+ return {
72
+ ...(targetMap[target] ?? {
73
+ name: `${target[0].toUpperCase()}${target.slice(1)}`,
74
+ provider: `is${target[0].toUpperCase()}${target.slice(1)}`,
75
+ }),
76
+ id: target,
77
+ };
78
+ return {
79
+ id: 'injected',
80
+ name: 'Injected',
81
+ provider(window) {
82
+ return window?.ethereum;
83
+ },
84
+ };
85
+ }
86
+ return createConnector((config) => ({
87
+ get id() {
88
+ return getWindowProvider().id;
89
+ },
90
+ get name() {
91
+ return getWindowProvider().name;
92
+ },
93
+ async setup() {
94
+ const provider = await this.getProvider();
95
+ // Only start listening for events if `target` is set, otherwise `injected()` will also receive events
96
+ if (provider && parameters.target) {
97
+ provider.on('accountsChanged', this.onAccountsChanged.bind(this));
98
+ provider.on('connect', this.onConnect.bind(this));
99
+ }
100
+ },
101
+ async connect({ chainId } = {}) {
102
+ const provider = await this.getProvider();
103
+ if (!provider)
104
+ throw new ProviderNotFoundError();
105
+ try {
106
+ // Attempt to show select prompt with `wallet_requestPermissions` when
107
+ // `shimDisconnect` is active and account is in disconnected state (flag in storage)
108
+ const canSelectAccount = getWindowProvider().features?.includes('wallet_requestPermissions');
109
+ const isDisconnected = shimDisconnect &&
110
+ !(await config.storage?.getItem(`${this.id}.connected`));
111
+ let accounts = null;
112
+ if (canSelectAccount && isDisconnected) {
113
+ accounts = await this.getAccounts().catch(() => null);
114
+ const isAuthorized = !!accounts?.length;
115
+ if (isAuthorized)
116
+ // Attempt to show another prompt for selecting connector if already connected
117
+ try {
118
+ const permissions = await provider.request({
119
+ method: 'wallet_requestPermissions',
120
+ params: [{ eth_accounts: {} }],
121
+ });
122
+ accounts = permissions[0]?.caveats?.[0]?.value?.map(getAddress);
123
+ }
124
+ catch (error) {
125
+ // Not all injected providers support `wallet_requestPermissions` (e.g. MetaMask iOS).
126
+ // Only bubble up error if user rejects request
127
+ if (error.code === 4001)
128
+ throw new UserRejectedRequestError(error);
129
+ // Or prompt is already open
130
+ if (error.code ===
131
+ new ResourceUnavailableRpcError(error).code)
132
+ throw error;
133
+ }
134
+ }
135
+ if (!accounts?.length) {
136
+ const accounts_ = await provider.request({
137
+ method: 'eth_requestAccounts',
138
+ });
139
+ accounts = accounts_.map(getAddress);
140
+ }
141
+ provider.removeListener('connect', this.onConnect.bind(this));
142
+ provider.on('accountsChanged', this.onAccountsChanged.bind(this));
143
+ provider.on('chainChanged', this.onChainChanged);
144
+ provider.on('disconnect', this.onDisconnect.bind(this));
145
+ // Switch to chain if provided
146
+ let currentChainId = await this.getChainId();
147
+ if (chainId && currentChainId !== chainId) {
148
+ const chain = await this.switchChain?.({ chainId }).catch(() => ({
149
+ id: currentChainId,
150
+ }));
151
+ currentChainId = chain?.id ?? currentChainId;
152
+ }
153
+ // Add shim to storage signalling connector is connected
154
+ if (shimDisconnect)
155
+ await config.storage?.setItem(`${this.id}.connected`, true);
156
+ return { accounts, chainId: currentChainId };
157
+ }
158
+ catch (error) {
159
+ if (error.code === 4001)
160
+ throw new UserRejectedRequestError(error);
161
+ if (error.code === -32002)
162
+ throw new ResourceUnavailableRpcError(error);
163
+ throw error;
164
+ }
165
+ },
166
+ async disconnect() {
167
+ const provider = await this.getProvider();
168
+ if (!provider)
169
+ throw new ProviderNotFoundError();
170
+ provider.removeListener('accountsChanged', this.onAccountsChanged.bind(this));
171
+ provider.removeListener('chainChanged', this.onChainChanged);
172
+ provider.removeListener('disconnect', this.onDisconnect.bind(this));
173
+ provider.on('connect', this.onConnect.bind(this));
174
+ // Remove shim signalling connector is disconnected
175
+ if (shimDisconnect)
176
+ await config.storage?.removeItem(`${this.id}.connected`);
177
+ },
178
+ async getAccounts() {
179
+ const provider = await this.getProvider();
180
+ if (!provider)
181
+ throw new ProviderNotFoundError();
182
+ const accounts = await provider.request({ method: 'eth_accounts' });
183
+ return accounts.map(getAddress);
184
+ },
185
+ async getChainId() {
186
+ const provider = await this.getProvider();
187
+ if (!provider)
188
+ throw new ProviderNotFoundError();
189
+ const hexChainId = await provider.request({ method: 'eth_chainId' });
190
+ return normalizeChainId(hexChainId);
191
+ },
192
+ async getProvider() {
193
+ if (typeof window === 'undefined')
194
+ return undefined;
195
+ const windowProvider = getWindowProvider();
196
+ if (typeof windowProvider.provider === 'function')
197
+ return windowProvider.provider(window);
198
+ return findProvider(window, () => true);
199
+ },
200
+ async isAuthorized() {
201
+ try {
202
+ const isDisconnected = shimDisconnect &&
203
+ // If shim does not exist in storage, connector is disconnected
204
+ !(await config.storage?.getItem(`${this.id}.connected`));
205
+ if (isDisconnected)
206
+ return false;
207
+ const provider = await this.getProvider();
208
+ if (!provider) {
209
+ if (unstable_shimAsyncInject !== undefined &&
210
+ unstable_shimAsyncInject !== false) {
211
+ // If no provider is found, check for async injection
212
+ // https://github.com/wagmi-dev/references/issues/167
213
+ // https://github.com/MetaMask/detect-provider
214
+ const handleEthereum = async () => {
215
+ if (typeof window !== 'undefined')
216
+ window.removeEventListener('ethereum#initialized', handleEthereum);
217
+ const provider = await this.getProvider();
218
+ return !!provider;
219
+ };
220
+ const timeout = typeof unstable_shimAsyncInject === 'number'
221
+ ? unstable_shimAsyncInject
222
+ : 1000;
223
+ const res = await Promise.race([
224
+ ...(typeof window !== 'undefined'
225
+ ? [
226
+ new Promise((resolve) => window.addEventListener('ethereum#initialized', () => resolve(handleEthereum()), { once: true })),
227
+ ]
228
+ : []),
229
+ new Promise((resolve) => setTimeout(() => resolve(handleEthereum()), timeout)),
230
+ ]);
231
+ if (res)
232
+ return true;
233
+ }
234
+ throw new ProviderNotFoundError();
235
+ }
236
+ const accounts = await this.getAccounts();
237
+ return !!accounts.length;
238
+ }
239
+ catch {
240
+ return false;
241
+ }
242
+ },
243
+ async switchChain({ chainId }) {
244
+ const provider = await this.getProvider();
245
+ if (!provider)
246
+ throw new ProviderNotFoundError();
247
+ const chain = config.chains.find((x) => x.id === chainId);
248
+ if (!chain)
249
+ throw new SwitchChainError(new ChainNotConfiguredError());
250
+ const id = numberToHex(chainId);
251
+ try {
252
+ await Promise.all([
253
+ provider.request({
254
+ method: 'wallet_switchEthereumChain',
255
+ params: [{ chainId: id }],
256
+ }),
257
+ new Promise((resolve) => config.emitter.once('change', ({ chainId: currentChainId }) => {
258
+ if (currentChainId === chainId)
259
+ resolve();
260
+ })),
261
+ ]);
262
+ return chain;
263
+ }
264
+ catch (error) {
265
+ // Indicates chain is not added to provider
266
+ if (error.code === 4902 ||
267
+ // Unwrapping for MetaMask Mobile
268
+ // https://github.com/MetaMask/metamask-mobile/issues/2944#issuecomment-976988719
269
+ error
270
+ ?.data?.originalError?.code === 4902) {
271
+ try {
272
+ const { default: blockExplorer, ...blockExplorers } = chain.blockExplorers ?? {};
273
+ let blockExplorerUrls = [];
274
+ if (blockExplorer)
275
+ blockExplorerUrls = [
276
+ blockExplorer.url,
277
+ ...Object.values(blockExplorers).map((x) => x.url),
278
+ ];
279
+ await provider.request({
280
+ method: 'wallet_addEthereumChain',
281
+ params: [
282
+ {
283
+ chainId: id,
284
+ chainName: chain.name,
285
+ nativeCurrency: chain.nativeCurrency,
286
+ rpcUrls: [chain.rpcUrls.public?.http[0] ?? ''],
287
+ blockExplorerUrls,
288
+ },
289
+ ],
290
+ });
291
+ const currentChainId = await this.getChainId();
292
+ if (currentChainId !== chainId)
293
+ throw new UserRejectedRequestError(new Error('User rejected switch after adding network.'));
294
+ return chain;
295
+ }
296
+ catch (error) {
297
+ throw new UserRejectedRequestError(error);
298
+ }
299
+ }
300
+ if (error.code === 4001)
301
+ throw new UserRejectedRequestError(error);
302
+ throw new SwitchChainError(error);
303
+ }
304
+ },
305
+ async onAccountsChanged(accounts) {
306
+ // Disconnect if there are no accounts
307
+ if (accounts.length === 0)
308
+ this.onDisconnect();
309
+ // Connect if emitter is listening for connect event (e.g. is disconnected)
310
+ else if (config.emitter.listenerCount('connect')) {
311
+ const chainId = (await this.getChainId()).toString();
312
+ this.onConnect({ chainId });
313
+ }
314
+ // Regular change event
315
+ else
316
+ config.emitter.emit('change', { accounts: accounts.map(getAddress) });
317
+ },
318
+ onChainChanged(chain) {
319
+ const chainId = normalizeChainId(chain);
320
+ config.emitter.emit('change', { chainId });
321
+ },
322
+ async onConnect(connectInfo) {
323
+ const accounts = await this.getAccounts();
324
+ if (accounts.length === 0)
325
+ return;
326
+ const chainId = normalizeChainId(connectInfo.chainId);
327
+ config.emitter.emit('connect', { accounts, chainId });
328
+ const provider = await this.getProvider();
329
+ if (provider) {
330
+ provider.removeListener('connect', this.onConnect.bind(this));
331
+ provider.on('accountsChanged', this.onAccountsChanged.bind(this));
332
+ provider.on('chainChanged', this.onChainChanged);
333
+ provider.on('disconnect', this.onDisconnect.bind(this));
334
+ }
335
+ // Add shim to storage signalling connector is connected
336
+ if (shimDisconnect)
337
+ await config.storage?.setItem(`${this.id}.connected`, true);
338
+ },
339
+ async onDisconnect(error) {
340
+ const provider = await this.getProvider();
341
+ // If MetaMask emits a `code: 1013` error, wait for reconnection before disconnecting
342
+ // https://github.com/MetaMask/providers/pull/120
343
+ if (error && error.code === 1013) {
344
+ if (provider && !!(await this.getAccounts()).length)
345
+ return;
346
+ }
347
+ // No need to remove `shimDisconnectStorageKey` from storage because `onDisconnect` is typically
348
+ // only called when the wallet is disconnected through the wallet's interface, meaning the wallet
349
+ // actually disconnected and we don't need to simulate it.
350
+ config.emitter.emit('disconnect');
351
+ if (provider) {
352
+ provider.removeListener('accountsChanged', this.onAccountsChanged.bind(this));
353
+ provider.removeListener('chainChanged', this.onChainChanged);
354
+ provider.removeListener('disconnect', this.onDisconnect.bind(this));
355
+ provider.on('connect', this.onConnect.bind(this));
356
+ }
357
+ },
358
+ }));
359
+ }
360
+ function findProvider(window, condition) {
361
+ function isProvider(provider) {
362
+ if (typeof condition === 'function')
363
+ return condition(provider);
364
+ return provider[condition];
365
+ }
366
+ if (window?.ethereum?.providers)
367
+ return window.ethereum.providers.find((provider) => isProvider(provider));
368
+ if (window?.ethereum && isProvider(window.ethereum))
369
+ return window.ethereum;
370
+ return undefined;
371
+ }
372
+ //# sourceMappingURL=injected.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"injected.js","sourceRoot":"","sources":["../../src/injected.ts"],"names":[],"mappings":"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"}