@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.
@@ -1,26 +1,28 @@
1
- import { StarknetWalletAccount } from '@starknet-io/get-starknet-wallet-standard';
2
- import { WalletWithStarknetFeatures, StarknetFeatures } from '@starknet-io/get-starknet-wallet-standard/features';
3
- import { EIP1193Provider } from 'viem';
4
- import { EIP6963ProviderInfo } from './index.mjs';
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
- #private;
9
- private provider;
10
- constructor(provider: MetaMaskProvider);
11
- get version(): "1.0.0";
12
- get name(): string;
13
- get icon(): WalletWithStarknetFeatures["icon"];
14
- get features(): StarknetFeatures;
15
- get chains(): ("starknet:0x534e5f4d41494e" | "starknet:0x534e5f5345504f4c4941")[];
16
- get accounts(): StarknetWalletAccount[];
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
- isMetaMask: boolean;
20
- request(options: {
21
- method: string;
22
- }): Promise<void>;
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 { type MetaMaskProvider, MetaMaskVirtualWallet, isMetaMaskProvider, metaMaskVirtualWallet };
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 '@module-federation/runtime';
2
- import { WELL_KNOWN_STARKNET_CHAINS, formatStarknetChainId, isStarknetChain, STARKNET_CHAIN_PREFIX } 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
-
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
- const rdnsCheck = info.rdns === "io.metamask" || info.rdns === "io.metamask.flask";
32
- if (rdnsCheck && isMetaMaskProvider(provider)) {
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
- class MetaMaskVirtualWallet {
38
- constructor(provider) {
39
- this.provider = provider;
40
- __privateAdd(this, _emit);
41
- __privateAdd(this, _off);
42
- __privateAdd(this, _disconnected);
43
- __privateAdd(this, _request);
44
- __privateAdd(this, _loadWallet);
45
- __privateAdd(this, _getStarknetChain);
46
- __privateAdd(this, _onAccountsChanged);
47
- __privateAdd(this, _onNetworkChanged);
48
- __privateAdd(this, _listeners, {});
49
- __privateAdd(this, _account, null);
50
- __privateAdd(this, _swo, null);
51
- __privateAdd(this, _lock, new Mutex());
52
- __privateAdd(this, _name, "MetaMask");
53
- __privateAdd(this, _icon, "data:image/svg+xml;utf8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMTIiIGhlaWdodD0iMTg5IiB2aWV3Qm94PSIwIDAgMjEyIDE4OSI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cG9seWdvbiBmaWxsPSIjQ0RCREIyIiBwb2ludHM9IjYwLjc1IDE3My4yNSA4OC4zMTMgMTgwLjU2MyA4OC4zMTMgMTcxIDkwLjU2MyAxNjguNzUgMTA2LjMxMyAxNjguNzUgMTA2LjMxMyAxODAgMTA2LjMxMyAxODcuODc1IDg5LjQzOCAxODcuODc1IDY4LjYyNSAxNzguODc1Ii8+PHBvbHlnb24gZmlsbD0iI0NEQkRCMiIgcG9pbnRzPSIxMDUuNzUgMTczLjI1IDEzMi43NSAxODAuNTYzIDEzMi43NSAxNzEgMTM1IDE2OC43NSAxNTAuNzUgMTY4Ljc1IDE1MC43NSAxODAgMTUwLjc1IDE4Ny44NzUgMTMzLjg3NSAxODcuODc1IDExMy4wNjMgMTc4Ljg3NSIgdHJhbnNmb3JtPSJtYXRyaXgoLTEgMCAwIDEgMjU2LjUgMCkiLz48cG9seWdvbiBmaWxsPSIjMzkzOTM5IiBwb2ludHM9IjkwLjU2MyAxNTIuNDM4IDg4LjMxMyAxNzEgOTEuMTI1IDE2OC43NSAxMjAuMzc1IDE2OC43NSAxMjMuNzUgMTcxIDEyMS41IDE1Mi40MzggMTE3IDE0OS42MjUgOTQuNSAxNTAuMTg4Ii8+PHBvbHlnb24gZmlsbD0iI0Y4OUMzNSIgcG9pbnRzPSI3NS4zNzUgMjcgODguODc1IDU4LjUgOTUuMDYzIDE1MC4xODggMTE3IDE1MC4xODggMTIzLjc1IDU4LjUgMTM2LjEyNSAyNyIvPjxwb2x5Z29uIGZpbGw9IiNGODlEMzUiIHBvaW50cz0iMTYuMzEzIDk2LjE4OCAuNTYzIDE0MS43NSAzOS45MzggMTM5LjUgNjUuMjUgMTM5LjUgNjUuMjUgMTE5LjgxMyA2NC4xMjUgNzkuMzEzIDU4LjUgODMuODEzIi8+PHBvbHlnb24gZmlsbD0iI0Q4N0MzMCIgcG9pbnRzPSI0Ni4xMjUgMTAxLjI1IDkyLjI1IDEwMi4zNzUgODcuMTg4IDEyNiA2NS4yNSAxMjAuMzc1Ii8+PHBvbHlnb24gZmlsbD0iI0VBOEQzQSIgcG9pbnRzPSI0Ni4xMjUgMTAxLjgxMyA2NS4yNSAxMTkuODEzIDY1LjI1IDEzNy44MTMiLz48cG9seWdvbiBmaWxsPSIjRjg5RDM1IiBwb2ludHM9IjY1LjI1IDEyMC4zNzUgODcuNzUgMTI2IDk1LjA2MyAxNTAuMTg4IDkwIDE1MyA2NS4yNSAxMzguMzc1Ii8+PHBvbHlnb24gZmlsbD0iI0VCOEYzNSIgcG9pbnRzPSI2NS4yNSAxMzguMzc1IDYwLjc1IDE3My4yNSA5MC41NjMgMTUyLjQzOCIvPjxwb2x5Z29uIGZpbGw9IiNFQThFM0EiIHBvaW50cz0iOTIuMjUgMTAyLjM3NSA5NS4wNjMgMTUwLjE4OCA4Ni42MjUgMTI1LjcxOSIvPjxwb2x5Z29uIGZpbGw9IiNEODdDMzAiIHBvaW50cz0iMzkuMzc1IDEzOC45MzggNjUuMjUgMTM4LjM3NSA2MC43NSAxNzMuMjUiLz48cG9seWdvbiBmaWxsPSIjRUI4RjM1IiBwb2ludHM9IjEyLjkzOCAxODguNDM4IDYwLjc1IDE3My4yNSAzOS4zNzUgMTM4LjkzOCAuNTYzIDE0MS43NSIvPjxwb2x5Z29uIGZpbGw9IiNFODgyMUUiIHBvaW50cz0iODguODc1IDU4LjUgNjQuNjg4IDc4Ljc1IDQ2LjEyNSAxMDEuMjUgOTIuMjUgMTAyLjkzOCIvPjxwb2x5Z29uIGZpbGw9IiNERkNFQzMiIHBvaW50cz0iNjAuNzUgMTczLjI1IDkwLjU2MyAxNTIuNDM4IDg4LjMxMyAxNzAuNDM4IDg4LjMxMyAxODAuNTYzIDY4LjA2MyAxNzYuNjI1Ii8+PHBvbHlnb24gZmlsbD0iI0RGQ0VDMyIgcG9pbnRzPSIxMjEuNSAxNzMuMjUgMTUwLjc1IDE1Mi40MzggMTQ4LjUgMTcwLjQzOCAxNDguNSAxODAuNTYzIDEyOC4yNSAxNzYuNjI1IiB0cmFuc2Zvcm09Im1hdHJpeCgtMSAwIDAgMSAyNzIuMjUgMCkiLz48cG9seWdvbiBmaWxsPSIjMzkzOTM5IiBwb2ludHM9IjcwLjMxMyAxMTIuNSA2NC4xMjUgMTI1LjQzOCA4Ni4wNjMgMTE5LjgxMyIgdHJhbnNmb3JtPSJtYXRyaXgoLTEgMCAwIDEgMTUwLjE4OCAwKSIvPjxwb2x5Z29uIGZpbGw9IiNFODhGMzUiIHBvaW50cz0iMTIuMzc1IC41NjMgODguODc1IDU4LjUgNzUuOTM4IDI3Ii8+PHBhdGggZmlsbD0iIzhFNUEzMCIgZD0iTTEyLjM3NTAwMDIsMC41NjI1MDAwMDggTDIuMjUwMDAwMDMsMzEuNTAwMDAwNSBMNy44NzUwMDAxMiw2NS4yNTAwMDEgTDMuOTM3NTAwMDYsNjcuNTAwMDAxIEw5LjU2MjUwMDE0LDcyLjU2MjUgTDUuMDYyNTAwMDgsNzYuNTAwMDAxMSBMMTEuMjUsODIuMTI1MDAxMiBMNy4zMTI1MDAxMSw4NS41MDAwMDEzIEwxNi4zMTI1MDAyLDk2Ljc1MDAwMTQgTDU4LjUwMDAwMDksODMuODEyNTAxMiBDNzkuMTI1MDAxMiw2Ny4zMTI1MDA0IDg5LjI1MDAwMTMsNTguODc1MDAwMyA4OC44NzUwMDEzLDU4LjUwMDAwMDkgQzg4LjUwMDAwMTMsNTguMTI1MDAwOSA2My4wMDAwMDA5LDM4LjgxMjUwMDYgMTIuMzc1MDAwMiwwLjU2MjUwMDAwOCBaIi8+PGcgdHJhbnNmb3JtPSJtYXRyaXgoLTEgMCAwIDEgMjExLjUgMCkiPjxwb2x5Z29uIGZpbGw9IiNGODlEMzUiIHBvaW50cz0iMTYuMzEzIDk2LjE4OCAuNTYzIDE0MS43NSAzOS45MzggMTM5LjUgNjUuMjUgMTM5LjUgNjUuMjUgMTE5LjgxMyA2NC4xMjUgNzkuMzEzIDU4LjUgODMuODEzIi8+PHBvbHlnb24gZmlsbD0iI0Q4N0MzMCIgcG9pbnRzPSI0Ni4xMjUgMTAxLjI1IDkyLjI1IDEwMi4zNzUgODcuMTg4IDEyNiA2NS4yNSAxMjAuMzc1Ii8+PHBvbHlnb24gZmlsbD0iI0VBOEQzQSIgcG9pbnRzPSI0Ni4xMjUgMTAxLjgxMyA2NS4yNSAxMTkuODEzIDY1LjI1IDEzNy44MTMiLz48cG9seWdvbiBmaWxsPSIjRjg5RDM1IiBwb2ludHM9IjY1LjI1IDEyMC4zNzUgODcuNzUgMTI2IDk1LjA2MyAxNTAuMTg4IDkwIDE1MyA2NS4yNSAxMzguMzc1Ii8+PHBvbHlnb24gZmlsbD0iI0VCOEYzNSIgcG9pbnRzPSI2NS4yNSAxMzguMzc1IDYwLjc1IDE3My4yNSA5MCAxNTMiLz48cG9seWdvbiBmaWxsPSIjRUE4RTNBIiBwb2ludHM9IjkyLjI1IDEwMi4zNzUgOTUuMDYzIDE1MC4xODggODYuNjI1IDEyNS43MTkiLz48cG9seWdvbiBmaWxsPSIjRDg3QzMwIiBwb2ludHM9IjM5LjM3NSAxMzguOTM4IDY1LjI1IDEzOC4zNzUgNjAuNzUgMTczLjI1Ii8+PHBvbHlnb24gZmlsbD0iI0VCOEYzNSIgcG9pbnRzPSIxMi45MzggMTg4LjQzOCA2MC43NSAxNzMuMjUgMzkuMzc1IDEzOC45MzggLjU2MyAxNDEuNzUiLz48cG9seWdvbiBmaWxsPSIjRTg4MjFFIiBwb2ludHM9Ijg4Ljg3NSA1OC41IDY0LjY4OCA3OC43NSA0Ni4xMjUgMTAxLjI1IDkyLjI1IDEwMi45MzgiLz48cG9seWdvbiBmaWxsPSIjMzkzOTM5IiBwb2ludHM9IjcwLjMxMyAxMTIuNSA2NC4xMjUgMTI1LjQzOCA4Ni4wNjMgMTE5LjgxMyIgdHJhbnNmb3JtPSJtYXRyaXgoLTEgMCAwIDEgMTUwLjE4OCAwKSIvPjxwb2x5Z29uIGZpbGw9IiNFODhGMzUiIHBvaW50cz0iMTIuMzc1IC41NjMgODguODc1IDU4LjUgNzUuOTM4IDI3Ii8+PHBhdGggZmlsbD0iIzhFNUEzMCIgZD0iTTEyLjM3NTAwMDIsMC41NjI1MDAwMDggTDIuMjUwMDAwMDMsMzEuNTAwMDAwNSBMNy44NzUwMDAxMiw2NS4yNTAwMDEgTDMuOTM3NTAwMDYsNjcuNTAwMDAxIEw5LjU2MjUwMDE0LDcyLjU2MjUgTDUuMDYyNTAwMDgsNzYuNTAwMDAxMSBMMTEuMjUsODIuMTI1MDAxMiBMNy4zMTI1MDAxMSw4NS41MDAwMDEzIEwxNi4zMTI1MDAyLDk2Ljc1MDAwMTQgTDU4LjUwMDAwMDksODMuODEyNTAxMiBDNzkuMTI1MDAxMiw2Ny4zMTI1MDA0IDg5LjI1MDAwMTMsNTguODc1MDAwMyA4OC44NzUwMDEzLDU4LjUwMDAwMDkgQzg4LjUwMDAwMTMsNTguMTI1MDAwOSA2My4wMDAwMDA5LDM4LjgxMjUwMDYgMTIuMzc1MDAwMiwwLjU2MjUwMDAwOCBaIi8+PC9nPjwvZz48L3N2Zz4=");
54
- __privateAdd(this, _connect, async ({ silent }) => {
55
- if (!__privateGet(this, _account)) {
56
- const accounts = await __privateMethod(this, _request, request_fn).call(this, {
57
- type: "wallet_requestAccounts",
58
- params: {
59
- silent_mode: silent
60
- }
61
- });
62
- if (accounts.length === 0) {
63
- return { accounts: [] };
64
- }
65
- await __privateMethod(this, _onAccountsChanged, onAccountsChanged_fn).call(this, accounts);
66
- }
67
- return { accounts: this.accounts };
68
- });
69
- __privateAdd(this, _disconnect, async () => {
70
- __privateMethod(this, _disconnected, disconnected_fn).call(this);
71
- });
72
- __privateAdd(this, _on, (event, listener) => {
73
- if (!__privateGet(this, _listeners)[event]) {
74
- __privateGet(this, _listeners)[event] = [];
75
- }
76
- __privateGet(this, _listeners)[event].push(listener);
77
- return () => __privateMethod(this, _off, off_fn).call(this, event, listener);
78
- });
79
- }
80
- get version() {
81
- return "1.0.0";
82
- }
83
- get name() {
84
- return __privateGet(this, _name);
85
- }
86
- get icon() {
87
- return __privateGet(this, _icon);
88
- }
89
- get features() {
90
- return {
91
- [StandardConnect]: {
92
- version: "1.0.0",
93
- connect: __privateGet(this, _connect).bind(this)
94
- },
95
- [StandardDisconnect]: {
96
- version: "1.0.0",
97
- disconnect: __privateGet(this, _disconnect).bind(this)
98
- },
99
- [StandardEvents]: {
100
- version: "1.0.0",
101
- on: __privateGet(this, _on).bind(this)
102
- },
103
- [StarknetWalletApi]: {
104
- id: "metamask",
105
- version: "1.0.0",
106
- request: __privateMethod(this, _request, request_fn).bind(this),
107
- walletVersion: "2.0.0"
108
- }
109
- };
110
- }
111
- get chains() {
112
- return WELL_KNOWN_STARKNET_CHAINS.slice();
113
- }
114
- get accounts() {
115
- if (__privateGet(this, _account)) {
116
- return [
117
- {
118
- address: __privateGet(this, _account).address,
119
- publicKey: new Uint8Array(),
120
- chains: [__privateGet(this, _account).chain],
121
- features: []
122
- }
123
- ];
124
- }
125
- return [];
126
- }
127
- }
128
- _listeners = new WeakMap();
129
- _account = new WeakMap();
130
- _swo = new WeakMap();
131
- _lock = new WeakMap();
132
- _name = new WeakMap();
133
- _icon = new WeakMap();
134
- _connect = new WeakMap();
135
- _disconnect = new WeakMap();
136
- _emit = new WeakSet();
137
- emit_fn = function(event, ...args) {
138
- if (!__privateGet(this, _listeners)[event])
139
- return;
140
- for (const listener of __privateGet(this, _listeners)[event]) {
141
- listener.apply(null, args);
142
- }
143
- };
144
- _on = new WeakMap();
145
- _off = new WeakSet();
146
- off_fn = function(event, listener) {
147
- __privateGet(this, _listeners)[event] = __privateGet(this, _listeners)[event]?.filter(
148
- (existingListener) => listener !== existingListener
149
- );
150
- };
151
- _disconnected = new WeakSet();
152
- disconnected_fn = function() {
153
- if (__privateGet(this, _account)) {
154
- __privateSet(this, _account, null);
155
- __privateMethod(this, _emit, emit_fn).call(this, "change", { accounts: this.accounts });
156
- }
157
- };
158
- _request = new WeakSet();
159
- request_fn = function(args) {
160
- return __privateGet(this, _lock).runExclusive(async () => {
161
- if (!__privateGet(this, _swo) && args.type === "wallet_getPermissions") {
162
- return [];
163
- }
164
- if (!__privateGet(this, _swo)) {
165
- __privateSet(this, _swo, await __privateMethod(this, _loadWallet, loadWallet_fn).call(this, this.provider));
166
- __privateSet(this, _name, __privateGet(this, _swo).name);
167
- if (typeof __privateGet(this, _swo).icon === "string") {
168
- __privateSet(this, _icon, __privateGet(this, _swo).icon);
169
- } else {
170
- __privateSet(this, _icon, __privateGet(this, _swo).icon.light);
171
- }
172
- }
173
- return __privateGet(this, _swo).request(args);
174
- });
175
- };
176
- _loadWallet = new WeakSet();
177
- loadWallet_fn = async function(provider) {
178
- await init({
179
- name: "MetaMaskStarknetSnapWallet",
180
- remotes: [
181
- {
182
- name: "MetaMaskStarknetSnapWallet",
183
- alias: "MetaMaskStarknetSnapWallet",
184
- entry: `https://snaps.consensys.io/starknet/get-starknet/v1/remoteEntry.js?ts=${Date.now()}`
185
- }
186
- ]
187
- });
188
- const result = await loadRemote("MetaMaskStarknetSnapWallet/index");
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
- return obj !== null && typeof obj === "object" && Object.hasOwn(obj, "isMetaMask") && Object.hasOwn(obj, "request");
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
- //# sourceMappingURL=metamask.mjs.map
169
+
170
+ //# sourceMappingURL=metamask.mjs.map
@@ -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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"}
@@ -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
@@ -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