@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 +5 -0
- package/package.json +7 -6
- package/src/index.cjs +2 -0
- package/src/index.js +2 -0
- package/src/starknetWalletConnector.cjs +25 -9
- package/src/starknetWalletConnector.d.ts +2 -0
- package/src/starknetWalletConnector.js +25 -9
- package/src/types.d.ts +1 -1
- package/src/utils/starknetSnap.cjs +100 -0
- package/src/utils/starknetSnap.d.ts +8 -0
- package/src/utils/starknetSnap.js +76 -0
- package/src/wallets/metamask.cjs +48 -0
- package/src/wallets/metamask.d.ts +8 -0
- package/src/wallets/metamask.js +44 -0
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.
|
|
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
|
-
"@
|
|
35
|
-
"@dynamic-labs/
|
|
36
|
-
"@dynamic-labs/
|
|
37
|
-
"@dynamic-labs/
|
|
38
|
-
"@dynamic-labs/wallet-
|
|
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
|
-
|
|
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
|
-
|
|
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 };
|