@kheopskit/core 5.0.1 → 5.1.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.
Files changed (58) hide show
  1. package/dist/{chunk-7QSGAJ4A.mjs → chunk-3Y5N4N3Q.mjs} +119 -62
  2. package/dist/chunk-3Y5N4N3Q.mjs.map +1 -0
  3. package/dist/chunk-DF7EKK4G.mjs +106 -0
  4. package/dist/chunk-DF7EKK4G.mjs.map +1 -0
  5. package/dist/chunk-EH73P476.js +106 -0
  6. package/dist/chunk-EH73P476.js.map +1 -0
  7. package/dist/chunk-JVSCMJY5.mjs +147 -0
  8. package/dist/chunk-JVSCMJY5.mjs.map +1 -0
  9. package/dist/chunk-P7BPHHVV.js +76 -0
  10. package/dist/chunk-P7BPHHVV.js.map +1 -0
  11. package/dist/{chunk-4ENHC7G4.js → chunk-SO64R7Z6.js} +114 -57
  12. package/dist/chunk-SO64R7Z6.js.map +1 -0
  13. package/dist/chunk-WOPCW2OX.mjs +76 -0
  14. package/dist/chunk-WOPCW2OX.mjs.map +1 -0
  15. package/dist/chunk-XOGQMEV2.js +147 -0
  16. package/dist/chunk-XOGQMEV2.js.map +1 -0
  17. package/dist/ethereum.d.mts +2 -2
  18. package/dist/ethereum.d.ts +2 -2
  19. package/dist/ethereum.js +55 -115
  20. package/dist/ethereum.js.map +1 -1
  21. package/dist/ethereum.mjs +55 -115
  22. package/dist/ethereum.mjs.map +1 -1
  23. package/dist/index.d.mts +59 -3
  24. package/dist/index.d.ts +59 -3
  25. package/dist/index.js +442 -61
  26. package/dist/index.js.map +1 -1
  27. package/dist/index.mjs +429 -48
  28. package/dist/index.mjs.map +1 -1
  29. package/dist/internal.d.mts +2 -39
  30. package/dist/internal.d.ts +2 -39
  31. package/dist/internal.js +3 -15
  32. package/dist/internal.js.map +1 -1
  33. package/dist/internal.mjs +6 -18
  34. package/dist/polkadot.d.mts +2 -2
  35. package/dist/polkadot.d.ts +2 -2
  36. package/dist/polkadot.js +75 -148
  37. package/dist/polkadot.js.map +1 -1
  38. package/dist/polkadot.mjs +76 -149
  39. package/dist/polkadot.mjs.map +1 -1
  40. package/dist/solana.d.mts +2 -2
  41. package/dist/solana.d.ts +2 -2
  42. package/dist/solana.js +90 -158
  43. package/dist/solana.js.map +1 -1
  44. package/dist/solana.mjs +86 -154
  45. package/dist/solana.mjs.map +1 -1
  46. package/dist/{types-C7V7DGlg.d.ts → types-0iDBydsK.d.mts} +24 -46
  47. package/dist/{types-C7V7DGlg.d.mts → types-0iDBydsK.d.ts} +24 -46
  48. package/package.json +1 -1
  49. package/dist/chunk-4ENHC7G4.js.map +0 -1
  50. package/dist/chunk-6XAZANB5.mjs +0 -450
  51. package/dist/chunk-6XAZANB5.mjs.map +0 -1
  52. package/dist/chunk-7QSGAJ4A.mjs.map +0 -1
  53. package/dist/chunk-B4L6GAYD.js +0 -179
  54. package/dist/chunk-B4L6GAYD.js.map +0 -1
  55. package/dist/chunk-XQWJM3KC.js +0 -450
  56. package/dist/chunk-XQWJM3KC.js.map +0 -1
  57. package/dist/chunk-YDLCHYHH.mjs +0 -179
  58. package/dist/chunk-YDLCHYHH.mjs.map +0 -1
package/dist/index.js CHANGED
@@ -7,30 +7,25 @@
7
7
 
8
8
 
9
9
 
10
-
11
- var _chunkB4L6GAYDjs = require('./chunk-B4L6GAYD.js');
10
+ var _chunkSO64R7Z6js = require('./chunk-SO64R7Z6.js');
12
11
  require('./chunk-D3EQMFZ2.js');
13
12
 
14
13
 
15
14
 
16
15
 
17
16
 
17
+ var _chunkEH73P476js = require('./chunk-EH73P476.js');
18
18
 
19
19
 
20
20
 
21
21
 
22
22
 
23
- var _chunkXQWJM3KCjs = require('./chunk-XQWJM3KC.js');
24
-
25
-
26
23
 
27
24
 
28
25
 
29
26
 
30
27
 
31
-
32
-
33
- var _chunk4ENHC7G4js = require('./chunk-4ENHC7G4.js');
28
+ var _chunkP7BPHHVVjs = require('./chunk-P7BPHHVV.js');
34
29
 
35
30
  // src/api/appKit.ts
36
31
 
@@ -69,8 +64,8 @@ var resetAppKitCache = () => {
69
64
  setCachedAppKit(void 0);
70
65
  };
71
66
  var dropAccountsCache = (platform) => {
72
- _chunk4ENHC7G4js.clearCachedObservablesByPrefix.call(void 0,
73
- `accounts:${_chunk4ENHC7G4js.WALLET_CONNECT_WALLET_ID}:${platform}:`
67
+ _chunkP7BPHHVVjs.clearCachedObservablesByPrefix.call(void 0,
68
+ `accounts:${_chunkP7BPHHVVjs.WALLET_CONNECT_WALLET_ID}:${platform}:`
74
69
  );
75
70
  };
76
71
  var getWalletConnectWallet$ = (config) => {
@@ -164,7 +159,7 @@ var getWalletConnectWallet$ = (config) => {
164
159
  const isConnected = platforms.length > 0;
165
160
  const walletInfo = appKit.getWalletInfo();
166
161
  return {
167
- id: _chunk4ENHC7G4js.WALLET_CONNECT_WALLET_ID,
162
+ id: _chunkP7BPHHVVjs.WALLET_CONNECT_WALLET_ID,
168
163
  type: "walletconnect",
169
164
  platforms,
170
165
  appKit: appKitInstance,
@@ -204,6 +199,87 @@ var getWalletConnectWallet$ = (config) => {
204
199
  return cachedAppKit;
205
200
  };
206
201
 
202
+ // src/api/config.ts
203
+ var DEFAULT_STORAGE_KEY = "kheopskit";
204
+ var DEFAULTS = {
205
+ autoReconnect: true,
206
+ debug: false,
207
+ storageKey: DEFAULT_STORAGE_KEY,
208
+ hydrationGracePeriod: 500
209
+ };
210
+ var resolveConfig = (config) => {
211
+ const platforms = _nullishCoalesce(_optionalChain([config, 'optionalAccess', _3 => _3.platforms]), () => ( []));
212
+ const invalidPlatforms = platforms.filter(
213
+ (p) => typeof p !== "object" || p === null || typeof p.getWallets$ !== "function"
214
+ );
215
+ if (invalidPlatforms.length > 0) {
216
+ throw new Error(
217
+ `[kheopskit] config.platforms must contain plugin instances created by the per-platform factories (e.g. platforms: [polkadot(), ethereum(), solana()] imported from "@kheopskit/core/<platform>"). Invalid entries: ${JSON.stringify(invalidPlatforms)}. String platform names like "polkadot" were removed in v4 \u2014 see MIGRATING_TO_V4.md.`
218
+ );
219
+ }
220
+ if (platforms.length === 0) {
221
+ console.warn(
222
+ '[kheopskit] No platforms configured; wallets and accounts will be empty. Pass e.g. platforms: [polkadot()] from "@kheopskit/core/polkadot".'
223
+ );
224
+ }
225
+ return Object.assign({}, DEFAULTS, config, { platforms });
226
+ };
227
+
228
+ // src/utils/sortAccounts.ts
229
+ var PLATFORM_ORDER = {
230
+ polkadot: 0,
231
+ ethereum: 1,
232
+ solana: 2
233
+ };
234
+ var byWalletName = (a1, a2) => {
235
+ if (a1.walletName.toLowerCase() === "talisman") return -1;
236
+ if (a2.walletName.toLowerCase() === "talisman") return 1;
237
+ return a1.walletName.localeCompare(a2.walletName);
238
+ };
239
+ var sortAccounts = (a1, a2) => {
240
+ if (a1.platform !== a2.platform)
241
+ return PLATFORM_ORDER[a1.platform] - PLATFORM_ORDER[a2.platform];
242
+ if (a1.walletName !== a2.walletName) return byWalletName(a1, a2);
243
+ if (a1.platform === "polkadot" && a2.platform === "polkadot")
244
+ return a1.name !== a2.name ? (_nullishCoalesce(a1.name, () => ( ""))).localeCompare(_nullishCoalesce(a2.name, () => ( ""))) : a1.address.localeCompare(a2.address);
245
+ return a1.id.localeCompare(a2.id);
246
+ };
247
+
248
+ // src/utils/sortWallets.ts
249
+ var PLATFORM_ORDER2 = {
250
+ polkadot: 0,
251
+ ethereum: 1,
252
+ solana: 2
253
+ };
254
+ var orderOf = (wallet) => _chunkP7BPHHVVjs.isWalletConnectWallet.call(void 0, wallet) ? 3 : PLATFORM_ORDER2[wallet.platform];
255
+ var sortWallets = (w1, w2) => {
256
+ const o1 = orderOf(w1);
257
+ const o2 = orderOf(w2);
258
+ if (o1 !== o2) return o1 - o2;
259
+ if (w1.name.toLowerCase() === "talisman") return -1;
260
+ if (w2.name.toLowerCase() === "talisman") return 1;
261
+ return w1.name.localeCompare(w2.name);
262
+ };
263
+
264
+ // src/api/platform.ts
265
+ var acceptsCachedAccount = (cached, platforms) => {
266
+ const plugin = platforms.find((p) => p.platform === cached.platform);
267
+ return _nullishCoalesce(_optionalChain([plugin, 'optionalAccess', _4 => _4.acceptsCachedAccount, 'optionalCall', _5 => _5(cached)]), () => ( true));
268
+ };
269
+
270
+ // src/api/hydration.ts
271
+ var getHydratedSnapshot = (store, platforms, options = {}) => {
272
+ const cached = store.getCachedState();
273
+ const wallets = cached.wallets.map((cachedWallet) => {
274
+ const wallet = _chunkSO64R7Z6js.hydrateWallet.call(void 0, cachedWallet);
275
+ if (!options.icons || wallet.icon) return wallet;
276
+ const icon = _chunkSO64R7Z6js.getCachedIcon.call(void 0, wallet.id);
277
+ return icon ? { ...wallet, icon } : wallet;
278
+ }).sort(sortWallets);
279
+ const accounts = cached.accounts.filter((account) => acceptsCachedAccount(account, platforms)).map(_chunkSO64R7Z6js.hydrateAccount).sort(sortAccounts);
280
+ return { wallets, accounts };
281
+ };
282
+
207
283
  // src/api/kheopskit.ts
208
284
 
209
285
 
@@ -348,14 +424,14 @@ var getAccounts$ = (config, wallets) => {
348
424
  wallets.pipe(
349
425
  _rxjs.map.call(void 0,
350
426
  (ws) => ws.filter(
351
- (w) => _chunk4ENHC7G4js.isWalletConnectWallet.call(void 0, w) || w.platform === plugin.platform
427
+ (w) => _chunkP7BPHHVVjs.isWalletConnectWallet.call(void 0, w) || w.platform === plugin.platform
352
428
  )
353
429
  )
354
430
  )
355
431
  )
356
432
  );
357
433
  const accounts$ = sources.length ? _rxjs.combineLatest.call(void 0, sources).pipe(
358
- _rxjs.map.call(void 0, (accounts) => accounts.flat().sort(_chunkB4L6GAYDjs.sortAccounts))
434
+ _rxjs.map.call(void 0, (accounts) => accounts.flat().sort(sortAccounts))
359
435
  ) : _rxjs.of.call(void 0, []);
360
436
  const sub = accounts$.subscribe(subscriber);
361
437
  return () => {
@@ -364,6 +440,307 @@ var getAccounts$ = (config, wallets) => {
364
440
  }).pipe(_rxjs.shareReplay.call(void 0, { refCount: true, bufferSize: 1 }));
365
441
  };
366
442
 
443
+ // src/api/store.ts
444
+ var _lodashes = require('lodash-es');
445
+
446
+ // src/utils/createStore.ts
447
+
448
+ var createStore = (key, defaultValue, storage = _chunkSO64R7Z6js.safeLocalStorage) => {
449
+ const subject = new (0, _rxjs.BehaviorSubject)(
450
+ getStoredData(key, defaultValue, storage)
451
+ );
452
+ let unsubscribeStorage;
453
+ if (typeof window !== "undefined" && storage.subscribe) {
454
+ unsubscribeStorage = storage.subscribe(key, (newValue) => {
455
+ subject.next(parseData(newValue, defaultValue));
456
+ });
457
+ }
458
+ const update = (val) => {
459
+ setStoredData(key, val, storage);
460
+ subject.next(val);
461
+ };
462
+ return {
463
+ observable: subject.asObservable(),
464
+ set: (val) => update(val),
465
+ mutate: (transform) => update(transform(subject.getValue())),
466
+ get: () => structuredClone(subject.getValue()),
467
+ /**
468
+ * Cleanup subscriptions. Call this when the store is no longer needed.
469
+ */
470
+ destroy: () => {
471
+ _optionalChain([unsubscribeStorage, 'optionalCall', _6 => _6()]);
472
+ subject.complete();
473
+ }
474
+ };
475
+ };
476
+ var parseData = (str, defaultValue) => {
477
+ try {
478
+ if (str) return JSON.parse(str);
479
+ } catch (e) {
480
+ }
481
+ return defaultValue;
482
+ };
483
+ var getStoredData = (key, defaultValue, storage) => {
484
+ const str = storage.getItem(key);
485
+ return parseData(str, defaultValue);
486
+ };
487
+ var setStoredData = (key, val, storage) => {
488
+ const str = JSON.stringify(val);
489
+ storage.setItem(key, str);
490
+ };
491
+
492
+ // src/api/compactStore.ts
493
+ var EMPTY_STORE_DATA = {};
494
+ var toCompactPolkadotAccountType = (type) => {
495
+ switch (type) {
496
+ case "sr25519":
497
+ return 0;
498
+ case "ed25519":
499
+ return 1;
500
+ case "ecdsa":
501
+ return 2;
502
+ case "ethereum":
503
+ return 3;
504
+ default:
505
+ return null;
506
+ }
507
+ };
508
+ var fromCompactPolkadotAccountType = (type) => {
509
+ switch (type) {
510
+ case 0:
511
+ return "sr25519";
512
+ case 1:
513
+ return "ed25519";
514
+ case 2:
515
+ return "ecdsa";
516
+ case 3:
517
+ return "ethereum";
518
+ default:
519
+ return void 0;
520
+ }
521
+ };
522
+ var toCompactPlatform = (platform) => {
523
+ switch (platform) {
524
+ case "polkadot":
525
+ return 0;
526
+ case "ethereum":
527
+ return 1;
528
+ case "solana":
529
+ return 2;
530
+ }
531
+ };
532
+ var fromCompactPlatform = (code) => {
533
+ switch (code) {
534
+ case 0:
535
+ return "polkadot";
536
+ case 1:
537
+ return "ethereum";
538
+ case 2:
539
+ return "solana";
540
+ default:
541
+ return void 0;
542
+ }
543
+ };
544
+ var isCompactStore = (value) => {
545
+ if (!value || typeof value !== "object" || Array.isArray(value)) return false;
546
+ if ("cachedWallets" in value || "cachedAccounts" in value) return false;
547
+ return "v" in value || "w" in value || "a" in value || "r" in value;
548
+ };
549
+ var toCompactStore = (data) => {
550
+ const wallets = _optionalChain([data, 'access', _7 => _7.cachedWallets, 'optionalAccess', _8 => _8.map, 'call', _9 => _9(
551
+ (wallet) => [
552
+ wallet.id,
553
+ wallet.name,
554
+ wallet.isConnected ? 1 : 0,
555
+ wallet.type === "walletconnect" ? 1 : 0
556
+ ]
557
+ )]);
558
+ const accounts = _optionalChain([data, 'access', _10 => _10.cachedAccounts, 'optionalAccess', _11 => _11.map, 'call', _12 => _12(
559
+ (account) => [
560
+ account.walletId,
561
+ account.address,
562
+ _nullishCoalesce(account.name, () => ( null)),
563
+ _nullishCoalesce(account.chainId, () => ( null)),
564
+ toCompactPolkadotAccountType(account.polkadotAccountType),
565
+ toCompactPlatform(account.platform)
566
+ ]
567
+ )]);
568
+ return {
569
+ v: 1,
570
+ r: data.autoReconnect,
571
+ w: _optionalChain([wallets, 'optionalAccess', _13 => _13.length]) ? wallets : void 0,
572
+ a: _optionalChain([accounts, 'optionalAccess', _14 => _14.length]) ? accounts : void 0
573
+ };
574
+ };
575
+ var fromCompactStore = (data) => {
576
+ const walletNameMap = /* @__PURE__ */ new Map();
577
+ const wallets = [];
578
+ for (const item of Array.isArray(data.w) ? data.w : []) {
579
+ if (!Array.isArray(item)) continue;
580
+ const [id, name, isConnected, type] = item;
581
+ if (!_chunkP7BPHHVVjs.isValidWalletId.call(void 0, id)) continue;
582
+ const isWalletConnect = id === _chunkP7BPHHVVjs.WALLET_CONNECT_WALLET_ID;
583
+ const walletType = type === 1 ? "walletconnect" : "injected";
584
+ if (isWalletConnect !== (walletType === "walletconnect")) continue;
585
+ walletNameMap.set(id, name);
586
+ wallets.push({
587
+ id,
588
+ platform: isWalletConnect ? void 0 : _chunkP7BPHHVVjs.parseWalletId.call(void 0, id).platform,
589
+ type: walletType,
590
+ name,
591
+ isConnected: isConnected === 1
592
+ });
593
+ }
594
+ const accounts = [];
595
+ for (const item of Array.isArray(data.a) ? data.a : []) {
596
+ if (!Array.isArray(item)) continue;
597
+ const [
598
+ walletId,
599
+ address,
600
+ name,
601
+ chainId,
602
+ polkadotAccountType,
603
+ platformCode
604
+ ] = item;
605
+ if (!_chunkP7BPHHVVjs.isValidWalletId.call(void 0, walletId) || typeof address !== "string" || !address)
606
+ continue;
607
+ const platform = platformCode != null ? fromCompactPlatform(platformCode) : walletId === _chunkP7BPHHVVjs.WALLET_CONNECT_WALLET_ID ? void 0 : _chunkP7BPHHVVjs.parseWalletId.call(void 0, walletId).platform;
608
+ if (!_chunkP7BPHHVVjs.isWalletPlatform.call(void 0, platform)) continue;
609
+ accounts.push({
610
+ id: _chunkEH73P476js.getWalletAccountId.call(void 0, walletId, address),
611
+ platform,
612
+ address,
613
+ name: _nullishCoalesce(name, () => ( void 0)),
614
+ chainId: _nullishCoalesce(chainId, () => ( void 0)),
615
+ polkadotAccountType: platform === "polkadot" ? fromCompactPolkadotAccountType(polkadotAccountType) : void 0,
616
+ walletId,
617
+ walletName: _nullishCoalesce(walletNameMap.get(walletId), () => ( walletId))
618
+ });
619
+ }
620
+ return {
621
+ autoReconnect: data.r,
622
+ cachedWallets: wallets,
623
+ cachedAccounts: accounts
624
+ };
625
+ };
626
+ var decodeStore = (raw, fallback) => {
627
+ try {
628
+ const parsed = JSON.parse(raw);
629
+ if (isCompactStore(parsed)) return fromCompactStore(parsed);
630
+ return parsed;
631
+ } catch (e2) {
632
+ return fallback;
633
+ }
634
+ };
635
+ var encodeStore = (data) => JSON.stringify(toCompactStore(data));
636
+ var createCompactCookieStorage = (initialCookies) => {
637
+ const base = _chunkSO64R7Z6js.cookieStorage.call(void 0, initialCookies);
638
+ return {
639
+ getItem: (key) => {
640
+ const raw = base.getItem(key);
641
+ if (!raw) return null;
642
+ const expanded = decodeStore(raw, EMPTY_STORE_DATA);
643
+ if (typeof document !== "undefined") {
644
+ try {
645
+ const parsed = JSON.parse(raw);
646
+ if (!isCompactStore(parsed)) {
647
+ base.setItem(key, encodeStore(expanded));
648
+ }
649
+ } catch (e3) {
650
+ }
651
+ }
652
+ return JSON.stringify(expanded);
653
+ },
654
+ setItem: (key, value) => {
655
+ const expanded = decodeStore(value, EMPTY_STORE_DATA);
656
+ base.setItem(key, encodeStore(expanded));
657
+ },
658
+ removeItem: base.removeItem,
659
+ subscribe: (key, callback) => {
660
+ const unsubscribe = _optionalChain([base, 'access', _15 => _15.subscribe, 'optionalCall', _16 => _16(key, (value) => {
661
+ if (!value) {
662
+ callback(null);
663
+ return;
664
+ }
665
+ const expanded = decodeStore(value, EMPTY_STORE_DATA);
666
+ callback(JSON.stringify(expanded));
667
+ })]);
668
+ return () => {
669
+ _optionalChain([unsubscribe, 'optionalCall', _17 => _17()]);
670
+ };
671
+ }
672
+ };
673
+ };
674
+
675
+ // src/api/store.ts
676
+ var DEFAULT_SETTINGS = {};
677
+ var isValidCachedWallet = (value) => {
678
+ if (!value || typeof value !== "object") return false;
679
+ const w = value;
680
+ if (!_chunkP7BPHHVVjs.isValidWalletId.call(void 0, w.id)) return false;
681
+ if (typeof w.name !== "string" || typeof w.isConnected !== "boolean")
682
+ return false;
683
+ if (w.type === "walletconnect")
684
+ return w.id === _chunkP7BPHHVVjs.WALLET_CONNECT_WALLET_ID && w.platform === void 0;
685
+ return w.type === "injected" && _chunkP7BPHHVVjs.isWalletPlatform.call(void 0, w.platform);
686
+ };
687
+ var isValidCachedAccount = (value) => {
688
+ if (!value || typeof value !== "object") return false;
689
+ const a = value;
690
+ return typeof a.id === "string" && !!a.id && _chunkP7BPHHVVjs.isWalletPlatform.call(void 0, a.platform) && typeof a.address === "string" && !!a.address && _chunkP7BPHHVVjs.isValidWalletId.call(void 0, a.walletId) && typeof a.walletName === "string";
691
+ };
692
+ var createKheopskitStore = (options = {}) => {
693
+ const { ssrCookies, storageKey = DEFAULT_STORAGE_KEY } = options;
694
+ const storage = ssrCookies !== void 0 ? createCompactCookieStorage(ssrCookies) : _chunkSO64R7Z6js.safeLocalStorage;
695
+ const store = createStore(storageKey, DEFAULT_SETTINGS, storage);
696
+ const addEnabledWalletId = (walletId) => {
697
+ _chunkP7BPHHVVjs.parseWalletId.call(void 0, walletId);
698
+ store.mutate((prev) => ({
699
+ ...prev,
700
+ autoReconnect: _lodashes.uniq.call(void 0, (_nullishCoalesce(prev.autoReconnect, () => ( []))).concat(walletId))
701
+ }));
702
+ };
703
+ const removeEnabledWalletId = (walletId) => {
704
+ store.mutate((prev) => ({
705
+ ...prev,
706
+ autoReconnect: _lodashes.uniq.call(void 0,
707
+ (_nullishCoalesce(prev.autoReconnect, () => ( []))).filter((id) => id !== walletId)
708
+ )
709
+ }));
710
+ };
711
+ const getCachedState = () => {
712
+ const data = store.get();
713
+ const cachedWallets = Array.isArray(_optionalChain([data, 'optionalAccess', _18 => _18.cachedWallets])) ? data.cachedWallets : [];
714
+ const cachedAccounts = Array.isArray(_optionalChain([data, 'optionalAccess', _19 => _19.cachedAccounts])) ? data.cachedAccounts : [];
715
+ return {
716
+ wallets: cachedWallets.filter(isValidCachedWallet),
717
+ accounts: cachedAccounts.filter(isValidCachedAccount)
718
+ };
719
+ };
720
+ const setCachedState = (wallets, accounts) => {
721
+ store.mutate((prev) => ({
722
+ ...prev,
723
+ cachedWallets: wallets,
724
+ cachedAccounts: accounts
725
+ }));
726
+ };
727
+ return {
728
+ observable: store.observable,
729
+ addEnabledWalletId,
730
+ removeEnabledWalletId,
731
+ getCachedState,
732
+ setCachedState
733
+ };
734
+ };
735
+ var DEFAULT_STORE_SYMBOL = /* @__PURE__ */ Symbol.for("kheopskit.defaultStore");
736
+ var getDefaultStore = () => {
737
+ const g = globalThis;
738
+ if (!g[DEFAULT_STORE_SYMBOL]) {
739
+ g[DEFAULT_STORE_SYMBOL] = createKheopskitStore();
740
+ }
741
+ return g[DEFAULT_STORE_SYMBOL];
742
+ };
743
+
367
744
  // src/api/wallets.ts
368
745
 
369
746
 
@@ -375,14 +752,42 @@ var getAccounts$ = (config, wallets) => {
375
752
 
376
753
 
377
754
 
378
- var getWallets$ = (config, store2 = _chunkXQWJM3KCjs.store) => {
379
- const autoReconnectWalletIds$ = store2.observable.pipe(
755
+
756
+ // src/api/reconnectPolicy.ts
757
+ var createReconnectPolicy = ({
758
+ maxAttempts = 3
759
+ } = {}) => {
760
+ const reconnecting = /* @__PURE__ */ new Set();
761
+ const reconnected = /* @__PURE__ */ new Set();
762
+ const failedAttempts = /* @__PURE__ */ new Map();
763
+ const shouldAttempt = (walletId) => !reconnecting.has(walletId) && !reconnected.has(walletId) && (_nullishCoalesce(failedAttempts.get(walletId), () => ( 0))) < maxAttempts;
764
+ const attempt = async (walletId, connect) => {
765
+ if (!shouldAttempt(walletId)) return false;
766
+ reconnecting.add(walletId);
767
+ try {
768
+ await connect();
769
+ reconnected.add(walletId);
770
+ failedAttempts.delete(walletId);
771
+ return true;
772
+ } catch (err) {
773
+ failedAttempts.set(walletId, (_nullishCoalesce(failedAttempts.get(walletId), () => ( 0))) + 1);
774
+ throw err;
775
+ } finally {
776
+ reconnecting.delete(walletId);
777
+ }
778
+ };
779
+ return { shouldAttempt, attempt };
780
+ };
781
+
782
+ // src/api/wallets.ts
783
+ var getWallets$ = (config, store) => {
784
+ const autoReconnectWalletIds$ = store.observable.pipe(
380
785
  _rxjs.map.call(void 0, (s) => _nullishCoalesce(s.autoReconnect, () => ( []))),
381
786
  _rxjs.take.call(void 0, 1),
382
787
  _rxjs.shareReplay.call(void 0, { bufferSize: 1, refCount: true })
383
788
  );
384
789
  return new (0, _rxjs.Observable)((subscriber) => {
385
- const ctx = { config, store: store2 };
790
+ const ctx = { config, store };
386
791
  const observables = config.platforms.map(
387
792
  (plugin) => plugin.getWallets$(ctx)
388
793
  );
@@ -393,36 +798,22 @@ var getWallets$ = (config, store2 = _chunkXQWJM3KCjs.store) => {
393
798
  ]).pipe(
394
799
  _rxjs.map.call(void 0, ([platformWallets, walletConnect]) => {
395
800
  const all = walletConnect ? [...platformWallets, walletConnect] : platformWallets;
396
- return all.sort(_chunkB4L6GAYDjs.sortWallets);
801
+ return all.sort(sortWallets);
397
802
  })
398
803
  // Note: No startWith([]) here - the hydration buffer handles initial state
399
804
  );
400
- const reconnectingWallets = /* @__PURE__ */ new Set();
401
- const reconnectedWallets = /* @__PURE__ */ new Set();
402
- const MAX_RECONNECT_ATTEMPTS = 3;
403
- const failedAttempts = /* @__PURE__ */ new Map();
805
+ const reconnectPolicy = createReconnectPolicy();
404
806
  const subAutoReconnect = _rxjs.combineLatest.call(void 0, [wallets$, autoReconnectWalletIds$]).pipe(
405
- _rxjs.filter.call(void 0, ([, walletIds]) => config.autoReconnect && !!_optionalChain([walletIds, 'optionalAccess', _3 => _3.length])),
807
+ _rxjs.filter.call(void 0, ([, walletIds]) => config.autoReconnect && !!_optionalChain([walletIds, 'optionalAccess', _20 => _20.length])),
406
808
  _rxjs.mergeMap.call(void 0,
407
- ([wallets, walletIds]) => wallets.filter((wallet) => _optionalChain([walletIds, 'optionalAccess', _4 => _4.includes, 'call', _5 => _5(wallet.id)]))
809
+ ([wallets, walletIds]) => wallets.filter((wallet) => _optionalChain([walletIds, 'optionalAccess', _21 => _21.includes, 'call', _22 => _22(wallet.id)]))
408
810
  )
409
811
  ).subscribe(async (wallet) => {
410
- if (wallet.isConnected || reconnectingWallets.has(wallet.id) || reconnectedWallets.has(wallet.id) || (_nullishCoalesce(failedAttempts.get(wallet.id), () => ( 0))) >= MAX_RECONNECT_ATTEMPTS) {
411
- return;
412
- }
413
- reconnectingWallets.add(wallet.id);
812
+ if (wallet.isConnected) return;
414
813
  try {
415
- await wallet.connect();
416
- reconnectedWallets.add(wallet.id);
417
- failedAttempts.delete(wallet.id);
814
+ await reconnectPolicy.attempt(wallet.id, () => wallet.connect());
418
815
  } catch (err) {
419
- failedAttempts.set(
420
- wallet.id,
421
- (_nullishCoalesce(failedAttempts.get(wallet.id), () => ( 0))) + 1
422
- );
423
816
  console.error("Failed to reconnect wallet %s", wallet.id, { err });
424
- } finally {
425
- reconnectingWallets.delete(wallet.id);
426
817
  }
427
818
  });
428
819
  const subWallets = wallets$.subscribe(subscriber);
@@ -436,26 +827,15 @@ var getWallets$ = (config, store2 = _chunkXQWJM3KCjs.store) => {
436
827
  // src/api/kheopskit.ts
437
828
  var getKheopskit$ = (config, options = {}) => {
438
829
  const { ssrCookies, store: existingStore } = options;
439
- const kc = _chunkXQWJM3KCjs.resolveConfig.call(void 0, config);
440
- const store2 = _nullishCoalesce(existingStore, () => ( _chunkXQWJM3KCjs.createKheopskitStore.call(void 0, { ssrCookies, storageKey: kc.storageKey })));
830
+ const kc = resolveConfig(config);
831
+ const store = _nullishCoalesce(existingStore, () => ( createKheopskitStore({ ssrCookies, storageKey: kc.storageKey })));
441
832
  if (kc.debug) console.debug("[kheopskit] config", kc);
442
833
  if (kc.debug && typeof window === "undefined" && ssrCookies === void 0) {
443
834
  console.warn(
444
835
  "[kheopskit] Running on server without `ssrCookies`. Wallet state will not be hydrated. Pass cookies for SSR support."
445
836
  );
446
837
  }
447
- const cachedState = store2.getCachedState();
448
- const cachedWallets = cachedState.wallets.map((w) => {
449
- const wallet = _chunkB4L6GAYDjs.hydrateWallet.call(void 0, w);
450
- if (!wallet.icon) {
451
- const cachedIcon = _chunkB4L6GAYDjs.getCachedIcon.call(void 0, wallet.id);
452
- if (cachedIcon) {
453
- return { ...wallet, icon: cachedIcon };
454
- }
455
- }
456
- return wallet;
457
- });
458
- const cachedAccounts = cachedState.accounts.filter((cached) => _chunkB4L6GAYDjs.acceptsCachedAccount.call(void 0, cached, kc.platforms)).map(_chunkB4L6GAYDjs.hydrateAccount);
838
+ const { wallets: cachedWallets, accounts: cachedAccounts } = getHydratedSnapshot(store, kc.platforms, { icons: true });
459
839
  if (kc.debug && cachedWallets.length > 0) {
460
840
  console.debug("[kheopskit] hydrating from cache:", {
461
841
  wallets: cachedWallets.length,
@@ -463,7 +843,7 @@ var getKheopskit$ = (config, options = {}) => {
463
843
  });
464
844
  }
465
845
  return new (0, _rxjs.Observable)((subscriber) => {
466
- const liveWallets$ = getWallets$(kc, store2);
846
+ const liveWallets$ = getWallets$(kc, store);
467
847
  const liveAccounts$ = getAccounts$(kc, liveWallets$);
468
848
  const bufferedWallets$ = createHydrationBuffer(
469
849
  cachedWallets,
@@ -484,7 +864,7 @@ var getKheopskit$ = (config, options = {}) => {
484
864
  (live, cached) => ({
485
865
  ...cached,
486
866
  // Priority: cached icon > localStorage cache > live icon
487
- icon: cached.icon || _chunkB4L6GAYDjs.getCachedIcon.call(void 0, cached.id) || live.icon,
867
+ icon: cached.icon || _chunkSO64R7Z6js.getCachedIcon.call(void 0, cached.id) || live.icon,
488
868
  // Use live wallet's connect/disconnect functions
489
869
  connect: live.connect,
490
870
  disconnect: live.disconnect
@@ -492,7 +872,7 @@ var getKheopskit$ = (config, options = {}) => {
492
872
  // Transform cached-only items: add icon from localStorage cache
493
873
  (cached) => ({
494
874
  ...cached,
495
- icon: cached.icon || _chunkB4L6GAYDjs.getCachedIcon.call(void 0, cached.id) || ""
875
+ icon: cached.icon || _chunkSO64R7Z6js.getCachedIcon.call(void 0, cached.id) || ""
496
876
  })
497
877
  );
498
878
  const bufferedAccounts$ = createAccountHydrationBuffer(
@@ -529,8 +909,8 @@ var getKheopskit$ = (config, options = {}) => {
529
909
  }
530
910
  return {
531
911
  config: kc,
532
- wallets: [...wallets.items].sort(_chunkB4L6GAYDjs.sortWallets),
533
- accounts: [...accounts.items].sort(_chunkB4L6GAYDjs.sortAccounts),
912
+ wallets: [...wallets.items].sort(sortWallets),
913
+ accounts: [...accounts.items].sort(sortAccounts),
534
914
  isHydrating: wallets.isHydrating || accounts.isHydrating
535
915
  };
536
916
  })
@@ -569,9 +949,9 @@ var getKheopskit$ = (config, options = {}) => {
569
949
  accounts: relevantAccounts.length
570
950
  });
571
951
  }
572
- store2.setCachedState(
573
- wallets.items.map(_chunkB4L6GAYDjs.serializeWallet),
574
- relevantAccounts.map(_chunkB4L6GAYDjs.serializeAccount)
952
+ store.setCachedState(
953
+ wallets.items.map(_chunkSO64R7Z6js.serializeWallet),
954
+ relevantAccounts.map(_chunkSO64R7Z6js.serializeAccount)
575
955
  );
576
956
  const icons = {};
577
957
  for (const wallet of wallets.items) {
@@ -579,7 +959,7 @@ var getKheopskit$ = (config, options = {}) => {
579
959
  icons[wallet.id] = wallet.icon;
580
960
  }
581
961
  }
582
- _chunkB4L6GAYDjs.setCachedIcons.call(void 0, icons);
962
+ _chunkSO64R7Z6js.setCachedIcons.call(void 0, icons);
583
963
  });
584
964
  return () => {
585
965
  subscription.unsubscribe();
@@ -608,7 +988,7 @@ var accountChangeKey = (account) => {
608
988
  return account.id;
609
989
  }
610
990
  };
611
- var walletPlatforms = (wallet) => _chunk4ENHC7G4js.isWalletConnectWallet.call(void 0, wallet) ? wallet.platforms.join(",") : "";
991
+ var walletPlatforms = (wallet) => _chunkP7BPHHVVjs.isWalletConnectWallet.call(void 0, wallet) ? wallet.platforms.join(",") : "";
612
992
  var walletPersistKey = (wallet) => `${wallet.id}|${wallet.isConnected ? 1 : 0}|${wallet.name}`;
613
993
  var walletUiKey = (wallet) => `${walletPersistKey(wallet)}|${wallet.icon}|${walletPlatforms(wallet)}`;
614
994
  var statesEqual = (a, b) => a.isHydrating === b.isHydrating && a.wallets.length === b.wallets.length && a.accounts.length === b.accounts.length && a.wallets.every((w, i) => {
@@ -635,5 +1015,6 @@ var statesEqual = (a, b) => a.isHydrating === b.isHydrating && a.wallets.length
635
1015
 
636
1016
 
637
1017
 
638
- exports.DEFAULT_STORAGE_KEY = _chunkXQWJM3KCjs.DEFAULT_STORAGE_KEY; exports.KheopskitError = _chunkXQWJM3KCjs.KheopskitError; exports.clearAllCachedObservables = _chunk4ENHC7G4js.clearAllCachedObservables; exports.createKheopskitStore = _chunkXQWJM3KCjs.createKheopskitStore; exports.getDefaultStore = _chunkXQWJM3KCjs.getDefaultStore; exports.getKheopskit$ = getKheopskit$; exports.getWalletAccountId = _chunkXQWJM3KCjs.getWalletAccountId; exports.getWalletId = _chunk4ENHC7G4js.getWalletId; exports.isInjectedWallet = _chunk4ENHC7G4js.isInjectedWallet; exports.isValidAddress = _chunkXQWJM3KCjs.isValidAddress; exports.isValidWalletId = _chunk4ENHC7G4js.isValidWalletId; exports.isWalletConnectWallet = _chunk4ENHC7G4js.isWalletConnectWallet; exports.parseWalletAccountId = _chunkXQWJM3KCjs.parseWalletAccountId; exports.parseWalletId = _chunk4ENHC7G4js.parseWalletId; exports.resetAppKitCache = resetAppKitCache; exports.resolveConfig = _chunkXQWJM3KCjs.resolveConfig;
1018
+
1019
+ exports.DEFAULT_STORAGE_KEY = DEFAULT_STORAGE_KEY; exports.KheopskitError = _chunkEH73P476js.KheopskitError; exports.clearAllCachedObservables = _chunkP7BPHHVVjs.clearAllCachedObservables; exports.createKheopskitStore = createKheopskitStore; exports.getDefaultStore = getDefaultStore; exports.getHydratedSnapshot = getHydratedSnapshot; exports.getKheopskit$ = getKheopskit$; exports.getWalletAccountId = _chunkEH73P476js.getWalletAccountId; exports.getWalletId = _chunkP7BPHHVVjs.getWalletId; exports.isInjectedWallet = _chunkP7BPHHVVjs.isInjectedWallet; exports.isValidAddress = _chunkEH73P476js.isValidAddress; exports.isValidWalletId = _chunkP7BPHHVVjs.isValidWalletId; exports.isWalletConnectWallet = _chunkP7BPHHVVjs.isWalletConnectWallet; exports.parseWalletAccountId = _chunkEH73P476js.parseWalletAccountId; exports.parseWalletId = _chunkP7BPHHVVjs.parseWalletId; exports.resetAppKitCache = resetAppKitCache; exports.resolveConfig = resolveConfig;
639
1020
  //# sourceMappingURL=index.js.map