@kheopskit/core 0.0.10 → 0.0.12

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.mjs ADDED
@@ -0,0 +1,843 @@
1
+ // src/utils/logObservable.ts
2
+ import { tap } from "rxjs";
3
+ var logObservable = (label, opts) => tap((value) => {
4
+ const { printValue = false, enabled = true } = opts || {};
5
+ if (!label || !enabled) return;
6
+ const text = `[kheopskit] observable ${label} emit`;
7
+ if (printValue) console.debug(text, value);
8
+ else console.debug(text);
9
+ });
10
+
11
+ // src/api/kheopskit.ts
12
+ import {
13
+ Observable as Observable8,
14
+ combineLatest as combineLatest8,
15
+ map as map9,
16
+ shareReplay as shareReplay8,
17
+ throttleTime
18
+ } from "rxjs";
19
+
20
+ // src/utils/sortAccounts.ts
21
+ var sortAccounts = (a1, a2) => {
22
+ if (a1.platform === "polkadot") {
23
+ if (a2.platform === "polkadot") {
24
+ if (a1.walletName !== a2.walletName) {
25
+ if (a1.walletName === "talisman") return -1;
26
+ if (a2.walletName === "talisman") return 1;
27
+ return a1.walletName.localeCompare(a2.walletName);
28
+ }
29
+ return a1.name !== a2.name ? (a1.name ?? "").localeCompare(a2.name ?? "") : a1.address.localeCompare(a2.address);
30
+ }
31
+ return -1;
32
+ }
33
+ if (a2.platform === "ethereum") {
34
+ if (a1.walletName !== a2.walletName) {
35
+ if (a1.walletName === "Talisman") return -1;
36
+ if (a2.walletName === "Talisman") return 1;
37
+ return a1.walletName.localeCompare(a2.walletName);
38
+ }
39
+ return 0;
40
+ }
41
+ return 0;
42
+ };
43
+
44
+ // src/api/accounts.ts
45
+ import { Observable as Observable3, combineLatest as combineLatest3, map as map4, of as of3, shareReplay as shareReplay3 } from "rxjs";
46
+
47
+ // src/utils/createStore.ts
48
+ import { BehaviorSubject, filter, fromEvent, map } from "rxjs";
49
+ var createStore = (key, defaultValue) => {
50
+ const subject = new BehaviorSubject(getStoredData(key, defaultValue));
51
+ fromEvent(window, "storage").pipe(
52
+ filter((event) => event.key === key),
53
+ map((event) => parseData(event.newValue, defaultValue))
54
+ ).subscribe((newValue) => subject.next(newValue));
55
+ const update = (val) => {
56
+ setStoredData(key, val);
57
+ subject.next(val);
58
+ };
59
+ return {
60
+ observable: subject.asObservable(),
61
+ set: (val) => update(val),
62
+ mutate: (transform) => update(transform(subject.getValue())),
63
+ get: () => structuredClone(subject.getValue())
64
+ };
65
+ };
66
+ var parseData = (str, defaultValue) => {
67
+ try {
68
+ if (str) return JSON.parse(str);
69
+ } catch {
70
+ }
71
+ return defaultValue;
72
+ };
73
+ var getStoredData = (key, defaultValue) => {
74
+ const str = localStorage.getItem(key);
75
+ return parseData(str, defaultValue);
76
+ };
77
+ var setStoredData = (key, val) => {
78
+ const str = JSON.stringify(val);
79
+ localStorage.setItem(key, str);
80
+ };
81
+
82
+ // src/utils/isEthereumAddress.ts
83
+ import { isAddress } from "viem";
84
+ var isEthereumAddress = (address) => isAddress(address);
85
+
86
+ // src/utils/isSs58Address.ts
87
+ import { AccountId } from "polkadot-api";
88
+ var accountIdEncoder = AccountId().enc;
89
+ var isSs58Address = (address) => {
90
+ try {
91
+ if (!address) return false;
92
+ accountIdEncoder(address);
93
+ return true;
94
+ } catch {
95
+ return false;
96
+ }
97
+ };
98
+
99
+ // src/utils/isValidAddress.ts
100
+ var isValidAddress = (address) => {
101
+ return address.startsWith("0x") ? isEthereumAddress(address) : isSs58Address(address);
102
+ };
103
+
104
+ // src/utils/WalletAccountId.ts
105
+ var getWalletAccountId = (walletId, address) => {
106
+ if (!walletId) throw new Error("Missing walletId");
107
+ if (!isValidAddress(address)) throw new Error("Invalid address");
108
+ return `${walletId}::${address}`;
109
+ };
110
+
111
+ // src/utils/isWalletPlatform.ts
112
+ var isWalletPlatform = (platform) => typeof platform === "string" && ["polkadot", "ethereum"].includes(platform);
113
+
114
+ // src/utils/getCachedObservable.ts
115
+ var CACHE = /* @__PURE__ */ new Map();
116
+ var getCachedObservable$ = (key, create) => {
117
+ if (!CACHE.has(key)) CACHE.set(key, create());
118
+ return CACHE.get(key);
119
+ };
120
+
121
+ // src/api/ethereum/accounts.ts
122
+ import {
123
+ Observable,
124
+ ReplaySubject,
125
+ combineLatest,
126
+ distinctUntilChanged,
127
+ map as map2,
128
+ of,
129
+ shareReplay,
130
+ switchMap
131
+ } from "rxjs";
132
+ import {
133
+ createWalletClient,
134
+ custom,
135
+ getAddress
136
+ } from "viem";
137
+ var getInjectedWalletAccounts$ = (wallet) => {
138
+ if (!wallet.isConnected) return of([]);
139
+ return getCachedObservable$(
140
+ `accounts:${wallet.id}`,
141
+ () => new Observable((subscriber) => {
142
+ const getAccount = (address, i) => {
143
+ const client = createWalletClient({
144
+ account: address,
145
+ transport: custom(wallet.provider)
146
+ });
147
+ return {
148
+ id: getWalletAccountId(wallet.id, address),
149
+ platform: "ethereum",
150
+ client,
151
+ address: getAddress(address),
152
+ walletName: wallet.name,
153
+ walletId: wallet.id,
154
+ isWalletDefault: i === 0
155
+ };
156
+ };
157
+ const handleAccountsChanged = (addresses) => {
158
+ subscriber.next(addresses.map(getAccount));
159
+ };
160
+ wallet.provider.on("accountsChanged", handleAccountsChanged);
161
+ wallet.provider.request({ method: "eth_accounts" }).then((addresses) => {
162
+ subscriber.next(addresses.map(getAccount));
163
+ }).catch((err) => {
164
+ console.error("Failed to get accounts", err);
165
+ subscriber.next([]);
166
+ });
167
+ return () => {
168
+ wallet.provider.removeListener(
169
+ "accountsChanged",
170
+ handleAccountsChanged
171
+ );
172
+ };
173
+ }).pipe(shareReplay({ refCount: true, bufferSize: 1 }))
174
+ );
175
+ };
176
+ var wrapWalletConnectProvider = (provider, sessionTopic, caipNetworkId) => {
177
+ return new Proxy(provider, {
178
+ get(target, prop, receiver) {
179
+ if (prop !== "request") return Reflect.get(target, prop, receiver);
180
+ return (args) => {
181
+ if (args && typeof args === "object" && args.method) {
182
+ if (!args.topic) args.topic = sessionTopic;
183
+ if (!args.chainId) args.chainId = caipNetworkId;
184
+ }
185
+ return target.request(args);
186
+ };
187
+ }
188
+ });
189
+ };
190
+ var getAppKitAccounts$ = (wallet) => {
191
+ const account = wallet.appKit.getAccount("eip155");
192
+ const provider = wallet.appKit.getProvider("eip155");
193
+ if (!wallet.isConnected || !wallet.appKit || !account?.allAccounts.length || !provider?.session)
194
+ return of([]);
195
+ return getCachedObservable$(
196
+ "accounts:appKit",
197
+ () => new Observable((subscriber) => {
198
+ const caipNetworkId$ = new ReplaySubject(1);
199
+ const handleChainChanged = (chainId) => {
200
+ caipNetworkId$.next(`eip155:${chainId}`);
201
+ };
202
+ provider.on("chainChanged", handleChainChanged);
203
+ provider.request({ method: "eth_chainId" }).then(handleChainChanged);
204
+ const sub = caipNetworkId$.pipe(
205
+ distinctUntilChanged(),
206
+ map2(
207
+ (caipNetworkId) => custom(
208
+ wrapWalletConnectProvider(
209
+ provider,
210
+ // biome-ignore lint/style/noNonNullAssertion: <explanation>
211
+ provider.session.topic,
212
+ caipNetworkId
213
+ )
214
+ )
215
+ ),
216
+ map2(
217
+ (transport) => account.allAccounts.map((acc, i) => {
218
+ const client = createWalletClient({
219
+ account: acc.address,
220
+ transport
221
+ });
222
+ return {
223
+ id: getWalletAccountId(wallet.id, acc.address),
224
+ platform: "ethereum",
225
+ walletName: wallet.name,
226
+ walletId: wallet.id,
227
+ address: acc.address,
228
+ client,
229
+ isWalletDefault: i === 0
230
+ };
231
+ })
232
+ )
233
+ ).subscribe(subscriber);
234
+ return () => {
235
+ provider.off("chainChanged", handleChainChanged);
236
+ sub.unsubscribe();
237
+ };
238
+ }).pipe(shareReplay({ refCount: true, bufferSize: 1 }))
239
+ );
240
+ };
241
+ var getEthereumAccounts$ = (ethereumWallets) => new Observable((subscriber) => {
242
+ const sub = ethereumWallets.pipe(
243
+ map2((wallets) => wallets.filter((w) => w.isConnected)),
244
+ switchMap((wallets) => {
245
+ return wallets.length ? combineLatest([
246
+ ...wallets.filter((w) => w.type === "injected").map(getInjectedWalletAccounts$),
247
+ ...wallets.filter((w) => w.type === "appKit").map(getAppKitAccounts$)
248
+ // todo appkit
249
+ ]) : of([]);
250
+ }),
251
+ map2((accounts) => accounts.flat()),
252
+ distinctUntilChanged(isSameAccountsList)
253
+ ).subscribe(subscriber);
254
+ return () => {
255
+ sub.unsubscribe();
256
+ };
257
+ }).pipe(
258
+ // logObservable("ethereumAccounts$", true),
259
+ shareReplay({ refCount: true, bufferSize: 1 })
260
+ );
261
+ var isSameAccountsList = (a, b) => {
262
+ if (a.length !== b.length) return false;
263
+ return a.every((account, i) => account.id === b[i]?.id);
264
+ };
265
+
266
+ // src/api/polkadot/accounts.ts
267
+ import {
268
+ getPolkadotSignerFromPjs
269
+ } from "polkadot-api/pjs-signer";
270
+ import {
271
+ Observable as Observable2,
272
+ combineLatest as combineLatest2,
273
+ distinctUntilChanged as distinctUntilChanged2,
274
+ map as map3,
275
+ of as of2,
276
+ shareReplay as shareReplay2,
277
+ switchMap as switchMap2
278
+ } from "rxjs";
279
+ var getInjectedWalletAccounts$2 = (wallet) => {
280
+ if (!wallet.isConnected) return of2([]);
281
+ return new Observable2((subscriber) => {
282
+ const getAccount = (account) => ({
283
+ id: getWalletAccountId(wallet.id, account.address),
284
+ ...account,
285
+ platform: "polkadot",
286
+ walletName: wallet.name,
287
+ walletId: wallet.id
288
+ });
289
+ const extension = wallet.extension;
290
+ const unsubscribe = extension.subscribe((accounts) => {
291
+ subscriber.next(accounts.map(getAccount));
292
+ });
293
+ subscriber.next(extension.getAccounts().map(getAccount));
294
+ return () => {
295
+ return unsubscribe();
296
+ };
297
+ });
298
+ };
299
+ var getAppKitPolkadotSigner = (appKit, address) => {
300
+ const provider = appKit.getProvider("polkadot");
301
+ if (!provider) throw new Error("No provider found");
302
+ if (!provider.session) throw new Error("No session found");
303
+ return getPolkadotSignerFromPjs(
304
+ address,
305
+ (transactionPayload) => {
306
+ if (!provider.session) throw new Error("No session found");
307
+ return provider.client.request({
308
+ topic: provider.session.topic,
309
+ chainId: `polkadot:${transactionPayload.genesisHash.substring(2, 34)}`,
310
+ request: {
311
+ method: "polkadot_signTransaction",
312
+ params: {
313
+ address,
314
+ transactionPayload
315
+ }
316
+ }
317
+ });
318
+ },
319
+ async ({ address: address2, data }) => {
320
+ if (!provider.session) throw new Error("No session found");
321
+ const networks = appKit.getCaipNetworks("polkadot");
322
+ const chainId = networks[0]?.caipNetworkId;
323
+ if (!chainId) throw new Error("No chainId found");
324
+ return provider.client.request({
325
+ topic: provider.session.topic,
326
+ chainId,
327
+ request: {
328
+ method: "polkadot_signMessage",
329
+ params: {
330
+ address: address2,
331
+ message: data
332
+ }
333
+ }
334
+ });
335
+ }
336
+ );
337
+ };
338
+ var getAppKitAccounts$2 = (wallet) => {
339
+ const account = wallet.appKit.getAccount("polkadot");
340
+ const provider = wallet.appKit.getProvider("polkadot");
341
+ if (!wallet.isConnected || !wallet.appKit || !account?.allAccounts.length || !provider?.session)
342
+ return of2([]);
343
+ return of2(
344
+ account.allAccounts.map(
345
+ (acc) => ({
346
+ id: getWalletAccountId(wallet.id, acc.address),
347
+ platform: "polkadot",
348
+ walletName: wallet.name,
349
+ walletId: wallet.id,
350
+ address: acc.address,
351
+ polkadotSigner: getAppKitPolkadotSigner(wallet.appKit, acc.address),
352
+ genesisHash: null,
353
+ name: `${wallet.name} Polkadot`,
354
+ type: "sr25519"
355
+ })
356
+ )
357
+ );
358
+ };
359
+ var getPolkadotAccounts$ = (polkadotWallets$) => new Observable2((subscriber) => {
360
+ const sub = polkadotWallets$.pipe(
361
+ map3((wallets) => wallets.filter((w) => w.isConnected)),
362
+ switchMap2(
363
+ (wallets) => wallets.length ? combineLatest2([
364
+ ...wallets.filter((w) => w.type === "injected").map(getInjectedWalletAccounts$2),
365
+ ...wallets.filter((w) => w.type === "appKit").map(getAppKitAccounts$2)
366
+ ]) : of2([])
367
+ ),
368
+ map3((accounts) => accounts.flat()),
369
+ distinctUntilChanged2(isSameAccountsList2)
370
+ ).subscribe(subscriber);
371
+ return () => {
372
+ sub.unsubscribe();
373
+ };
374
+ }).pipe(shareReplay2({ refCount: true, bufferSize: 1 }));
375
+ var isSameAccountsList2 = (a, b) => {
376
+ if (a.length !== b.length) return false;
377
+ return a.every((account, i) => account.id === b[i]?.id);
378
+ };
379
+
380
+ // src/api/accounts.ts
381
+ var getAccounts$ = (config, wallets) => {
382
+ return new Observable3((subscriber) => {
383
+ const sources = config.platforms.map(
384
+ (platform) => {
385
+ switch (platform) {
386
+ case "polkadot":
387
+ return getPolkadotAccounts$(
388
+ wallets.pipe(
389
+ map4((w) => w.filter((w2) => w2.platform === "polkadot"))
390
+ )
391
+ );
392
+ case "ethereum":
393
+ return getEthereumAccounts$(
394
+ wallets.pipe(
395
+ map4((w) => w.filter((w2) => w2.platform === "ethereum"))
396
+ )
397
+ );
398
+ }
399
+ }
400
+ );
401
+ const accounts$ = sources.length ? combineLatest3(sources).pipe(
402
+ map4((accounts) => accounts.flat().sort(sortAccounts))
403
+ ) : of3([]);
404
+ const sub = accounts$.subscribe(subscriber);
405
+ return () => {
406
+ sub.unsubscribe();
407
+ };
408
+ }).pipe(shareReplay3({ refCount: true, bufferSize: 1 }));
409
+ };
410
+
411
+ // src/api/config.ts
412
+ var DEFAULT_CONFIG = {
413
+ autoReconnect: true,
414
+ platforms: ["polkadot"],
415
+ debug: false
416
+ };
417
+ var resolveConfig = (config) => {
418
+ return Object.assign({}, DEFAULT_CONFIG, config);
419
+ };
420
+
421
+ // src/utils/sortWallets.ts
422
+ var sortWallets = (w1, w2) => {
423
+ if (w1.platform !== w2.platform) {
424
+ return w1.platform === "polkadot" ? -1 : 1;
425
+ }
426
+ if (w1.name.toLowerCase() === "talisman") return -1;
427
+ if (w2.name.toLowerCase() === "talisman") return 1;
428
+ return w1.name.localeCompare(w2.name);
429
+ };
430
+
431
+ // src/api/wallets.ts
432
+ import {
433
+ Observable as Observable7,
434
+ combineLatest as combineLatest7,
435
+ distinct,
436
+ filter as filter2,
437
+ map as map8,
438
+ mergeMap as mergeMap2,
439
+ of as of6,
440
+ shareReplay as shareReplay7,
441
+ take
442
+ } from "rxjs";
443
+
444
+ // src/utils/WalletId.ts
445
+ var getWalletId = (platform, identifier) => {
446
+ if (!isWalletPlatform(platform)) throw new Error("Invalid platform");
447
+ if (!identifier) throw new Error("Invalid name");
448
+ return `${platform}:${identifier}`;
449
+ };
450
+ var parseWalletId = (walletId) => {
451
+ if (!walletId) throw new Error("Invalid walletId");
452
+ const [platform, identifier] = walletId.split(":");
453
+ if (!isWalletPlatform(platform)) throw new Error("Invalid platform");
454
+ if (!identifier) throw new Error("Invalid address");
455
+ return { platform, identifier };
456
+ };
457
+
458
+ // src/api/store.ts
459
+ import { uniq } from "lodash";
460
+ var LOCAL_STORAGE_KEY = "kheopskit";
461
+ var DEFAULT_SETTINGS = {};
462
+ var storage = createStore(LOCAL_STORAGE_KEY, DEFAULT_SETTINGS);
463
+ var addEnabledWalletId = (walletId) => {
464
+ parseWalletId(walletId);
465
+ storage.mutate((prev) => ({
466
+ ...prev,
467
+ autoReconnect: uniq((prev.autoReconnect ?? []).concat(walletId))
468
+ }));
469
+ };
470
+ var removeEnabledWalletId = (walletId) => {
471
+ storage.mutate((prev) => ({
472
+ ...prev,
473
+ autoReconnect: uniq(
474
+ (prev.autoReconnect ?? []).filter((id) => id !== walletId)
475
+ )
476
+ }));
477
+ };
478
+ var store = {
479
+ observable: storage.observable,
480
+ addEnabledWalletId,
481
+ removeEnabledWalletId
482
+ };
483
+
484
+ // src/api/ethereum/wallets.ts
485
+ import { createStore as createStore2 } from "mipd";
486
+ import {
487
+ BehaviorSubject as BehaviorSubject3,
488
+ Observable as Observable5,
489
+ combineLatest as combineLatest5,
490
+ map as map6,
491
+ shareReplay as shareReplay5
492
+ } from "rxjs";
493
+
494
+ // src/api/appKit.ts
495
+ import { createAppKit } from "@reown/appkit/core";
496
+ import {
497
+ BehaviorSubject as BehaviorSubject2,
498
+ Observable as Observable4,
499
+ combineLatest as combineLatest4,
500
+ distinctUntilChanged as distinctUntilChanged3,
501
+ map as map5,
502
+ of as of4,
503
+ shareReplay as shareReplay4
504
+ } from "rxjs";
505
+ var WALLET_CONNECT_ICON = "data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjQwMCIgdmlld0JveD0iMCAwIDQwMCA0MDAiIHdpZHRoPSI0MDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZD0ibTAgMGg0MDB2NDAwaC00MDB6Ii8+PC9jbGlwUGF0aD48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxjaXJjbGUgY3g9IjIwMCIgY3k9IjIwMCIgZmlsbD0iIzMzOTZmZiIgcj0iMTk5LjUiIHN0cm9rZT0iIzY2YjFmZiIvPjxwYXRoIGQ9Im0xMjIuNTE5IDE0OC45NjVjNDIuNzkxLTQxLjcyOSAxMTIuMTcxLTQxLjcyOSAxNTQuOTYyIDBsNS4xNSA1LjAyMmMyLjE0IDIuMDg2IDIuMTQgNS40NjkgMCA3LjU1NWwtMTcuNjE3IDE3LjE4Yy0xLjA3IDEuMDQzLTIuODA0IDEuMDQzLTMuODc0IDBsLTcuMDg3LTYuOTExYy0yOS44NTMtMjkuMTExLTc4LjI1My0yOS4xMTEtMTA4LjEwNiAwbC03LjU5IDcuNDAxYy0xLjA3IDEuMDQzLTIuODA0IDEuMDQzLTMuODc0IDBsLTE3LjYxNy0xNy4xOGMtMi4xNC0yLjA4Ni0yLjE0LTUuNDY5IDAtNy41NTV6bTE5MS4zOTcgMzUuNTI5IDE1LjY3OSAxNS4yOWMyLjE0IDIuMDg2IDIuMTQgNS40NjkgMCA3LjU1NWwtNzAuNyA2OC45NDRjLTIuMTM5IDIuMDg3LTUuNjA4IDIuMDg3LTcuNzQ4IDBsLTUwLjE3OC00OC45MzFjLS41MzUtLjUyMi0xLjQwMi0uNTIyLTEuOTM3IDBsLTUwLjE3OCA0OC45MzFjLTIuMTM5IDIuMDg3LTUuNjA4IDIuMDg3LTcuNzQ4IDBsLTcwLjcwMTUtNjguOTQ1Yy0yLjEzOTYtMi4wODYtMi4xMzk2LTUuNDY5IDAtNy41NTVsMTUuNjc5NS0xNS4yOWMyLjEzOTYtMi4wODYgNS42MDg1LTIuMDg2IDcuNzQ4MSAwbDUwLjE3ODkgNDguOTMyYy41MzUuNTIyIDEuNDAyLjUyMiAxLjkzNyAwbDUwLjE3Ny00OC45MzJjMi4xMzktMi4wODcgNS42MDgtMi4wODcgNy43NDggMGw1MC4xNzkgNDguOTMyYy41MzUuNTIyIDEuNDAyLjUyMiAxLjkzNyAwbDUwLjE3OS00OC45MzFjMi4xMzktMi4wODcgNS42MDgtMi4wODcgNy43NDggMHoiIGZpbGw9IiNmZmYiLz48L2c+PC9zdmc+";
506
+ var cachedAppKit = null;
507
+ var getAppKitWallets$ = (config) => {
508
+ if (!config.walletConnect) return of4({});
509
+ const walletConnect = config.walletConnect;
510
+ if (!cachedAppKit) {
511
+ cachedAppKit = new Observable4((subscriber) => {
512
+ const appKit = createAppKit({
513
+ projectId: walletConnect.projectId,
514
+ metadata: walletConnect.metadata,
515
+ networks: walletConnect.networks,
516
+ universalProviderConfigOverride: {
517
+ methods: {
518
+ polkadot: ["polkadot_signTransaction", "polkadot_signMessage"]
519
+ }
520
+ }
521
+ });
522
+ const status$ = new BehaviorSubject2({
523
+ isPolkadotConnected: false,
524
+ isEthereumConnected: false
525
+ });
526
+ const unsubProviders = appKit.subscribeProviders((providers) => {
527
+ status$.next({
528
+ isPolkadotConnected: !!providers.polkadot,
529
+ isEthereumConnected: !!providers.eip155
530
+ });
531
+ });
532
+ const polkadotWallet$ = appKit.chainNamespaces.includes("polkadot") ? status$.pipe(
533
+ map5((s) => s.isPolkadotConnected),
534
+ distinctUntilChanged3(),
535
+ map5((isConnected) => {
536
+ const walletInfo = appKit.getWalletInfo();
537
+ return {
538
+ id: getWalletId("polkadot", "walletconnect"),
539
+ platform: "polkadot",
540
+ type: "appKit",
541
+ appKit,
542
+ // todo maybe we dont want to expose the appKit instance
543
+ name: walletInfo?.name ?? "WalletConnect",
544
+ icon: walletInfo?.icon ?? WALLET_CONNECT_ICON,
545
+ connect: async () => {
546
+ if (!isConnected) await appKit.open();
547
+ },
548
+ disconnect: () => {
549
+ if (isConnected) appKit.disconnect();
550
+ },
551
+ isConnected
552
+ };
553
+ })
554
+ ) : of4(void 0);
555
+ const ethereumWallet$ = appKit.chainNamespaces.includes("eip155") ? status$.pipe(
556
+ map5((s) => s.isEthereumConnected),
557
+ distinctUntilChanged3(),
558
+ map5((isConnected) => {
559
+ const walletInfo = appKit.getWalletInfo();
560
+ return {
561
+ id: getWalletId("ethereum", "walletconnect"),
562
+ platform: "ethereum",
563
+ type: "appKit",
564
+ appKit,
565
+ name: walletInfo?.name ?? "WalletConnect",
566
+ icon: walletInfo?.icon ?? WALLET_CONNECT_ICON,
567
+ connect: () => appKit.open(),
568
+ disconnect: () => appKit.disconnect(),
569
+ isConnected
570
+ };
571
+ })
572
+ ) : of4(void 0);
573
+ const sub = combineLatest4({
574
+ polkadot: polkadotWallet$,
575
+ ethereum: ethereumWallet$
576
+ }).subscribe(subscriber);
577
+ return () => {
578
+ sub.unsubscribe();
579
+ unsubProviders();
580
+ };
581
+ }).pipe(shareReplay4({ refCount: true, bufferSize: 1 }));
582
+ }
583
+ return cachedAppKit;
584
+ };
585
+
586
+ // src/api/ethereum/wallets.ts
587
+ var providersDetails$ = new Observable5(
588
+ (subscriber) => {
589
+ const store2 = createStore2();
590
+ const unsubscribe = store2.subscribe((providerDetails2) => {
591
+ subscriber.next(providerDetails2);
592
+ });
593
+ const providerDetails = store2.getProviders();
594
+ subscriber.next(providerDetails);
595
+ return () => {
596
+ unsubscribe();
597
+ store2.destroy();
598
+ };
599
+ }
600
+ ).pipe(shareReplay5({ refCount: true, bufferSize: 1 }));
601
+ var ethereumInjectedWallets$ = new Observable5(
602
+ (subscriber) => {
603
+ const enabledWalletIds$ = new BehaviorSubject3(/* @__PURE__ */ new Set());
604
+ const connectWallet = async (walletId, provider) => {
605
+ if (enabledWalletIds$.value.has(walletId))
606
+ throw new Error(`Extension ${walletId} already connected`);
607
+ await provider.request({
608
+ method: "eth_requestAccounts"
609
+ });
610
+ const newSet = new Set(enabledWalletIds$.value);
611
+ newSet.add(walletId);
612
+ enabledWalletIds$.next(newSet);
613
+ store.addEnabledWalletId(walletId);
614
+ };
615
+ const disconnectWallet = async (walletId) => {
616
+ if (!enabledWalletIds$.value.has(walletId))
617
+ throw new Error(`Extension ${walletId} is not connected`);
618
+ const newSet = new Set(enabledWalletIds$.value);
619
+ newSet.delete(walletId);
620
+ enabledWalletIds$.next(newSet);
621
+ store.removeEnabledWalletId(walletId);
622
+ };
623
+ const sub = combineLatest5([providersDetails$, enabledWalletIds$]).pipe(
624
+ map6(([providerDetails, enabledWalletIds]) => {
625
+ return providerDetails.map((pd) => {
626
+ const walletId = getWalletId("ethereum", pd.info.rdns);
627
+ const provider = pd.provider;
628
+ return {
629
+ platform: "ethereum",
630
+ type: "injected",
631
+ id: walletId,
632
+ name: pd.info.name,
633
+ icon: pd.info.icon,
634
+ provider,
635
+ isConnected: enabledWalletIds.has(walletId),
636
+ providerId: pd.info.rdns,
637
+ connect: () => connectWallet(walletId, provider),
638
+ disconnect: () => disconnectWallet(walletId)
639
+ };
640
+ });
641
+ })
642
+ ).subscribe(subscriber);
643
+ return () => {
644
+ sub.unsubscribe();
645
+ };
646
+ }
647
+ ).pipe(shareReplay5({ refCount: true, bufferSize: 1 }));
648
+ var getEthereumWallets$ = (config) => {
649
+ return new Observable5((subscriber) => {
650
+ const subscription = combineLatest5([
651
+ ethereumInjectedWallets$,
652
+ getAppKitWallets$(config)?.pipe(map6((w) => w.ethereum))
653
+ ]).pipe(
654
+ map6(
655
+ ([injectedWallets, appKitWallet]) => appKitWallet ? [...injectedWallets, appKitWallet] : injectedWallets
656
+ )
657
+ ).subscribe(subscriber);
658
+ return () => {
659
+ subscription.unsubscribe();
660
+ };
661
+ }).pipe(shareReplay5({ refCount: true, bufferSize: 1 }));
662
+ };
663
+
664
+ // src/utils/polkadotExtensions.ts
665
+ var POLKADOT_EXTENSIONS = {
666
+ talisman: {
667
+ name: "Talisman",
668
+ icon: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgdmlld0JveD0iMCAwIDEyOCAxMjgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8cGF0aCBmaWxsPSIjZGRmZTc2IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0wIDcwLjI1YzAgMjEuMjU1IDAgMzEuODgzIDQuNDYzIDM5Ljg1MmEzNSAzNSAwIDAgMCAxMy40MzUgMTMuNDM1QzI1Ljg2NyAxMjggMzYuNDk1IDEyOCA1Ny43NSAxMjhoMTIuNWMyMS4yNTUgMCAzMS44ODMgMCAzOS44NTItNC40NjNhMzUgMzUgMCAwIDAgMTMuNDM1LTEzLjQzNUMxMjggMTAyLjEzMyAxMjggOTEuNTA1IDEyOCA3MC4yNXYtMTIuNWMwLTIxLjI1NSAwLTMxLjg4My00LjQ2My0zOS44NTJhMzUgMzUgMCAwIDAtMTMuNDM1LTEzLjQzNUMxMDIuMTMzIDAgOTEuNTA1IDAgNzAuMjUgMGgtMTIuNUMzNi40OTUgMCAyNS44NjcgMCAxNy44OTggNC40NjNBMzUgMzUgMCAwIDAgNC40NjMgMTcuODk4QzAgMjUuODY3IDAgMzYuNDk1IDAgNTcuNzVaIi8+CiAgICA8cGF0aCBmaWxsPSIjZWE1NzUwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Im0zMy44NzkgMzUuMTE3LS41IDE5LjE2NWM4LjEwNyA0LjE2OCAxNS43NSA0LjA3NSAyNC43NCAyLjA2MyAzLjU2LTEuMzk3IDYuMDU2LTEuNzAyIDkuNTExIDAgOS4wNjcgMi44MTYgMTYuOTY5IDEuOTUgMjUuMTg1LTIuMjQzbC0uNDg1LTE5LjE4N2MwLTEwLjgwNS03LjAwNC0xNC45NjItMTQuNjMyLTEyLjczOS0uNzc5LjIzMi0xLjk0NCAxLjI3NC0xLjk0NCAyLjIwN2wtLjE4MSAxOC43MzNhMS43NyAxLjc3IDAgMSAxLTMuNTM4LS4wMTVWMjAuMDY3YTguODM4IDguODM4IDAgMCAwLTE3LjY3NSAwVjQzLjFhMS43NyAxLjc3IDAgMSAxLTMuNTM4LjAxNWwtLjE3Ni0xOC43NDNjMC0uOTIzLTEuMTA5LTEuOTYtMS44ODItMi4xOTItOC44LTIuNjEtMTQuODggMi41MzgtMTQuODggMTIuOTM2Wm0yLjQ3NSAyMy44NDNhNDguNDMgNDguNDMgMCAwIDEtNS4yMDktMi4yNTRjLTQuNzMtMi4yNjktMTIuMDk1LTEuNTYyLTE3LjA3MiA0LjExMS0yLjI3NCAyLjYtLjUxNSA2LjM2IDIuNzcgNy40NDggMS41ODMuNTI2IDMuMDE3IDEuNDEzIDQuMzUzIDIuNDA4bC40NjQuMzM2YzQuMTMyIDIuOTY1IDYuNzkzIDcuNDA2IDcuMDU2IDEyLjQ4NmwuMjUzIDQuODEyYTMxLjYxNiAzMS42MTYgMCAwIDAgMTkuNDI4IDI1Ljk1OSAzOC41OSAzOC41OSAwIDAgMCAyOS4zMjcgMCAzMS42MTYgMzEuNjE2IDAgMCAwIDE5LjQyOS0yNS45NTljLjA0Ni0uODI1LjA2MS0xLjY1LjA1MS0yLjQ2NWwuMTI0LTIuMzQ3Yy4yNjMtNS4wOCAyLjkyNC05LjUyIDcuMDU2LTEyLjQ4NmwuNDY0LS4zMzZjMS4zNC0uOTk1IDIuNzctMS44ODIgNC4zNTMtMi40MDggMy4yODUtMS4wODkgNS4wNS00Ljg0OSAyLjc3LTcuNDQ4LTQuOTc4LTUuNjczLTEyLjM0My02LjM3NS0xNy4wNzItNC4xMS0xLjcxOC44MjUtMy40MzUgMS42NS01LjIxIDIuMjUzbC0zLjYyIDEuMjM4LS4wMS4wNDFjLTYuNjU0IDEuODQyLTEyLjEyIDEuODQ3LTE4LjM5OC0uNzQyLTMuMTc3LTEuMzEtNi4zOC0xLjU1OC05LjQ4IDAtNS45NjcgMS44NTYtMTIuMDQ4IDIuNjQtMTguMjA2LjcwMWwtMy42MjYtMS4yMzhabTI2LjY2NSA0NC43MzJjMTMuMzkgMCAyNC4yNDEtMTUuNTk2IDI0LjI0MS0xNS41OTZTNzYuNDEgNzIuNDk5IDYzLjAyIDcyLjQ5OWMtMTMuMzg1IDAtMjQuMjM2IDE1LjU5Ny0yNC4yMzYgMTUuNTk3czEwLjg1MSAxNS41OTYgMjQuMjQgMTUuNTk2Wm0xMC44ODMtMTUuNTk2YzAgNi4wMS00Ljg3MiAxMC44ODItMTAuODgzIDEwLjg4Mi02LjAxIDAtMTAuODgyLTQuODcyLTEwLjg4Mi0xMC44ODJzNC44NzItMTAuODgzIDEwLjg4Mi0xMC44ODMgMTAuODgzIDQuODcyIDEwLjg4MyAxMC44ODNabS0xMC44ODMgNC45MzZhNC45MzYgNC45MzYgMCAxIDAgMC05Ljg3MiA0LjkzNiA0LjkzNiAwIDAgMCAwIDkuODcyWiIvPgo8L3N2Zz4K"
669
+ },
670
+ "polkadot-js": {
671
+ name: "Polkadot.js",
672
+ icon: "data:image/svg+xml;base64,ICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEwNi4yIDEwNi4yIj4KICAgIDxkZWZzPjwvZGVmcz4KICAgIDxnIGlkPSJMYXllcl8yIiBkYXRhLW5hbWU9IkxheWVyIDIiPgogICAgICA8ZyBpZD0iTGF5ZXJfMS0yIiBkYXRhLW5hbWU9IkxheWVyIDEiPgogICAgICAgIDxjaXJjbGUgY3g9IjUzLjEiIGN5PSI1My4xIiByPSI1My4xIiBmaWxsPSIjZjI5MjM1IiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICBmaWxsPSIjZmZmIgogICAgICAgICAgZD0iTTU0LjQ3IDEzLjc2YTI4Ljg1IDI4Ljg1IDAgMDAtMjguNzMgMjguNzMgMjkuMzQgMjkuMzQgMCAwMDEuNTIgOS4zNCA0IDQgMCAxMDcuNDktMi41MkExOC42NyAxOC42NyAwIDAxMzMuNjMgNDJhMjAuNzIgMjAuNzIgMCAxMTIyIDIxLjMxcy00IC4yNS02IC40OWMtLjc0LjExLTEuNDguMjYtMi4yLjQ0YS4yOC4yOCAwIDAxLS4zOCAwIC4yNy4yNyAwIDAxMC0uMzJsLjYzLTMuNDEgMy43OS0xN2EzLjk0IDMuOTQgMCAxMC03LjcxLTEuNjVzLTkgNDEuNy05IDQyLjA4YTMuNzkgMy43OSAwIDAwMi43NCA0LjZoLjI4YTMuNzggMy43OCAwIDAwNC42MS0yLjcxLjQzLjQzIDAgMDAwLS4xMXYtLjE5Yy4xMS0uNDkgMS4yNS02IDEuMjUtNmExMC4yMyAxMC4yMyAwIDAxOC40Ni04Yy44Ny0uMTMgNC41My0uMzggNC41My0uMzhhMjguNzEgMjguNzEgMCAwMC0yLjExLTU3LjI3eiIKICAgICAgICAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICBmaWxsPSIjZmZmIgogICAgICAgICAgZD0iTTU2LjIxIDgwYTQuNzggNC43OCAwIDAwLTUuNjYgMy43MS4yNC4yNCAwIDAxMCAuMDggNC43NyA0Ljc3IDAgMDAzLjY1IDUuNjdoLjE0QTQuNyA0LjcgMCAwMDYwIDg2di0uMzJBNSA1IDAgMDA1Ni4yMSA4MHoiCiAgICAgICAgLz4KICAgICAgPC9nPgogICAgPC9nPgogIDwvc3ZnPg=="
673
+ },
674
+ "subwallet-js": {
675
+ name: "SubWallet",
676
+ icon: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYwIiBoZWlnaHQ9IjE2MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNODAgNGM1Ny42MyAwIDc2IDE4LjM3IDc2IDc2IDAgNTcuNjMtMTguMzcgNzYtNzYgNzYtNTcuNjMgMC03Ni0xOC4zNy03Ni03NkM0IDIyLjM3IDIyLjM3IDQgODAgNFoiIGZpbGw9InVybCgjYSkiLz48ZyBjbGlwLXBhdGg9InVybCgjYikiPjxwYXRoIGQ9Ik0xMTIuNjE1IDY2LjcyVjUzLjM5OEw1OC43NiAzMiA0OCAzNy40MTJsLjA1NyA0MS40NjQgNDAuMjkyIDE2LjA3LTIxLjUyIDkuMDc1di03LjAxOEw1Ni45NSA5My4wM2wtOC44OTMgNC4xNjN2MjUuMzk1TDU4Ljc2OSAxMjhsNTMuODQ2LTI0LjA2MlY4Ni44NjlMNjQuMTU0IDY3LjY1N1Y1NmwzOC40NDkgMTUuMjE2IDEwLjAxMi00LjQ5NloiIGZpbGw9IiNmZmYiLz48L2c+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJhIiB4MT0iODAiIHkxPSI0IiB4Mj0iODAiIHkyPSIxNTYiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjMDA0QkZGIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNENFQUFDIi8+PC9saW5lYXJHcmFkaWVudD48Y2xpcFBhdGggaWQ9ImIiPjxwYXRoIGZpbGw9IiNmZmYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4IDMyKSIgZD0iTTAgMGg2NC42MTV2OTZIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4="
677
+ },
678
+ enkrypt: {
679
+ name: "Enkrypt",
680
+ icon: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODEiIGhlaWdodD0iODEiIHZpZXdCb3g9IjAgMCA4MSA4MSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNy4wMDU3IDE3LjAwNjJDMTguOTMwMyAxNS4wODE2IDIxLjU0MDUgMTQuMDAwNCAyNC4yNjIyIDE0LjAwMDRMNjcuMzI5NiAxNFYyMS44NzQxQzY3LjMyOTYgMjMuODMwNSA2Ni41NTIzIDI1LjcwNjcgNjUuMTY5IDI3LjA5QzYzLjc4NTcgMjguNDczMyA2MS45MDk1IDI5LjI1MDQgNTkuOTUzMiAyOS4yNTA0SDM5LjcwNDVDMzYuOTgyOCAyOS4yNTA0IDM0LjM3MjYgMzAuMzMxNiAzMi40NDggMzIuMjU2MUMzMC41MjM1IDM0LjE4MDcgMjkuNDQyMyAzNi43OTA5IDI5LjQ0MjMgMzkuNTEyNlY0Mi4xMjQyQzI5LjQ0MjMgNDQuODQ1OSAzMC41MjM1IDQ3LjQ1NjEgMzIuNDQ4IDQ5LjM4MDZDMzQuMzcyNiA1MS4zMDUxIDM2Ljk4MjggNTIuMzg2MyAzOS43MDQ1IDUyLjM4NjNINTkuOTUzMkM2MS45MDk1IDUyLjM4NjMgNjMuNzg1NyA1My4xNjM1IDY1LjE2OSA1NC41NDY4QzY2LjU1MjMgNTUuOTMwMSA2Ny4zMjk2IDU3LjgwNjMgNjcuMzI5NiA1OS43NjI2VjY3LjMzSDI0LjI2MjJDMjEuNTQwNSA2Ny4zMyAxOC45MzAzIDY2LjI0ODggMTcuMDA1NyA2NC4zMjQzQzE1LjA4MTIgNjIuMzk5NyAxNCA1OS43ODk1IDE0IDU3LjA2NzhWMjQuMjYyNkMxNCAyMS41NDA5IDE1LjA4MTIgMTguOTMwNyAxNy4wMDU3IDE3LjAwNjJaTTQwLjE0NzkgMzMuNTQyM0g2MC45MTU3QzY0LjQ1OCAzMy41NDIzIDY3LjMyOTUgMzYuNDEzOCA2Ny4zMjk1IDM5Ljk1NjFWNDEuNjgxNkM2Ny4zMjk1IDQ1LjIyMzggNjQuNDU4IDQ4LjA5NTQgNjAuOTE1NyA0OC4wOTU0SDQwLjE0NzlDMzYuNjA1NyA0OC4wOTU0IDMzLjczNDEgNDUuMjIzOCAzMy43MzQxIDQxLjY4MTZWMzkuOTU2MUMzMy43MzQxIDM2LjQxMzggMzYuNjA1NyAzMy41NDIzIDQwLjE0NzkgMzMuNTQyM1oiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcl8yODdfMjM1OSkiLz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl8yODdfMjM1OSIgeDE9IjE5LjM2MDIiIHkxPSIxNCIgeDI9IjU2Ljc2OTYiIHkyPSI2OS44MDA1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiNDNTQ5RkYiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNjU0QkZGIi8+CjwvbGluZWFyR3JhZGllbnQ+CjwvZGVmcz4KPC9zdmc+Cg=="
681
+ }
682
+ };
683
+
684
+ // src/api/polkadot/wallets.ts
685
+ import { isEqual } from "lodash";
686
+ import {
687
+ connectInjectedExtension,
688
+ getInjectedExtensions
689
+ } from "polkadot-api/pjs-signer";
690
+ import {
691
+ BehaviorSubject as BehaviorSubject4,
692
+ Observable as Observable6,
693
+ combineLatest as combineLatest6,
694
+ distinctUntilChanged as distinctUntilChanged4,
695
+ map as map7,
696
+ mergeMap,
697
+ of as of5,
698
+ shareReplay as shareReplay6,
699
+ timer
700
+ } from "rxjs";
701
+ var getInjectedWalletsIds = () => getInjectedExtensions().map((name) => getWalletId("polkadot", name));
702
+ var polkadotInjectedWallets$ = new Observable6((subscriber) => {
703
+ const enabledExtensions$ = new BehaviorSubject4(/* @__PURE__ */ new Map());
704
+ const connect = async (walletId) => {
705
+ if (enabledExtensions$.value.has(walletId))
706
+ throw new Error(`Extension ${walletId} already connected`);
707
+ const { identifier } = parseWalletId(walletId);
708
+ const extension = await connectInjectedExtension(identifier);
709
+ const newMap = new Map(enabledExtensions$.value);
710
+ newMap.set(walletId, extension);
711
+ enabledExtensions$.next(newMap);
712
+ store.addEnabledWalletId(walletId);
713
+ };
714
+ const disconnect = (walletId) => {
715
+ if (!enabledExtensions$.value.has(walletId))
716
+ throw new Error(`Extension ${walletId} is not connected`);
717
+ const newMap = new Map(enabledExtensions$.value);
718
+ newMap.delete(walletId);
719
+ enabledExtensions$.next(newMap);
720
+ store.removeEnabledWalletId(walletId);
721
+ };
722
+ const walletIds$ = of5(0, 200, 500, 1e3).pipe(
723
+ mergeMap((time) => timer(time)),
724
+ map7(() => getInjectedWalletsIds()),
725
+ distinctUntilChanged4(isEqual)
726
+ );
727
+ const subscription = combineLatest6([walletIds$, enabledExtensions$]).pipe(
728
+ map7(([walletIds, enabledExtensions]) => {
729
+ return walletIds.map((id) => {
730
+ const { identifier } = parseWalletId(id);
731
+ const extension = enabledExtensions.get(id);
732
+ const extInfo = POLKADOT_EXTENSIONS[identifier];
733
+ return {
734
+ id,
735
+ type: "injected",
736
+ platform: "polkadot",
737
+ name: extInfo?.name ?? identifier,
738
+ icon: extInfo?.icon ?? "",
739
+ extensionId: identifier,
740
+ extension,
741
+ isConnected: !!extension,
742
+ connect: () => connect(id),
743
+ disconnect: () => disconnect(id)
744
+ };
745
+ });
746
+ })
747
+ ).subscribe(subscriber);
748
+ return () => {
749
+ subscription.unsubscribe();
750
+ };
751
+ }).pipe(
752
+ // logObservable("polkadotInjectedWallets$"),
753
+ shareReplay6({ refCount: true, bufferSize: 1 })
754
+ );
755
+ var getPolkadotWallets$ = (config) => {
756
+ return new Observable6((subscriber) => {
757
+ const subscription = combineLatest6([
758
+ polkadotInjectedWallets$,
759
+ getAppKitWallets$(config)?.pipe(map7((w) => w.polkadot))
760
+ ]).pipe(
761
+ map7(
762
+ ([injectedWallets, appKitWallet]) => appKitWallet ? [...injectedWallets, appKitWallet] : injectedWallets
763
+ )
764
+ ).subscribe(subscriber);
765
+ return () => {
766
+ subscription.unsubscribe();
767
+ };
768
+ }).pipe(
769
+ // logObservable("getPolkadotWallets$"),
770
+ shareReplay6({ refCount: true, bufferSize: 1 })
771
+ );
772
+ };
773
+
774
+ // src/api/wallets.ts
775
+ var autoReconnectWalletIds$ = store.observable.pipe(
776
+ map8((s) => s.autoReconnect ?? []),
777
+ take(1),
778
+ shareReplay7(1)
779
+ );
780
+ var getWallets$ = (config) => {
781
+ return new Observable7((subscriber) => {
782
+ const observables = config.platforms.map(
783
+ (platform) => {
784
+ switch (platform) {
785
+ case "polkadot":
786
+ return getPolkadotWallets$(config);
787
+ case "ethereum":
788
+ return getEthereumWallets$(config);
789
+ }
790
+ }
791
+ );
792
+ const wallets$ = observables.length ? combineLatest7(observables).pipe(
793
+ map8((wallets) => wallets.flat().sort(sortWallets))
794
+ ) : of6([]);
795
+ const subAutoReconnect = combineLatest7([wallets$, autoReconnectWalletIds$]).pipe(
796
+ filter2(([, walletIds]) => config.autoReconnect && !!walletIds?.length),
797
+ mergeMap2(
798
+ ([wallets, walletIds]) => wallets.filter((wallet) => walletIds?.includes(wallet.id))
799
+ ),
800
+ distinct((w) => w.id)
801
+ ).subscribe(async (wallet) => {
802
+ if (wallet.isConnected) {
803
+ console.warn("Wallet %s already connected", wallet.id);
804
+ return;
805
+ }
806
+ try {
807
+ await wallet.connect();
808
+ } catch (err) {
809
+ console.error("Failed to reconnect wallet %s", wallet.id, { err });
810
+ }
811
+ });
812
+ const subWallets = wallets$.subscribe(subscriber);
813
+ return () => {
814
+ subAutoReconnect.unsubscribe();
815
+ subWallets.unsubscribe();
816
+ };
817
+ }).pipe(shareReplay7({ refCount: true, bufferSize: 1 }));
818
+ };
819
+
820
+ // src/api/kheopskit.ts
821
+ var getKheopskit$ = (config) => {
822
+ const kc = resolveConfig(config);
823
+ console.debug("[kheopskit] config", kc);
824
+ return new Observable8((subscriber) => {
825
+ const wallets$ = getWallets$(kc);
826
+ const subscription = combineLatest8({
827
+ wallets: wallets$,
828
+ accounts: getAccounts$(kc, wallets$)
829
+ }).pipe(map9(({ wallets, accounts }) => ({ config: kc, wallets, accounts }))).subscribe(subscriber);
830
+ return () => {
831
+ subscription.unsubscribe();
832
+ };
833
+ }).pipe(
834
+ throttleTime(50, void 0, { leading: true, trailing: true }),
835
+ logObservable("kheopskit$", { enabled: kc.debug, printValue: true }),
836
+ shareReplay8({ bufferSize: 1, refCount: true })
837
+ );
838
+ };
839
+ export {
840
+ getKheopskit$,
841
+ resolveConfig
842
+ };
843
+ //# sourceMappingURL=index.mjs.map