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