@dynamic-labs/starknet 1.4.13 → 1.4.14

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.
package/CHANGELOG.md CHANGED
@@ -1,6 +1,11 @@
1
1
 
2
+ ### [1.4.14](https://github.com/dynamic-labs/DynamicAuth/compare/v1.4.13...v1.4.14) (2024-07-11)
3
+
2
4
  ### [1.4.13](https://github.com/dynamic-labs/DynamicAuth/compare/v1.4.12...v1.4.13) (2024-06-05)
3
5
 
6
+ ### Features
7
+
8
+ * add the Starknet MetaMask snap to the available wallets
4
9
 
5
10
  ### Bug Fixes
6
11
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamic-labs/starknet",
3
- "version": "1.4.13",
3
+ "version": "1.4.14",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/dynamic-labs/DynamicAuth.git",
@@ -31,11 +31,12 @@
31
31
  "text-encoding": "0.7.0",
32
32
  "starknetkit": "1.1.3",
33
33
  "@dynamic-labs/sdk-api": "0.0.387",
34
- "@dynamic-labs/rpc-providers": "1.4.13",
35
- "@dynamic-labs/types": "1.4.13",
36
- "@dynamic-labs/utils": "1.4.13",
37
- "@dynamic-labs/wallet-book": "1.4.13",
38
- "@dynamic-labs/wallet-connector-core": "1.4.13"
34
+ "@module-federation/runtime": "0.1.19",
35
+ "@dynamic-labs/rpc-providers": "1.4.14",
36
+ "@dynamic-labs/types": "1.4.14",
37
+ "@dynamic-labs/utils": "1.4.14",
38
+ "@dynamic-labs/wallet-book": "1.4.14",
39
+ "@dynamic-labs/wallet-connector-core": "1.4.14"
39
40
  },
40
41
  "peerDependencies": {}
41
42
  }
package/src/index.cjs CHANGED
@@ -8,6 +8,7 @@ var argentxMobile = require('./wallets/argentxMobile.cjs');
8
8
  var argentxWeb = require('./wallets/argentxWeb.cjs');
9
9
  var bitget = require('./wallets/bitget.cjs');
10
10
  var okx = require('./wallets/okx.cjs');
11
+ var metamask = require('./wallets/metamask.cjs');
11
12
 
12
13
  /* eslint-disable @typescript-eslint/no-unused-vars */
13
14
  const StarknetWalletConnectors = (props) => [
@@ -17,6 +18,7 @@ const StarknetWalletConnectors = (props) => [
17
18
  argentxWeb.ArgentXWeb,
18
19
  okx.Okx,
19
20
  bitget.Bitget,
21
+ metamask.MetaMask,
20
22
  ];
21
23
 
22
24
  exports.StarknetWalletConnectors = StarknetWalletConnectors;
package/src/index.js CHANGED
@@ -4,6 +4,7 @@ import { ArgentXMobile } from './wallets/argentxMobile.js';
4
4
  import { ArgentXWeb } from './wallets/argentxWeb.js';
5
5
  import { Bitget } from './wallets/bitget.js';
6
6
  import { Okx } from './wallets/okx.js';
7
+ import { MetaMask } from './wallets/metamask.js';
7
8
 
8
9
  /* eslint-disable @typescript-eslint/no-unused-vars */
9
10
  const StarknetWalletConnectors = (props) => [
@@ -13,6 +14,7 @@ const StarknetWalletConnectors = (props) => [
13
14
  ArgentXWeb,
14
15
  Okx,
15
16
  Bitget,
17
+ MetaMask,
16
18
  ];
17
19
 
18
20
  export { StarknetWalletConnectors };
@@ -22,6 +22,8 @@ class StarknetWalletConnector extends walletConnectorCore.WalletConnectorBase {
22
22
  this.connectedChain = 'STARK';
23
23
  this.supportedChains = ['STARK'];
24
24
  this.switchNetworkOnlyFromWallet = true;
25
+ // required for metamask snap integration as MM snaps don't have event listeners
26
+ this.canSetEventListeners = true;
25
27
  this.name = name;
26
28
  this.windowKey = windowKey;
27
29
  this.starknetNetworks = opts.starknetNetworks;
@@ -201,6 +203,24 @@ class StarknetWalletConnector extends walletConnectorCore.WalletConnectorBase {
201
203
  if (!wallet) {
202
204
  return [];
203
205
  }
206
+ try {
207
+ yield this.reconnectIfNeeded(wallet);
208
+ }
209
+ catch (e) {
210
+ return [];
211
+ }
212
+ const getSelectedAddress = () => wallet.selectedAddress
213
+ ? Promise.resolve([wallet.selectedAddress])
214
+ : Promise.reject();
215
+ return utils.retryableFn(getSelectedAddress, {
216
+ fallbackValue: [],
217
+ retryIntervalMs: 100,
218
+ retryStrategy: 'timeout-and-rejection',
219
+ });
220
+ });
221
+ }
222
+ reconnectIfNeeded(wallet) {
223
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
204
224
  const needsReconnection = !this.isProviderConnected() && (yield wallet.isPreauthorized());
205
225
  if (needsReconnection) {
206
226
  /**
@@ -218,24 +238,18 @@ class StarknetWalletConnector extends walletConnectorCore.WalletConnectorBase {
218
238
  }
219
239
  catch (_a) {
220
240
  localStorage.removeItem('dynamic_should_have_wallet');
221
- return [];
241
+ throw new Error('Could not reconnect');
222
242
  }
223
243
  }
224
244
  else {
225
245
  yield this.connect();
226
246
  }
227
247
  }
228
- const getSelectedAddress = () => wallet.selectedAddress
229
- ? Promise.resolve([wallet.selectedAddress])
230
- : Promise.reject();
231
- return utils.retryableFn(getSelectedAddress, {
232
- fallbackValue: [],
233
- retryIntervalMs: 100,
234
- retryStrategy: 'timeout-and-rejection',
235
- });
236
248
  });
237
249
  }
238
250
  setupEventListeners() {
251
+ if (!this.canSetEventListeners)
252
+ return;
239
253
  const wallet = this.getWallet();
240
254
  if (!wallet) {
241
255
  return walletConnectorCore.logger.error('Wallet has not been found');
@@ -264,6 +278,8 @@ class StarknetWalletConnector extends walletConnectorCore.WalletConnectorBase {
264
278
  }
265
279
  teardownEventListeners() {
266
280
  return _tslib.__awaiter(this, void 0, void 0, function* () {
281
+ if (!this.canSetEventListeners)
282
+ return;
267
283
  const wallet = this.getWallet();
268
284
  if (this.handleAccountChange) {
269
285
  wallet === null || wallet === void 0 ? void 0 : wallet.off(ACCOUNT_CHANGED_EVENT_LISTENER, this.handleAccountChange);
@@ -24,6 +24,7 @@ declare abstract class StarknetWalletConnector extends WalletConnectorBase {
24
24
  handleNetworkChange: NetworkChangeEventHandler | undefined;
25
25
  switchNetworkOnlyFromWallet: boolean;
26
26
  starknetNetworks: NetworkConfiguration[];
27
+ canSetEventListeners: boolean;
27
28
  constructor(name: string, windowKey: StarknetWalletKey, opts: {
28
29
  chainRpcProviders: typeof ChainRpcProviders;
29
30
  starknetNetworks: NetworkConfiguration[];
@@ -100,6 +101,7 @@ declare abstract class StarknetWalletConnector extends WalletConnectorBase {
100
101
  getWallet(): StarknetWindowObject | undefined;
101
102
  isInstalledOnBrowser(): boolean;
102
103
  getConnectedAccounts(): Promise<string[]>;
104
+ reconnectIfNeeded(wallet: StarknetWindowObject): Promise<Promise<Promise<void>>>;
103
105
  setupEventListeners(): void;
104
106
  teardownEventListeners(): Promise<void>;
105
107
  mapNetworkNameToChainId(networkNameOrChainId: string): constants.StarknetChainId | undefined;
@@ -18,6 +18,8 @@ class StarknetWalletConnector extends WalletConnectorBase {
18
18
  this.connectedChain = 'STARK';
19
19
  this.supportedChains = ['STARK'];
20
20
  this.switchNetworkOnlyFromWallet = true;
21
+ // required for metamask snap integration as MM snaps don't have event listeners
22
+ this.canSetEventListeners = true;
21
23
  this.name = name;
22
24
  this.windowKey = windowKey;
23
25
  this.starknetNetworks = opts.starknetNetworks;
@@ -197,6 +199,24 @@ class StarknetWalletConnector extends WalletConnectorBase {
197
199
  if (!wallet) {
198
200
  return [];
199
201
  }
202
+ try {
203
+ yield this.reconnectIfNeeded(wallet);
204
+ }
205
+ catch (e) {
206
+ return [];
207
+ }
208
+ const getSelectedAddress = () => wallet.selectedAddress
209
+ ? Promise.resolve([wallet.selectedAddress])
210
+ : Promise.reject();
211
+ return retryableFn(getSelectedAddress, {
212
+ fallbackValue: [],
213
+ retryIntervalMs: 100,
214
+ retryStrategy: 'timeout-and-rejection',
215
+ });
216
+ });
217
+ }
218
+ reconnectIfNeeded(wallet) {
219
+ return __awaiter(this, void 0, void 0, function* () {
200
220
  const needsReconnection = !this.isProviderConnected() && (yield wallet.isPreauthorized());
201
221
  if (needsReconnection) {
202
222
  /**
@@ -214,24 +234,18 @@ class StarknetWalletConnector extends WalletConnectorBase {
214
234
  }
215
235
  catch (_a) {
216
236
  localStorage.removeItem('dynamic_should_have_wallet');
217
- return [];
237
+ throw new Error('Could not reconnect');
218
238
  }
219
239
  }
220
240
  else {
221
241
  yield this.connect();
222
242
  }
223
243
  }
224
- const getSelectedAddress = () => wallet.selectedAddress
225
- ? Promise.resolve([wallet.selectedAddress])
226
- : Promise.reject();
227
- return retryableFn(getSelectedAddress, {
228
- fallbackValue: [],
229
- retryIntervalMs: 100,
230
- retryStrategy: 'timeout-and-rejection',
231
- });
232
244
  });
233
245
  }
234
246
  setupEventListeners() {
247
+ if (!this.canSetEventListeners)
248
+ return;
235
249
  const wallet = this.getWallet();
236
250
  if (!wallet) {
237
251
  return logger.error('Wallet has not been found');
@@ -260,6 +274,8 @@ class StarknetWalletConnector extends WalletConnectorBase {
260
274
  }
261
275
  teardownEventListeners() {
262
276
  return __awaiter(this, void 0, void 0, function* () {
277
+ if (!this.canSetEventListeners)
278
+ return;
263
279
  const wallet = this.getWallet();
264
280
  if (this.handleAccountChange) {
265
281
  wallet === null || wallet === void 0 ? void 0 : wallet.off(ACCOUNT_CHANGED_EVENT_LISTENER, this.handleAccountChange);
package/src/types.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { StarknetWindowObject } from 'get-starknet-core';
2
- export type StarknetWalletKey = 'braavos' | 'argentX' | 'argentXMobile' | 'argentWebWallet' | 'okxwallet' | 'bitkeep';
2
+ export type StarknetWalletKey = 'braavos' | 'argentX' | 'argentXMobile' | 'argentWebWallet' | 'okxwallet' | 'bitkeep' | 'metamask_snap';
3
3
  export type StarknetWindowKey = `starknet_${StarknetWalletKey}` | 'starknet';
4
4
  type StarknetWindow = {
5
5
  [key in StarknetWindowKey]: StarknetWindowObject;
@@ -0,0 +1,100 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _tslib = require('../../_virtual/_tslib.cjs');
6
+ var moduleFederation = require('@module-federation/runtime/dist/index.cjs.js');
7
+
8
+ function _interopNamespace(e) {
9
+ if (e && e.__esModule) return e;
10
+ var n = Object.create(null);
11
+ if (e) {
12
+ Object.keys(e).forEach(function (k) {
13
+ if (k !== 'default') {
14
+ var d = Object.getOwnPropertyDescriptor(e, k);
15
+ Object.defineProperty(n, k, d.get ? d : {
16
+ enumerable: true,
17
+ get: function () { return e[k]; }
18
+ });
19
+ }
20
+ });
21
+ }
22
+ n["default"] = e;
23
+ return Object.freeze(n);
24
+ }
25
+
26
+ var moduleFederation__namespace = /*#__PURE__*/_interopNamespace(moduleFederation);
27
+
28
+ let metaMaskSnapWallet;
29
+ /**
30
+ *
31
+ * @param {IEthereum} provider the metamask window provider object
32
+ * @returns {StarknetWindowObject} the metamask provider wrapper formed into starknet window object
33
+ */
34
+ const createMetaMaskProviderWrapper = (provider) => {
35
+ const metaMaskProviderWrapper = {
36
+ get account() {
37
+ return metaMaskSnapWallet === null || metaMaskSnapWallet === void 0 ? void 0 : metaMaskSnapWallet.account;
38
+ },
39
+ get chainId() {
40
+ return metaMaskSnapWallet === null || metaMaskSnapWallet === void 0 ? void 0 : metaMaskSnapWallet.chainId;
41
+ },
42
+ enable: () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
43
+ if (!metaMaskSnapWallet) {
44
+ yield moduleFederation__namespace.init({
45
+ name: 'MetaMaskStarknetSnapWallet',
46
+ remotes: [
47
+ {
48
+ alias: 'MetaMaskStarknetSnapWallet',
49
+ entry: 'https://snaps.consensys.io/starknet/get-starknet/v1/remoteEntry.js',
50
+ name: 'MetaMaskStarknetSnapWallet',
51
+ },
52
+ ],
53
+ });
54
+ const result = yield moduleFederation__namespace.loadRemote('MetaMaskStarknetSnapWallet/index');
55
+ const { MetaMaskSnapWallet } = result;
56
+ metaMaskSnapWallet = new MetaMaskSnapWallet(provider, '*');
57
+ }
58
+ if (!metaMaskSnapWallet) {
59
+ return [];
60
+ }
61
+ return metaMaskSnapWallet.enable();
62
+ }),
63
+ icon: '',
64
+ id: 'MetaMaskStarknetSnapWallet',
65
+ get isConnected() {
66
+ return metaMaskSnapWallet === null || metaMaskSnapWallet === void 0 ? void 0 : metaMaskSnapWallet.isConnected;
67
+ },
68
+ isPreauthorized: () => { var _a; return (_a = metaMaskSnapWallet === null || metaMaskSnapWallet === void 0 ? void 0 : metaMaskSnapWallet.isPreauthorized()) !== null && _a !== void 0 ? _a : Promise.resolve(false); },
69
+ name: 'MetaMaskStarknetSnapWallet',
70
+ off: (
71
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
72
+ event,
73
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
74
+ handleEvent) => undefined,
75
+ on: (
76
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
77
+ event,
78
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
79
+ handleEvent) => undefined,
80
+ get provider() {
81
+ return metaMaskSnapWallet === null || metaMaskSnapWallet === void 0 ? void 0 : metaMaskSnapWallet.provider;
82
+ },
83
+ request: (call) => {
84
+ if (!metaMaskSnapWallet) {
85
+ throw new Error('Wallet not enabled');
86
+ }
87
+ return metaMaskSnapWallet.request(call);
88
+ },
89
+ get selectedAddress() {
90
+ return metaMaskSnapWallet === null || metaMaskSnapWallet === void 0 ? void 0 : metaMaskSnapWallet.selectedAddress;
91
+ },
92
+ get version() {
93
+ var _a;
94
+ return (_a = metaMaskSnapWallet === null || metaMaskSnapWallet === void 0 ? void 0 : metaMaskSnapWallet.version) !== null && _a !== void 0 ? _a : '0.0.0';
95
+ },
96
+ };
97
+ return metaMaskProviderWrapper;
98
+ };
99
+
100
+ exports.createMetaMaskProviderWrapper = createMetaMaskProviderWrapper;
@@ -0,0 +1,8 @@
1
+ import { StarknetWindowObject } from 'get-starknet-core';
2
+ import { IEthereum } from '@dynamic-labs/utils';
3
+ /**
4
+ *
5
+ * @param {IEthereum} provider the metamask window provider object
6
+ * @returns {StarknetWindowObject} the metamask provider wrapper formed into starknet window object
7
+ */
8
+ export declare const createMetaMaskProviderWrapper: (provider: IEthereum) => StarknetWindowObject;
@@ -0,0 +1,76 @@
1
+ import { __awaiter } from '../../_virtual/_tslib.js';
2
+ import * as moduleFederation from '@module-federation/runtime/dist/index.cjs.js';
3
+
4
+ let metaMaskSnapWallet;
5
+ /**
6
+ *
7
+ * @param {IEthereum} provider the metamask window provider object
8
+ * @returns {StarknetWindowObject} the metamask provider wrapper formed into starknet window object
9
+ */
10
+ const createMetaMaskProviderWrapper = (provider) => {
11
+ const metaMaskProviderWrapper = {
12
+ get account() {
13
+ return metaMaskSnapWallet === null || metaMaskSnapWallet === void 0 ? void 0 : metaMaskSnapWallet.account;
14
+ },
15
+ get chainId() {
16
+ return metaMaskSnapWallet === null || metaMaskSnapWallet === void 0 ? void 0 : metaMaskSnapWallet.chainId;
17
+ },
18
+ enable: () => __awaiter(void 0, void 0, void 0, function* () {
19
+ if (!metaMaskSnapWallet) {
20
+ yield moduleFederation.init({
21
+ name: 'MetaMaskStarknetSnapWallet',
22
+ remotes: [
23
+ {
24
+ alias: 'MetaMaskStarknetSnapWallet',
25
+ entry: 'https://snaps.consensys.io/starknet/get-starknet/v1/remoteEntry.js',
26
+ name: 'MetaMaskStarknetSnapWallet',
27
+ },
28
+ ],
29
+ });
30
+ const result = yield moduleFederation.loadRemote('MetaMaskStarknetSnapWallet/index');
31
+ const { MetaMaskSnapWallet } = result;
32
+ metaMaskSnapWallet = new MetaMaskSnapWallet(provider, '*');
33
+ }
34
+ if (!metaMaskSnapWallet) {
35
+ return [];
36
+ }
37
+ return metaMaskSnapWallet.enable();
38
+ }),
39
+ icon: '',
40
+ id: 'MetaMaskStarknetSnapWallet',
41
+ get isConnected() {
42
+ return metaMaskSnapWallet === null || metaMaskSnapWallet === void 0 ? void 0 : metaMaskSnapWallet.isConnected;
43
+ },
44
+ isPreauthorized: () => { var _a; return (_a = metaMaskSnapWallet === null || metaMaskSnapWallet === void 0 ? void 0 : metaMaskSnapWallet.isPreauthorized()) !== null && _a !== void 0 ? _a : Promise.resolve(false); },
45
+ name: 'MetaMaskStarknetSnapWallet',
46
+ off: (
47
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
48
+ event,
49
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
50
+ handleEvent) => undefined,
51
+ on: (
52
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
53
+ event,
54
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
55
+ handleEvent) => undefined,
56
+ get provider() {
57
+ return metaMaskSnapWallet === null || metaMaskSnapWallet === void 0 ? void 0 : metaMaskSnapWallet.provider;
58
+ },
59
+ request: (call) => {
60
+ if (!metaMaskSnapWallet) {
61
+ throw new Error('Wallet not enabled');
62
+ }
63
+ return metaMaskSnapWallet.request(call);
64
+ },
65
+ get selectedAddress() {
66
+ return metaMaskSnapWallet === null || metaMaskSnapWallet === void 0 ? void 0 : metaMaskSnapWallet.selectedAddress;
67
+ },
68
+ get version() {
69
+ var _a;
70
+ return (_a = metaMaskSnapWallet === null || metaMaskSnapWallet === void 0 ? void 0 : metaMaskSnapWallet.version) !== null && _a !== void 0 ? _a : '0.0.0';
71
+ },
72
+ };
73
+ return metaMaskProviderWrapper;
74
+ };
75
+
76
+ export { createMetaMaskProviderWrapper };
@@ -0,0 +1,48 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var _tslib = require('../../_virtual/_tslib.cjs');
6
+ var utils = require('@dynamic-labs/utils');
7
+ var starknetWalletConnector = require('../starknetWalletConnector.cjs');
8
+ var starknetSnap = require('../utils/starknetSnap.cjs');
9
+
10
+ class MetaMask extends starknetWalletConnector["default"] {
11
+ constructor(opts) {
12
+ super('MetaMask Starknet', 'metamask_snap', opts);
13
+ this.overrideKey = 'metamaskstarknet';
14
+ this.canSetEventListeners = false;
15
+ if (!window.starknet_metamask_snap) {
16
+ const { providers } = utils.Eip6963ProviderSingleton.get();
17
+ const metamaskProvider = providers.find((p) => ['io.metamask', 'io.metamask.flask'].includes(p.info.rdns));
18
+ if (metamaskProvider) {
19
+ window.starknet_metamask_snap = starknetSnap.createMetaMaskProviderWrapper(metamaskProvider.provider);
20
+ }
21
+ }
22
+ }
23
+ getConnectedAccounts() {
24
+ return _tslib.__awaiter(this, void 0, void 0, function* () {
25
+ const wallet = this.getWallet();
26
+ if (!wallet) {
27
+ return [];
28
+ }
29
+ try {
30
+ yield this.reconnectIfNeeded(wallet);
31
+ }
32
+ catch (e) {
33
+ return [];
34
+ }
35
+ const getSelectedAddress = () => wallet.selectedAddress
36
+ ? Promise.resolve([wallet.selectedAddress])
37
+ : Promise.reject();
38
+ return utils.retryableFn(getSelectedAddress, {
39
+ fallbackValue: [],
40
+ maxRetries: 10,
41
+ retryIntervalMs: 750,
42
+ retryStrategy: 'timeout-and-rejection',
43
+ });
44
+ });
45
+ }
46
+ }
47
+
48
+ exports.MetaMask = MetaMask;
@@ -0,0 +1,8 @@
1
+ import { type WalletConnector } from '@dynamic-labs/wallet-connector-core';
2
+ import StarknetProvider from '../starknetWalletConnector';
3
+ export declare class MetaMask extends StarknetProvider implements WalletConnector {
4
+ overrideKey: string;
5
+ canSetEventListeners: boolean;
6
+ constructor(opts: any);
7
+ getConnectedAccounts(): Promise<string[]>;
8
+ }
@@ -0,0 +1,44 @@
1
+ import { __awaiter } from '../../_virtual/_tslib.js';
2
+ import { Eip6963ProviderSingleton, retryableFn } from '@dynamic-labs/utils';
3
+ import StarknetWalletConnector from '../starknetWalletConnector.js';
4
+ import { createMetaMaskProviderWrapper } from '../utils/starknetSnap.js';
5
+
6
+ class MetaMask extends StarknetWalletConnector {
7
+ constructor(opts) {
8
+ super('MetaMask Starknet', 'metamask_snap', opts);
9
+ this.overrideKey = 'metamaskstarknet';
10
+ this.canSetEventListeners = false;
11
+ if (!window.starknet_metamask_snap) {
12
+ const { providers } = Eip6963ProviderSingleton.get();
13
+ const metamaskProvider = providers.find((p) => ['io.metamask', 'io.metamask.flask'].includes(p.info.rdns));
14
+ if (metamaskProvider) {
15
+ window.starknet_metamask_snap = createMetaMaskProviderWrapper(metamaskProvider.provider);
16
+ }
17
+ }
18
+ }
19
+ getConnectedAccounts() {
20
+ return __awaiter(this, void 0, void 0, function* () {
21
+ const wallet = this.getWallet();
22
+ if (!wallet) {
23
+ return [];
24
+ }
25
+ try {
26
+ yield this.reconnectIfNeeded(wallet);
27
+ }
28
+ catch (e) {
29
+ return [];
30
+ }
31
+ const getSelectedAddress = () => wallet.selectedAddress
32
+ ? Promise.resolve([wallet.selectedAddress])
33
+ : Promise.reject();
34
+ return retryableFn(getSelectedAddress, {
35
+ fallbackValue: [],
36
+ maxRetries: 10,
37
+ retryIntervalMs: 750,
38
+ retryStrategy: 'timeout-and-rejection',
39
+ });
40
+ });
41
+ }
42
+ }
43
+
44
+ export { MetaMask };