@starknet-io/get-starknet-virtual-wallet 5.0.0 → 6.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/dist/index.cjs +0 -3
- package/dist/index.d.cts +2 -9
- package/dist/index.d.mts +2 -9
- package/dist/index.mjs +1 -2
- package/dist/metamask.cjs +165 -244
- package/dist/metamask.cjs.map +1 -1
- package/dist/metamask.d.cts +21 -19
- package/dist/metamask.d.mts +21 -19
- package/dist/metamask.mjs +164 -242
- package/dist/metamask.mjs.map +1 -1
- package/dist/types.d.cts +11 -0
- package/dist/types.d.mts +11 -0
- package/package.json +19 -13
- package/src/metamask.ts +5 -6
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.ts +0 -9
- package/dist/index.mjs.map +0 -1
- package/dist/metamask.d.ts +0 -26
package/dist/metamask.d.mts
CHANGED
|
@@ -1,26 +1,28 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { EIP1193Provider } from
|
|
4
|
-
import {
|
|
1
|
+
import { n as EIP6963ProviderInfo } from "./types.mjs";
|
|
2
|
+
import { StarknetFeatures, WalletWithStarknetFeatures } from "@starknet-io/get-starknet-wallet-standard/features";
|
|
3
|
+
import { EIP1193Provider } from "viem";
|
|
4
|
+
import { StarknetWalletAccount } from "@starknet-io/get-starknet-wallet-standard";
|
|
5
5
|
|
|
6
|
+
//#region src/metamask.d.ts
|
|
6
7
|
declare function metaMaskVirtualWallet(info: EIP6963ProviderInfo, provider: EIP1193Provider): WalletWithStarknetFeatures | null;
|
|
7
8
|
declare class MetaMaskVirtualWallet implements WalletWithStarknetFeatures {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
9
|
+
#private;
|
|
10
|
+
private provider;
|
|
11
|
+
constructor(provider: MetaMaskProvider);
|
|
12
|
+
get version(): "1.0.0";
|
|
13
|
+
get name(): string;
|
|
14
|
+
get icon(): WalletWithStarknetFeatures["icon"];
|
|
15
|
+
get features(): StarknetFeatures;
|
|
16
|
+
get chains(): ("starknet:0x534e5f4d41494e" | "starknet:0x534e5f5345504f4c4941")[];
|
|
17
|
+
get accounts(): StarknetWalletAccount[];
|
|
17
18
|
}
|
|
18
19
|
type MetaMaskProvider = {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
isMetaMask: boolean;
|
|
21
|
+
request(options: {
|
|
22
|
+
method: string;
|
|
23
|
+
}): Promise<void>;
|
|
23
24
|
};
|
|
24
25
|
declare function isMetaMaskProvider(obj: unknown): obj is MetaMaskProvider;
|
|
25
|
-
|
|
26
|
-
export {
|
|
26
|
+
//#endregion
|
|
27
|
+
export { MetaMaskProvider, MetaMaskVirtualWallet, isMetaMaskProvider, metaMaskVirtualWallet };
|
|
28
|
+
//# sourceMappingURL=metamask.d.mts.map
|
package/dist/metamask.mjs
CHANGED
|
@@ -1,248 +1,170 @@
|
|
|
1
|
-
import { init, loadRemote } from
|
|
2
|
-
import { WELL_KNOWN_STARKNET_CHAINS, formatStarknetChainId, isStarknetChain
|
|
3
|
-
import { StarknetWalletApi } from
|
|
4
|
-
import { StandardConnect, StandardDisconnect, StandardEvents } from
|
|
5
|
-
import { Mutex } from
|
|
6
|
-
|
|
7
|
-
var __accessCheck = (obj, member, msg) => {
|
|
8
|
-
if (!member.has(obj))
|
|
9
|
-
throw TypeError("Cannot " + msg);
|
|
10
|
-
};
|
|
11
|
-
var __privateGet = (obj, member, getter) => {
|
|
12
|
-
__accessCheck(obj, member, "read from private field");
|
|
13
|
-
return getter ? getter.call(obj) : member.get(obj);
|
|
14
|
-
};
|
|
15
|
-
var __privateAdd = (obj, member, value) => {
|
|
16
|
-
if (member.has(obj))
|
|
17
|
-
throw TypeError("Cannot add the same private member more than once");
|
|
18
|
-
member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
19
|
-
};
|
|
20
|
-
var __privateSet = (obj, member, value, setter) => {
|
|
21
|
-
__accessCheck(obj, member, "write to private field");
|
|
22
|
-
setter ? setter.call(obj, value) : member.set(obj, value);
|
|
23
|
-
return value;
|
|
24
|
-
};
|
|
25
|
-
var __privateMethod = (obj, member, method) => {
|
|
26
|
-
__accessCheck(obj, member, "access private method");
|
|
27
|
-
return method;
|
|
28
|
-
};
|
|
29
|
-
var _listeners, _account, _swo, _lock, _name, _icon, _connect, _disconnect, _emit, emit_fn, _on, _off, off_fn, _disconnected, disconnected_fn, _request, request_fn, _loadWallet, loadWallet_fn, _getStarknetChain, getStarknetChain_fn, _onAccountsChanged, onAccountsChanged_fn, _onNetworkChanged, onNetworkChanged_fn;
|
|
1
|
+
import { init, loadRemote } from "@module-federation/runtime";
|
|
2
|
+
import { STARKNET_CHAIN_PREFIX, WELL_KNOWN_STARKNET_CHAINS, formatStarknetChainId, isStarknetChain } from "@starknet-io/get-starknet-wallet-standard/chains";
|
|
3
|
+
import { StarknetWalletApi } from "@starknet-io/get-starknet-wallet-standard/features";
|
|
4
|
+
import { StandardConnect, StandardDisconnect, StandardEvents } from "@wallet-standard/features";
|
|
5
|
+
import { Mutex } from "async-mutex";
|
|
6
|
+
//#region src/metamask.ts
|
|
30
7
|
function metaMaskVirtualWallet(info, provider) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
return new MetaMaskVirtualWallet(provider);
|
|
34
|
-
}
|
|
35
|
-
return null;
|
|
8
|
+
if ((info.rdns === "io.metamask" || info.rdns === "io.metamask.flask") && isMetaMaskProvider(provider)) return new MetaMaskVirtualWallet(provider);
|
|
9
|
+
return null;
|
|
36
10
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
if (!result) {
|
|
190
|
-
throw new Error("Failed to load MetaMask Wallet");
|
|
191
|
-
}
|
|
192
|
-
const swo = new result.MetaMaskSnapWallet(provider, "*");
|
|
193
|
-
swo.on("accountsChanged", __privateMethod(this, _onAccountsChanged, onAccountsChanged_fn).bind(this));
|
|
194
|
-
swo.on("networkChanged", __privateMethod(this, _onNetworkChanged, onNetworkChanged_fn).bind(this));
|
|
195
|
-
return swo;
|
|
196
|
-
};
|
|
197
|
-
_getStarknetChain = new WeakSet();
|
|
198
|
-
getStarknetChain_fn = async function() {
|
|
199
|
-
const chainId = await __privateMethod(this, _request, request_fn).call(this, {
|
|
200
|
-
type: "wallet_requestChainId"
|
|
201
|
-
});
|
|
202
|
-
const chain = `${STARKNET_CHAIN_PREFIX}${chainId}`;
|
|
203
|
-
if (!isStarknetChain(chain)) {
|
|
204
|
-
throw new Error("Invalid Starknet chain");
|
|
205
|
-
}
|
|
206
|
-
return chain;
|
|
207
|
-
};
|
|
208
|
-
_onAccountsChanged = new WeakSet();
|
|
209
|
-
onAccountsChanged_fn = async function(accounts) {
|
|
210
|
-
if (!accounts || accounts.length === 0) {
|
|
211
|
-
__privateMethod(this, _disconnected, disconnected_fn).call(this);
|
|
212
|
-
return;
|
|
213
|
-
}
|
|
214
|
-
const [account] = accounts;
|
|
215
|
-
if (__privateGet(this, _account)?.chain) {
|
|
216
|
-
__privateGet(this, _account).address = account;
|
|
217
|
-
__privateMethod(this, _emit, emit_fn).call(this, "change", { accounts: this.accounts });
|
|
218
|
-
} else {
|
|
219
|
-
const chain = await __privateMethod(this, _getStarknetChain, getStarknetChain_fn).call(this);
|
|
220
|
-
__privateSet(this, _account, { address: account, chain });
|
|
221
|
-
__privateMethod(this, _emit, emit_fn).call(this, "change", { accounts: this.accounts });
|
|
222
|
-
}
|
|
223
|
-
};
|
|
224
|
-
_onNetworkChanged = new WeakSet();
|
|
225
|
-
onNetworkChanged_fn = function(chainId, accounts) {
|
|
226
|
-
if (!chainId) {
|
|
227
|
-
__privateMethod(this, _disconnected, disconnected_fn).call(this);
|
|
228
|
-
return;
|
|
229
|
-
}
|
|
230
|
-
const chain = formatStarknetChainId(chainId);
|
|
231
|
-
if (!isStarknetChain(chain)) {
|
|
232
|
-
throw new Error(`Invalid Starknet chain: ${chain}`);
|
|
233
|
-
}
|
|
234
|
-
if (accounts?.length > 0) {
|
|
235
|
-
const [account] = accounts;
|
|
236
|
-
__privateSet(this, _account, { address: account, chain });
|
|
237
|
-
__privateMethod(this, _emit, emit_fn).call(this, "change", { accounts: this.accounts });
|
|
238
|
-
} else {
|
|
239
|
-
__privateGet(this, _account).chain = chain;
|
|
240
|
-
__privateMethod(this, _emit, emit_fn).call(this, "change", { accounts: this.accounts });
|
|
241
|
-
}
|
|
11
|
+
var MetaMaskVirtualWallet = class {
|
|
12
|
+
#listeners = {};
|
|
13
|
+
#account = null;
|
|
14
|
+
#swo = null;
|
|
15
|
+
#lock = new Mutex();
|
|
16
|
+
#name = "MetaMask";
|
|
17
|
+
#icon = "data:image/svg+xml;utf8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMTIiIGhlaWdodD0iMTg5IiB2aWV3Qm94PSIwIDAgMjEyIDE4OSI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cG9seWdvbiBmaWxsPSIjQ0RCREIyIiBwb2ludHM9IjYwLjc1IDE3My4yNSA4OC4zMTMgMTgwLjU2MyA4OC4zMTMgMTcxIDkwLjU2MyAxNjguNzUgMTA2LjMxMyAxNjguNzUgMTA2LjMxMyAxODAgMTA2LjMxMyAxODcuODc1IDg5LjQzOCAxODcuODc1IDY4LjYyNSAxNzguODc1Ii8+PHBvbHlnb24gZmlsbD0iI0NEQkRCMiIgcG9pbnRzPSIxMDUuNzUgMTczLjI1IDEzMi43NSAxODAuNTYzIDEzMi43NSAxNzEgMTM1IDE2OC43NSAxNTAuNzUgMTY4Ljc1IDE1MC43NSAxODAgMTUwLjc1IDE4Ny44NzUgMTMzLjg3NSAxODcuODc1IDExMy4wNjMgMTc4Ljg3NSIgdHJhbnNmb3JtPSJtYXRyaXgoLTEgMCAwIDEgMjU2LjUgMCkiLz48cG9seWdvbiBmaWxsPSIjMzkzOTM5IiBwb2ludHM9IjkwLjU2MyAxNTIuNDM4IDg4LjMxMyAxNzEgOTEuMTI1IDE2OC43NSAxMjAuMzc1IDE2OC43NSAxMjMuNzUgMTcxIDEyMS41IDE1Mi40MzggMTE3IDE0OS42MjUgOTQuNSAxNTAuMTg4Ii8+PHBvbHlnb24gZmlsbD0iI0Y4OUMzNSIgcG9pbnRzPSI3NS4zNzUgMjcgODguODc1IDU4LjUgOTUuMDYzIDE1MC4xODggMTE3IDE1MC4xODggMTIzLjc1IDU4LjUgMTM2LjEyNSAyNyIvPjxwb2x5Z29uIGZpbGw9IiNGODlEMzUiIHBvaW50cz0iMTYuMzEzIDk2LjE4OCAuNTYzIDE0MS43NSAzOS45MzggMTM5LjUgNjUuMjUgMTM5LjUgNjUuMjUgMTE5LjgxMyA2NC4xMjUgNzkuMzEzIDU4LjUgODMuODEzIi8+PHBvbHlnb24gZmlsbD0iI0Q4N0MzMCIgcG9pbnRzPSI0Ni4xMjUgMTAxLjI1IDkyLjI1IDEwMi4zNzUgODcuMTg4IDEyNiA2NS4yNSAxMjAuMzc1Ii8+PHBvbHlnb24gZmlsbD0iI0VBOEQzQSIgcG9pbnRzPSI0Ni4xMjUgMTAxLjgxMyA2NS4yNSAxMTkuODEzIDY1LjI1IDEzNy44MTMiLz48cG9seWdvbiBmaWxsPSIjRjg5RDM1IiBwb2ludHM9IjY1LjI1IDEyMC4zNzUgODcuNzUgMTI2IDk1LjA2MyAxNTAuMTg4IDkwIDE1MyA2NS4yNSAxMzguMzc1Ii8+PHBvbHlnb24gZmlsbD0iI0VCOEYzNSIgcG9pbnRzPSI2NS4yNSAxMzguMzc1IDYwLjc1IDE3My4yNSA5MC41NjMgMTUyLjQzOCIvPjxwb2x5Z29uIGZpbGw9IiNFQThFM0EiIHBvaW50cz0iOTIuMjUgMTAyLjM3NSA5NS4wNjMgMTUwLjE4OCA4Ni42MjUgMTI1LjcxOSIvPjxwb2x5Z29uIGZpbGw9IiNEODdDMzAiIHBvaW50cz0iMzkuMzc1IDEzOC45MzggNjUuMjUgMTM4LjM3NSA2MC43NSAxNzMuMjUiLz48cG9seWdvbiBmaWxsPSIjRUI4RjM1IiBwb2ludHM9IjEyLjkzOCAxODguNDM4IDYwLjc1IDE3My4yNSAzOS4zNzUgMTM4LjkzOCAuNTYzIDE0MS43NSIvPjxwb2x5Z29uIGZpbGw9IiNFODgyMUUiIHBvaW50cz0iODguODc1IDU4LjUgNjQuNjg4IDc4Ljc1IDQ2LjEyNSAxMDEuMjUgOTIuMjUgMTAyLjkzOCIvPjxwb2x5Z29uIGZpbGw9IiNERkNFQzMiIHBvaW50cz0iNjAuNzUgMTczLjI1IDkwLjU2MyAxNTIuNDM4IDg4LjMxMyAxNzAuNDM4IDg4LjMxMyAxODAuNTYzIDY4LjA2MyAxNzYuNjI1Ii8+PHBvbHlnb24gZmlsbD0iI0RGQ0VDMyIgcG9pbnRzPSIxMjEuNSAxNzMuMjUgMTUwLjc1IDE1Mi40MzggMTQ4LjUgMTcwLjQzOCAxNDguNSAxODAuNTYzIDEyOC4yNSAxNzYuNjI1IiB0cmFuc2Zvcm09Im1hdHJpeCgtMSAwIDAgMSAyNzIuMjUgMCkiLz48cG9seWdvbiBmaWxsPSIjMzkzOTM5IiBwb2ludHM9IjcwLjMxMyAxMTIuNSA2NC4xMjUgMTI1LjQzOCA4Ni4wNjMgMTE5LjgxMyIgdHJhbnNmb3JtPSJtYXRyaXgoLTEgMCAwIDEgMTUwLjE4OCAwKSIvPjxwb2x5Z29uIGZpbGw9IiNFODhGMzUiIHBvaW50cz0iMTIuMzc1IC41NjMgODguODc1IDU4LjUgNzUuOTM4IDI3Ii8+PHBhdGggZmlsbD0iIzhFNUEzMCIgZD0iTTEyLjM3NTAwMDIsMC41NjI1MDAwMDggTDIuMjUwMDAwMDMsMzEuNTAwMDAwNSBMNy44NzUwMDAxMiw2NS4yNTAwMDEgTDMuOTM3NTAwMDYsNjcuNTAwMDAxIEw5LjU2MjUwMDE0LDcyLjU2MjUgTDUuMDYyNTAwMDgsNzYuNTAwMDAxMSBMMTEuMjUsODIuMTI1MDAxMiBMNy4zMTI1MDAxMSw4NS41MDAwMDEzIEwxNi4zMTI1MDAyLDk2Ljc1MDAwMTQgTDU4LjUwMDAwMDksODMuODEyNTAxMiBDNzkuMTI1MDAxMiw2Ny4zMTI1MDA0IDg5LjI1MDAwMTMsNTguODc1MDAwMyA4OC44NzUwMDEzLDU4LjUwMDAwMDkgQzg4LjUwMDAwMTMsNTguMTI1MDAwOSA2My4wMDAwMDA5LDM4LjgxMjUwMDYgMTIuMzc1MDAwMiwwLjU2MjUwMDAwOCBaIi8+PGcgdHJhbnNmb3JtPSJtYXRyaXgoLTEgMCAwIDEgMjExLjUgMCkiPjxwb2x5Z29uIGZpbGw9IiNGODlEMzUiIHBvaW50cz0iMTYuMzEzIDk2LjE4OCAuNTYzIDE0MS43NSAzOS45MzggMTM5LjUgNjUuMjUgMTM5LjUgNjUuMjUgMTE5LjgxMyA2NC4xMjUgNzkuMzEzIDU4LjUgODMuODEzIi8+PHBvbHlnb24gZmlsbD0iI0Q4N0MzMCIgcG9pbnRzPSI0Ni4xMjUgMTAxLjI1IDkyLjI1IDEwMi4zNzUgODcuMTg4IDEyNiA2NS4yNSAxMjAuMzc1Ii8+PHBvbHlnb24gZmlsbD0iI0VBOEQzQSIgcG9pbnRzPSI0Ni4xMjUgMTAxLjgxMyA2NS4yNSAxMTkuODEzIDY1LjI1IDEzNy44MTMiLz48cG9seWdvbiBmaWxsPSIjRjg5RDM1IiBwb2ludHM9IjY1LjI1IDEyMC4zNzUgODcuNzUgMTI2IDk1LjA2MyAxNTAuMTg4IDkwIDE1MyA2NS4yNSAxMzguMzc1Ii8+PHBvbHlnb24gZmlsbD0iI0VCOEYzNSIgcG9pbnRzPSI2NS4yNSAxMzguMzc1IDYwLjc1IDE3My4yNSA5MCAxNTMiLz48cG9seWdvbiBmaWxsPSIjRUE4RTNBIiBwb2ludHM9IjkyLjI1IDEwMi4zNzUgOTUuMDYzIDE1MC4xODggODYuNjI1IDEyNS43MTkiLz48cG9seWdvbiBmaWxsPSIjRDg3QzMwIiBwb2ludHM9IjM5LjM3NSAxMzguOTM4IDY1LjI1IDEzOC4zNzUgNjAuNzUgMTczLjI1Ii8+PHBvbHlnb24gZmlsbD0iI0VCOEYzNSIgcG9pbnRzPSIxMi45MzggMTg4LjQzOCA2MC43NSAxNzMuMjUgMzkuMzc1IDEzOC45MzggLjU2MyAxNDEuNzUiLz48cG9seWdvbiBmaWxsPSIjRTg4MjFFIiBwb2ludHM9Ijg4Ljg3NSA1OC41IDY0LjY4OCA3OC43NSA0Ni4xMjUgMTAxLjI1IDkyLjI1IDEwMi45MzgiLz48cG9seWdvbiBmaWxsPSIjMzkzOTM5IiBwb2ludHM9IjcwLjMxMyAxMTIuNSA2NC4xMjUgMTI1LjQzOCA4Ni4wNjMgMTE5LjgxMyIgdHJhbnNmb3JtPSJtYXRyaXgoLTEgMCAwIDEgMTUwLjE4OCAwKSIvPjxwb2x5Z29uIGZpbGw9IiNFODhGMzUiIHBvaW50cz0iMTIuMzc1IC41NjMgODguODc1IDU4LjUgNzUuOTM4IDI3Ii8+PHBhdGggZmlsbD0iIzhFNUEzMCIgZD0iTTEyLjM3NTAwMDIsMC41NjI1MDAwMDggTDIuMjUwMDAwMDMsMzEuNTAwMDAwNSBMNy44NzUwMDAxMiw2NS4yNTAwMDEgTDMuOTM3NTAwMDYsNjcuNTAwMDAxIEw5LjU2MjUwMDE0LDcyLjU2MjUgTDUuMDYyNTAwMDgsNzYuNTAwMDAxMSBMMTEuMjUsODIuMTI1MDAxMiBMNy4zMTI1MDAxMSw4NS41MDAwMDEzIEwxNi4zMTI1MDAyLDk2Ljc1MDAwMTQgTDU4LjUwMDAwMDksODMuODEyNTAxMiBDNzkuMTI1MDAxMiw2Ny4zMTI1MDA0IDg5LjI1MDAwMTMsNTguODc1MDAwMyA4OC44NzUwMDEzLDU4LjUwMDAwMDkgQzg4LjUwMDAwMTMsNTguMTI1MDAwOSA2My4wMDAwMDA5LDM4LjgxMjUwMDYgMTIuMzc1MDAwMiwwLjU2MjUwMDAwOCBaIi8+PC9nPjwvZz48L3N2Zz4=";
|
|
18
|
+
constructor(provider) {
|
|
19
|
+
this.provider = provider;
|
|
20
|
+
}
|
|
21
|
+
get version() {
|
|
22
|
+
return "1.0.0";
|
|
23
|
+
}
|
|
24
|
+
get name() {
|
|
25
|
+
return this.#name;
|
|
26
|
+
}
|
|
27
|
+
get icon() {
|
|
28
|
+
return this.#icon;
|
|
29
|
+
}
|
|
30
|
+
get features() {
|
|
31
|
+
return {
|
|
32
|
+
[StandardConnect]: {
|
|
33
|
+
version: "1.0.0",
|
|
34
|
+
connect: this.#connect.bind(this)
|
|
35
|
+
},
|
|
36
|
+
[StandardDisconnect]: {
|
|
37
|
+
version: "1.0.0",
|
|
38
|
+
disconnect: this.#disconnect.bind(this)
|
|
39
|
+
},
|
|
40
|
+
[StandardEvents]: {
|
|
41
|
+
version: "1.0.0",
|
|
42
|
+
on: this.#on.bind(this)
|
|
43
|
+
},
|
|
44
|
+
[StarknetWalletApi]: {
|
|
45
|
+
id: "metamask",
|
|
46
|
+
version: "1.0.0",
|
|
47
|
+
request: this.#request.bind(this),
|
|
48
|
+
walletVersion: "2.0.0"
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
get chains() {
|
|
53
|
+
return WELL_KNOWN_STARKNET_CHAINS.slice();
|
|
54
|
+
}
|
|
55
|
+
get accounts() {
|
|
56
|
+
if (this.#account) return [{
|
|
57
|
+
address: this.#account.address,
|
|
58
|
+
publicKey: new Uint8Array(),
|
|
59
|
+
chains: [this.#account.chain],
|
|
60
|
+
features: []
|
|
61
|
+
}];
|
|
62
|
+
return [];
|
|
63
|
+
}
|
|
64
|
+
#connect = async ({ silent } = {}) => {
|
|
65
|
+
if (!this.#account) {
|
|
66
|
+
const accounts = await this.#request({
|
|
67
|
+
type: "wallet_requestAccounts",
|
|
68
|
+
params: { silent_mode: silent }
|
|
69
|
+
});
|
|
70
|
+
if (accounts.length === 0) return { accounts: [] };
|
|
71
|
+
await this.#onAccountsChanged(accounts);
|
|
72
|
+
}
|
|
73
|
+
return { accounts: this.accounts };
|
|
74
|
+
};
|
|
75
|
+
#disconnect = async () => {
|
|
76
|
+
this.#disconnected();
|
|
77
|
+
};
|
|
78
|
+
#emit(event, ...args) {
|
|
79
|
+
if (!this.#listeners[event]) return;
|
|
80
|
+
for (const listener of this.#listeners[event]) listener.apply(null, args);
|
|
81
|
+
}
|
|
82
|
+
#on = (event, listener) => {
|
|
83
|
+
if (!this.#listeners[event]) this.#listeners[event] = [];
|
|
84
|
+
this.#listeners[event].push(listener);
|
|
85
|
+
return () => this.#off(event, listener);
|
|
86
|
+
};
|
|
87
|
+
#off(event, listener) {
|
|
88
|
+
this.#listeners[event] = this.#listeners[event]?.filter((existingListener) => listener !== existingListener);
|
|
89
|
+
}
|
|
90
|
+
#disconnected() {
|
|
91
|
+
if (this.#account) {
|
|
92
|
+
this.#account = null;
|
|
93
|
+
this.#emit("change", { accounts: this.accounts });
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
#request(args) {
|
|
97
|
+
return this.#lock.runExclusive(async () => {
|
|
98
|
+
if (!this.#swo && args.type === "wallet_getPermissions") return [];
|
|
99
|
+
if (!this.#swo) {
|
|
100
|
+
this.#swo = await this.#loadWallet(this.provider);
|
|
101
|
+
this.#name = this.#swo.name;
|
|
102
|
+
if (typeof this.#swo.icon === "string") this.#icon = this.#swo.icon;
|
|
103
|
+
else this.#icon = this.#swo.icon.light;
|
|
104
|
+
}
|
|
105
|
+
return this.#swo.request(args);
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
async #loadWallet(provider) {
|
|
109
|
+
await init({
|
|
110
|
+
name: "MetaMaskStarknetSnapWallet",
|
|
111
|
+
remotes: [{
|
|
112
|
+
name: "MetaMaskStarknetSnapWallet",
|
|
113
|
+
alias: "MetaMaskStarknetSnapWallet",
|
|
114
|
+
entry: `https://snaps.consensys.io/starknet/get-starknet/v1/remoteEntry.js?ts=${Date.now()}`
|
|
115
|
+
}]
|
|
116
|
+
});
|
|
117
|
+
const result = await loadRemote("MetaMaskStarknetSnapWallet/index");
|
|
118
|
+
if (!result) throw new Error("Failed to load MetaMask Wallet");
|
|
119
|
+
const swo = new result.MetaMaskSnapWallet(provider, "*");
|
|
120
|
+
swo.on("accountsChanged", this.#onAccountsChanged.bind(this));
|
|
121
|
+
swo.on("networkChanged", this.#onNetworkChanged.bind(this));
|
|
122
|
+
return swo;
|
|
123
|
+
}
|
|
124
|
+
async #getStarknetChain() {
|
|
125
|
+
const chain = `${STARKNET_CHAIN_PREFIX}${await this.#request({ type: "wallet_requestChainId" })}`;
|
|
126
|
+
if (!isStarknetChain(chain)) throw new Error("Invalid Starknet chain");
|
|
127
|
+
return chain;
|
|
128
|
+
}
|
|
129
|
+
async #onAccountsChanged(accounts) {
|
|
130
|
+
if (!accounts || accounts.length === 0) {
|
|
131
|
+
this.#disconnected();
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
const [account] = accounts;
|
|
135
|
+
if (this.#account?.chain) {
|
|
136
|
+
this.#account.address = account;
|
|
137
|
+
this.#emit("change", { accounts: this.accounts });
|
|
138
|
+
} else {
|
|
139
|
+
const chain = await this.#getStarknetChain();
|
|
140
|
+
this.#account = {
|
|
141
|
+
address: account,
|
|
142
|
+
chain
|
|
143
|
+
};
|
|
144
|
+
this.#emit("change", { accounts: this.accounts });
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
#onNetworkChanged(chainId, accounts) {
|
|
148
|
+
if (!chainId) {
|
|
149
|
+
this.#disconnected();
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
const chain = formatStarknetChainId(chainId);
|
|
153
|
+
if (!isStarknetChain(chain)) throw new Error(`Invalid Starknet chain: ${chain}`);
|
|
154
|
+
if (accounts && accounts.length > 0) {
|
|
155
|
+
const [account] = accounts;
|
|
156
|
+
this.#account = {
|
|
157
|
+
address: account,
|
|
158
|
+
chain
|
|
159
|
+
};
|
|
160
|
+
} else if (this.#account !== null) this.#account.chain = chain;
|
|
161
|
+
this.#emit("change", { accounts: this.accounts });
|
|
162
|
+
}
|
|
242
163
|
};
|
|
243
164
|
function isMetaMaskProvider(obj) {
|
|
244
|
-
|
|
165
|
+
return obj !== null && typeof obj === "object" && Object.hasOwn(obj, "isMetaMask") && Object.hasOwn(obj, "request");
|
|
245
166
|
}
|
|
246
|
-
|
|
167
|
+
//#endregion
|
|
247
168
|
export { MetaMaskVirtualWallet, isMetaMaskProvider, metaMaskVirtualWallet };
|
|
248
|
-
|
|
169
|
+
|
|
170
|
+
//# sourceMappingURL=metamask.mjs.map
|
package/dist/metamask.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metamask.mjs","sources":["../src/metamask.ts"],"sourcesContent":["import { init, loadRemote } from \"@module-federation/runtime\";\nimport type { StarknetWalletAccount } from \"@starknet-io/get-starknet-wallet-standard\";\nimport type { StarknetChain } from \"@starknet-io/get-starknet-wallet-standard/chains\";\nimport {\n formatStarknetChainId,\n isStarknetChain,\n STARKNET_CHAIN_PREFIX,\n WELL_KNOWN_STARKNET_CHAINS,\n} from \"@starknet-io/get-starknet-wallet-standard/chains\";\nimport {\n type StarknetFeatures,\n StarknetWalletApi,\n type WalletWithStarknetFeatures,\n} from \"@starknet-io/get-starknet-wallet-standard/features\";\nimport type {\n RequestFnCall,\n RpcMessage,\n RpcTypeToMessageMap,\n StarknetWindowObject,\n} from \"@starknet-io/types-js\";\nimport {\n StandardConnect,\n type StandardConnectMethod,\n StandardDisconnect,\n type StandardDisconnectMethod,\n StandardEvents,\n type StandardEventsListeners,\n type StandardEventsNames,\n type StandardEventsOnMethod,\n} from \"@wallet-standard/features\";\nimport { Mutex } from \"async-mutex\";\nimport type { EIP1193Provider } from \"viem\";\n\nimport type { EIP6963ProviderInfo } from \"./types\";\n\nexport function metaMaskVirtualWallet(\n info: EIP6963ProviderInfo,\n provider: EIP1193Provider,\n): WalletWithStarknetFeatures | null {\n const rdnsCheck =\n info.rdns === \"io.metamask\" || info.rdns === \"io.metamask.flask\";\n if (rdnsCheck && isMetaMaskProvider(provider)) {\n return new MetaMaskVirtualWallet(provider);\n }\n\n return null;\n}\n\nexport class MetaMaskVirtualWallet implements WalletWithStarknetFeatures {\n #listeners: { [E in StandardEventsNames]?: StandardEventsListeners[E][] } =\n {};\n #account: { address: string; chain: StarknetChain } | null = null;\n #swo: StarknetWindowObject | null = null;\n #lock: Mutex = new Mutex();\n #name = \"MetaMask\";\n #icon =\n \"data:image/svg+xml;utf8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMTIiIGhlaWdodD0iMTg5IiB2aWV3Qm94PSIwIDAgMjEyIDE4OSI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cG9seWdvbiBmaWxsPSIjQ0RCREIyIiBwb2ludHM9IjYwLjc1IDE3My4yNSA4OC4zMTMgMTgwLjU2MyA4OC4zMTMgMTcxIDkwLjU2MyAxNjguNzUgMTA2LjMxMyAxNjguNzUgMTA2LjMxMyAxODAgMTA2LjMxMyAxODcuODc1IDg5LjQzOCAxODcuODc1IDY4LjYyNSAxNzguODc1Ii8+PHBvbHlnb24gZmlsbD0iI0NEQkRCMiIgcG9pbnRzPSIxMDUuNzUgMTczLjI1IDEzMi43NSAxODAuNTYzIDEzMi43NSAxNzEgMTM1IDE2OC43NSAxNTAuNzUgMTY4Ljc1IDE1MC43NSAxODAgMTUwLjc1IDE4Ny44NzUgMTMzLjg3NSAxODcuODc1IDExMy4wNjMgMTc4Ljg3NSIgdHJhbnNmb3JtPSJtYXRyaXgoLTEgMCAwIDEgMjU2LjUgMCkiLz48cG9seWdvbiBmaWxsPSIjMzkzOTM5IiBwb2ludHM9IjkwLjU2MyAxNTIuNDM4IDg4LjMxMyAxNzEgOTEuMTI1IDE2OC43NSAxMjAuMzc1IDE2OC43NSAxMjMuNzUgMTcxIDEyMS41IDE1Mi40MzggMTE3IDE0OS42MjUgOTQuNSAxNTAuMTg4Ii8+PHBvbHlnb24gZmlsbD0iI0Y4OUMzNSIgcG9pbnRzPSI3NS4zNzUgMjcgODguODc1IDU4LjUgOTUuMDYzIDE1MC4xODggMTE3IDE1MC4xODggMTIzLjc1IDU4LjUgMTM2LjEyNSAyNyIvPjxwb2x5Z29uIGZpbGw9IiNGODlEMzUiIHBvaW50cz0iMTYuMzEzIDk2LjE4OCAuNTYzIDE0MS43NSAzOS45MzggMTM5LjUgNjUuMjUgMTM5LjUgNjUuMjUgMTE5LjgxMyA2NC4xMjUgNzkuMzEzIDU4LjUgODMuODEzIi8+PHBvbHlnb24gZmlsbD0iI0Q4N0MzMCIgcG9pbnRzPSI0Ni4xMjUgMTAxLjI1IDkyLjI1IDEwMi4zNzUgODcuMTg4IDEyNiA2NS4yNSAxMjAuMzc1Ii8+PHBvbHlnb24gZmlsbD0iI0VBOEQzQSIgcG9pbnRzPSI0Ni4xMjUgMTAxLjgxMyA2NS4yNSAxMTkuODEzIDY1LjI1IDEzNy44MTMiLz48cG9seWdvbiBmaWxsPSIjRjg5RDM1IiBwb2ludHM9IjY1LjI1IDEyMC4zNzUgODcuNzUgMTI2IDk1LjA2MyAxNTAuMTg4IDkwIDE1MyA2NS4yNSAxMzguMzc1Ii8+PHBvbHlnb24gZmlsbD0iI0VCOEYzNSIgcG9pbnRzPSI2NS4yNSAxMzguMzc1IDYwLjc1IDE3My4yNSA5MC41NjMgMTUyLjQzOCIvPjxwb2x5Z29uIGZpbGw9IiNFQThFM0EiIHBvaW50cz0iOTIuMjUgMTAyLjM3NSA5NS4wNjMgMTUwLjE4OCA4Ni42MjUgMTI1LjcxOSIvPjxwb2x5Z29uIGZpbGw9IiNEODdDMzAiIHBvaW50cz0iMzkuMzc1IDEzOC45MzggNjUuMjUgMTM4LjM3NSA2MC43NSAxNzMuMjUiLz48cG9seWdvbiBmaWxsPSIjRUI4RjM1IiBwb2ludHM9IjEyLjkzOCAxODguNDM4IDYwLjc1IDE3My4yNSAzOS4zNzUgMTM4LjkzOCAuNTYzIDE0MS43NSIvPjxwb2x5Z29uIGZpbGw9IiNFODgyMUUiIHBvaW50cz0iODguODc1IDU4LjUgNjQuNjg4IDc4Ljc1IDQ2LjEyNSAxMDEuMjUgOTIuMjUgMTAyLjkzOCIvPjxwb2x5Z29uIGZpbGw9IiNERkNFQzMiIHBvaW50cz0iNjAuNzUgMTczLjI1IDkwLjU2MyAxNTIuNDM4IDg4LjMxMyAxNzAuNDM4IDg4LjMxMyAxODAuNTYzIDY4LjA2MyAxNzYuNjI1Ii8+PHBvbHlnb24gZmlsbD0iI0RGQ0VDMyIgcG9pbnRzPSIxMjEuNSAxNzMuMjUgMTUwLjc1IDE1Mi40MzggMTQ4LjUgMTcwLjQzOCAxNDguNSAxODAuNTYzIDEyOC4yNSAxNzYuNjI1IiB0cmFuc2Zvcm09Im1hdHJpeCgtMSAwIDAgMSAyNzIuMjUgMCkiLz48cG9seWdvbiBmaWxsPSIjMzkzOTM5IiBwb2ludHM9IjcwLjMxMyAxMTIuNSA2NC4xMjUgMTI1LjQzOCA4Ni4wNjMgMTE5LjgxMyIgdHJhbnNmb3JtPSJtYXRyaXgoLTEgMCAwIDEgMTUwLjE4OCAwKSIvPjxwb2x5Z29uIGZpbGw9IiNFODhGMzUiIHBvaW50cz0iMTIuMzc1IC41NjMgODguODc1IDU4LjUgNzUuOTM4IDI3Ii8+PHBhdGggZmlsbD0iIzhFNUEzMCIgZD0iTTEyLjM3NTAwMDIsMC41NjI1MDAwMDggTDIuMjUwMDAwMDMsMzEuNTAwMDAwNSBMNy44NzUwMDAxMiw2NS4yNTAwMDEgTDMuOTM3NTAwMDYsNjcuNTAwMDAxIEw5LjU2MjUwMDE0LDcyLjU2MjUgTDUuMDYyNTAwMDgsNzYuNTAwMDAxMSBMMTEuMjUsODIuMTI1MDAxMiBMNy4zMTI1MDAxMSw4NS41MDAwMDEzIEwxNi4zMTI1MDAyLDk2Ljc1MDAwMTQgTDU4LjUwMDAwMDksODMuODEyNTAxMiBDNzkuMTI1MDAxMiw2Ny4zMTI1MDA0IDg5LjI1MDAwMTMsNTguODc1MDAwMyA4OC44NzUwMDEzLDU4LjUwMDAwMDkgQzg4LjUwMDAwMTMsNTguMTI1MDAwOSA2My4wMDAwMDA5LDM4LjgxMjUwMDYgMTIuMzc1MDAwMiwwLjU2MjUwMDAwOCBaIi8+PGcgdHJhbnNmb3JtPSJtYXRyaXgoLTEgMCAwIDEgMjExLjUgMCkiPjxwb2x5Z29uIGZpbGw9IiNGODlEMzUiIHBvaW50cz0iMTYuMzEzIDk2LjE4OCAuNTYzIDE0MS43NSAzOS45MzggMTM5LjUgNjUuMjUgMTM5LjUgNjUuMjUgMTE5LjgxMyA2NC4xMjUgNzkuMzEzIDU4LjUgODMuODEzIi8+PHBvbHlnb24gZmlsbD0iI0Q4N0MzMCIgcG9pbnRzPSI0Ni4xMjUgMTAxLjI1IDkyLjI1IDEwMi4zNzUgODcuMTg4IDEyNiA2NS4yNSAxMjAuMzc1Ii8+PHBvbHlnb24gZmlsbD0iI0VBOEQzQSIgcG9pbnRzPSI0Ni4xMjUgMTAxLjgxMyA2NS4yNSAxMTkuODEzIDY1LjI1IDEzNy44MTMiLz48cG9seWdvbiBmaWxsPSIjRjg5RDM1IiBwb2ludHM9IjY1LjI1IDEyMC4zNzUgODcuNzUgMTI2IDk1LjA2MyAxNTAuMTg4IDkwIDE1MyA2NS4yNSAxMzguMzc1Ii8+PHBvbHlnb24gZmlsbD0iI0VCOEYzNSIgcG9pbnRzPSI2NS4yNSAxMzguMzc1IDYwLjc1IDE3My4yNSA5MCAxNTMiLz48cG9seWdvbiBmaWxsPSIjRUE4RTNBIiBwb2ludHM9IjkyLjI1IDEwMi4zNzUgOTUuMDYzIDE1MC4xODggODYuNjI1IDEyNS43MTkiLz48cG9seWdvbiBmaWxsPSIjRDg3QzMwIiBwb2ludHM9IjM5LjM3NSAxMzguOTM4IDY1LjI1IDEzOC4zNzUgNjAuNzUgMTczLjI1Ii8+PHBvbHlnb24gZmlsbD0iI0VCOEYzNSIgcG9pbnRzPSIxMi45MzggMTg4LjQzOCA2MC43NSAxNzMuMjUgMzkuMzc1IDEzOC45MzggLjU2MyAxNDEuNzUiLz48cG9seWdvbiBmaWxsPSIjRTg4MjFFIiBwb2ludHM9Ijg4Ljg3NSA1OC41IDY0LjY4OCA3OC43NSA0Ni4xMjUgMTAxLjI1IDkyLjI1IDEwMi45MzgiLz48cG9seWdvbiBmaWxsPSIjMzkzOTM5IiBwb2ludHM9IjcwLjMxMyAxMTIuNSA2NC4xMjUgMTI1LjQzOCA4Ni4wNjMgMTE5LjgxMyIgdHJhbnNmb3JtPSJtYXRyaXgoLTEgMCAwIDEgMTUwLjE4OCAwKSIvPjxwb2x5Z29uIGZpbGw9IiNFODhGMzUiIHBvaW50cz0iMTIuMzc1IC41NjMgODguODc1IDU4LjUgNzUuOTM4IDI3Ii8+PHBhdGggZmlsbD0iIzhFNUEzMCIgZD0iTTEyLjM3NTAwMDIsMC41NjI1MDAwMDggTDIuMjUwMDAwMDMsMzEuNTAwMDAwNSBMNy44NzUwMDAxMiw2NS4yNTAwMDEgTDMuOTM3NTAwMDYsNjcuNTAwMDAxIEw5LjU2MjUwMDE0LDcyLjU2MjUgTDUuMDYyNTAwMDgsNzYuNTAwMDAxMSBMMTEuMjUsODIuMTI1MDAxMiBMNy4zMTI1MDAxMSw4NS41MDAwMDEzIEwxNi4zMTI1MDAyLDk2Ljc1MDAwMTQgTDU4LjUwMDAwMDksODMuODEyNTAxMiBDNzkuMTI1MDAxMiw2Ny4zMTI1MDA0IDg5LjI1MDAwMTMsNTguODc1MDAwMyA4OC44NzUwMDEzLDU4LjUwMDAwMDkgQzg4LjUwMDAwMTMsNTguMTI1MDAwOSA2My4wMDAwMDA5LDM4LjgxMjUwMDYgMTIuMzc1MDAwMiwwLjU2MjUwMDAwOCBaIi8+PC9nPjwvZz48L3N2Zz4=\";\n\n constructor(private provider: MetaMaskProvider) {}\n\n get version() {\n return \"1.0.0\" as const;\n }\n\n get name() {\n return this.#name;\n }\n\n get icon() {\n return this.#icon as WalletWithStarknetFeatures[\"icon\"];\n }\n\n get features(): StarknetFeatures {\n return {\n [StandardConnect]: {\n version: \"1.0.0\" as const,\n connect: this.#connect.bind(this),\n },\n [StandardDisconnect]: {\n version: \"1.0.0\" as const,\n disconnect: this.#disconnect.bind(this),\n },\n [StandardEvents]: {\n version: \"1.0.0\" as const,\n on: this.#on.bind(this),\n },\n [StarknetWalletApi]: {\n id: \"metamask\",\n version: \"1.0.0\" as const,\n request: this.#request.bind(this),\n walletVersion: \"2.0.0\",\n },\n };\n }\n\n get chains() {\n return WELL_KNOWN_STARKNET_CHAINS.slice();\n }\n\n get accounts(): StarknetWalletAccount[] {\n if (this.#account) {\n return [\n {\n address: this.#account.address,\n publicKey: new Uint8Array(),\n chains: [this.#account.chain],\n features: [],\n },\n ];\n }\n\n return [];\n }\n\n #connect: StandardConnectMethod = async ({ silent }) => {\n if (!this.#account) {\n const accounts = await this.#request({\n type: \"wallet_requestAccounts\",\n params: {\n silent_mode: silent,\n },\n });\n\n // TODO(fra): maybe we should throw an error here?\n // User rejected the request.\n if (accounts.length === 0) {\n return { accounts: [] };\n }\n\n await this.#onAccountsChanged(accounts);\n }\n\n return { accounts: this.accounts };\n };\n\n #disconnect: StandardDisconnectMethod = async () => {\n this.#disconnected();\n };\n\n #emit<E extends StandardEventsNames>(\n event: E,\n ...args: Parameters<StandardEventsListeners[E]>\n ): void {\n if (!this.#listeners[event]) return;\n\n for (const listener of this.#listeners[event]) {\n listener.apply(null, args);\n }\n }\n\n #on: StandardEventsOnMethod = (event, listener) => {\n if (!this.#listeners[event]) {\n this.#listeners[event] = [];\n }\n\n this.#listeners[event].push(listener);\n\n return (): void => this.#off(event, listener);\n };\n\n #off<E extends StandardEventsNames>(\n event: E,\n listener: StandardEventsListeners[E],\n ): void {\n this.#listeners[event] = this.#listeners[event]?.filter(\n (existingListener) => listener !== existingListener,\n );\n }\n\n #disconnected() {\n if (this.#account) {\n this.#account = null;\n this.#emit(\"change\", { accounts: this.accounts });\n }\n }\n\n #request<T extends RpcMessage[\"type\"]>(\n args: RequestFnCall<T>,\n ): Promise<RpcTypeToMessageMap[T][\"result\"]> {\n return this.#lock.runExclusive(async () => {\n // Loading the MetaMask snap requires the user to confirm the installation.\n // If the snap is not installed, return an empty array to avoid the wallet popup.\n if (!this.#swo && args.type === \"wallet_getPermissions\") {\n return [];\n }\n\n if (!this.#swo) {\n this.#swo = await this.#loadWallet(this.provider);\n // Bind properties from the virtual wallet to make sure they're up-to-date.\n this.#name = this.#swo.name;\n if (typeof this.#swo.icon === \"string\") {\n this.#icon = this.#swo.icon;\n } else {\n this.#icon = this.#swo.icon.light;\n }\n }\n\n return this.#swo.request(args);\n });\n }\n\n async #loadWallet(provider: MetaMaskProvider): Promise<StarknetWindowObject> {\n await init({\n name: \"MetaMaskStarknetSnapWallet\",\n remotes: [\n {\n name: \"MetaMaskStarknetSnapWallet\",\n alias: \"MetaMaskStarknetSnapWallet\",\n entry: `https://snaps.consensys.io/starknet/get-starknet/v1/remoteEntry.js?ts=${Date.now()}`,\n },\n ],\n });\n\n const result = await loadRemote<{\n MetaMaskSnapWallet: new (\n provider: MetaMaskProvider,\n version: string,\n ) => StarknetWindowObject;\n }>(\"MetaMaskStarknetSnapWallet/index\");\n\n if (!result) {\n // as `loadWallet` should only trigger when the wallet selected,\n // therefore it is make sense to throw error to indicate the wallet is not loaded\n throw new Error(\"Failed to load MetaMask Wallet\");\n }\n\n const swo = new result.MetaMaskSnapWallet(provider, \"*\");\n swo.on(\"accountsChanged\", this.#onAccountsChanged.bind(this));\n swo.on(\"networkChanged\", this.#onNetworkChanged.bind(this));\n return swo;\n }\n\n async #getStarknetChain(): Promise<StarknetChain> {\n const chainId = await this.#request({\n type: \"wallet_requestChainId\",\n });\n const chain = `${STARKNET_CHAIN_PREFIX}${chainId}` as const;\n\n if (!isStarknetChain(chain)) {\n throw new Error(\"Invalid Starknet chain\");\n }\n\n return chain;\n }\n\n async #onAccountsChanged(accounts: string[]) {\n if (!accounts || accounts.length === 0) {\n this.#disconnected();\n return;\n }\n\n const [account] = accounts;\n\n if (this.#account?.chain) {\n // Only account changed. No need to make a request for the chain id.\n this.#account.address = account;\n this.#emit(\"change\", { accounts: this.accounts });\n } else {\n const chain = await this.#getStarknetChain();\n this.#account = { address: account, chain };\n this.#emit(\"change\", { accounts: this.accounts });\n }\n }\n\n #onNetworkChanged(chainId?: string, accounts?: string[]) {\n if (!chainId) {\n this.#disconnected();\n return;\n }\n\n const chain = formatStarknetChainId(chainId);\n\n if (!isStarknetChain(chain)) {\n throw new Error(`Invalid Starknet chain: ${chain}`);\n }\n\n // Accounts should always be set, but check just in case.\n if (accounts?.length > 0) {\n const [account] = accounts;\n\n this.#account = { address: account, chain };\n this.#emit(\"change\", { accounts: this.accounts });\n } else {\n this.#account.chain = chain;\n this.#emit(\"change\", { accounts: this.accounts });\n }\n }\n}\n\nexport type MetaMaskProvider = {\n isMetaMask: boolean;\n request(options: { method: string }): Promise<void>;\n};\n\nexport function isMetaMaskProvider(obj: unknown): obj is MetaMaskProvider {\n return (\n obj !== null &&\n typeof obj === \"object\" &&\n Object.hasOwn(obj, \"isMetaMask\") &&\n Object.hasOwn(obj, \"request\")\n );\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"metamask.mjs","names":["#name","#icon","#connect","#disconnect","#on","#request","#account","#onAccountsChanged","#disconnected","#listeners","#off","#emit","#lock","#swo","#loadWallet","#onNetworkChanged","#getStarknetChain"],"sources":["../src/metamask.ts"],"sourcesContent":["import { init, loadRemote } from \"@module-federation/runtime\";\nimport type { StarknetWalletAccount } from \"@starknet-io/get-starknet-wallet-standard\";\nimport type { StarknetChain } from \"@starknet-io/get-starknet-wallet-standard/chains\";\nimport {\n formatStarknetChainId,\n isStarknetChain,\n STARKNET_CHAIN_PREFIX,\n WELL_KNOWN_STARKNET_CHAINS,\n} from \"@starknet-io/get-starknet-wallet-standard/chains\";\nimport {\n type StarknetFeatures,\n StarknetWalletApi,\n type WalletWithStarknetFeatures,\n} from \"@starknet-io/get-starknet-wallet-standard/features\";\nimport type {\n RequestFnCall,\n RpcMessage,\n RpcTypeToMessageMap,\n StarknetWindowObject,\n} from \"@starknet-io/types-js\";\nimport {\n StandardConnect,\n type StandardConnectMethod,\n StandardDisconnect,\n type StandardDisconnectMethod,\n StandardEvents,\n type StandardEventsListeners,\n type StandardEventsNames,\n type StandardEventsOnMethod,\n} from \"@wallet-standard/features\";\nimport { Mutex } from \"async-mutex\";\nimport type { EIP1193Provider } from \"viem\";\n\nimport type { EIP6963ProviderInfo } from \"./types\";\n\nexport function metaMaskVirtualWallet(\n info: EIP6963ProviderInfo,\n provider: EIP1193Provider,\n): WalletWithStarknetFeatures | null {\n const rdnsCheck =\n info.rdns === \"io.metamask\" || info.rdns === \"io.metamask.flask\";\n if (rdnsCheck && isMetaMaskProvider(provider)) {\n return new MetaMaskVirtualWallet(provider);\n }\n\n return null;\n}\n\nexport class MetaMaskVirtualWallet implements WalletWithStarknetFeatures {\n #listeners: { [E in StandardEventsNames]?: StandardEventsListeners[E][] } =\n {};\n #account: { address: string; chain: StarknetChain } | null = null;\n #swo: StarknetWindowObject | null = null;\n #lock: Mutex = new Mutex();\n #name = \"MetaMask\";\n #icon =\n \"data:image/svg+xml;utf8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMTIiIGhlaWdodD0iMTg5IiB2aWV3Qm94PSIwIDAgMjEyIDE4OSI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cG9seWdvbiBmaWxsPSIjQ0RCREIyIiBwb2ludHM9IjYwLjc1IDE3My4yNSA4OC4zMTMgMTgwLjU2MyA4OC4zMTMgMTcxIDkwLjU2MyAxNjguNzUgMTA2LjMxMyAxNjguNzUgMTA2LjMxMyAxODAgMTA2LjMxMyAxODcuODc1IDg5LjQzOCAxODcuODc1IDY4LjYyNSAxNzguODc1Ii8+PHBvbHlnb24gZmlsbD0iI0NEQkRCMiIgcG9pbnRzPSIxMDUuNzUgMTczLjI1IDEzMi43NSAxODAuNTYzIDEzMi43NSAxNzEgMTM1IDE2OC43NSAxNTAuNzUgMTY4Ljc1IDE1MC43NSAxODAgMTUwLjc1IDE4Ny44NzUgMTMzLjg3NSAxODcuODc1IDExMy4wNjMgMTc4Ljg3NSIgdHJhbnNmb3JtPSJtYXRyaXgoLTEgMCAwIDEgMjU2LjUgMCkiLz48cG9seWdvbiBmaWxsPSIjMzkzOTM5IiBwb2ludHM9IjkwLjU2MyAxNTIuNDM4IDg4LjMxMyAxNzEgOTEuMTI1IDE2OC43NSAxMjAuMzc1IDE2OC43NSAxMjMuNzUgMTcxIDEyMS41IDE1Mi40MzggMTE3IDE0OS42MjUgOTQuNSAxNTAuMTg4Ii8+PHBvbHlnb24gZmlsbD0iI0Y4OUMzNSIgcG9pbnRzPSI3NS4zNzUgMjcgODguODc1IDU4LjUgOTUuMDYzIDE1MC4xODggMTE3IDE1MC4xODggMTIzLjc1IDU4LjUgMTM2LjEyNSAyNyIvPjxwb2x5Z29uIGZpbGw9IiNGODlEMzUiIHBvaW50cz0iMTYuMzEzIDk2LjE4OCAuNTYzIDE0MS43NSAzOS45MzggMTM5LjUgNjUuMjUgMTM5LjUgNjUuMjUgMTE5LjgxMyA2NC4xMjUgNzkuMzEzIDU4LjUgODMuODEzIi8+PHBvbHlnb24gZmlsbD0iI0Q4N0MzMCIgcG9pbnRzPSI0Ni4xMjUgMTAxLjI1IDkyLjI1IDEwMi4zNzUgODcuMTg4IDEyNiA2NS4yNSAxMjAuMzc1Ii8+PHBvbHlnb24gZmlsbD0iI0VBOEQzQSIgcG9pbnRzPSI0Ni4xMjUgMTAxLjgxMyA2NS4yNSAxMTkuODEzIDY1LjI1IDEzNy44MTMiLz48cG9seWdvbiBmaWxsPSIjRjg5RDM1IiBwb2ludHM9IjY1LjI1IDEyMC4zNzUgODcuNzUgMTI2IDk1LjA2MyAxNTAuMTg4IDkwIDE1MyA2NS4yNSAxMzguMzc1Ii8+PHBvbHlnb24gZmlsbD0iI0VCOEYzNSIgcG9pbnRzPSI2NS4yNSAxMzguMzc1IDYwLjc1IDE3My4yNSA5MC41NjMgMTUyLjQzOCIvPjxwb2x5Z29uIGZpbGw9IiNFQThFM0EiIHBvaW50cz0iOTIuMjUgMTAyLjM3NSA5NS4wNjMgMTUwLjE4OCA4Ni42MjUgMTI1LjcxOSIvPjxwb2x5Z29uIGZpbGw9IiNEODdDMzAiIHBvaW50cz0iMzkuMzc1IDEzOC45MzggNjUuMjUgMTM4LjM3NSA2MC43NSAxNzMuMjUiLz48cG9seWdvbiBmaWxsPSIjRUI4RjM1IiBwb2ludHM9IjEyLjkzOCAxODguNDM4IDYwLjc1IDE3My4yNSAzOS4zNzUgMTM4LjkzOCAuNTYzIDE0MS43NSIvPjxwb2x5Z29uIGZpbGw9IiNFODgyMUUiIHBvaW50cz0iODguODc1IDU4LjUgNjQuNjg4IDc4Ljc1IDQ2LjEyNSAxMDEuMjUgOTIuMjUgMTAyLjkzOCIvPjxwb2x5Z29uIGZpbGw9IiNERkNFQzMiIHBvaW50cz0iNjAuNzUgMTczLjI1IDkwLjU2MyAxNTIuNDM4IDg4LjMxMyAxNzAuNDM4IDg4LjMxMyAxODAuNTYzIDY4LjA2MyAxNzYuNjI1Ii8+PHBvbHlnb24gZmlsbD0iI0RGQ0VDMyIgcG9pbnRzPSIxMjEuNSAxNzMuMjUgMTUwLjc1IDE1Mi40MzggMTQ4LjUgMTcwLjQzOCAxNDguNSAxODAuNTYzIDEyOC4yNSAxNzYuNjI1IiB0cmFuc2Zvcm09Im1hdHJpeCgtMSAwIDAgMSAyNzIuMjUgMCkiLz48cG9seWdvbiBmaWxsPSIjMzkzOTM5IiBwb2ludHM9IjcwLjMxMyAxMTIuNSA2NC4xMjUgMTI1LjQzOCA4Ni4wNjMgMTE5LjgxMyIgdHJhbnNmb3JtPSJtYXRyaXgoLTEgMCAwIDEgMTUwLjE4OCAwKSIvPjxwb2x5Z29uIGZpbGw9IiNFODhGMzUiIHBvaW50cz0iMTIuMzc1IC41NjMgODguODc1IDU4LjUgNzUuOTM4IDI3Ii8+PHBhdGggZmlsbD0iIzhFNUEzMCIgZD0iTTEyLjM3NTAwMDIsMC41NjI1MDAwMDggTDIuMjUwMDAwMDMsMzEuNTAwMDAwNSBMNy44NzUwMDAxMiw2NS4yNTAwMDEgTDMuOTM3NTAwMDYsNjcuNTAwMDAxIEw5LjU2MjUwMDE0LDcyLjU2MjUgTDUuMDYyNTAwMDgsNzYuNTAwMDAxMSBMMTEuMjUsODIuMTI1MDAxMiBMNy4zMTI1MDAxMSw4NS41MDAwMDEzIEwxNi4zMTI1MDAyLDk2Ljc1MDAwMTQgTDU4LjUwMDAwMDksODMuODEyNTAxMiBDNzkuMTI1MDAxMiw2Ny4zMTI1MDA0IDg5LjI1MDAwMTMsNTguODc1MDAwMyA4OC44NzUwMDEzLDU4LjUwMDAwMDkgQzg4LjUwMDAwMTMsNTguMTI1MDAwOSA2My4wMDAwMDA5LDM4LjgxMjUwMDYgMTIuMzc1MDAwMiwwLjU2MjUwMDAwOCBaIi8+PGcgdHJhbnNmb3JtPSJtYXRyaXgoLTEgMCAwIDEgMjExLjUgMCkiPjxwb2x5Z29uIGZpbGw9IiNGODlEMzUiIHBvaW50cz0iMTYuMzEzIDk2LjE4OCAuNTYzIDE0MS43NSAzOS45MzggMTM5LjUgNjUuMjUgMTM5LjUgNjUuMjUgMTE5LjgxMyA2NC4xMjUgNzkuMzEzIDU4LjUgODMuODEzIi8+PHBvbHlnb24gZmlsbD0iI0Q4N0MzMCIgcG9pbnRzPSI0Ni4xMjUgMTAxLjI1IDkyLjI1IDEwMi4zNzUgODcuMTg4IDEyNiA2NS4yNSAxMjAuMzc1Ii8+PHBvbHlnb24gZmlsbD0iI0VBOEQzQSIgcG9pbnRzPSI0Ni4xMjUgMTAxLjgxMyA2NS4yNSAxMTkuODEzIDY1LjI1IDEzNy44MTMiLz48cG9seWdvbiBmaWxsPSIjRjg5RDM1IiBwb2ludHM9IjY1LjI1IDEyMC4zNzUgODcuNzUgMTI2IDk1LjA2MyAxNTAuMTg4IDkwIDE1MyA2NS4yNSAxMzguMzc1Ii8+PHBvbHlnb24gZmlsbD0iI0VCOEYzNSIgcG9pbnRzPSI2NS4yNSAxMzguMzc1IDYwLjc1IDE3My4yNSA5MCAxNTMiLz48cG9seWdvbiBmaWxsPSIjRUE4RTNBIiBwb2ludHM9IjkyLjI1IDEwMi4zNzUgOTUuMDYzIDE1MC4xODggODYuNjI1IDEyNS43MTkiLz48cG9seWdvbiBmaWxsPSIjRDg3QzMwIiBwb2ludHM9IjM5LjM3NSAxMzguOTM4IDY1LjI1IDEzOC4zNzUgNjAuNzUgMTczLjI1Ii8+PHBvbHlnb24gZmlsbD0iI0VCOEYzNSIgcG9pbnRzPSIxMi45MzggMTg4LjQzOCA2MC43NSAxNzMuMjUgMzkuMzc1IDEzOC45MzggLjU2MyAxNDEuNzUiLz48cG9seWdvbiBmaWxsPSIjRTg4MjFFIiBwb2ludHM9Ijg4Ljg3NSA1OC41IDY0LjY4OCA3OC43NSA0Ni4xMjUgMTAxLjI1IDkyLjI1IDEwMi45MzgiLz48cG9seWdvbiBmaWxsPSIjMzkzOTM5IiBwb2ludHM9IjcwLjMxMyAxMTIuNSA2NC4xMjUgMTI1LjQzOCA4Ni4wNjMgMTE5LjgxMyIgdHJhbnNmb3JtPSJtYXRyaXgoLTEgMCAwIDEgMTUwLjE4OCAwKSIvPjxwb2x5Z29uIGZpbGw9IiNFODhGMzUiIHBvaW50cz0iMTIuMzc1IC41NjMgODguODc1IDU4LjUgNzUuOTM4IDI3Ii8+PHBhdGggZmlsbD0iIzhFNUEzMCIgZD0iTTEyLjM3NTAwMDIsMC41NjI1MDAwMDggTDIuMjUwMDAwMDMsMzEuNTAwMDAwNSBMNy44NzUwMDAxMiw2NS4yNTAwMDEgTDMuOTM3NTAwMDYsNjcuNTAwMDAxIEw5LjU2MjUwMDE0LDcyLjU2MjUgTDUuMDYyNTAwMDgsNzYuNTAwMDAxMSBMMTEuMjUsODIuMTI1MDAxMiBMNy4zMTI1MDAxMSw4NS41MDAwMDEzIEwxNi4zMTI1MDAyLDk2Ljc1MDAwMTQgTDU4LjUwMDAwMDksODMuODEyNTAxMiBDNzkuMTI1MDAxMiw2Ny4zMTI1MDA0IDg5LjI1MDAwMTMsNTguODc1MDAwMyA4OC44NzUwMDEzLDU4LjUwMDAwMDkgQzg4LjUwMDAwMTMsNTguMTI1MDAwOSA2My4wMDAwMDA5LDM4LjgxMjUwMDYgMTIuMzc1MDAwMiwwLjU2MjUwMDAwOCBaIi8+PC9nPjwvZz48L3N2Zz4=\";\n\n constructor(private provider: MetaMaskProvider) {}\n\n get version() {\n return \"1.0.0\" as const;\n }\n\n get name() {\n return this.#name;\n }\n\n get icon() {\n return this.#icon as WalletWithStarknetFeatures[\"icon\"];\n }\n\n get features(): StarknetFeatures {\n return {\n [StandardConnect]: {\n version: \"1.0.0\" as const,\n connect: this.#connect.bind(this),\n },\n [StandardDisconnect]: {\n version: \"1.0.0\" as const,\n disconnect: this.#disconnect.bind(this),\n },\n [StandardEvents]: {\n version: \"1.0.0\" as const,\n on: this.#on.bind(this),\n },\n [StarknetWalletApi]: {\n id: \"metamask\",\n version: \"1.0.0\" as const,\n request: this.#request.bind(this),\n walletVersion: \"2.0.0\",\n },\n };\n }\n\n get chains() {\n return WELL_KNOWN_STARKNET_CHAINS.slice();\n }\n\n get accounts(): StarknetWalletAccount[] {\n if (this.#account) {\n return [\n {\n address: this.#account.address,\n publicKey: new Uint8Array(),\n chains: [this.#account.chain],\n features: [],\n },\n ];\n }\n\n return [];\n }\n\n #connect: StandardConnectMethod = async ({ silent } = {}) => {\n if (!this.#account) {\n const accounts = await this.#request({\n type: \"wallet_requestAccounts\",\n params: {\n silent_mode: silent,\n },\n });\n\n // TODO(fra): maybe we should throw an error here?\n // User rejected the request.\n if (accounts.length === 0) {\n return { accounts: [] };\n }\n\n await this.#onAccountsChanged(accounts);\n }\n\n return { accounts: this.accounts };\n };\n\n #disconnect: StandardDisconnectMethod = async () => {\n this.#disconnected();\n };\n\n #emit<E extends StandardEventsNames>(\n event: E,\n ...args: Parameters<StandardEventsListeners[E]>\n ): void {\n if (!this.#listeners[event]) return;\n\n for (const listener of this.#listeners[event]) {\n listener.apply(null, args);\n }\n }\n\n #on: StandardEventsOnMethod = (event, listener) => {\n if (!this.#listeners[event]) {\n this.#listeners[event] = [];\n }\n\n this.#listeners[event].push(listener);\n\n return (): void => this.#off(event, listener);\n };\n\n #off<E extends StandardEventsNames>(\n event: E,\n listener: StandardEventsListeners[E],\n ): void {\n this.#listeners[event] = this.#listeners[event]?.filter(\n (existingListener) => listener !== existingListener,\n );\n }\n\n #disconnected() {\n if (this.#account) {\n this.#account = null;\n this.#emit(\"change\", { accounts: this.accounts });\n }\n }\n\n #request<T extends RpcMessage[\"type\"]>(\n args: RequestFnCall<T>,\n ): Promise<RpcTypeToMessageMap[T][\"result\"]> {\n return this.#lock.runExclusive(async () => {\n // Loading the MetaMask snap requires the user to confirm the installation.\n // If the snap is not installed, return an empty array to avoid the wallet popup.\n if (!this.#swo && args.type === \"wallet_getPermissions\") {\n return [];\n }\n\n if (!this.#swo) {\n this.#swo = await this.#loadWallet(this.provider);\n // Bind properties from the virtual wallet to make sure they're up-to-date.\n this.#name = this.#swo.name;\n if (typeof this.#swo.icon === \"string\") {\n this.#icon = this.#swo.icon;\n } else {\n this.#icon = this.#swo.icon.light;\n }\n }\n\n return this.#swo.request(args);\n });\n }\n\n async #loadWallet(provider: MetaMaskProvider): Promise<StarknetWindowObject> {\n await init({\n name: \"MetaMaskStarknetSnapWallet\",\n remotes: [\n {\n name: \"MetaMaskStarknetSnapWallet\",\n alias: \"MetaMaskStarknetSnapWallet\",\n entry: `https://snaps.consensys.io/starknet/get-starknet/v1/remoteEntry.js?ts=${Date.now()}`,\n },\n ],\n });\n\n const result = await loadRemote<{\n MetaMaskSnapWallet: new (\n provider: MetaMaskProvider,\n version: string,\n ) => StarknetWindowObject;\n }>(\"MetaMaskStarknetSnapWallet/index\");\n\n if (!result) {\n // as `loadWallet` should only trigger when the wallet selected,\n // therefore it is make sense to throw error to indicate the wallet is not loaded\n throw new Error(\"Failed to load MetaMask Wallet\");\n }\n\n const swo = new result.MetaMaskSnapWallet(provider, \"*\");\n swo.on(\"accountsChanged\", this.#onAccountsChanged.bind(this));\n swo.on(\"networkChanged\", this.#onNetworkChanged.bind(this));\n return swo;\n }\n\n async #getStarknetChain(): Promise<StarknetChain> {\n const chainId = await this.#request({\n type: \"wallet_requestChainId\",\n });\n const chain = `${STARKNET_CHAIN_PREFIX}${chainId}` as const;\n\n if (!isStarknetChain(chain)) {\n throw new Error(\"Invalid Starknet chain\");\n }\n\n return chain;\n }\n\n async #onAccountsChanged(accounts?: string[]) {\n if (!accounts || accounts.length === 0) {\n this.#disconnected();\n return;\n }\n\n const [account] = accounts;\n\n if (this.#account?.chain) {\n // Only account changed. No need to make a request for the chain id.\n this.#account.address = account;\n this.#emit(\"change\", { accounts: this.accounts });\n } else {\n const chain = await this.#getStarknetChain();\n this.#account = { address: account, chain };\n this.#emit(\"change\", { accounts: this.accounts });\n }\n }\n\n #onNetworkChanged(chainId?: string, accounts?: string[]) {\n if (!chainId) {\n this.#disconnected();\n return;\n }\n\n const chain = formatStarknetChainId(chainId);\n\n if (!isStarknetChain(chain)) {\n throw new Error(`Invalid Starknet chain: ${chain}`);\n }\n\n // Accounts should always be set, but check just in case.\n if (accounts && accounts.length > 0) {\n const [account] = accounts;\n\n this.#account = { address: account, chain };\n } else if (this.#account !== null) {\n this.#account.chain = chain;\n }\n this.#emit(\"change\", { accounts: this.accounts });\n }\n}\n\nexport type MetaMaskProvider = {\n isMetaMask: boolean;\n request(options: { method: string }): Promise<void>;\n};\n\nexport function isMetaMaskProvider(obj: unknown): obj is MetaMaskProvider {\n return (\n obj !== null &&\n typeof obj === \"object\" &&\n Object.hasOwn(obj, \"isMetaMask\") &&\n Object.hasOwn(obj, \"request\")\n );\n}\n"],"mappings":"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"}
|
package/dist/types.d.cts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { WalletWithStarknetFeatures } from "@starknet-io/get-starknet-wallet-standard/features";
|
|
2
|
+
import { EIP1193Provider } from "viem";
|
|
3
|
+
|
|
4
|
+
//#region src/types.d.ts
|
|
5
|
+
type EIP6963ProviderInfo = {
|
|
6
|
+
rdns: string;
|
|
7
|
+
};
|
|
8
|
+
type EIP1193Adapter = (info: EIP6963ProviderInfo, provider: EIP1193Provider) => WalletWithStarknetFeatures | null;
|
|
9
|
+
//#endregion
|
|
10
|
+
export { EIP6963ProviderInfo as n, EIP1193Adapter as t };
|
|
11
|
+
//# sourceMappingURL=types.d.cts.map
|
package/dist/types.d.mts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { WalletWithStarknetFeatures } from "@starknet-io/get-starknet-wallet-standard/features";
|
|
2
|
+
import { EIP1193Provider } from "viem";
|
|
3
|
+
|
|
4
|
+
//#region src/types.d.ts
|
|
5
|
+
type EIP6963ProviderInfo = {
|
|
6
|
+
rdns: string;
|
|
7
|
+
};
|
|
8
|
+
type EIP1193Adapter = (info: EIP6963ProviderInfo, provider: EIP1193Provider) => WalletWithStarknetFeatures | null;
|
|
9
|
+
//#endregion
|
|
10
|
+
export { EIP6963ProviderInfo as n, EIP1193Adapter as t };
|
|
11
|
+
//# sourceMappingURL=types.d.mts.map
|