@dynamic-labs/starknet 4.0.0-alpha.9 → 4.0.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.
- package/CHANGELOG.md +483 -1
- package/package.cjs +1 -1
- package/package.js +1 -1
- package/package.json +14 -12
- package/src/StarknetWalletConnector.cjs +232 -0
- package/src/StarknetWalletConnector.d.ts +58 -0
- package/src/StarknetWalletConnector.js +228 -0
- package/src/index.cjs +14 -12
- package/src/index.d.ts +16 -7
- package/src/index.js +12 -12
- package/src/types.d.ts +26 -11
- package/src/utils/convertors.cjs +1 -1
- package/src/utils/convertors.d.ts +1 -1
- package/src/utils/convertors.js +1 -1
- package/src/wallet/StarknetWallet.cjs +24 -3
- package/src/wallet/StarknetWallet.d.ts +14 -4
- package/src/wallet/StarknetWallet.js +24 -3
- package/src/wallets/argent/argentMobile/argentMobile.cjs +70 -0
- package/src/wallets/argent/argentMobile/argentMobile.d.ts +16 -0
- package/src/wallets/argent/argentMobile/argentMobile.js +66 -0
- package/src/wallets/argent/base.cjs +50 -0
- package/src/wallets/argent/base.d.ts +5 -0
- package/src/wallets/argent/base.js +46 -0
- package/src/wallets/argent/injected/argentx.cjs +33 -0
- package/src/wallets/argent/injected/argentx.d.ts +8 -0
- package/src/wallets/argent/injected/argentx.js +29 -0
- package/src/wallets/argent/webwallet/webwallet.cjs +37 -0
- package/src/wallets/argent/webwallet/webwallet.d.ts +10 -0
- package/src/wallets/argent/webwallet/webwallet.js +33 -0
- package/src/wallets/injected/braavos.cjs +31 -0
- package/src/wallets/injected/braavos.d.ts +13 -0
- package/src/wallets/injected/braavos.js +27 -0
- package/src/wallets/injected/fetchStarknetInjectedWalletConnectors.cjs +35 -0
- package/src/wallets/injected/fetchStarknetInjectedWalletConnectors.d.ts +5 -0
- package/src/wallets/injected/fetchStarknetInjectedWalletConnectors.js +31 -0
- package/src/wallets/injected/injected.cjs +141 -0
- package/src/wallets/injected/injected.d.ts +10 -0
- package/src/wallets/injected/injected.js +137 -0
- package/src/wallets/{metamask.cjs → injected/metamask.cjs} +19 -29
- package/src/wallets/{metamask.d.ts → injected/metamask.d.ts} +2 -4
- package/src/wallets/{metamask.js → injected/metamask.js} +15 -29
- package/src/starknetWalletConnector.cjs +0 -320
- package/src/starknetWalletConnector.d.ts +0 -127
- package/src/starknetWalletConnector.js +0 -314
- package/src/utils/starknetSnap.cjs +0 -92
- package/src/utils/starknetSnap.d.ts +0 -8
- package/src/utils/starknetSnap.js +0 -88
- package/src/wallets/argentx.cjs +0 -24
- package/src/wallets/argentx.d.ts +0 -8
- package/src/wallets/argentx.js +0 -20
- package/src/wallets/argentxBase.cjs +0 -50
- package/src/wallets/argentxBase.d.ts +0 -16
- package/src/wallets/argentxBase.js +0 -48
- package/src/wallets/argentxMobile.cjs +0 -100
- package/src/wallets/argentxMobile.d.ts +0 -13
- package/src/wallets/argentxMobile.js +0 -96
- package/src/wallets/argentxWeb.cjs +0 -57
- package/src/wallets/argentxWeb.d.ts +0 -8
- package/src/wallets/argentxWeb.js +0 -53
- package/src/wallets/bitget.cjs +0 -22
- package/src/wallets/bitget.d.ts +0 -7
- package/src/wallets/bitget.js +0 -18
- package/src/wallets/braavos.cjs +0 -37
- package/src/wallets/braavos.d.ts +0 -8
- package/src/wallets/braavos.js +0 -33
- package/src/wallets/okx.cjs +0 -15
- package/src/wallets/okx.d.ts +0 -6
- package/src/wallets/okx.js +0 -11
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { WalletConnectorConstructor } from '@dynamic-labs/wallet-connector-core';
|
|
2
|
+
import { WalletBookSchema } from '@dynamic-labs/wallet-book';
|
|
3
|
+
export declare const fetchStarknetInjectedWalletConnectors: ({ walletBook, }: {
|
|
4
|
+
walletBook: WalletBookSchema;
|
|
5
|
+
}) => WalletConnectorConstructor[];
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
import { Injected } from './injected.js';
|
|
3
|
+
|
|
4
|
+
const filteredStarknetWalletKeysOverrides = [
|
|
5
|
+
// TODO(starknet-v6): Remove once these wallets support v6
|
|
6
|
+
'bitgetstarknet',
|
|
7
|
+
// Braavos has its own connector to implement specific logic
|
|
8
|
+
'braavos',
|
|
9
|
+
];
|
|
10
|
+
const fetchStarknetInjectedWalletConnectors = ({ walletBook, }) => {
|
|
11
|
+
var _a;
|
|
12
|
+
return Object.entries((_a = walletBook === null || walletBook === void 0 ? void 0 : walletBook.wallets) !== null && _a !== void 0 ? _a : {})
|
|
13
|
+
.filter(([key, wallet]) => {
|
|
14
|
+
var _a;
|
|
15
|
+
return ((_a = wallet.injectedConfig) === null || _a === void 0 ? void 0 : _a.find((config) => config.chain === 'starknet')) &&
|
|
16
|
+
!filteredStarknetWalletKeysOverrides.includes(key);
|
|
17
|
+
})
|
|
18
|
+
.map(([key, wallet]) => {
|
|
19
|
+
var _a, _b, _c;
|
|
20
|
+
const name = wallet.shortName || wallet.name;
|
|
21
|
+
const walletConnectorFallback = Boolean(wallet.walletConnect);
|
|
22
|
+
const id = (_c = (_b = (_a = wallet.injectedConfig) === null || _a === void 0 ? void 0 : _a[0].windowLocations) === null || _b === void 0 ? void 0 : _b[0]) !== null && _c !== void 0 ? _c : key;
|
|
23
|
+
return class extends Injected {
|
|
24
|
+
constructor(props) {
|
|
25
|
+
super(name, id, Object.assign({ name, overrideKey: key, walletBookWallet: wallet, walletConnectorFallback }, props));
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export { fetchStarknetInjectedWalletConnectors };
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
|
+
|
|
6
|
+
var _tslib = require('../../../_virtual/_tslib.cjs');
|
|
7
|
+
var typesJs = require('@starknet-io/types-js');
|
|
8
|
+
var utils = require('@dynamic-labs/utils');
|
|
9
|
+
var StarknetWalletConnector = require('../../StarknetWalletConnector.cjs');
|
|
10
|
+
|
|
11
|
+
class Injected extends StarknetWalletConnector.StarknetWalletConnector {
|
|
12
|
+
constructor(name, id, props) {
|
|
13
|
+
super(name, id, props);
|
|
14
|
+
this.overrideKey = props.overrideKey;
|
|
15
|
+
}
|
|
16
|
+
prompt(options) {
|
|
17
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
18
|
+
const wallet = this.getWindowWallet();
|
|
19
|
+
if (!wallet) {
|
|
20
|
+
throw new utils.DynamicError('No wallet available to send RPC requests to');
|
|
21
|
+
}
|
|
22
|
+
this.logger.debug('[prompt] Sending wallet_requestAccounts with silent_mode:', options.silently);
|
|
23
|
+
const accounts = yield wallet.request({
|
|
24
|
+
params: {
|
|
25
|
+
silent_mode: options.silently,
|
|
26
|
+
},
|
|
27
|
+
type: 'wallet_requestAccounts',
|
|
28
|
+
});
|
|
29
|
+
this.logger.debug('[prompt] Received from wallet_requestAccounts:', accounts);
|
|
30
|
+
if (accounts.length === 0) {
|
|
31
|
+
return {
|
|
32
|
+
data: {
|
|
33
|
+
account: undefined,
|
|
34
|
+
chainId: undefined,
|
|
35
|
+
},
|
|
36
|
+
wallet,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
const [account] = accounts;
|
|
40
|
+
this.logger.debug('[prompt] Sending wallet_requestChaindId');
|
|
41
|
+
const chainId = yield wallet.request({
|
|
42
|
+
type: 'wallet_requestChainId',
|
|
43
|
+
});
|
|
44
|
+
this.logger.debug('[prompt] Received from wallet_requestChainId:', chainId);
|
|
45
|
+
return {
|
|
46
|
+
data: {
|
|
47
|
+
account,
|
|
48
|
+
chainId: BigInt(chainId),
|
|
49
|
+
},
|
|
50
|
+
wallet,
|
|
51
|
+
};
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
getAddress() {
|
|
55
|
+
const _super = Object.create(null, {
|
|
56
|
+
getAddress: { get: () => super.getAddress }
|
|
57
|
+
});
|
|
58
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
59
|
+
var _a;
|
|
60
|
+
if (this.isInstalledOnBrowser()) {
|
|
61
|
+
return _super.getAddress.call(this);
|
|
62
|
+
}
|
|
63
|
+
const inAppBrowserBase = (_a = this.walletBookWallet.mobile) === null || _a === void 0 ? void 0 : _a.inAppBrowser;
|
|
64
|
+
if (!inAppBrowserBase || !utils.isMobile()) {
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
const inAppBrowserTemplate = utils.template(inAppBrowserBase);
|
|
68
|
+
const deepLink = inAppBrowserTemplate({
|
|
69
|
+
encodedDappURI: window.location.toString().replace(/http(s)?:\/\//, ''),
|
|
70
|
+
});
|
|
71
|
+
window.location.href = deepLink;
|
|
72
|
+
return undefined;
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
getConnectedAccounts() {
|
|
76
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
77
|
+
var _a;
|
|
78
|
+
if ((_a = this.walletData) === null || _a === void 0 ? void 0 : _a.account) {
|
|
79
|
+
this.logger.debug('[getConnectedAccounts] Found existing account:', this.walletData.account);
|
|
80
|
+
return [this.walletData.account];
|
|
81
|
+
}
|
|
82
|
+
const wallet = this.getWindowWallet();
|
|
83
|
+
if (!wallet) {
|
|
84
|
+
return [];
|
|
85
|
+
}
|
|
86
|
+
const silently = yield this.shouldPromptSilently(wallet);
|
|
87
|
+
let data;
|
|
88
|
+
this.logger.debug('[getConnectedAccounts] No existing account, attempting to connect with silent mode:', silently);
|
|
89
|
+
try {
|
|
90
|
+
({ data } = yield this.prompt({
|
|
91
|
+
silently,
|
|
92
|
+
}));
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
this.logger.debug(`[getConnectedAccounts] Silent connect errored out: ${error}`);
|
|
96
|
+
return [];
|
|
97
|
+
}
|
|
98
|
+
this.logger.debug(`[getConnectedAccounts] Connect returned account: ${data === null || data === void 0 ? void 0 : data.account}`);
|
|
99
|
+
if (!(data === null || data === void 0 ? void 0 : data.account)) {
|
|
100
|
+
return [];
|
|
101
|
+
}
|
|
102
|
+
this.walletData = data;
|
|
103
|
+
this.wallet = wallet;
|
|
104
|
+
this.setupEventListeners();
|
|
105
|
+
return [data.account];
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
shouldPromptSilently(wallet) {
|
|
109
|
+
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
110
|
+
/**
|
|
111
|
+
* In general, getConnectedAccounts should send a "silent" request to the wallet, meaning
|
|
112
|
+
* no popup will be displayed to the user. However, in the case that the user comes back
|
|
113
|
+
* to the dapp with a locked wallet, we do want to trigger a popup for the user to unlock
|
|
114
|
+
* their wallet, but only if their wallet has still granted permission to the dapp to access
|
|
115
|
+
* its data. That's what the following `wallet_getPermissions` RPC request does.
|
|
116
|
+
*/
|
|
117
|
+
let silently = true;
|
|
118
|
+
try {
|
|
119
|
+
const permissions = yield wallet.request({
|
|
120
|
+
type: 'wallet_getPermissions',
|
|
121
|
+
});
|
|
122
|
+
if (permissions.includes(typesJs.WALLET_API.Permission.ACCOUNTS)) {
|
|
123
|
+
this.logger.debug('[getConnectedAccounts] Received `accounts` permission from wallet_getPermissions');
|
|
124
|
+
silently = false;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
this.logger.debug('[getConnectedAccounts] `wallet_getPermissions` threw error:', error);
|
|
129
|
+
}
|
|
130
|
+
return silently;
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
getWindowWallet() {
|
|
134
|
+
this.logger.debug('[getWindowWallet] Looking for wallet from window:', this.id);
|
|
135
|
+
const wallet = window[`starknet_${this.id}`];
|
|
136
|
+
this.logger.debug('[getWindowWallet] Lookup result:', wallet);
|
|
137
|
+
return wallet;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
exports.Injected = Injected;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { StarknetWalletConnector } from '../../StarknetWalletConnector';
|
|
2
|
+
import { PromptOptions, PromptResult } from '../../types';
|
|
3
|
+
export declare class Injected extends StarknetWalletConnector {
|
|
4
|
+
constructor(name: string, id: string, props: any);
|
|
5
|
+
prompt(options: PromptOptions): Promise<PromptResult>;
|
|
6
|
+
getAddress(): Promise<string | undefined>;
|
|
7
|
+
getConnectedAccounts(): Promise<string[]>;
|
|
8
|
+
private shouldPromptSilently;
|
|
9
|
+
private getWindowWallet;
|
|
10
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
import { __awaiter } from '../../../_virtual/_tslib.js';
|
|
3
|
+
import { WALLET_API } from '@starknet-io/types-js';
|
|
4
|
+
import { DynamicError, isMobile, template } from '@dynamic-labs/utils';
|
|
5
|
+
import { StarknetWalletConnector } from '../../StarknetWalletConnector.js';
|
|
6
|
+
|
|
7
|
+
class Injected extends StarknetWalletConnector {
|
|
8
|
+
constructor(name, id, props) {
|
|
9
|
+
super(name, id, props);
|
|
10
|
+
this.overrideKey = props.overrideKey;
|
|
11
|
+
}
|
|
12
|
+
prompt(options) {
|
|
13
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
14
|
+
const wallet = this.getWindowWallet();
|
|
15
|
+
if (!wallet) {
|
|
16
|
+
throw new DynamicError('No wallet available to send RPC requests to');
|
|
17
|
+
}
|
|
18
|
+
this.logger.debug('[prompt] Sending wallet_requestAccounts with silent_mode:', options.silently);
|
|
19
|
+
const accounts = yield wallet.request({
|
|
20
|
+
params: {
|
|
21
|
+
silent_mode: options.silently,
|
|
22
|
+
},
|
|
23
|
+
type: 'wallet_requestAccounts',
|
|
24
|
+
});
|
|
25
|
+
this.logger.debug('[prompt] Received from wallet_requestAccounts:', accounts);
|
|
26
|
+
if (accounts.length === 0) {
|
|
27
|
+
return {
|
|
28
|
+
data: {
|
|
29
|
+
account: undefined,
|
|
30
|
+
chainId: undefined,
|
|
31
|
+
},
|
|
32
|
+
wallet,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
const [account] = accounts;
|
|
36
|
+
this.logger.debug('[prompt] Sending wallet_requestChaindId');
|
|
37
|
+
const chainId = yield wallet.request({
|
|
38
|
+
type: 'wallet_requestChainId',
|
|
39
|
+
});
|
|
40
|
+
this.logger.debug('[prompt] Received from wallet_requestChainId:', chainId);
|
|
41
|
+
return {
|
|
42
|
+
data: {
|
|
43
|
+
account,
|
|
44
|
+
chainId: BigInt(chainId),
|
|
45
|
+
},
|
|
46
|
+
wallet,
|
|
47
|
+
};
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
getAddress() {
|
|
51
|
+
const _super = Object.create(null, {
|
|
52
|
+
getAddress: { get: () => super.getAddress }
|
|
53
|
+
});
|
|
54
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
55
|
+
var _a;
|
|
56
|
+
if (this.isInstalledOnBrowser()) {
|
|
57
|
+
return _super.getAddress.call(this);
|
|
58
|
+
}
|
|
59
|
+
const inAppBrowserBase = (_a = this.walletBookWallet.mobile) === null || _a === void 0 ? void 0 : _a.inAppBrowser;
|
|
60
|
+
if (!inAppBrowserBase || !isMobile()) {
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
const inAppBrowserTemplate = template(inAppBrowserBase);
|
|
64
|
+
const deepLink = inAppBrowserTemplate({
|
|
65
|
+
encodedDappURI: window.location.toString().replace(/http(s)?:\/\//, ''),
|
|
66
|
+
});
|
|
67
|
+
window.location.href = deepLink;
|
|
68
|
+
return undefined;
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
getConnectedAccounts() {
|
|
72
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
73
|
+
var _a;
|
|
74
|
+
if ((_a = this.walletData) === null || _a === void 0 ? void 0 : _a.account) {
|
|
75
|
+
this.logger.debug('[getConnectedAccounts] Found existing account:', this.walletData.account);
|
|
76
|
+
return [this.walletData.account];
|
|
77
|
+
}
|
|
78
|
+
const wallet = this.getWindowWallet();
|
|
79
|
+
if (!wallet) {
|
|
80
|
+
return [];
|
|
81
|
+
}
|
|
82
|
+
const silently = yield this.shouldPromptSilently(wallet);
|
|
83
|
+
let data;
|
|
84
|
+
this.logger.debug('[getConnectedAccounts] No existing account, attempting to connect with silent mode:', silently);
|
|
85
|
+
try {
|
|
86
|
+
({ data } = yield this.prompt({
|
|
87
|
+
silently,
|
|
88
|
+
}));
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
this.logger.debug(`[getConnectedAccounts] Silent connect errored out: ${error}`);
|
|
92
|
+
return [];
|
|
93
|
+
}
|
|
94
|
+
this.logger.debug(`[getConnectedAccounts] Connect returned account: ${data === null || data === void 0 ? void 0 : data.account}`);
|
|
95
|
+
if (!(data === null || data === void 0 ? void 0 : data.account)) {
|
|
96
|
+
return [];
|
|
97
|
+
}
|
|
98
|
+
this.walletData = data;
|
|
99
|
+
this.wallet = wallet;
|
|
100
|
+
this.setupEventListeners();
|
|
101
|
+
return [data.account];
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
shouldPromptSilently(wallet) {
|
|
105
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
106
|
+
/**
|
|
107
|
+
* In general, getConnectedAccounts should send a "silent" request to the wallet, meaning
|
|
108
|
+
* no popup will be displayed to the user. However, in the case that the user comes back
|
|
109
|
+
* to the dapp with a locked wallet, we do want to trigger a popup for the user to unlock
|
|
110
|
+
* their wallet, but only if their wallet has still granted permission to the dapp to access
|
|
111
|
+
* its data. That's what the following `wallet_getPermissions` RPC request does.
|
|
112
|
+
*/
|
|
113
|
+
let silently = true;
|
|
114
|
+
try {
|
|
115
|
+
const permissions = yield wallet.request({
|
|
116
|
+
type: 'wallet_getPermissions',
|
|
117
|
+
});
|
|
118
|
+
if (permissions.includes(WALLET_API.Permission.ACCOUNTS)) {
|
|
119
|
+
this.logger.debug('[getConnectedAccounts] Received `accounts` permission from wallet_getPermissions');
|
|
120
|
+
silently = false;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
this.logger.debug('[getConnectedAccounts] `wallet_getPermissions` threw error:', error);
|
|
125
|
+
}
|
|
126
|
+
return silently;
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
getWindowWallet() {
|
|
130
|
+
this.logger.debug('[getWindowWallet] Looking for wallet from window:', this.id);
|
|
131
|
+
const wallet = window[`starknet_${this.id}`];
|
|
132
|
+
this.logger.debug('[getWindowWallet] Lookup result:', wallet);
|
|
133
|
+
return wallet;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
export { Injected };
|
|
@@ -3,25 +3,30 @@
|
|
|
3
3
|
|
|
4
4
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
5
|
|
|
6
|
-
var _tslib = require('
|
|
7
|
-
var
|
|
6
|
+
var _tslib = require('../../../_virtual/_tslib.cjs');
|
|
7
|
+
var starknet = require('@starknet-io/get-starknet-core');
|
|
8
8
|
var logger$1 = require('@dynamic-labs/logger');
|
|
9
|
-
var
|
|
10
|
-
|
|
9
|
+
var injected = require('./injected.cjs');
|
|
10
|
+
|
|
11
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
12
|
+
|
|
13
|
+
var starknet__default = /*#__PURE__*/_interopDefaultLegacy(starknet);
|
|
11
14
|
|
|
12
15
|
const logger = new logger$1.Logger('MetaMask Starknet Snap', logger$1.LogLevel.INFO);
|
|
13
|
-
class MetaMask extends
|
|
16
|
+
class MetaMask extends injected.Injected {
|
|
14
17
|
constructor(opts) {
|
|
15
|
-
super('MetaMask Starknet', '
|
|
18
|
+
super('MetaMask Starknet', 'metamask', opts);
|
|
16
19
|
this.overrideKey = 'metamaskstarknet';
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
starknet__default["default"].discoverVirtualWallets().then(() => {
|
|
21
|
+
starknet__default["default"].getAvailableWallets().then((wallets) => {
|
|
22
|
+
const metaMaskProvider = wallets.find((wallet) => wallet.id === 'metamask');
|
|
23
|
+
if (metaMaskProvider) {
|
|
24
|
+
// Justification: Checked with the Snap team, the provider is available on the window object
|
|
25
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
26
|
+
this.provider = metaMaskProvider.provider;
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
});
|
|
25
30
|
}
|
|
26
31
|
getNetwork() {
|
|
27
32
|
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
@@ -101,21 +106,6 @@ class MetaMask extends starknetWalletConnector["default"] {
|
|
|
101
106
|
this.teardownEventListeners();
|
|
102
107
|
});
|
|
103
108
|
}
|
|
104
|
-
getConnectedAccounts() {
|
|
105
|
-
return _tslib.__awaiter(this, void 0, void 0, function* () {
|
|
106
|
-
const wallet = this.getWallet();
|
|
107
|
-
if (!wallet) {
|
|
108
|
-
return [];
|
|
109
|
-
}
|
|
110
|
-
const isProviderConnected = this.isProviderConnected();
|
|
111
|
-
const isPreauthorized = yield wallet.isPreauthorized();
|
|
112
|
-
const shouldReconnect = !isProviderConnected && isPreauthorized;
|
|
113
|
-
if (shouldReconnect) {
|
|
114
|
-
yield this.connect();
|
|
115
|
-
}
|
|
116
|
-
return wallet.selectedAddress ? [wallet.selectedAddress] : [];
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
109
|
}
|
|
120
110
|
|
|
121
111
|
exports.MetaMask = MetaMask;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
export declare class MetaMask extends StarknetProvider implements WalletConnectorBase {
|
|
1
|
+
import { Injected } from './injected';
|
|
2
|
+
export declare class MetaMask extends Injected {
|
|
4
3
|
overrideKey: string;
|
|
5
4
|
private currentChainId;
|
|
6
5
|
private intervalId;
|
|
@@ -10,5 +9,4 @@ export declare class MetaMask extends StarknetProvider implements WalletConnecto
|
|
|
10
9
|
setupEventListeners(): void;
|
|
11
10
|
teardownEventListeners(): Promise<void>;
|
|
12
11
|
endSession(): Promise<void>;
|
|
13
|
-
getConnectedAccounts(): Promise<string[]>;
|
|
14
12
|
}
|
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
'use client'
|
|
2
|
-
import { __awaiter } from '
|
|
3
|
-
import
|
|
2
|
+
import { __awaiter } from '../../../_virtual/_tslib.js';
|
|
3
|
+
import starknet from '@starknet-io/get-starknet-core';
|
|
4
4
|
import { Logger, LogLevel } from '@dynamic-labs/logger';
|
|
5
|
-
import
|
|
6
|
-
import { createMetaMaskProviderWrapper } from '../utils/starknetSnap.js';
|
|
5
|
+
import { Injected } from './injected.js';
|
|
7
6
|
|
|
8
7
|
const logger = new Logger('MetaMask Starknet Snap', LogLevel.INFO);
|
|
9
|
-
class MetaMask extends
|
|
8
|
+
class MetaMask extends Injected {
|
|
10
9
|
constructor(opts) {
|
|
11
|
-
super('MetaMask Starknet', '
|
|
10
|
+
super('MetaMask Starknet', 'metamask', opts);
|
|
12
11
|
this.overrideKey = 'metamaskstarknet';
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
12
|
+
starknet.discoverVirtualWallets().then(() => {
|
|
13
|
+
starknet.getAvailableWallets().then((wallets) => {
|
|
14
|
+
const metaMaskProvider = wallets.find((wallet) => wallet.id === 'metamask');
|
|
15
|
+
if (metaMaskProvider) {
|
|
16
|
+
// Justification: Checked with the Snap team, the provider is available on the window object
|
|
17
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
18
|
+
this.provider = metaMaskProvider.provider;
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
});
|
|
21
22
|
}
|
|
22
23
|
getNetwork() {
|
|
23
24
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -97,21 +98,6 @@ class MetaMask extends StarknetWalletConnector {
|
|
|
97
98
|
this.teardownEventListeners();
|
|
98
99
|
});
|
|
99
100
|
}
|
|
100
|
-
getConnectedAccounts() {
|
|
101
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
102
|
-
const wallet = this.getWallet();
|
|
103
|
-
if (!wallet) {
|
|
104
|
-
return [];
|
|
105
|
-
}
|
|
106
|
-
const isProviderConnected = this.isProviderConnected();
|
|
107
|
-
const isPreauthorized = yield wallet.isPreauthorized();
|
|
108
|
-
const shouldReconnect = !isProviderConnected && isPreauthorized;
|
|
109
|
-
if (shouldReconnect) {
|
|
110
|
-
yield this.connect();
|
|
111
|
-
}
|
|
112
|
-
return wallet.selectedAddress ? [wallet.selectedAddress] : [];
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
101
|
}
|
|
116
102
|
|
|
117
103
|
export { MetaMask };
|