@kheopskit/core 5.0.1 → 5.1.1

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.
Files changed (73) hide show
  1. package/dist/errors-Caq2csKx.mjs +181 -0
  2. package/dist/errors-Caq2csKx.mjs.map +1 -0
  3. package/dist/errors-DPw6pc2H.js +222 -0
  4. package/dist/errors-DPw6pc2H.js.map +1 -0
  5. package/dist/ethereum.d.mts +39 -38
  6. package/dist/ethereum.d.ts +39 -38
  7. package/dist/ethereum.js +216 -343
  8. package/dist/ethereum.js.map +1 -1
  9. package/dist/ethereum.mjs +213 -344
  10. package/dist/ethereum.mjs.map +1 -1
  11. package/dist/{getCachedObservable-C4E8dfMp.d.ts → getCachedObservable-LUq9IfEx.d.mts} +5 -2
  12. package/dist/{getCachedObservable-C4E8dfMp.d.mts → getCachedObservable-LUq9IfEx.d.ts} +5 -2
  13. package/dist/iconCache-BSa42Sui.mjs +343 -0
  14. package/dist/iconCache-BSa42Sui.mjs.map +1 -0
  15. package/dist/iconCache-DS4zNiP1.js +396 -0
  16. package/dist/iconCache-DS4zNiP1.js.map +1 -0
  17. package/dist/index.d.mts +98 -36
  18. package/dist/index.d.ts +98 -36
  19. package/dist/index.js +897 -630
  20. package/dist/index.js.map +1 -1
  21. package/dist/index.mjs +881 -631
  22. package/dist/index.mjs.map +1 -1
  23. package/dist/injectedWallets-B1MCxAE9.js +148 -0
  24. package/dist/injectedWallets-B1MCxAE9.js.map +1 -0
  25. package/dist/injectedWallets-B3Vysfvr.mjs +119 -0
  26. package/dist/injectedWallets-B3Vysfvr.mjs.map +1 -0
  27. package/dist/internal.d.mts +18 -53
  28. package/dist/internal.d.ts +18 -53
  29. package/dist/internal.js +9 -32
  30. package/dist/internal.mjs +3 -32
  31. package/dist/polkadot.d.mts +37 -36
  32. package/dist/polkadot.d.ts +37 -36
  33. package/dist/polkadot.js +179 -294
  34. package/dist/polkadot.js.map +1 -1
  35. package/dist/polkadot.mjs +176 -295
  36. package/dist/polkadot.mjs.map +1 -1
  37. package/dist/polkadotExtensions-BoVKhNU_.mjs +23 -0
  38. package/dist/polkadotExtensions-BoVKhNU_.mjs.map +1 -0
  39. package/dist/polkadotExtensions-y4J9UzYl.js +28 -0
  40. package/dist/polkadotExtensions-y4J9UzYl.js.map +1 -0
  41. package/dist/solana.d.mts +50 -48
  42. package/dist/solana.d.ts +50 -48
  43. package/dist/solana.js +323 -449
  44. package/dist/solana.js.map +1 -1
  45. package/dist/solana.mjs +316 -449
  46. package/dist/solana.mjs.map +1 -1
  47. package/dist/types-Cb-vuEru.d.mts +330 -0
  48. package/dist/types-Cb-vuEru.d.ts +330 -0
  49. package/dist/types-DKU-SNio.js +169 -0
  50. package/dist/types-DKU-SNio.js.map +1 -0
  51. package/dist/types-jnifAAA0.mjs +104 -0
  52. package/dist/types-jnifAAA0.mjs.map +1 -0
  53. package/package.json +12 -12
  54. package/dist/chunk-4ENHC7G4.js +0 -210
  55. package/dist/chunk-4ENHC7G4.js.map +0 -1
  56. package/dist/chunk-6XAZANB5.mjs +0 -450
  57. package/dist/chunk-6XAZANB5.mjs.map +0 -1
  58. package/dist/chunk-7QSGAJ4A.mjs +0 -210
  59. package/dist/chunk-7QSGAJ4A.mjs.map +0 -1
  60. package/dist/chunk-B4L6GAYD.js +0 -179
  61. package/dist/chunk-B4L6GAYD.js.map +0 -1
  62. package/dist/chunk-BWUUHUDK.mjs +0 -24
  63. package/dist/chunk-BWUUHUDK.mjs.map +0 -1
  64. package/dist/chunk-D3EQMFZ2.js +0 -24
  65. package/dist/chunk-D3EQMFZ2.js.map +0 -1
  66. package/dist/chunk-XQWJM3KC.js +0 -450
  67. package/dist/chunk-XQWJM3KC.js.map +0 -1
  68. package/dist/chunk-YDLCHYHH.mjs +0 -179
  69. package/dist/chunk-YDLCHYHH.mjs.map +0 -1
  70. package/dist/internal.js.map +0 -1
  71. package/dist/internal.mjs.map +0 -1
  72. package/dist/types-C7V7DGlg.d.mts +0 -349
  73. package/dist/types-C7V7DGlg.d.ts +0 -349
package/dist/ethereum.mjs CHANGED
@@ -1,351 +1,220 @@
1
- import {
2
- KheopskitError,
3
- getWalletAccountId,
4
- isEthereumAddress,
5
- store
6
- } from "./chunk-6XAZANB5.mjs";
7
- import {
8
- clearCachedObservable,
9
- getCachedObservable$,
10
- getWalletId,
11
- isInjectedWallet,
12
- isWalletConnectWallet
13
- } from "./chunk-7QSGAJ4A.mjs";
14
-
15
- // src/api/ethereum/accounts.ts
16
- import {
17
- combineLatest,
18
- distinctUntilChanged,
19
- map,
20
- Observable,
21
- of,
22
- ReplaySubject,
23
- shareReplay,
24
- switchMap
25
- } from "rxjs";
26
- import {
27
- createWalletClient,
28
- custom,
29
- getAddress
30
- } from "viem";
31
- var normalizeEvmChainId = (value) => {
32
- let raw = value;
33
- if (typeof raw === "string" && raw.startsWith("eip155:")) {
34
- raw = raw.slice("eip155:".length);
35
- }
36
- if (typeof raw === "bigint") {
37
- return raw >= 0n ? Number(raw) : void 0;
38
- }
39
- if (typeof raw === "number") {
40
- return Number.isInteger(raw) && raw >= 0 ? raw : void 0;
41
- }
42
- if (typeof raw === "string") {
43
- const normalized = raw.trim().toLowerCase();
44
- if (!normalized) return void 0;
45
- const parsed = normalized.startsWith("0x") ? Number.parseInt(normalized, 16) : Number.parseInt(normalized, 10);
46
- return Number.isNaN(parsed) ? void 0 : parsed;
47
- }
48
- return void 0;
49
- };
50
- var toCaipNetworkId = (value) => {
51
- const chainId = normalizeEvmChainId(value);
52
- return chainId === void 0 ? void 0 : `eip155:${chainId}`;
1
+ import { d as getCachedObservable$, i as getWalletId, l as clearCachedObservable, n as isWalletConnectWallet, t as isInjectedWallet } from "./types-jnifAAA0.mjs";
2
+ import { n as getWalletAccountId, s as isEthereumAddress } from "./errors-Caq2csKx.mjs";
3
+ import { i as getSessionCaip10s, n as createPlatformAccounts$, r as getCaip10Addresses, t as createInjectedWallets$ } from "./injectedWallets-B3Vysfvr.mjs";
4
+ import { Observable, ReplaySubject, combineLatest, distinctUntilChanged, map, of, shareReplay } from "rxjs";
5
+ import { createWalletClient, custom, getAddress } from "viem";
6
+ import { createStore } from "mipd";
7
+ //#region src/api/ethereum/accounts.ts
8
+ const normalizeEvmChainId = (value) => {
9
+ let raw = value;
10
+ if (typeof raw === "string" && raw.startsWith("eip155:")) raw = raw.slice(7);
11
+ if (typeof raw === "bigint") return raw >= 0n ? Number(raw) : void 0;
12
+ if (typeof raw === "number") return Number.isInteger(raw) && raw >= 0 ? raw : void 0;
13
+ if (typeof raw === "string") {
14
+ const normalized = raw.trim().toLowerCase();
15
+ if (!normalized) return void 0;
16
+ const parsed = normalized.startsWith("0x") ? Number.parseInt(normalized, 16) : Number.parseInt(normalized, 10);
17
+ return Number.isNaN(parsed) ? void 0 : parsed;
18
+ }
53
19
  };
54
- var getInjectedWalletAccounts$ = (wallet) => {
55
- if (!wallet.isConnected) return of([]);
56
- return getCachedObservable$(
57
- `accounts:${wallet.id}`,
58
- () => new Observable((subscriber) => {
59
- const addresses$ = new ReplaySubject(1);
60
- const chainId$ = new ReplaySubject(1);
61
- const getAccount = (address, chainId) => {
62
- const client = createWalletClient({
63
- account: address,
64
- transport: custom(wallet.provider)
65
- });
66
- return {
67
- id: getWalletAccountId(wallet.id, address),
68
- platform: "ethereum",
69
- client,
70
- address: getAddress(address),
71
- chainId,
72
- walletName: wallet.name,
73
- walletId: wallet.id
74
- };
75
- };
76
- const handleAccountsChanged = (addrs) => {
77
- addresses$.next(addrs);
78
- };
79
- const handleChainChanged = (chainIdHex) => {
80
- chainId$.next(normalizeEvmChainId(chainIdHex));
81
- };
82
- const handleDisconnect = () => {
83
- chainId$.next(void 0);
84
- };
85
- wallet.provider.on("accountsChanged", handleAccountsChanged);
86
- wallet.provider.on("chainChanged", handleChainChanged);
87
- wallet.provider.on("disconnect", handleDisconnect);
88
- wallet.provider.request({ method: "eth_accounts" }).then((addrs) => addresses$.next(addrs)).catch((err) => {
89
- console.error("Failed to get accounts", err);
90
- addresses$.next([]);
91
- });
92
- wallet.provider.request({ method: "eth_chainId" }).then(handleChainChanged).catch(() => chainId$.next(void 0));
93
- const sub = combineLatest([addresses$, chainId$]).pipe(
94
- map(
95
- ([addresses, chainId]) => addresses.map((addr) => getAccount(addr, chainId))
96
- )
97
- ).subscribe(subscriber);
98
- return () => {
99
- wallet.provider.removeListener(
100
- "accountsChanged",
101
- handleAccountsChanged
102
- );
103
- wallet.provider.removeListener("chainChanged", handleChainChanged);
104
- wallet.provider.removeListener("disconnect", handleDisconnect);
105
- sub.unsubscribe();
106
- };
107
- }).pipe(shareReplay({ refCount: true, bufferSize: 1 }))
108
- );
20
+ const toCaipNetworkId = (value) => {
21
+ const chainId = normalizeEvmChainId(value);
22
+ return chainId === void 0 ? void 0 : `eip155:${chainId}`;
109
23
  };
110
- var wrapWalletConnectProvider = (provider, sessionTopic, caipNetworkId) => {
111
- return new Proxy(provider, {
112
- get(target, prop, receiver) {
113
- if (prop !== "request") return Reflect.get(target, prop, receiver);
114
- return (args) => {
115
- if (!args || typeof args !== "object" || !args.method)
116
- return target.request(args);
117
- const next = { ...args };
118
- if (next.topic === void 0) next.topic = sessionTopic;
119
- if (next.chainId === void 0 && caipNetworkId !== void 0)
120
- next.chainId = caipNetworkId;
121
- return target.request(next, caipNetworkId);
122
- };
123
- }
124
- });
24
+ const getInjectedWalletAccounts$ = (wallet) => {
25
+ if (!wallet.isConnected) return of([]);
26
+ return getCachedObservable$(`accounts:${wallet.id}`, () => new Observable((subscriber) => {
27
+ const addresses$ = new ReplaySubject(1);
28
+ const chainId$ = new ReplaySubject(1);
29
+ const getAccount = (address, chainId) => {
30
+ const client = createWalletClient({
31
+ account: address,
32
+ transport: custom(wallet.provider)
33
+ });
34
+ return {
35
+ id: getWalletAccountId(wallet.id, address),
36
+ platform: "ethereum",
37
+ client,
38
+ address: getAddress(address),
39
+ chainId,
40
+ walletName: wallet.name,
41
+ walletId: wallet.id
42
+ };
43
+ };
44
+ const handleAccountsChanged = (addrs) => {
45
+ addresses$.next(addrs);
46
+ };
47
+ const handleChainChanged = (chainIdHex) => {
48
+ chainId$.next(normalizeEvmChainId(chainIdHex));
49
+ };
50
+ const handleDisconnect = () => {
51
+ chainId$.next(void 0);
52
+ };
53
+ wallet.provider.on("accountsChanged", handleAccountsChanged);
54
+ wallet.provider.on("chainChanged", handleChainChanged);
55
+ wallet.provider.on("disconnect", handleDisconnect);
56
+ wallet.provider.request({ method: "eth_accounts" }).then((addrs) => addresses$.next(addrs)).catch((err) => {
57
+ console.error("Failed to get accounts", err);
58
+ addresses$.next([]);
59
+ });
60
+ wallet.provider.request({ method: "eth_chainId" }).then(handleChainChanged).catch(() => chainId$.next(void 0));
61
+ const sub = combineLatest([addresses$, chainId$]).pipe(map(([addresses, chainId]) => addresses.map((addr) => getAccount(addr, chainId)))).subscribe(subscriber);
62
+ return () => {
63
+ wallet.provider.removeListener("accountsChanged", handleAccountsChanged);
64
+ wallet.provider.removeListener("chainChanged", handleChainChanged);
65
+ wallet.provider.removeListener("disconnect", handleDisconnect);
66
+ sub.unsubscribe();
67
+ };
68
+ }).pipe(shareReplay({
69
+ refCount: true,
70
+ bufferSize: 1
71
+ })));
125
72
  };
126
- var sameAddresses = (a, b) => a.length === b.length && a.every((addr, i) => addr === b[i]);
127
- var getWalletConnectAccounts$ = (wallet) => {
128
- const provider = wallet.appKit.getProvider("eip155");
129
- if (!wallet.platforms.includes("ethereum") || !provider?.session)
130
- return of([]);
131
- return getCachedObservable$(
132
- `accounts:${wallet.id}:ethereum:`,
133
- () => new Observable((subscriber) => {
134
- const caipNetworkId$ = new ReplaySubject(1);
135
- const addresses$ = new ReplaySubject(1);
136
- const readAddresses = () => {
137
- const session = provider.session;
138
- if (!session) return [];
139
- const addresses = /* @__PURE__ */ new Set();
140
- for (const namespace of Object.values(session.namespaces)) {
141
- for (const account of namespace.accounts ?? []) {
142
- if (!account.startsWith("eip155:")) continue;
143
- const raw = account.split(":")[2];
144
- if (!raw) continue;
145
- try {
146
- addresses.add(getAddress(raw));
147
- } catch {
148
- }
149
- }
150
- }
151
- return [...addresses];
152
- };
153
- const readCaipNetworkId = () => {
154
- const session = provider.session;
155
- if (!session) return void 0;
156
- for (const namespace of Object.values(session.namespaces)) {
157
- for (const account of namespace.accounts ?? []) {
158
- if (!account.startsWith("eip155:")) continue;
159
- const ref = account.split(":")[1];
160
- if (ref) return `eip155:${ref}`;
161
- }
162
- }
163
- return void 0;
164
- };
165
- const handleChainChanged = (chainId) => {
166
- const caipNetworkId = toCaipNetworkId(chainId);
167
- if (caipNetworkId) {
168
- caipNetworkId$.next(caipNetworkId);
169
- }
170
- };
171
- const handleAccountsChanged = () => addresses$.next(readAddresses());
172
- provider.on("chainChanged", handleChainChanged);
173
- provider.on("accountsChanged", handleAccountsChanged);
174
- provider.on("session_update", handleAccountsChanged);
175
- caipNetworkId$.next(readCaipNetworkId());
176
- provider.request({ method: "eth_chainId" }).then(handleChainChanged).catch(() => {
177
- });
178
- addresses$.next(readAddresses());
179
- const sub = combineLatest([
180
- caipNetworkId$.pipe(distinctUntilChanged()),
181
- addresses$.pipe(distinctUntilChanged(sameAddresses))
182
- ]).pipe(
183
- map(([caipNetworkId, addresses]) => {
184
- const chainId = normalizeEvmChainId(caipNetworkId);
185
- const transport = custom(
186
- wrapWalletConnectProvider(
187
- provider,
188
- // biome-ignore lint/style/noNonNullAssertion: legacy
189
- provider.session.topic,
190
- caipNetworkId
191
- )
192
- );
193
- return addresses.map((addr) => {
194
- const client = createWalletClient({
195
- account: addr,
196
- transport
197
- });
198
- return {
199
- id: getWalletAccountId(wallet.id, addr),
200
- platform: "ethereum",
201
- walletName: wallet.name,
202
- walletId: wallet.id,
203
- address: addr,
204
- client,
205
- chainId
206
- };
207
- });
208
- })
209
- ).subscribe(subscriber);
210
- return () => {
211
- provider.off("chainChanged", handleChainChanged);
212
- provider.off("accountsChanged", handleAccountsChanged);
213
- provider.off("session_update", handleAccountsChanged);
214
- sub.unsubscribe();
215
- };
216
- }).pipe(shareReplay({ refCount: true, bufferSize: 1 }))
217
- );
73
+ const wrapWalletConnectProvider = (provider, sessionTopic, caipNetworkId) => {
74
+ return new Proxy(provider, { get(target, prop, receiver) {
75
+ if (prop !== "request") return Reflect.get(target, prop, receiver);
76
+ return (args) => {
77
+ if (!args || typeof args !== "object" || !args.method) return target.request(args);
78
+ const next = { ...args };
79
+ if (next.topic === void 0) next.topic = sessionTopic;
80
+ if (next.chainId === void 0 && caipNetworkId !== void 0) next.chainId = caipNetworkId;
81
+ return target.request(next, caipNetworkId);
82
+ };
83
+ } });
218
84
  };
219
- var getEthereumAccounts$ = (ethereumWallets) => new Observable((subscriber) => {
220
- const sub = ethereumWallets.pipe(
221
- map((wallets) => wallets.filter((w) => w.isConnected)),
222
- switchMap((wallets) => {
223
- return wallets.length ? combineLatest([
224
- ...wallets.filter((w) => w.type === "injected").map(getInjectedWalletAccounts$),
225
- ...wallets.filter(isWalletConnectWallet).map(getWalletConnectAccounts$)
226
- ]) : of([]);
227
- }),
228
- map((accounts) => accounts.flat()),
229
- distinctUntilChanged(isSameAccountsList)
230
- ).subscribe(subscriber);
231
- return () => {
232
- sub.unsubscribe();
233
- };
234
- }).pipe(
235
- // logObservable("ethereumAccounts$", true),
236
- shareReplay({ refCount: true, bufferSize: 1 })
237
- );
238
- var isSameAccountsList = (a, b) => {
239
- if (a.length !== b.length) return false;
240
- return a.every(
241
- (account, i) => account.id === b[i]?.id && account.chainId === b[i]?.chainId
242
- );
85
+ const sameAddresses = (a, b) => a.length === b.length && a.every((addr, i) => addr === b[i]);
86
+ const getWalletConnectAccounts$ = (wallet) => {
87
+ const provider = wallet.appKit.getProvider("eip155");
88
+ if (!wallet.platforms.includes("ethereum") || !provider?.session) return of([]);
89
+ return getCachedObservable$(`accounts:${wallet.id}:ethereum:`, () => new Observable((subscriber) => {
90
+ const caipNetworkId$ = new ReplaySubject(1);
91
+ const addresses$ = new ReplaySubject(1);
92
+ const readAddresses = () => {
93
+ const session = provider.session;
94
+ if (!session) return [];
95
+ const addresses = /* @__PURE__ */ new Set();
96
+ for (const raw of getCaip10Addresses(getSessionCaip10s(session, "eip155"))) try {
97
+ addresses.add(getAddress(raw));
98
+ } catch {}
99
+ return [...addresses];
100
+ };
101
+ const readCaipNetworkId = () => {
102
+ const session = provider.session;
103
+ if (!session) return void 0;
104
+ for (const account of getSessionCaip10s(session, "eip155")) {
105
+ const ref = account.split(":")[1];
106
+ if (ref) return `eip155:${ref}`;
107
+ }
108
+ };
109
+ const handleChainChanged = (chainId) => {
110
+ const caipNetworkId = toCaipNetworkId(chainId);
111
+ if (caipNetworkId) caipNetworkId$.next(caipNetworkId);
112
+ };
113
+ const handleAccountsChanged = () => addresses$.next(readAddresses());
114
+ provider.on("chainChanged", handleChainChanged);
115
+ provider.on("accountsChanged", handleAccountsChanged);
116
+ provider.on("session_update", handleAccountsChanged);
117
+ caipNetworkId$.next(readCaipNetworkId());
118
+ provider.request({ method: "eth_chainId" }).then(handleChainChanged).catch(() => {});
119
+ addresses$.next(readAddresses());
120
+ const sub = combineLatest([caipNetworkId$.pipe(distinctUntilChanged()), addresses$.pipe(distinctUntilChanged(sameAddresses))]).pipe(map(([caipNetworkId, addresses]) => {
121
+ const chainId = normalizeEvmChainId(caipNetworkId);
122
+ const transport = custom(wrapWalletConnectProvider(provider, provider.session.topic, caipNetworkId));
123
+ return addresses.map((addr) => {
124
+ const client = createWalletClient({
125
+ account: addr,
126
+ transport
127
+ });
128
+ return {
129
+ id: getWalletAccountId(wallet.id, addr),
130
+ platform: "ethereum",
131
+ walletName: wallet.name,
132
+ walletId: wallet.id,
133
+ address: addr,
134
+ client,
135
+ chainId
136
+ };
137
+ });
138
+ })).subscribe(subscriber);
139
+ return () => {
140
+ provider.off("chainChanged", handleChainChanged);
141
+ provider.off("accountsChanged", handleAccountsChanged);
142
+ provider.off("session_update", handleAccountsChanged);
143
+ sub.unsubscribe();
144
+ };
145
+ }).pipe(shareReplay({
146
+ refCount: true,
147
+ bufferSize: 1
148
+ })));
243
149
  };
244
-
245
- // src/api/ethereum/wallets.ts
246
- import {
247
- createStore as createMipdStore
248
- } from "mipd";
249
- import {
250
- BehaviorSubject,
251
- combineLatest as combineLatest2,
252
- distinctUntilChanged as distinctUntilChanged2,
253
- map as map2,
254
- Observable as Observable2,
255
- shareReplay as shareReplay2
256
- } from "rxjs";
257
- var providersDetails$ = new Observable2(
258
- (subscriber) => {
259
- if (typeof window === "undefined") {
260
- subscriber.next([]);
261
- return () => {
262
- };
263
- }
264
- const mipdStore = createMipdStore();
265
- const unsubscribe = mipdStore.subscribe((providerDetails2) => {
266
- subscriber.next(providerDetails2);
267
- });
268
- const providerDetails = mipdStore.getProviders();
269
- subscriber.next(providerDetails);
270
- return () => {
271
- unsubscribe();
272
- mipdStore.destroy();
273
- };
274
- }
275
- ).pipe(shareReplay2({ refCount: true, bufferSize: 1 }));
276
- var createEthereumInjectedWallets$ = (store2) => new Observable2((subscriber) => {
277
- const enabledWalletIds$ = new BehaviorSubject(/* @__PURE__ */ new Set());
278
- const connectWallet = async (walletId, provider) => {
279
- if (enabledWalletIds$.value.has(walletId))
280
- throw new KheopskitError(
281
- "WALLET_ALREADY_CONNECTED",
282
- `wallet ${walletId} is already connected`,
283
- { walletId }
284
- );
285
- await provider.request({
286
- method: "eth_requestAccounts"
287
- });
288
- const newSet = new Set(enabledWalletIds$.value);
289
- newSet.add(walletId);
290
- enabledWalletIds$.next(newSet);
291
- store2.addEnabledWalletId(walletId);
292
- };
293
- const disconnectWallet = async (walletId) => {
294
- if (!enabledWalletIds$.value.has(walletId))
295
- throw new KheopskitError(
296
- "WALLET_NOT_CONNECTED",
297
- `wallet ${walletId} is not connected`,
298
- { walletId }
299
- );
300
- const newSet = new Set(enabledWalletIds$.value);
301
- newSet.delete(walletId);
302
- enabledWalletIds$.next(newSet);
303
- store2.removeEnabledWalletId(walletId);
304
- clearCachedObservable(`accounts:${walletId}`);
305
- };
306
- const sub = combineLatest2([providersDetails$, enabledWalletIds$]).pipe(
307
- map2(([providerDetails, enabledWalletIds]) => {
308
- return providerDetails.map((pd) => {
309
- const walletId = getWalletId("ethereum", pd.info.rdns);
310
- const provider = pd.provider;
311
- return {
312
- platform: "ethereum",
313
- type: "injected",
314
- id: walletId,
315
- name: pd.info.name,
316
- icon: pd.info.icon,
317
- provider,
318
- isConnected: enabledWalletIds.has(walletId),
319
- sourceId: pd.info.rdns,
320
- connect: () => connectWallet(walletId, provider),
321
- disconnect: () => disconnectWallet(walletId)
322
- };
323
- });
324
- }),
325
- distinctUntilChanged2(walletsEqual)
326
- ).subscribe(subscriber);
327
- return () => {
328
- sub.unsubscribe();
329
- };
330
- }).pipe(shareReplay2({ refCount: true, bufferSize: 1 }));
331
- var getEthereumWallets$ = (store2 = store) => createEthereumInjectedWallets$(store2);
332
- var walletsEqual = (a, b) => {
333
- if (a.length !== b.length) return false;
334
- return a.every(
335
- (w, i) => w.id === b[i]?.id && w.isConnected === b[i]?.isConnected && w.name === b[i]?.name
336
- );
337
- };
338
-
339
- // src/api/ethereum/plugin.ts
340
- var ethereum = () => ({
341
- platform: "ethereum",
342
- getWallets$: (ctx) => getEthereumWallets$(ctx.store),
343
- getAccounts$: (wallets$) => getEthereumAccounts$(wallets$)
150
+ const getEthereumAccounts$ = (ethereumWallets) => createPlatformAccounts$({
151
+ wallets$: ethereumWallets,
152
+ getInjectedAccounts$: getInjectedWalletAccounts$,
153
+ getWalletConnectAccounts$,
154
+ accountChangeKey: (account) => `${account.id}|${account.chainId ?? ""}`
344
155
  });
345
- export {
346
- ethereum,
347
- isEthereumAddress,
348
- isInjectedWallet,
349
- isWalletConnectWallet
350
- };
156
+ //#endregion
157
+ //#region src/api/ethereum/wallets.ts
158
+ /**
159
+ * Observable that emits EIP-6963 provider details from injected wallets.
160
+ * Returns empty array during SSR since browser wallet APIs are not available.
161
+ */
162
+ const providersDetails$ = new Observable((subscriber) => {
163
+ if (typeof window === "undefined") {
164
+ subscriber.next([]);
165
+ return () => {};
166
+ }
167
+ const mipdStore = createStore();
168
+ const unsubscribe = mipdStore.subscribe((providerDetails) => {
169
+ subscriber.next(providerDetails);
170
+ });
171
+ const providerDetails = mipdStore.getProviders();
172
+ subscriber.next(providerDetails);
173
+ return () => {
174
+ unsubscribe();
175
+ mipdStore.destroy();
176
+ };
177
+ }).pipe(shareReplay({
178
+ refCount: true,
179
+ bufferSize: 1
180
+ }));
181
+ const getEthereumWallets$ = (store) => createInjectedWallets$(store, {
182
+ sources$: providersDetails$,
183
+ getWalletId: (pd) => getWalletId("ethereum", pd.info.rdns),
184
+ connect: async (pd) => {
185
+ await pd.provider.request({ method: "eth_requestAccounts" });
186
+ },
187
+ onDisconnected: (walletId) => clearCachedObservable(`accounts:${walletId}`),
188
+ buildWallet: ({ source: pd, walletId, isConnected, connect, disconnect }) => ({
189
+ platform: "ethereum",
190
+ type: "injected",
191
+ id: walletId,
192
+ name: pd.info.name,
193
+ icon: pd.info.icon,
194
+ provider: pd.provider,
195
+ isConnected,
196
+ sourceId: pd.info.rdns,
197
+ connect,
198
+ disconnect
199
+ })
200
+ });
201
+ //#endregion
202
+ //#region src/api/ethereum/plugin.ts
203
+ /**
204
+ * Ethereum platform plugin. Pass to `getKheopskit$({ platforms: [ethereum()] })`.
205
+ *
206
+ * @example
207
+ * ```ts
208
+ * import { ethereum } from "@kheopskit/core/ethereum";
209
+ * ethereum();
210
+ * ```
211
+ */
212
+ const ethereum = () => ({
213
+ platform: "ethereum",
214
+ getWallets$: (ctx) => getEthereumWallets$(ctx.store),
215
+ getAccounts$: (wallets$) => getEthereumAccounts$(wallets$)
216
+ });
217
+ //#endregion
218
+ export { ethereum, isEthereumAddress, isInjectedWallet, isWalletConnectWallet };
219
+
351
220
  //# sourceMappingURL=ethereum.mjs.map