@starknet-io/get-starknet-discovery 5.0.0 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +158 -174
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +12 -8
- package/dist/index.d.mts +12 -8
- package/dist/index.mjs +156 -171
- package/dist/index.mjs.map +1 -1
- package/package.json +19 -13
- package/dist/index.d.ts +0 -16
package/dist/index.cjs
CHANGED
|
@@ -1,187 +1,171 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
+
let _starknet_io_get_starknet_virtual_wallet_metamask = require("@starknet-io/get-starknet-virtual-wallet/metamask");
|
|
3
|
+
let _starknet_io_get_starknet_wallet_standard_features = require("@starknet-io/get-starknet-wallet-standard/features");
|
|
4
|
+
let _starknet_io_get_starknet_wallet_standard = require("@starknet-io/get-starknet-wallet-standard");
|
|
5
|
+
//#region src/eip1193-wallet.ts
|
|
7
6
|
function registerEIP1193WalletFromEIP6963Discovery(eip1193Adapters, register) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
return () => window.removeEventListener("eip6963:announceProvider", handler);
|
|
7
|
+
if (typeof window === "undefined") return;
|
|
8
|
+
const handler = (event) => {
|
|
9
|
+
const { info, provider } = event.detail;
|
|
10
|
+
for (const adapter of eip1193Adapters) {
|
|
11
|
+
const wallet = adapter(info, provider);
|
|
12
|
+
if (wallet) {
|
|
13
|
+
register(wallet);
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
window.addEventListener("eip6963:announceProvider", handler);
|
|
19
|
+
window.dispatchEvent(new Event("eip6963:requestProvider"));
|
|
20
|
+
return () => window.removeEventListener("eip6963:announceProvider", handler);
|
|
23
21
|
}
|
|
24
|
-
|
|
22
|
+
//#endregion
|
|
23
|
+
//#region src/injected-wallet.ts
|
|
25
24
|
function registerInjectedWalletDiscovery(register) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
refresh();
|
|
40
|
-
return {
|
|
41
|
-
unregister: () => {
|
|
42
|
-
},
|
|
43
|
-
refresh
|
|
44
|
-
};
|
|
25
|
+
if (typeof window === "undefined") return {
|
|
26
|
+
unregister: () => {},
|
|
27
|
+
refresh: () => {}
|
|
28
|
+
};
|
|
29
|
+
function refresh() {
|
|
30
|
+
const injectedWallets = scanWindowForWallets(window);
|
|
31
|
+
for (const wallet of injectedWallets) register(new _starknet_io_get_starknet_wallet_standard.StarknetInjectedWallet(wallet));
|
|
32
|
+
}
|
|
33
|
+
refresh();
|
|
34
|
+
return {
|
|
35
|
+
unregister: () => {},
|
|
36
|
+
refresh
|
|
37
|
+
};
|
|
45
38
|
}
|
|
46
|
-
function scanWindowForWallets(
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
return wallets;
|
|
55
|
-
}, []);
|
|
39
|
+
function scanWindowForWallets(window) {
|
|
40
|
+
return Object.getOwnPropertyNames(window).reduce((wallets, key) => {
|
|
41
|
+
if (key.startsWith("starknet")) {
|
|
42
|
+
const wallet = window[key];
|
|
43
|
+
if (isStarknetWindowObject(wallet)) wallets.push(wallet);
|
|
44
|
+
}
|
|
45
|
+
return wallets;
|
|
46
|
+
}, []);
|
|
56
47
|
}
|
|
57
48
|
const STARKNET_WALLET_KEYS = [
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
49
|
+
"id",
|
|
50
|
+
"name",
|
|
51
|
+
"version",
|
|
52
|
+
"icon",
|
|
53
|
+
"request",
|
|
54
|
+
"on",
|
|
55
|
+
"off"
|
|
65
56
|
];
|
|
66
57
|
function isStarknetWindowObject(wallet) {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
return STARKNET_WALLET_KEYS.every((key) => key in wallet);
|
|
58
|
+
if (typeof wallet !== "object" || wallet === null) return false;
|
|
59
|
+
return STARKNET_WALLET_KEYS.every((key) => key in wallet);
|
|
70
60
|
}
|
|
71
|
-
|
|
61
|
+
//#endregion
|
|
62
|
+
//#region src/standard-wallet.ts
|
|
72
63
|
function registerStandardWalletDiscovery(register) {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
handler
|
|
82
|
-
);
|
|
83
|
-
window.dispatchEvent(new AppReadyEvent(api));
|
|
84
|
-
return () => window.removeEventListener(
|
|
85
|
-
"wallet-standard:register-wallet",
|
|
86
|
-
handler
|
|
87
|
-
);
|
|
64
|
+
if (typeof window === "undefined") return;
|
|
65
|
+
const api = Object.freeze({ register });
|
|
66
|
+
const handler = ({ detail: callback }) => {
|
|
67
|
+
callback(api);
|
|
68
|
+
};
|
|
69
|
+
window.addEventListener("wallet-standard:register-wallet", handler);
|
|
70
|
+
window.dispatchEvent(new AppReadyEvent(api));
|
|
71
|
+
return () => window.removeEventListener("wallet-standard:register-wallet", handler);
|
|
88
72
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
73
|
+
var AppReadyEvent = class extends Event {
|
|
74
|
+
constructor(detail) {
|
|
75
|
+
super("wallet-standard:app-ready", {
|
|
76
|
+
bubbles: false,
|
|
77
|
+
cancelable: false,
|
|
78
|
+
composed: false
|
|
79
|
+
});
|
|
80
|
+
this.detail = detail;
|
|
81
|
+
}
|
|
82
|
+
get type() {
|
|
83
|
+
return "wallet-standard:app-ready";
|
|
84
|
+
}
|
|
85
|
+
preventDefault() {
|
|
86
|
+
throw new Error("preventDefault is deprecated");
|
|
87
|
+
}
|
|
88
|
+
stopImmediatePropagation() {
|
|
89
|
+
throw new Error("stopImmediatePropagation is deprecated");
|
|
90
|
+
}
|
|
91
|
+
stopPropagation() {
|
|
92
|
+
throw new Error("stopPropagation is deprecated");
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
//#endregion
|
|
96
|
+
//#region src/store.ts
|
|
97
|
+
const DEFAULT_EIP1193_ADAPTERS = [_starknet_io_get_starknet_virtual_wallet_metamask.metaMaskVirtualWallet];
|
|
98
|
+
function createStore({ eip1193Adapters = DEFAULT_EIP1193_ADAPTERS } = {}) {
|
|
99
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
100
|
+
let wallets = [];
|
|
101
|
+
function emitChanges() {
|
|
102
|
+
for (const listener of listeners) listener(wallets.map(({ wallet }) => wallet).slice());
|
|
103
|
+
}
|
|
104
|
+
registerStandardWalletDiscovery((wallet) => {
|
|
105
|
+
if (!(0, _starknet_io_get_starknet_wallet_standard_features.isStarknetWallet)(wallet)) return;
|
|
106
|
+
const existing = wallets.find((w) => w.wallet.name === wallet.name);
|
|
107
|
+
if (existing) {
|
|
108
|
+
if (existing.discoverer !== "standard") {
|
|
109
|
+
wallets = [{
|
|
110
|
+
discoverer: "standard",
|
|
111
|
+
wallet
|
|
112
|
+
}, ...wallets.filter((w) => w.wallet.name !== wallet.name)];
|
|
113
|
+
emitChanges();
|
|
114
|
+
}
|
|
115
|
+
} else {
|
|
116
|
+
wallets = [{
|
|
117
|
+
discoverer: "standard",
|
|
118
|
+
wallet
|
|
119
|
+
}, ...wallets];
|
|
120
|
+
emitChanges();
|
|
121
|
+
}
|
|
122
|
+
return () => {
|
|
123
|
+
wallets = wallets.filter((w) => w.wallet.name !== wallet.name);
|
|
124
|
+
emitChanges();
|
|
125
|
+
};
|
|
126
|
+
});
|
|
127
|
+
registerEIP1193WalletFromEIP6963Discovery(eip1193Adapters, (wallet) => {
|
|
128
|
+
if (!(0, _starknet_io_get_starknet_wallet_standard_features.isStarknetWallet)(wallet)) return;
|
|
129
|
+
if (!wallets.find((w) => w.wallet.name === wallet.name)) {
|
|
130
|
+
wallets = [{
|
|
131
|
+
discoverer: "eip6963",
|
|
132
|
+
wallet
|
|
133
|
+
}, ...wallets];
|
|
134
|
+
emitChanges();
|
|
135
|
+
}
|
|
136
|
+
return () => {
|
|
137
|
+
wallets = wallets.filter((w) => w.wallet.name !== wallet.name);
|
|
138
|
+
emitChanges();
|
|
139
|
+
};
|
|
140
|
+
});
|
|
141
|
+
const { refresh: refreshInjectedWallets } = registerInjectedWalletDiscovery((wallet) => {
|
|
142
|
+
if (!(0, _starknet_io_get_starknet_wallet_standard_features.isStarknetWallet)(wallet)) return;
|
|
143
|
+
if (!wallets.find((w) => w.wallet.name === wallet.name)) {
|
|
144
|
+
wallets = [{
|
|
145
|
+
discoverer: "injected",
|
|
146
|
+
wallet
|
|
147
|
+
}, ...wallets];
|
|
148
|
+
emitChanges();
|
|
149
|
+
}
|
|
150
|
+
return () => {
|
|
151
|
+
wallets = wallets.filter((w) => w.wallet.name !== wallet.name);
|
|
152
|
+
emitChanges();
|
|
153
|
+
};
|
|
154
|
+
});
|
|
155
|
+
return {
|
|
156
|
+
_refreshInjectedWallets: refreshInjectedWallets,
|
|
157
|
+
getWallets() {
|
|
158
|
+
return wallets.map(({ wallet }) => wallet).slice();
|
|
159
|
+
},
|
|
160
|
+
subscribe(listener) {
|
|
161
|
+
listeners.add(listener);
|
|
162
|
+
return () => {
|
|
163
|
+
listeners.delete(listener);
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
};
|
|
110
167
|
}
|
|
111
|
-
|
|
112
|
-
const DEFAULT_EIP1193_ADAPTERS = [metamask.metaMaskVirtualWallet];
|
|
113
|
-
function createStore({
|
|
114
|
-
eip1193Adapters = DEFAULT_EIP1193_ADAPTERS
|
|
115
|
-
} = {}) {
|
|
116
|
-
const listeners = /* @__PURE__ */ new Set();
|
|
117
|
-
let wallets = [];
|
|
118
|
-
function emitChanges() {
|
|
119
|
-
for (const listener of listeners) {
|
|
120
|
-
listener(wallets.map(({ wallet }) => wallet).slice());
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
registerStandardWalletDiscovery((wallet) => {
|
|
124
|
-
if (!features.isStarknetWallet(wallet))
|
|
125
|
-
return;
|
|
126
|
-
const existing = wallets.find((w) => w.wallet.name === wallet.name);
|
|
127
|
-
if (existing) {
|
|
128
|
-
if (existing.discoverer !== "standard") {
|
|
129
|
-
wallets = [
|
|
130
|
-
{ discoverer: "standard", wallet },
|
|
131
|
-
...wallets.filter((w) => w.wallet.name !== wallet.name)
|
|
132
|
-
];
|
|
133
|
-
emitChanges();
|
|
134
|
-
}
|
|
135
|
-
} else {
|
|
136
|
-
wallets = [{ discoverer: "standard", wallet }, ...wallets];
|
|
137
|
-
emitChanges();
|
|
138
|
-
}
|
|
139
|
-
return () => {
|
|
140
|
-
wallets = wallets.filter((w) => w.wallet.name !== wallet.name);
|
|
141
|
-
emitChanges();
|
|
142
|
-
};
|
|
143
|
-
});
|
|
144
|
-
registerEIP1193WalletFromEIP6963Discovery(eip1193Adapters, (wallet) => {
|
|
145
|
-
if (!features.isStarknetWallet(wallet))
|
|
146
|
-
return;
|
|
147
|
-
const existing = wallets.find((w) => w.wallet.name === wallet.name);
|
|
148
|
-
if (!existing) {
|
|
149
|
-
wallets = [{ discoverer: "eip6963", wallet }, ...wallets];
|
|
150
|
-
emitChanges();
|
|
151
|
-
}
|
|
152
|
-
return () => {
|
|
153
|
-
wallets = wallets.filter((w) => w.wallet.name !== wallet.name);
|
|
154
|
-
emitChanges();
|
|
155
|
-
};
|
|
156
|
-
});
|
|
157
|
-
const { refresh: refreshInjectedWallets } = registerInjectedWalletDiscovery(
|
|
158
|
-
(wallet) => {
|
|
159
|
-
if (!features.isStarknetWallet(wallet))
|
|
160
|
-
return;
|
|
161
|
-
const existing = wallets.find((w) => w.wallet.name === wallet.name);
|
|
162
|
-
if (!existing) {
|
|
163
|
-
wallets = [{ discoverer: "injected", wallet }, ...wallets];
|
|
164
|
-
emitChanges();
|
|
165
|
-
}
|
|
166
|
-
return () => {
|
|
167
|
-
wallets = wallets.filter((w) => w.wallet.name !== wallet.name);
|
|
168
|
-
emitChanges();
|
|
169
|
-
};
|
|
170
|
-
}
|
|
171
|
-
);
|
|
172
|
-
return {
|
|
173
|
-
_refreshInjectedWallets: refreshInjectedWallets,
|
|
174
|
-
getWallets() {
|
|
175
|
-
return wallets.map(({ wallet }) => wallet).slice();
|
|
176
|
-
},
|
|
177
|
-
subscribe(listener) {
|
|
178
|
-
listeners.add(listener);
|
|
179
|
-
return () => {
|
|
180
|
-
listeners.delete(listener);
|
|
181
|
-
};
|
|
182
|
-
}
|
|
183
|
-
};
|
|
184
|
-
}
|
|
185
|
-
|
|
168
|
+
//#endregion
|
|
186
169
|
exports.createStore = createStore;
|
|
187
|
-
|
|
170
|
+
|
|
171
|
+
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/eip1193-wallet.ts","../src/injected-wallet.ts","../src/standard-wallet.ts","../src/store.ts"],"sourcesContent":["import type { EIP1193Adapter } from \"@starknet-io/get-starknet-virtual-wallet\";\nimport type { Wallet } from \"@wallet-standard/base\";\n\nexport function registerEIP1193WalletFromEIP6963Discovery(\n eip1193Adapters: EIP1193Adapter[],\n register: (wallet: Wallet) => () => void,\n) {\n if (typeof window === \"undefined\") return;\n\n const handler = (event: CustomEvent) => {\n const { info, provider } = event.detail;\n for (const adapter of eip1193Adapters) {\n const wallet = adapter(info, provider);\n if (wallet) {\n register(wallet);\n return;\n }\n }\n };\n\n window.addEventListener(\"eip6963:announceProvider\", handler);\n\n window.dispatchEvent(new Event(\"eip6963:requestProvider\"));\n\n return () => window.removeEventListener(\"eip6963:announceProvider\", handler);\n}\n","import { StarknetInjectedWallet } from \"@starknet-io/get-starknet-wallet-standard\";\nimport type { StarknetWindowObject } from \"@starknet-io/types-js\";\nimport type { Wallet } from \"@wallet-standard/base\";\n\nexport function registerInjectedWalletDiscovery(\n register: (wallet: Wallet) => () => void,\n): {\n unregister: () => void;\n refresh: () => void;\n} {\n if (typeof window === \"undefined\")\n return {\n unregister: () => {},\n refresh: () => {},\n };\n\n function refresh() {\n const injectedWallets = scanWindowForWallets(window);\n\n for (const wallet of injectedWallets) {\n register(new StarknetInjectedWallet(wallet));\n }\n }\n\n refresh();\n\n return {\n unregister: () => {},\n refresh,\n };\n}\n\nfunction scanWindowForWallets(window: Window): StarknetWindowObject[] {\n return Object.getOwnPropertyNames(window).reduce((wallets, key) => {\n if (key.startsWith(\"starknet\")) {\n const wallet = window[key];\n\n if (isStarknetWindowObject(wallet)) {\n wallets.push(wallet);\n }\n }\n\n return wallets;\n }, []);\n}\n\nconst STARKNET_WALLET_KEYS = [\n \"id\",\n \"name\",\n \"version\",\n \"icon\",\n \"request\",\n \"on\",\n \"off\",\n];\n\nfunction isStarknetWindowObject(\n wallet: unknown,\n): wallet is StarknetWindowObject {\n if (typeof wallet !== \"object\" || wallet === null) return false;\n return STARKNET_WALLET_KEYS.every((key) => key in wallet);\n}\n","import type {\n Wallet,\n WalletEventsWindow,\n WindowAppReadyEvent,\n WindowAppReadyEventAPI,\n WindowRegisterWalletEvent,\n} from \"@wallet-standard/base\";\n\nexport function registerStandardWalletDiscovery(\n register: (wallet: Wallet) => () => void,\n) {\n if (typeof window === \"undefined\") return;\n\n const api = Object.freeze({ register });\n\n const handler = ({ detail: callback }: WindowRegisterWalletEvent) => {\n callback(api);\n };\n\n (window as WalletEventsWindow).addEventListener(\n \"wallet-standard:register-wallet\",\n handler,\n );\n\n (window as WalletEventsWindow).dispatchEvent(new AppReadyEvent(api));\n\n return () =>\n (window as WalletEventsWindow).removeEventListener(\n \"wallet-standard:register-wallet\",\n handler,\n );\n}\n\nclass AppReadyEvent extends Event implements WindowAppReadyEvent {\n constructor(public readonly detail: WindowAppReadyEventAPI) {\n super(\"wallet-standard:app-ready\", {\n bubbles: false,\n cancelable: false,\n composed: false,\n });\n }\n\n get type() {\n return \"wallet-standard:app-ready\" as const;\n }\n\n preventDefault(): never {\n throw new Error(\"preventDefault is deprecated\");\n }\n\n stopImmediatePropagation(): never {\n throw new Error(\"stopImmediatePropagation is deprecated\");\n }\n\n stopPropagation(): never {\n throw new Error(\"stopPropagation is deprecated\");\n }\n}\n","import type { EIP1193Adapter } from \"@starknet-io/get-starknet-virtual-wallet\";\nimport { metaMaskVirtualWallet } from \"@starknet-io/get-starknet-virtual-wallet/metamask\";\nimport {\n isStarknetWallet,\n type WalletWithStarknetFeatures,\n} from \"@starknet-io/get-starknet-wallet-standard/features\";\n\nimport { registerEIP1193WalletFromEIP6963Discovery } from \"./eip1193-wallet\";\nimport { registerInjectedWalletDiscovery } from \"./injected-wallet\";\nimport { registerStandardWalletDiscovery } from \"./standard-wallet\";\n\nexport type CleanupListener = () => void;\nexport type Listener = (wallets: readonly WalletWithStarknetFeatures[]) => void;\n\nexport type Store = {\n getWallets: () => WalletWithStarknetFeatures[];\n subscribe: (listener: Listener) => CleanupListener;\n _refreshInjectedWallets: () => void;\n};\n\n// Track how a wallet was discovered to prefer standard wallets over (legacy) injected wallets\ntype DiscoveredStarknetWallet = {\n discoverer: \"standard\" | \"injected\" | \"eip6963\";\n wallet: WalletWithStarknetFeatures;\n};\n\nexport type CreateStoreOptions = {\n eip1193Adapters?: EIP1193Adapter[];\n};\n\nconst DEFAULT_EIP1193_ADAPTERS: EIP1193Adapter[] = [metaMaskVirtualWallet];\n\nexport function createStore({\n eip1193Adapters = DEFAULT_EIP1193_ADAPTERS,\n}: CreateStoreOptions = {}): Store {\n const listeners = new Set<Listener>();\n let wallets: DiscoveredStarknetWallet[] = [];\n\n function emitChanges() {\n for (const listener of listeners) {\n listener(wallets.map(({ wallet }) => wallet).slice());\n }\n }\n\n registerStandardWalletDiscovery((wallet) => {\n if (!isStarknetWallet(wallet)) return;\n\n const existing = wallets.find((w) => w.wallet.name === wallet.name);\n\n if (existing) {\n // If the wallet exists but is an injected wallet this library registered,\n // replace it with the standard wallet registered by the wallet itself.\n if (existing.discoverer !== \"standard\") {\n wallets = [\n { discoverer: \"standard\", wallet },\n ...wallets.filter((w) => w.wallet.name !== wallet.name),\n ];\n\n emitChanges();\n }\n } else {\n wallets = [{ discoverer: \"standard\", wallet }, ...wallets];\n\n emitChanges();\n }\n\n return () => {\n wallets = wallets.filter((w) => w.wallet.name !== wallet.name);\n\n emitChanges();\n };\n });\n\n registerEIP1193WalletFromEIP6963Discovery(eip1193Adapters, (wallet) => {\n if (!isStarknetWallet(wallet)) return;\n\n const existing = wallets.find((w) => w.wallet.name === wallet.name);\n\n if (!existing) {\n wallets = [{ discoverer: \"eip6963\", wallet }, ...wallets];\n\n emitChanges();\n }\n\n return () => {\n wallets = wallets.filter((w) => w.wallet.name !== wallet.name);\n\n emitChanges();\n };\n });\n\n const { refresh: refreshInjectedWallets } = registerInjectedWalletDiscovery(\n (wallet) => {\n if (!isStarknetWallet(wallet)) return;\n\n const existing = wallets.find((w) => w.wallet.name === wallet.name);\n\n // Only register injected wallets if they are not already registered.\n // We should not override standard wallets with injected wallets.\n if (!existing) {\n wallets = [{ discoverer: \"injected\", wallet }, ...wallets];\n\n emitChanges();\n }\n\n return () => {\n wallets = wallets.filter((w) => w.wallet.name !== wallet.name);\n\n emitChanges();\n };\n },\n );\n\n return {\n _refreshInjectedWallets: refreshInjectedWallets,\n getWallets() {\n return wallets.map(({ wallet }) => wallet).slice();\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n };\n}\n"],"names":["StarknetInjectedWallet","window","metaMaskVirtualWallet","isStarknetWallet"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["StarknetInjectedWallet","metaMaskVirtualWallet"],"sources":["../src/eip1193-wallet.ts","../src/injected-wallet.ts","../src/standard-wallet.ts","../src/store.ts"],"sourcesContent":["import type { EIP1193Adapter } from \"@starknet-io/get-starknet-virtual-wallet\";\nimport type { Wallet } from \"@wallet-standard/base\";\n\nexport function registerEIP1193WalletFromEIP6963Discovery(\n eip1193Adapters: EIP1193Adapter[],\n register: (wallet: Wallet) => () => void,\n) {\n if (typeof window === \"undefined\") return;\n\n const handler = (event: CustomEvent) => {\n const { info, provider } = event.detail;\n for (const adapter of eip1193Adapters) {\n const wallet = adapter(info, provider);\n if (wallet) {\n register(wallet);\n return;\n }\n }\n };\n\n window.addEventListener(\"eip6963:announceProvider\", handler);\n\n window.dispatchEvent(new Event(\"eip6963:requestProvider\"));\n\n return () => window.removeEventListener(\"eip6963:announceProvider\", handler);\n}\n","import { StarknetInjectedWallet } from \"@starknet-io/get-starknet-wallet-standard\";\nimport type { StarknetWindowObject } from \"@starknet-io/types-js\";\nimport type { Wallet } from \"@wallet-standard/base\";\n\nexport function registerInjectedWalletDiscovery(\n register: (wallet: Wallet) => () => void,\n): {\n unregister: () => void;\n refresh: () => void;\n} {\n if (typeof window === \"undefined\")\n return {\n unregister: () => {},\n refresh: () => {},\n };\n\n function refresh() {\n const injectedWallets = scanWindowForWallets(window);\n\n for (const wallet of injectedWallets) {\n register(new StarknetInjectedWallet(wallet));\n }\n }\n\n refresh();\n\n return {\n unregister: () => {},\n refresh,\n };\n}\n\nfunction scanWindowForWallets(window: Window): StarknetWindowObject[] {\n return Object.getOwnPropertyNames(window).reduce((wallets, key) => {\n if (key.startsWith(\"starknet\")) {\n const wallet = window[key];\n\n if (isStarknetWindowObject(wallet)) {\n wallets.push(wallet);\n }\n }\n\n return wallets;\n }, []);\n}\n\nconst STARKNET_WALLET_KEYS = [\n \"id\",\n \"name\",\n \"version\",\n \"icon\",\n \"request\",\n \"on\",\n \"off\",\n];\n\nfunction isStarknetWindowObject(\n wallet: unknown,\n): wallet is StarknetWindowObject {\n if (typeof wallet !== \"object\" || wallet === null) return false;\n return STARKNET_WALLET_KEYS.every((key) => key in wallet);\n}\n","import type {\n Wallet,\n WalletEventsWindow,\n WindowAppReadyEvent,\n WindowAppReadyEventAPI,\n WindowRegisterWalletEvent,\n} from \"@wallet-standard/base\";\n\nexport function registerStandardWalletDiscovery(\n register: (wallet: Wallet) => () => void,\n) {\n if (typeof window === \"undefined\") return;\n\n const api = Object.freeze({ register });\n\n const handler = ({ detail: callback }: WindowRegisterWalletEvent) => {\n callback(api);\n };\n\n (window as WalletEventsWindow).addEventListener(\n \"wallet-standard:register-wallet\",\n handler,\n );\n\n (window as WalletEventsWindow).dispatchEvent(new AppReadyEvent(api));\n\n return () =>\n (window as WalletEventsWindow).removeEventListener(\n \"wallet-standard:register-wallet\",\n handler,\n );\n}\n\nclass AppReadyEvent extends Event implements WindowAppReadyEvent {\n constructor(public readonly detail: WindowAppReadyEventAPI) {\n super(\"wallet-standard:app-ready\", {\n bubbles: false,\n cancelable: false,\n composed: false,\n });\n }\n\n get type() {\n return \"wallet-standard:app-ready\" as const;\n }\n\n preventDefault(): never {\n throw new Error(\"preventDefault is deprecated\");\n }\n\n stopImmediatePropagation(): never {\n throw new Error(\"stopImmediatePropagation is deprecated\");\n }\n\n stopPropagation(): never {\n throw new Error(\"stopPropagation is deprecated\");\n }\n}\n","import type { EIP1193Adapter } from \"@starknet-io/get-starknet-virtual-wallet\";\nimport { metaMaskVirtualWallet } from \"@starknet-io/get-starknet-virtual-wallet/metamask\";\nimport {\n isStarknetWallet,\n type WalletWithStarknetFeatures,\n} from \"@starknet-io/get-starknet-wallet-standard/features\";\n\nimport { registerEIP1193WalletFromEIP6963Discovery } from \"./eip1193-wallet\";\nimport { registerInjectedWalletDiscovery } from \"./injected-wallet\";\nimport { registerStandardWalletDiscovery } from \"./standard-wallet\";\n\nexport type CleanupListener = () => void;\nexport type Listener = (wallets: readonly WalletWithStarknetFeatures[]) => void;\n\nexport type Store = {\n getWallets: () => WalletWithStarknetFeatures[];\n subscribe: (listener: Listener) => CleanupListener;\n _refreshInjectedWallets: () => void;\n};\n\n// Track how a wallet was discovered to prefer standard wallets over (legacy) injected wallets\ntype DiscoveredStarknetWallet = {\n discoverer: \"standard\" | \"injected\" | \"eip6963\";\n wallet: WalletWithStarknetFeatures;\n};\n\nexport type CreateStoreOptions = {\n eip1193Adapters?: EIP1193Adapter[];\n};\n\nconst DEFAULT_EIP1193_ADAPTERS: EIP1193Adapter[] = [metaMaskVirtualWallet];\n\nexport function createStore({\n eip1193Adapters = DEFAULT_EIP1193_ADAPTERS,\n}: CreateStoreOptions = {}): Store {\n const listeners = new Set<Listener>();\n let wallets: DiscoveredStarknetWallet[] = [];\n\n function emitChanges() {\n for (const listener of listeners) {\n listener(wallets.map(({ wallet }) => wallet).slice());\n }\n }\n\n registerStandardWalletDiscovery((wallet) => {\n if (!isStarknetWallet(wallet)) return;\n\n const existing = wallets.find((w) => w.wallet.name === wallet.name);\n\n if (existing) {\n // If the wallet exists but is an injected wallet this library registered,\n // replace it with the standard wallet registered by the wallet itself.\n if (existing.discoverer !== \"standard\") {\n wallets = [\n { discoverer: \"standard\", wallet },\n ...wallets.filter((w) => w.wallet.name !== wallet.name),\n ];\n\n emitChanges();\n }\n } else {\n wallets = [{ discoverer: \"standard\", wallet }, ...wallets];\n\n emitChanges();\n }\n\n return () => {\n wallets = wallets.filter((w) => w.wallet.name !== wallet.name);\n\n emitChanges();\n };\n });\n\n registerEIP1193WalletFromEIP6963Discovery(eip1193Adapters, (wallet) => {\n if (!isStarknetWallet(wallet)) return;\n\n const existing = wallets.find((w) => w.wallet.name === wallet.name);\n\n if (!existing) {\n wallets = [{ discoverer: \"eip6963\", wallet }, ...wallets];\n\n emitChanges();\n }\n\n return () => {\n wallets = wallets.filter((w) => w.wallet.name !== wallet.name);\n\n emitChanges();\n };\n });\n\n const { refresh: refreshInjectedWallets } = registerInjectedWalletDiscovery(\n (wallet) => {\n if (!isStarknetWallet(wallet)) return;\n\n const existing = wallets.find((w) => w.wallet.name === wallet.name);\n\n // Only register injected wallets if they are not already registered.\n // We should not override standard wallets with injected wallets.\n if (!existing) {\n wallets = [{ discoverer: \"injected\", wallet }, ...wallets];\n\n emitChanges();\n }\n\n return () => {\n wallets = wallets.filter((w) => w.wallet.name !== wallet.name);\n\n emitChanges();\n };\n },\n );\n\n return {\n _refreshInjectedWallets: refreshInjectedWallets,\n getWallets() {\n return wallets.map(({ wallet }) => wallet).slice();\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n };\n}\n"],"mappings":"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"}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,16 +1,20 @@
|
|
|
1
|
-
import { EIP1193Adapter } from
|
|
2
|
-
import { WalletWithStarknetFeatures } from
|
|
1
|
+
import { EIP1193Adapter } from "@starknet-io/get-starknet-virtual-wallet";
|
|
2
|
+
import { WalletWithStarknetFeatures } from "@starknet-io/get-starknet-wallet-standard/features";
|
|
3
3
|
|
|
4
|
+
//#region src/store.d.ts
|
|
4
5
|
type CleanupListener = () => void;
|
|
5
6
|
type Listener = (wallets: readonly WalletWithStarknetFeatures[]) => void;
|
|
6
7
|
type Store = {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
getWallets: () => WalletWithStarknetFeatures[];
|
|
9
|
+
subscribe: (listener: Listener) => CleanupListener;
|
|
10
|
+
_refreshInjectedWallets: () => void;
|
|
10
11
|
};
|
|
11
12
|
type CreateStoreOptions = {
|
|
12
|
-
|
|
13
|
+
eip1193Adapters?: EIP1193Adapter[];
|
|
13
14
|
};
|
|
14
|
-
declare function createStore({
|
|
15
|
-
|
|
15
|
+
declare function createStore({
|
|
16
|
+
eip1193Adapters
|
|
17
|
+
}?: CreateStoreOptions): Store;
|
|
18
|
+
//#endregion
|
|
16
19
|
export { type CleanupListener, type Listener, type Store, createStore };
|
|
20
|
+
//# sourceMappingURL=index.d.cts.map
|
package/dist/index.d.mts
CHANGED
|
@@ -1,16 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { WalletWithStarknetFeatures } from "@starknet-io/get-starknet-wallet-standard/features";
|
|
2
|
+
import { EIP1193Adapter } from "@starknet-io/get-starknet-virtual-wallet";
|
|
3
3
|
|
|
4
|
+
//#region src/store.d.ts
|
|
4
5
|
type CleanupListener = () => void;
|
|
5
6
|
type Listener = (wallets: readonly WalletWithStarknetFeatures[]) => void;
|
|
6
7
|
type Store = {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
getWallets: () => WalletWithStarknetFeatures[];
|
|
9
|
+
subscribe: (listener: Listener) => CleanupListener;
|
|
10
|
+
_refreshInjectedWallets: () => void;
|
|
10
11
|
};
|
|
11
12
|
type CreateStoreOptions = {
|
|
12
|
-
|
|
13
|
+
eip1193Adapters?: EIP1193Adapter[];
|
|
13
14
|
};
|
|
14
|
-
declare function createStore({
|
|
15
|
-
|
|
15
|
+
declare function createStore({
|
|
16
|
+
eip1193Adapters
|
|
17
|
+
}?: CreateStoreOptions): Store;
|
|
18
|
+
//#endregion
|
|
16
19
|
export { type CleanupListener, type Listener, type Store, createStore };
|
|
20
|
+
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.mjs
CHANGED
|
@@ -1,185 +1,170 @@
|
|
|
1
|
-
import { metaMaskVirtualWallet } from
|
|
2
|
-
import { isStarknetWallet } from
|
|
3
|
-
import { StarknetInjectedWallet } from
|
|
4
|
-
|
|
1
|
+
import { metaMaskVirtualWallet } from "@starknet-io/get-starknet-virtual-wallet/metamask";
|
|
2
|
+
import { isStarknetWallet } from "@starknet-io/get-starknet-wallet-standard/features";
|
|
3
|
+
import { StarknetInjectedWallet } from "@starknet-io/get-starknet-wallet-standard";
|
|
4
|
+
//#region src/eip1193-wallet.ts
|
|
5
5
|
function registerEIP1193WalletFromEIP6963Discovery(eip1193Adapters, register) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
return () => window.removeEventListener("eip6963:announceProvider", handler);
|
|
6
|
+
if (typeof window === "undefined") return;
|
|
7
|
+
const handler = (event) => {
|
|
8
|
+
const { info, provider } = event.detail;
|
|
9
|
+
for (const adapter of eip1193Adapters) {
|
|
10
|
+
const wallet = adapter(info, provider);
|
|
11
|
+
if (wallet) {
|
|
12
|
+
register(wallet);
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
window.addEventListener("eip6963:announceProvider", handler);
|
|
18
|
+
window.dispatchEvent(new Event("eip6963:requestProvider"));
|
|
19
|
+
return () => window.removeEventListener("eip6963:announceProvider", handler);
|
|
21
20
|
}
|
|
22
|
-
|
|
21
|
+
//#endregion
|
|
22
|
+
//#region src/injected-wallet.ts
|
|
23
23
|
function registerInjectedWalletDiscovery(register) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
refresh();
|
|
38
|
-
return {
|
|
39
|
-
unregister: () => {
|
|
40
|
-
},
|
|
41
|
-
refresh
|
|
42
|
-
};
|
|
24
|
+
if (typeof window === "undefined") return {
|
|
25
|
+
unregister: () => {},
|
|
26
|
+
refresh: () => {}
|
|
27
|
+
};
|
|
28
|
+
function refresh() {
|
|
29
|
+
const injectedWallets = scanWindowForWallets(window);
|
|
30
|
+
for (const wallet of injectedWallets) register(new StarknetInjectedWallet(wallet));
|
|
31
|
+
}
|
|
32
|
+
refresh();
|
|
33
|
+
return {
|
|
34
|
+
unregister: () => {},
|
|
35
|
+
refresh
|
|
36
|
+
};
|
|
43
37
|
}
|
|
44
|
-
function scanWindowForWallets(
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
return wallets;
|
|
53
|
-
}, []);
|
|
38
|
+
function scanWindowForWallets(window) {
|
|
39
|
+
return Object.getOwnPropertyNames(window).reduce((wallets, key) => {
|
|
40
|
+
if (key.startsWith("starknet")) {
|
|
41
|
+
const wallet = window[key];
|
|
42
|
+
if (isStarknetWindowObject(wallet)) wallets.push(wallet);
|
|
43
|
+
}
|
|
44
|
+
return wallets;
|
|
45
|
+
}, []);
|
|
54
46
|
}
|
|
55
47
|
const STARKNET_WALLET_KEYS = [
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
48
|
+
"id",
|
|
49
|
+
"name",
|
|
50
|
+
"version",
|
|
51
|
+
"icon",
|
|
52
|
+
"request",
|
|
53
|
+
"on",
|
|
54
|
+
"off"
|
|
63
55
|
];
|
|
64
56
|
function isStarknetWindowObject(wallet) {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
return STARKNET_WALLET_KEYS.every((key) => key in wallet);
|
|
57
|
+
if (typeof wallet !== "object" || wallet === null) return false;
|
|
58
|
+
return STARKNET_WALLET_KEYS.every((key) => key in wallet);
|
|
68
59
|
}
|
|
69
|
-
|
|
60
|
+
//#endregion
|
|
61
|
+
//#region src/standard-wallet.ts
|
|
70
62
|
function registerStandardWalletDiscovery(register) {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
handler
|
|
80
|
-
);
|
|
81
|
-
window.dispatchEvent(new AppReadyEvent(api));
|
|
82
|
-
return () => window.removeEventListener(
|
|
83
|
-
"wallet-standard:register-wallet",
|
|
84
|
-
handler
|
|
85
|
-
);
|
|
86
|
-
}
|
|
87
|
-
class AppReadyEvent extends Event {
|
|
88
|
-
constructor(detail) {
|
|
89
|
-
super("wallet-standard:app-ready", {
|
|
90
|
-
bubbles: false,
|
|
91
|
-
cancelable: false,
|
|
92
|
-
composed: false
|
|
93
|
-
});
|
|
94
|
-
this.detail = detail;
|
|
95
|
-
}
|
|
96
|
-
get type() {
|
|
97
|
-
return "wallet-standard:app-ready";
|
|
98
|
-
}
|
|
99
|
-
preventDefault() {
|
|
100
|
-
throw new Error("preventDefault is deprecated");
|
|
101
|
-
}
|
|
102
|
-
stopImmediatePropagation() {
|
|
103
|
-
throw new Error("stopImmediatePropagation is deprecated");
|
|
104
|
-
}
|
|
105
|
-
stopPropagation() {
|
|
106
|
-
throw new Error("stopPropagation is deprecated");
|
|
107
|
-
}
|
|
63
|
+
if (typeof window === "undefined") return;
|
|
64
|
+
const api = Object.freeze({ register });
|
|
65
|
+
const handler = ({ detail: callback }) => {
|
|
66
|
+
callback(api);
|
|
67
|
+
};
|
|
68
|
+
window.addEventListener("wallet-standard:register-wallet", handler);
|
|
69
|
+
window.dispatchEvent(new AppReadyEvent(api));
|
|
70
|
+
return () => window.removeEventListener("wallet-standard:register-wallet", handler);
|
|
108
71
|
}
|
|
109
|
-
|
|
72
|
+
var AppReadyEvent = class extends Event {
|
|
73
|
+
constructor(detail) {
|
|
74
|
+
super("wallet-standard:app-ready", {
|
|
75
|
+
bubbles: false,
|
|
76
|
+
cancelable: false,
|
|
77
|
+
composed: false
|
|
78
|
+
});
|
|
79
|
+
this.detail = detail;
|
|
80
|
+
}
|
|
81
|
+
get type() {
|
|
82
|
+
return "wallet-standard:app-ready";
|
|
83
|
+
}
|
|
84
|
+
preventDefault() {
|
|
85
|
+
throw new Error("preventDefault is deprecated");
|
|
86
|
+
}
|
|
87
|
+
stopImmediatePropagation() {
|
|
88
|
+
throw new Error("stopImmediatePropagation is deprecated");
|
|
89
|
+
}
|
|
90
|
+
stopPropagation() {
|
|
91
|
+
throw new Error("stopPropagation is deprecated");
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
//#endregion
|
|
95
|
+
//#region src/store.ts
|
|
110
96
|
const DEFAULT_EIP1193_ADAPTERS = [metaMaskVirtualWallet];
|
|
111
|
-
function createStore({
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
}
|
|
181
|
-
};
|
|
97
|
+
function createStore({ eip1193Adapters = DEFAULT_EIP1193_ADAPTERS } = {}) {
|
|
98
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
99
|
+
let wallets = [];
|
|
100
|
+
function emitChanges() {
|
|
101
|
+
for (const listener of listeners) listener(wallets.map(({ wallet }) => wallet).slice());
|
|
102
|
+
}
|
|
103
|
+
registerStandardWalletDiscovery((wallet) => {
|
|
104
|
+
if (!isStarknetWallet(wallet)) return;
|
|
105
|
+
const existing = wallets.find((w) => w.wallet.name === wallet.name);
|
|
106
|
+
if (existing) {
|
|
107
|
+
if (existing.discoverer !== "standard") {
|
|
108
|
+
wallets = [{
|
|
109
|
+
discoverer: "standard",
|
|
110
|
+
wallet
|
|
111
|
+
}, ...wallets.filter((w) => w.wallet.name !== wallet.name)];
|
|
112
|
+
emitChanges();
|
|
113
|
+
}
|
|
114
|
+
} else {
|
|
115
|
+
wallets = [{
|
|
116
|
+
discoverer: "standard",
|
|
117
|
+
wallet
|
|
118
|
+
}, ...wallets];
|
|
119
|
+
emitChanges();
|
|
120
|
+
}
|
|
121
|
+
return () => {
|
|
122
|
+
wallets = wallets.filter((w) => w.wallet.name !== wallet.name);
|
|
123
|
+
emitChanges();
|
|
124
|
+
};
|
|
125
|
+
});
|
|
126
|
+
registerEIP1193WalletFromEIP6963Discovery(eip1193Adapters, (wallet) => {
|
|
127
|
+
if (!isStarknetWallet(wallet)) return;
|
|
128
|
+
if (!wallets.find((w) => w.wallet.name === wallet.name)) {
|
|
129
|
+
wallets = [{
|
|
130
|
+
discoverer: "eip6963",
|
|
131
|
+
wallet
|
|
132
|
+
}, ...wallets];
|
|
133
|
+
emitChanges();
|
|
134
|
+
}
|
|
135
|
+
return () => {
|
|
136
|
+
wallets = wallets.filter((w) => w.wallet.name !== wallet.name);
|
|
137
|
+
emitChanges();
|
|
138
|
+
};
|
|
139
|
+
});
|
|
140
|
+
const { refresh: refreshInjectedWallets } = registerInjectedWalletDiscovery((wallet) => {
|
|
141
|
+
if (!isStarknetWallet(wallet)) return;
|
|
142
|
+
if (!wallets.find((w) => w.wallet.name === wallet.name)) {
|
|
143
|
+
wallets = [{
|
|
144
|
+
discoverer: "injected",
|
|
145
|
+
wallet
|
|
146
|
+
}, ...wallets];
|
|
147
|
+
emitChanges();
|
|
148
|
+
}
|
|
149
|
+
return () => {
|
|
150
|
+
wallets = wallets.filter((w) => w.wallet.name !== wallet.name);
|
|
151
|
+
emitChanges();
|
|
152
|
+
};
|
|
153
|
+
});
|
|
154
|
+
return {
|
|
155
|
+
_refreshInjectedWallets: refreshInjectedWallets,
|
|
156
|
+
getWallets() {
|
|
157
|
+
return wallets.map(({ wallet }) => wallet).slice();
|
|
158
|
+
},
|
|
159
|
+
subscribe(listener) {
|
|
160
|
+
listeners.add(listener);
|
|
161
|
+
return () => {
|
|
162
|
+
listeners.delete(listener);
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
};
|
|
182
166
|
}
|
|
183
|
-
|
|
167
|
+
//#endregion
|
|
184
168
|
export { createStore };
|
|
185
|
-
|
|
169
|
+
|
|
170
|
+
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/eip1193-wallet.ts","../src/injected-wallet.ts","../src/standard-wallet.ts","../src/store.ts"],"sourcesContent":["import type { EIP1193Adapter } from \"@starknet-io/get-starknet-virtual-wallet\";\nimport type { Wallet } from \"@wallet-standard/base\";\n\nexport function registerEIP1193WalletFromEIP6963Discovery(\n eip1193Adapters: EIP1193Adapter[],\n register: (wallet: Wallet) => () => void,\n) {\n if (typeof window === \"undefined\") return;\n\n const handler = (event: CustomEvent) => {\n const { info, provider } = event.detail;\n for (const adapter of eip1193Adapters) {\n const wallet = adapter(info, provider);\n if (wallet) {\n register(wallet);\n return;\n }\n }\n };\n\n window.addEventListener(\"eip6963:announceProvider\", handler);\n\n window.dispatchEvent(new Event(\"eip6963:requestProvider\"));\n\n return () => window.removeEventListener(\"eip6963:announceProvider\", handler);\n}\n","import { StarknetInjectedWallet } from \"@starknet-io/get-starknet-wallet-standard\";\nimport type { StarknetWindowObject } from \"@starknet-io/types-js\";\nimport type { Wallet } from \"@wallet-standard/base\";\n\nexport function registerInjectedWalletDiscovery(\n register: (wallet: Wallet) => () => void,\n): {\n unregister: () => void;\n refresh: () => void;\n} {\n if (typeof window === \"undefined\")\n return {\n unregister: () => {},\n refresh: () => {},\n };\n\n function refresh() {\n const injectedWallets = scanWindowForWallets(window);\n\n for (const wallet of injectedWallets) {\n register(new StarknetInjectedWallet(wallet));\n }\n }\n\n refresh();\n\n return {\n unregister: () => {},\n refresh,\n };\n}\n\nfunction scanWindowForWallets(window: Window): StarknetWindowObject[] {\n return Object.getOwnPropertyNames(window).reduce((wallets, key) => {\n if (key.startsWith(\"starknet\")) {\n const wallet = window[key];\n\n if (isStarknetWindowObject(wallet)) {\n wallets.push(wallet);\n }\n }\n\n return wallets;\n }, []);\n}\n\nconst STARKNET_WALLET_KEYS = [\n \"id\",\n \"name\",\n \"version\",\n \"icon\",\n \"request\",\n \"on\",\n \"off\",\n];\n\nfunction isStarknetWindowObject(\n wallet: unknown,\n): wallet is StarknetWindowObject {\n if (typeof wallet !== \"object\" || wallet === null) return false;\n return STARKNET_WALLET_KEYS.every((key) => key in wallet);\n}\n","import type {\n Wallet,\n WalletEventsWindow,\n WindowAppReadyEvent,\n WindowAppReadyEventAPI,\n WindowRegisterWalletEvent,\n} from \"@wallet-standard/base\";\n\nexport function registerStandardWalletDiscovery(\n register: (wallet: Wallet) => () => void,\n) {\n if (typeof window === \"undefined\") return;\n\n const api = Object.freeze({ register });\n\n const handler = ({ detail: callback }: WindowRegisterWalletEvent) => {\n callback(api);\n };\n\n (window as WalletEventsWindow).addEventListener(\n \"wallet-standard:register-wallet\",\n handler,\n );\n\n (window as WalletEventsWindow).dispatchEvent(new AppReadyEvent(api));\n\n return () =>\n (window as WalletEventsWindow).removeEventListener(\n \"wallet-standard:register-wallet\",\n handler,\n );\n}\n\nclass AppReadyEvent extends Event implements WindowAppReadyEvent {\n constructor(public readonly detail: WindowAppReadyEventAPI) {\n super(\"wallet-standard:app-ready\", {\n bubbles: false,\n cancelable: false,\n composed: false,\n });\n }\n\n get type() {\n return \"wallet-standard:app-ready\" as const;\n }\n\n preventDefault(): never {\n throw new Error(\"preventDefault is deprecated\");\n }\n\n stopImmediatePropagation(): never {\n throw new Error(\"stopImmediatePropagation is deprecated\");\n }\n\n stopPropagation(): never {\n throw new Error(\"stopPropagation is deprecated\");\n }\n}\n","import type { EIP1193Adapter } from \"@starknet-io/get-starknet-virtual-wallet\";\nimport { metaMaskVirtualWallet } from \"@starknet-io/get-starknet-virtual-wallet/metamask\";\nimport {\n isStarknetWallet,\n type WalletWithStarknetFeatures,\n} from \"@starknet-io/get-starknet-wallet-standard/features\";\n\nimport { registerEIP1193WalletFromEIP6963Discovery } from \"./eip1193-wallet\";\nimport { registerInjectedWalletDiscovery } from \"./injected-wallet\";\nimport { registerStandardWalletDiscovery } from \"./standard-wallet\";\n\nexport type CleanupListener = () => void;\nexport type Listener = (wallets: readonly WalletWithStarknetFeatures[]) => void;\n\nexport type Store = {\n getWallets: () => WalletWithStarknetFeatures[];\n subscribe: (listener: Listener) => CleanupListener;\n _refreshInjectedWallets: () => void;\n};\n\n// Track how a wallet was discovered to prefer standard wallets over (legacy) injected wallets\ntype DiscoveredStarknetWallet = {\n discoverer: \"standard\" | \"injected\" | \"eip6963\";\n wallet: WalletWithStarknetFeatures;\n};\n\nexport type CreateStoreOptions = {\n eip1193Adapters?: EIP1193Adapter[];\n};\n\nconst DEFAULT_EIP1193_ADAPTERS: EIP1193Adapter[] = [metaMaskVirtualWallet];\n\nexport function createStore({\n eip1193Adapters = DEFAULT_EIP1193_ADAPTERS,\n}: CreateStoreOptions = {}): Store {\n const listeners = new Set<Listener>();\n let wallets: DiscoveredStarknetWallet[] = [];\n\n function emitChanges() {\n for (const listener of listeners) {\n listener(wallets.map(({ wallet }) => wallet).slice());\n }\n }\n\n registerStandardWalletDiscovery((wallet) => {\n if (!isStarknetWallet(wallet)) return;\n\n const existing = wallets.find((w) => w.wallet.name === wallet.name);\n\n if (existing) {\n // If the wallet exists but is an injected wallet this library registered,\n // replace it with the standard wallet registered by the wallet itself.\n if (existing.discoverer !== \"standard\") {\n wallets = [\n { discoverer: \"standard\", wallet },\n ...wallets.filter((w) => w.wallet.name !== wallet.name),\n ];\n\n emitChanges();\n }\n } else {\n wallets = [{ discoverer: \"standard\", wallet }, ...wallets];\n\n emitChanges();\n }\n\n return () => {\n wallets = wallets.filter((w) => w.wallet.name !== wallet.name);\n\n emitChanges();\n };\n });\n\n registerEIP1193WalletFromEIP6963Discovery(eip1193Adapters, (wallet) => {\n if (!isStarknetWallet(wallet)) return;\n\n const existing = wallets.find((w) => w.wallet.name === wallet.name);\n\n if (!existing) {\n wallets = [{ discoverer: \"eip6963\", wallet }, ...wallets];\n\n emitChanges();\n }\n\n return () => {\n wallets = wallets.filter((w) => w.wallet.name !== wallet.name);\n\n emitChanges();\n };\n });\n\n const { refresh: refreshInjectedWallets } = registerInjectedWalletDiscovery(\n (wallet) => {\n if (!isStarknetWallet(wallet)) return;\n\n const existing = wallets.find((w) => w.wallet.name === wallet.name);\n\n // Only register injected wallets if they are not already registered.\n // We should not override standard wallets with injected wallets.\n if (!existing) {\n wallets = [{ discoverer: \"injected\", wallet }, ...wallets];\n\n emitChanges();\n }\n\n return () => {\n wallets = wallets.filter((w) => w.wallet.name !== wallet.name);\n\n emitChanges();\n };\n },\n );\n\n return {\n _refreshInjectedWallets: refreshInjectedWallets,\n getWallets() {\n return wallets.map(({ wallet }) => wallet).slice();\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n };\n}\n"],"names":["window"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/eip1193-wallet.ts","../src/injected-wallet.ts","../src/standard-wallet.ts","../src/store.ts"],"sourcesContent":["import type { EIP1193Adapter } from \"@starknet-io/get-starknet-virtual-wallet\";\nimport type { Wallet } from \"@wallet-standard/base\";\n\nexport function registerEIP1193WalletFromEIP6963Discovery(\n eip1193Adapters: EIP1193Adapter[],\n register: (wallet: Wallet) => () => void,\n) {\n if (typeof window === \"undefined\") return;\n\n const handler = (event: CustomEvent) => {\n const { info, provider } = event.detail;\n for (const adapter of eip1193Adapters) {\n const wallet = adapter(info, provider);\n if (wallet) {\n register(wallet);\n return;\n }\n }\n };\n\n window.addEventListener(\"eip6963:announceProvider\", handler);\n\n window.dispatchEvent(new Event(\"eip6963:requestProvider\"));\n\n return () => window.removeEventListener(\"eip6963:announceProvider\", handler);\n}\n","import { StarknetInjectedWallet } from \"@starknet-io/get-starknet-wallet-standard\";\nimport type { StarknetWindowObject } from \"@starknet-io/types-js\";\nimport type { Wallet } from \"@wallet-standard/base\";\n\nexport function registerInjectedWalletDiscovery(\n register: (wallet: Wallet) => () => void,\n): {\n unregister: () => void;\n refresh: () => void;\n} {\n if (typeof window === \"undefined\")\n return {\n unregister: () => {},\n refresh: () => {},\n };\n\n function refresh() {\n const injectedWallets = scanWindowForWallets(window);\n\n for (const wallet of injectedWallets) {\n register(new StarknetInjectedWallet(wallet));\n }\n }\n\n refresh();\n\n return {\n unregister: () => {},\n refresh,\n };\n}\n\nfunction scanWindowForWallets(window: Window): StarknetWindowObject[] {\n return Object.getOwnPropertyNames(window).reduce((wallets, key) => {\n if (key.startsWith(\"starknet\")) {\n const wallet = window[key];\n\n if (isStarknetWindowObject(wallet)) {\n wallets.push(wallet);\n }\n }\n\n return wallets;\n }, []);\n}\n\nconst STARKNET_WALLET_KEYS = [\n \"id\",\n \"name\",\n \"version\",\n \"icon\",\n \"request\",\n \"on\",\n \"off\",\n];\n\nfunction isStarknetWindowObject(\n wallet: unknown,\n): wallet is StarknetWindowObject {\n if (typeof wallet !== \"object\" || wallet === null) return false;\n return STARKNET_WALLET_KEYS.every((key) => key in wallet);\n}\n","import type {\n Wallet,\n WalletEventsWindow,\n WindowAppReadyEvent,\n WindowAppReadyEventAPI,\n WindowRegisterWalletEvent,\n} from \"@wallet-standard/base\";\n\nexport function registerStandardWalletDiscovery(\n register: (wallet: Wallet) => () => void,\n) {\n if (typeof window === \"undefined\") return;\n\n const api = Object.freeze({ register });\n\n const handler = ({ detail: callback }: WindowRegisterWalletEvent) => {\n callback(api);\n };\n\n (window as WalletEventsWindow).addEventListener(\n \"wallet-standard:register-wallet\",\n handler,\n );\n\n (window as WalletEventsWindow).dispatchEvent(new AppReadyEvent(api));\n\n return () =>\n (window as WalletEventsWindow).removeEventListener(\n \"wallet-standard:register-wallet\",\n handler,\n );\n}\n\nclass AppReadyEvent extends Event implements WindowAppReadyEvent {\n constructor(public readonly detail: WindowAppReadyEventAPI) {\n super(\"wallet-standard:app-ready\", {\n bubbles: false,\n cancelable: false,\n composed: false,\n });\n }\n\n get type() {\n return \"wallet-standard:app-ready\" as const;\n }\n\n preventDefault(): never {\n throw new Error(\"preventDefault is deprecated\");\n }\n\n stopImmediatePropagation(): never {\n throw new Error(\"stopImmediatePropagation is deprecated\");\n }\n\n stopPropagation(): never {\n throw new Error(\"stopPropagation is deprecated\");\n }\n}\n","import type { EIP1193Adapter } from \"@starknet-io/get-starknet-virtual-wallet\";\nimport { metaMaskVirtualWallet } from \"@starknet-io/get-starknet-virtual-wallet/metamask\";\nimport {\n isStarknetWallet,\n type WalletWithStarknetFeatures,\n} from \"@starknet-io/get-starknet-wallet-standard/features\";\n\nimport { registerEIP1193WalletFromEIP6963Discovery } from \"./eip1193-wallet\";\nimport { registerInjectedWalletDiscovery } from \"./injected-wallet\";\nimport { registerStandardWalletDiscovery } from \"./standard-wallet\";\n\nexport type CleanupListener = () => void;\nexport type Listener = (wallets: readonly WalletWithStarknetFeatures[]) => void;\n\nexport type Store = {\n getWallets: () => WalletWithStarknetFeatures[];\n subscribe: (listener: Listener) => CleanupListener;\n _refreshInjectedWallets: () => void;\n};\n\n// Track how a wallet was discovered to prefer standard wallets over (legacy) injected wallets\ntype DiscoveredStarknetWallet = {\n discoverer: \"standard\" | \"injected\" | \"eip6963\";\n wallet: WalletWithStarknetFeatures;\n};\n\nexport type CreateStoreOptions = {\n eip1193Adapters?: EIP1193Adapter[];\n};\n\nconst DEFAULT_EIP1193_ADAPTERS: EIP1193Adapter[] = [metaMaskVirtualWallet];\n\nexport function createStore({\n eip1193Adapters = DEFAULT_EIP1193_ADAPTERS,\n}: CreateStoreOptions = {}): Store {\n const listeners = new Set<Listener>();\n let wallets: DiscoveredStarknetWallet[] = [];\n\n function emitChanges() {\n for (const listener of listeners) {\n listener(wallets.map(({ wallet }) => wallet).slice());\n }\n }\n\n registerStandardWalletDiscovery((wallet) => {\n if (!isStarknetWallet(wallet)) return;\n\n const existing = wallets.find((w) => w.wallet.name === wallet.name);\n\n if (existing) {\n // If the wallet exists but is an injected wallet this library registered,\n // replace it with the standard wallet registered by the wallet itself.\n if (existing.discoverer !== \"standard\") {\n wallets = [\n { discoverer: \"standard\", wallet },\n ...wallets.filter((w) => w.wallet.name !== wallet.name),\n ];\n\n emitChanges();\n }\n } else {\n wallets = [{ discoverer: \"standard\", wallet }, ...wallets];\n\n emitChanges();\n }\n\n return () => {\n wallets = wallets.filter((w) => w.wallet.name !== wallet.name);\n\n emitChanges();\n };\n });\n\n registerEIP1193WalletFromEIP6963Discovery(eip1193Adapters, (wallet) => {\n if (!isStarknetWallet(wallet)) return;\n\n const existing = wallets.find((w) => w.wallet.name === wallet.name);\n\n if (!existing) {\n wallets = [{ discoverer: \"eip6963\", wallet }, ...wallets];\n\n emitChanges();\n }\n\n return () => {\n wallets = wallets.filter((w) => w.wallet.name !== wallet.name);\n\n emitChanges();\n };\n });\n\n const { refresh: refreshInjectedWallets } = registerInjectedWalletDiscovery(\n (wallet) => {\n if (!isStarknetWallet(wallet)) return;\n\n const existing = wallets.find((w) => w.wallet.name === wallet.name);\n\n // Only register injected wallets if they are not already registered.\n // We should not override standard wallets with injected wallets.\n if (!existing) {\n wallets = [{ discoverer: \"injected\", wallet }, ...wallets];\n\n emitChanges();\n }\n\n return () => {\n wallets = wallets.filter((w) => w.wallet.name !== wallet.name);\n\n emitChanges();\n };\n },\n );\n\n return {\n _refreshInjectedWallets: refreshInjectedWallets,\n getWallets() {\n return wallets.map(({ wallet }) => wallet).slice();\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n };\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@starknet-io/get-starknet-discovery",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "6.0.0",
|
|
4
4
|
"keywords": [
|
|
5
5
|
"starknet",
|
|
6
6
|
"starkware",
|
|
@@ -12,11 +12,16 @@
|
|
|
12
12
|
],
|
|
13
13
|
"license": "MIT",
|
|
14
14
|
"type": "module",
|
|
15
|
+
"repository": {
|
|
16
|
+
"type": "git",
|
|
17
|
+
"url": "https://github.com/starknet-io/get-starknet.git",
|
|
18
|
+
"directory": "packages/discovery"
|
|
19
|
+
},
|
|
15
20
|
"main": "./dist/index.mjs",
|
|
16
|
-
"types": "./dist/index.d.
|
|
21
|
+
"types": "./dist/index.d.mts",
|
|
17
22
|
"exports": {
|
|
18
23
|
".": {
|
|
19
|
-
"types": "./dist/index.d.
|
|
24
|
+
"types": "./dist/index.d.mts",
|
|
20
25
|
"import": "./dist/index.mjs",
|
|
21
26
|
"require": "./dist/index.cjs",
|
|
22
27
|
"default": "./dist/index.mjs"
|
|
@@ -27,20 +32,21 @@
|
|
|
27
32
|
"src"
|
|
28
33
|
],
|
|
29
34
|
"devDependencies": {
|
|
30
|
-
"@wallet-standard/core": "^1.1.
|
|
31
|
-
"happy-dom": "^
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"vitest": "^3.
|
|
35
|
+
"@wallet-standard/core": "^1.1.2",
|
|
36
|
+
"happy-dom": "^20.10.2",
|
|
37
|
+
"tsdown": "^0.21.9",
|
|
38
|
+
"typescript": "^5.9.3",
|
|
39
|
+
"vitest": "^3.2.6"
|
|
35
40
|
},
|
|
36
41
|
"dependencies": {
|
|
37
|
-
"@starknet-io/types-js": "^0.
|
|
38
|
-
"@wallet-standard/base": "^1.1.
|
|
39
|
-
"@starknet-io/get-starknet-virtual-wallet": "^
|
|
40
|
-
"@starknet-io/get-starknet-wallet-standard": "^
|
|
42
|
+
"@starknet-io/types-js": "^0.10.2",
|
|
43
|
+
"@wallet-standard/base": "^1.1.1",
|
|
44
|
+
"@starknet-io/get-starknet-virtual-wallet": "^6.0.0",
|
|
45
|
+
"@starknet-io/get-starknet-wallet-standard": "^6.0.0"
|
|
41
46
|
},
|
|
42
47
|
"scripts": {
|
|
43
|
-
"
|
|
48
|
+
"typecheck": "tsc --noEmit",
|
|
49
|
+
"build": "tsdown",
|
|
44
50
|
"lint:check": "biome check .",
|
|
45
51
|
"lint": "biome check --write .",
|
|
46
52
|
"format": "biome format --write .",
|
package/dist/index.d.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { EIP1193Adapter } from '@starknet-io/get-starknet-virtual-wallet';
|
|
2
|
-
import { WalletWithStarknetFeatures } from '@starknet-io/get-starknet-wallet-standard/features';
|
|
3
|
-
|
|
4
|
-
type CleanupListener = () => void;
|
|
5
|
-
type Listener = (wallets: readonly WalletWithStarknetFeatures[]) => void;
|
|
6
|
-
type Store = {
|
|
7
|
-
getWallets: () => WalletWithStarknetFeatures[];
|
|
8
|
-
subscribe: (listener: Listener) => CleanupListener;
|
|
9
|
-
_refreshInjectedWallets: () => void;
|
|
10
|
-
};
|
|
11
|
-
type CreateStoreOptions = {
|
|
12
|
-
eip1193Adapters?: EIP1193Adapter[];
|
|
13
|
-
};
|
|
14
|
-
declare function createStore({ eip1193Adapters, }?: CreateStoreOptions): Store;
|
|
15
|
-
|
|
16
|
-
export { type CleanupListener, type Listener, type Store, createStore };
|