@starknet-io/get-starknet-discovery 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,187 +1,171 @@
1
- 'use strict';
2
-
3
- const features = require('@starknet-io/get-starknet-wallet-standard/features');
4
- const metamask = require('@starknet-io/get-starknet-virtual-wallet/metamask');
5
- const getStarknetWalletStandard = require('@starknet-io/get-starknet-wallet-standard');
6
-
7
- function registerStandardWalletDiscovery(register) {
8
- if (typeof window === "undefined")
9
- return;
10
- const api = Object.freeze({ register });
11
- const handler = ({ detail: callback }) => {
12
- callback(api);
13
- };
14
- window.addEventListener(
15
- "wallet-standard:register-wallet",
16
- handler
17
- );
18
- window.dispatchEvent(new AppReadyEvent(api));
19
- return () => window.removeEventListener(
20
- "wallet-standard:register-wallet",
21
- handler
22
- );
23
- }
24
- class AppReadyEvent extends Event {
25
- constructor(detail) {
26
- super("wallet-standard:app-ready", {
27
- bubbles: false,
28
- cancelable: false,
29
- composed: false
30
- });
31
- this.detail = detail;
32
- }
33
- get type() {
34
- return "wallet-standard:app-ready";
35
- }
36
- preventDefault() {
37
- throw new Error("preventDefault is deprecated");
38
- }
39
- stopImmediatePropagation() {
40
- throw new Error("stopImmediatePropagation is deprecated");
41
- }
42
- stopPropagation() {
43
- throw new Error("stopPropagation is deprecated");
44
- }
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
6
+ function registerEIP1193WalletFromEIP6963Discovery(eip1193Adapters, register) {
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);
45
21
  }
46
-
22
+ //#endregion
23
+ //#region src/injected-wallet.ts
47
24
  function registerInjectedWalletDiscovery(register) {
48
- if (typeof window === "undefined")
49
- return {
50
- unregister: () => {
51
- },
52
- refresh: () => {
53
- }
54
- };
55
- function refresh() {
56
- const injectedWallets = scanWindowForWallets(window);
57
- for (const wallet of injectedWallets) {
58
- register(new getStarknetWalletStandard.StarknetInjectedWallet(wallet));
59
- }
60
- }
61
- refresh();
62
- return {
63
- unregister: () => {
64
- },
65
- refresh
66
- };
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
+ };
67
38
  }
68
- function scanWindowForWallets(window2) {
69
- return Object.getOwnPropertyNames(window2).reduce((wallets, key) => {
70
- if (key.startsWith("starknet")) {
71
- const wallet = window2[key];
72
- if (isStarknetWindowObject(wallet)) {
73
- wallets.push(wallet);
74
- }
75
- }
76
- return wallets;
77
- }, []);
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
+ }, []);
78
47
  }
79
48
  const STARKNET_WALLET_KEYS = [
80
- "id",
81
- "name",
82
- "version",
83
- "icon",
84
- "request",
85
- "on",
86
- "off"
49
+ "id",
50
+ "name",
51
+ "version",
52
+ "icon",
53
+ "request",
54
+ "on",
55
+ "off"
87
56
  ];
88
57
  function isStarknetWindowObject(wallet) {
89
- if (typeof wallet !== "object" || wallet === null)
90
- return false;
91
- 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);
92
60
  }
93
-
94
- function registerEIP1193WalletFromEIP6963Discovery(eip1193Adapters, register) {
95
- if (typeof window === "undefined")
96
- return;
97
- const handler = (event) => {
98
- const { info, provider } = event.detail;
99
- for (const adapter of eip1193Adapters) {
100
- const wallet = adapter(info, provider);
101
- if (wallet) {
102
- register(wallet);
103
- return;
104
- }
105
- }
106
- };
107
- window.addEventListener("eip6963:announceProvider", handler);
108
- window.dispatchEvent(new Event("eip6963:requestProvider"));
109
- return () => window.removeEventListener("eip6963:announceProvider", handler);
61
+ //#endregion
62
+ //#region src/standard-wallet.ts
63
+ function registerStandardWalletDiscovery(register) {
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);
110
72
  }
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
- };
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
+ };
184
167
  }
185
-
168
+ //#endregion
186
169
  exports.createStore = createStore;
187
- //# sourceMappingURL=index.cjs.map
170
+
171
+ //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/standard-wallet.ts","../src/injected-wallet.ts","../src/eip1193-wallet.ts","../src/store.ts"],"sourcesContent":["import type {\n WalletEventsWindow,\n WindowRegisterWalletEvent,\n WindowAppReadyEvent,\n WindowAppReadyEventAPI,\n Wallet,\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 { 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 { 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 {\n type WalletWithStarknetFeatures,\n isStarknetWallet,\n} from \"@starknet-io/get-starknet-wallet-standard/features\";\nimport type { EIP1193Adapter } from \"@starknet-io/get-starknet-virtual-wallet\";\nimport { metaMaskVirtualWallet } from \"@starknet-io/get-starknet-virtual-wallet/metamask\";\n\nimport { registerStandardWalletDiscovery } from \"./standard-wallet\";\nimport { registerInjectedWalletDiscovery } from \"./injected-wallet\";\nimport { registerEIP1193WalletFromEIP6963Discovery } from \"./eip1193-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 { WalletWithStarknetFeatures } from '@starknet-io/get-starknet-wallet-standard/features';
2
- import { EIP1193Adapter } from '@starknet-io/get-starknet-virtual-wallet';
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
- getWallets: () => WalletWithStarknetFeatures[];
8
- subscribe: (listener: Listener) => CleanupListener;
9
- _refreshInjectedWallets: () => void;
8
+ getWallets: () => WalletWithStarknetFeatures[];
9
+ subscribe: (listener: Listener) => CleanupListener;
10
+ _refreshInjectedWallets: () => void;
10
11
  };
11
12
  type CreateStoreOptions = {
12
- eip1193Adapters?: EIP1193Adapter[];
13
+ eip1193Adapters?: EIP1193Adapter[];
13
14
  };
14
- declare function createStore({ eip1193Adapters, }?: CreateStoreOptions): Store;
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 { WalletWithStarknetFeatures } from '@starknet-io/get-starknet-wallet-standard/features';
2
- import { EIP1193Adapter } from '@starknet-io/get-starknet-virtual-wallet';
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
- getWallets: () => WalletWithStarknetFeatures[];
8
- subscribe: (listener: Listener) => CleanupListener;
9
- _refreshInjectedWallets: () => void;
8
+ getWallets: () => WalletWithStarknetFeatures[];
9
+ subscribe: (listener: Listener) => CleanupListener;
10
+ _refreshInjectedWallets: () => void;
10
11
  };
11
12
  type CreateStoreOptions = {
12
- eip1193Adapters?: EIP1193Adapter[];
13
+ eip1193Adapters?: EIP1193Adapter[];
13
14
  };
14
- declare function createStore({ eip1193Adapters, }?: CreateStoreOptions): Store;
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 { isStarknetWallet } from '@starknet-io/get-starknet-wallet-standard/features';
2
- import { metaMaskVirtualWallet } from '@starknet-io/get-starknet-virtual-wallet/metamask';
3
- import { StarknetInjectedWallet } from '@starknet-io/get-starknet-wallet-standard';
4
-
5
- function registerStandardWalletDiscovery(register) {
6
- if (typeof window === "undefined")
7
- return;
8
- const api = Object.freeze({ register });
9
- const handler = ({ detail: callback }) => {
10
- callback(api);
11
- };
12
- window.addEventListener(
13
- "wallet-standard:register-wallet",
14
- handler
15
- );
16
- window.dispatchEvent(new AppReadyEvent(api));
17
- return () => window.removeEventListener(
18
- "wallet-standard:register-wallet",
19
- handler
20
- );
21
- }
22
- class AppReadyEvent extends Event {
23
- constructor(detail) {
24
- super("wallet-standard:app-ready", {
25
- bubbles: false,
26
- cancelable: false,
27
- composed: false
28
- });
29
- this.detail = detail;
30
- }
31
- get type() {
32
- return "wallet-standard:app-ready";
33
- }
34
- preventDefault() {
35
- throw new Error("preventDefault is deprecated");
36
- }
37
- stopImmediatePropagation() {
38
- throw new Error("stopImmediatePropagation is deprecated");
39
- }
40
- stopPropagation() {
41
- throw new Error("stopPropagation is deprecated");
42
- }
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
+ function registerEIP1193WalletFromEIP6963Discovery(eip1193Adapters, register) {
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);
43
20
  }
44
-
21
+ //#endregion
22
+ //#region src/injected-wallet.ts
45
23
  function registerInjectedWalletDiscovery(register) {
46
- if (typeof window === "undefined")
47
- return {
48
- unregister: () => {
49
- },
50
- refresh: () => {
51
- }
52
- };
53
- function refresh() {
54
- const injectedWallets = scanWindowForWallets(window);
55
- for (const wallet of injectedWallets) {
56
- register(new StarknetInjectedWallet(wallet));
57
- }
58
- }
59
- refresh();
60
- return {
61
- unregister: () => {
62
- },
63
- refresh
64
- };
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
+ };
65
37
  }
66
- function scanWindowForWallets(window2) {
67
- return Object.getOwnPropertyNames(window2).reduce((wallets, key) => {
68
- if (key.startsWith("starknet")) {
69
- const wallet = window2[key];
70
- if (isStarknetWindowObject(wallet)) {
71
- wallets.push(wallet);
72
- }
73
- }
74
- return wallets;
75
- }, []);
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
+ }, []);
76
46
  }
77
47
  const STARKNET_WALLET_KEYS = [
78
- "id",
79
- "name",
80
- "version",
81
- "icon",
82
- "request",
83
- "on",
84
- "off"
48
+ "id",
49
+ "name",
50
+ "version",
51
+ "icon",
52
+ "request",
53
+ "on",
54
+ "off"
85
55
  ];
86
56
  function isStarknetWindowObject(wallet) {
87
- if (typeof wallet !== "object" || wallet === null)
88
- return false;
89
- 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);
90
59
  }
91
-
92
- function registerEIP1193WalletFromEIP6963Discovery(eip1193Adapters, register) {
93
- if (typeof window === "undefined")
94
- return;
95
- const handler = (event) => {
96
- const { info, provider } = event.detail;
97
- for (const adapter of eip1193Adapters) {
98
- const wallet = adapter(info, provider);
99
- if (wallet) {
100
- register(wallet);
101
- return;
102
- }
103
- }
104
- };
105
- window.addEventListener("eip6963:announceProvider", handler);
106
- window.dispatchEvent(new Event("eip6963:requestProvider"));
107
- return () => window.removeEventListener("eip6963:announceProvider", handler);
60
+ //#endregion
61
+ //#region src/standard-wallet.ts
62
+ function registerStandardWalletDiscovery(register) {
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
- eip1193Adapters = DEFAULT_EIP1193_ADAPTERS
113
- } = {}) {
114
- const listeners = /* @__PURE__ */ new Set();
115
- let wallets = [];
116
- function emitChanges() {
117
- for (const listener of listeners) {
118
- listener(wallets.map(({ wallet }) => wallet).slice());
119
- }
120
- }
121
- registerStandardWalletDiscovery((wallet) => {
122
- if (!isStarknetWallet(wallet))
123
- return;
124
- const existing = wallets.find((w) => w.wallet.name === wallet.name);
125
- if (existing) {
126
- if (existing.discoverer !== "standard") {
127
- wallets = [
128
- { discoverer: "standard", wallet },
129
- ...wallets.filter((w) => w.wallet.name !== wallet.name)
130
- ];
131
- emitChanges();
132
- }
133
- } else {
134
- wallets = [{ discoverer: "standard", wallet }, ...wallets];
135
- emitChanges();
136
- }
137
- return () => {
138
- wallets = wallets.filter((w) => w.wallet.name !== wallet.name);
139
- emitChanges();
140
- };
141
- });
142
- registerEIP1193WalletFromEIP6963Discovery(eip1193Adapters, (wallet) => {
143
- if (!isStarknetWallet(wallet))
144
- return;
145
- const existing = wallets.find((w) => w.wallet.name === wallet.name);
146
- if (!existing) {
147
- wallets = [{ discoverer: "eip6963", wallet }, ...wallets];
148
- emitChanges();
149
- }
150
- return () => {
151
- wallets = wallets.filter((w) => w.wallet.name !== wallet.name);
152
- emitChanges();
153
- };
154
- });
155
- const { refresh: refreshInjectedWallets } = registerInjectedWalletDiscovery(
156
- (wallet) => {
157
- if (!isStarknetWallet(wallet))
158
- return;
159
- const existing = wallets.find((w) => w.wallet.name === wallet.name);
160
- if (!existing) {
161
- wallets = [{ discoverer: "injected", wallet }, ...wallets];
162
- emitChanges();
163
- }
164
- return () => {
165
- wallets = wallets.filter((w) => w.wallet.name !== wallet.name);
166
- emitChanges();
167
- };
168
- }
169
- );
170
- return {
171
- _refreshInjectedWallets: refreshInjectedWallets,
172
- getWallets() {
173
- return wallets.map(({ wallet }) => wallet).slice();
174
- },
175
- subscribe(listener) {
176
- listeners.add(listener);
177
- return () => {
178
- listeners.delete(listener);
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
- //# sourceMappingURL=index.mjs.map
169
+
170
+ //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/standard-wallet.ts","../src/injected-wallet.ts","../src/eip1193-wallet.ts","../src/store.ts"],"sourcesContent":["import type {\n WalletEventsWindow,\n WindowRegisterWalletEvent,\n WindowAppReadyEvent,\n WindowAppReadyEventAPI,\n Wallet,\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 { 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 { 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 {\n type WalletWithStarknetFeatures,\n isStarknetWallet,\n} from \"@starknet-io/get-starknet-wallet-standard/features\";\nimport type { EIP1193Adapter } from \"@starknet-io/get-starknet-virtual-wallet\";\nimport { metaMaskVirtualWallet } from \"@starknet-io/get-starknet-virtual-wallet/metamask\";\n\nimport { registerStandardWalletDiscovery } from \"./standard-wallet\";\nimport { registerInjectedWalletDiscovery } from \"./injected-wallet\";\nimport { registerEIP1193WalletFromEIP6963Discovery } from \"./eip1193-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": "5.0.0-beta.0",
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.ts",
21
+ "types": "./dist/index.d.mts",
17
22
  "exports": {
18
23
  ".": {
19
- "types": "./dist/index.d.ts",
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,24 +32,25 @@
27
32
  "src"
28
33
  ],
29
34
  "devDependencies": {
30
- "@wallet-standard/core": "^1.1.0",
31
- "happy-dom": "^17.4.4",
32
- "typescript": "^5.8.3",
33
- "unbuild": "^2.0.0",
34
- "vitest": "^3.1.1"
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.7.10",
38
- "@wallet-standard/base": "^1.1.0",
39
- "@starknet-io/get-starknet-virtual-wallet": "^5.0.0-beta.0",
40
- "@starknet-io/get-starknet-wallet-standard": "^5.0.0-beta.0"
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
- "build": "unbuild",
44
- "format:check": "biome format .",
48
+ "typecheck": "tsc --noEmit",
49
+ "build": "tsdown",
50
+ "lint:check": "biome check .",
51
+ "lint": "biome check --write .",
45
52
  "format": "biome format --write .",
46
- "lint:check": "biome lint .",
47
- "lint": "biome lint --write .",
53
+ "format:check": "biome format .",
48
54
  "test": "vitest"
49
55
  }
50
56
  }
package/src/index.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export {
2
+ type CleanupListener,
2
3
  createStore,
3
- type Store,
4
4
  type Listener,
5
- type CleanupListener,
5
+ type Store,
6
6
  } from "./store";
@@ -1,9 +1,9 @@
1
1
  import type {
2
+ Wallet,
2
3
  WalletEventsWindow,
3
- WindowRegisterWalletEvent,
4
4
  WindowAppReadyEvent,
5
5
  WindowAppReadyEventAPI,
6
- Wallet,
6
+ WindowRegisterWalletEvent,
7
7
  } from "@wallet-standard/base";
8
8
 
9
9
  export function registerStandardWalletDiscovery(
package/src/store.ts CHANGED
@@ -1,13 +1,13 @@
1
+ import type { EIP1193Adapter } from "@starknet-io/get-starknet-virtual-wallet";
2
+ import { metaMaskVirtualWallet } from "@starknet-io/get-starknet-virtual-wallet/metamask";
1
3
  import {
2
- type WalletWithStarknetFeatures,
3
4
  isStarknetWallet,
5
+ type WalletWithStarknetFeatures,
4
6
  } from "@starknet-io/get-starknet-wallet-standard/features";
5
- import type { EIP1193Adapter } from "@starknet-io/get-starknet-virtual-wallet";
6
- import { metaMaskVirtualWallet } from "@starknet-io/get-starknet-virtual-wallet/metamask";
7
7
 
8
- import { registerStandardWalletDiscovery } from "./standard-wallet";
9
- import { registerInjectedWalletDiscovery } from "./injected-wallet";
10
8
  import { registerEIP1193WalletFromEIP6963Discovery } from "./eip1193-wallet";
9
+ import { registerInjectedWalletDiscovery } from "./injected-wallet";
10
+ import { registerStandardWalletDiscovery } from "./standard-wallet";
11
11
 
12
12
  export type CleanupListener = () => void;
13
13
  export type Listener = (wallets: readonly WalletWithStarknetFeatures[]) => void;
package/dist/index.d.ts DELETED
@@ -1,16 +0,0 @@
1
- import { WalletWithStarknetFeatures } from '@starknet-io/get-starknet-wallet-standard/features';
2
- import { EIP1193Adapter } from '@starknet-io/get-starknet-virtual-wallet';
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 };