@kheopskit/core 4.0.0 → 5.0.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 (54) hide show
  1. package/dist/{chunk-SIUWQBT4.js → chunk-4ENHC7G4.js} +11 -2
  2. package/dist/chunk-4ENHC7G4.js.map +1 -0
  3. package/dist/{chunk-KWFQDD7E.mjs → chunk-6XAZANB5.mjs} +58 -186
  4. package/dist/chunk-6XAZANB5.mjs.map +1 -0
  5. package/dist/{chunk-PNPPI5CH.mjs → chunk-7QSGAJ4A.mjs} +11 -2
  6. package/dist/chunk-7QSGAJ4A.mjs.map +1 -0
  7. package/dist/{chunk-TMAPQWW2.js → chunk-B4L6GAYD.js} +24 -9
  8. package/dist/chunk-B4L6GAYD.js.map +1 -0
  9. package/dist/chunk-XQWJM3KC.js +450 -0
  10. package/dist/chunk-XQWJM3KC.js.map +1 -0
  11. package/dist/{chunk-4RBYRNY3.mjs → chunk-YDLCHYHH.mjs} +22 -7
  12. package/dist/chunk-YDLCHYHH.mjs.map +1 -0
  13. package/dist/ethereum.d.mts +4 -3
  14. package/dist/ethereum.d.ts +4 -3
  15. package/dist/ethereum.js +61 -42
  16. package/dist/ethereum.js.map +1 -1
  17. package/dist/ethereum.mjs +53 -34
  18. package/dist/ethereum.mjs.map +1 -1
  19. package/dist/index.d.mts +20 -6
  20. package/dist/index.d.ts +20 -6
  21. package/dist/index.js +253 -47
  22. package/dist/index.js.map +1 -1
  23. package/dist/index.mjs +271 -65
  24. package/dist/index.mjs.map +1 -1
  25. package/dist/internal.d.mts +4 -4
  26. package/dist/internal.d.ts +4 -4
  27. package/dist/internal.js +3 -3
  28. package/dist/internal.mjs +2 -2
  29. package/dist/polkadot.d.mts +4 -3
  30. package/dist/polkadot.d.ts +4 -3
  31. package/dist/polkadot.js +26 -37
  32. package/dist/polkadot.js.map +1 -1
  33. package/dist/polkadot.mjs +13 -24
  34. package/dist/polkadot.mjs.map +1 -1
  35. package/dist/solana.d.mts +5 -4
  36. package/dist/solana.d.ts +5 -4
  37. package/dist/solana.js +37 -42
  38. package/dist/solana.js.map +1 -1
  39. package/dist/solana.mjs +26 -31
  40. package/dist/solana.mjs.map +1 -1
  41. package/dist/{types-BNzRUNw-.d.mts → types-C7V7DGlg.d.mts} +47 -17
  42. package/dist/{types-BNzRUNw-.d.ts → types-C7V7DGlg.d.ts} +47 -17
  43. package/package.json +42 -16
  44. package/dist/chunk-4RBYRNY3.mjs.map +0 -1
  45. package/dist/chunk-FIAL4HTE.js +0 -1
  46. package/dist/chunk-FIAL4HTE.js.map +0 -1
  47. package/dist/chunk-KWFQDD7E.mjs.map +0 -1
  48. package/dist/chunk-NU46D4MZ.js +0 -578
  49. package/dist/chunk-NU46D4MZ.js.map +0 -1
  50. package/dist/chunk-PNPPI5CH.mjs.map +0 -1
  51. package/dist/chunk-SIUWQBT4.js.map +0 -1
  52. package/dist/chunk-TMAPQWW2.js.map +0 -1
  53. package/dist/chunk-YFD3IKK5.mjs +0 -1
  54. package/dist/chunk-YFD3IKK5.mjs.map +0 -1
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
3
 
4
4
 
@@ -8,7 +8,7 @@
8
8
 
9
9
 
10
10
 
11
- var _chunkTMAPQWW2js = require('./chunk-TMAPQWW2.js');
11
+ var _chunkB4L6GAYDjs = require('./chunk-B4L6GAYD.js');
12
12
  require('./chunk-D3EQMFZ2.js');
13
13
 
14
14
 
@@ -20,14 +20,20 @@ require('./chunk-D3EQMFZ2.js');
20
20
 
21
21
 
22
22
 
23
- var _chunkNU46D4MZjs = require('./chunk-NU46D4MZ.js');
23
+ var _chunkXQWJM3KCjs = require('./chunk-XQWJM3KC.js');
24
24
 
25
25
 
26
26
 
27
27
 
28
- var _chunkSIUWQBT4js = require('./chunk-SIUWQBT4.js');
29
28
 
30
- // src/api/kheopskit.ts
29
+
30
+
31
+
32
+
33
+ var _chunk4ENHC7G4js = require('./chunk-4ENHC7G4.js');
34
+
35
+ // src/api/appKit.ts
36
+
31
37
 
32
38
 
33
39
 
@@ -38,6 +44,177 @@ var _chunkSIUWQBT4js = require('./chunk-SIUWQBT4.js');
38
44
 
39
45
 
40
46
  var _rxjs = require('rxjs');
47
+ var loadAppKit = async () => {
48
+ try {
49
+ const { createAppKit } = await Promise.resolve().then(() => _interopRequireWildcard(require("@reown/appkit/core")));
50
+ return createAppKit;
51
+ } catch (cause) {
52
+ console.error(
53
+ "[kheopskit] WalletConnect is configured but @reown/appkit could not be loaded. Install it with `pnpm add @reown/appkit` (or remove config.walletConnect). WalletConnect wallets are disabled; injected wallets still work.",
54
+ cause
55
+ );
56
+ return null;
57
+ }
58
+ };
59
+ var WALLET_CONNECT_ICON = "data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjQwMCIgdmlld0JveD0iMCAwIDQwMCA0MDAiIHdpZHRoPSI0MDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZD0ibTAgMGg0MDB2NDAwaC00MDB6Ii8+PC9jbGlwUGF0aD48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxjaXJjbGUgY3g9IjIwMCIgY3k9IjIwMCIgZmlsbD0iIzMzOTZmZiIgcj0iMTk5LjUiIHN0cm9rZT0iIzY2YjFmZiIvPjxwYXRoIGQ9Im0xMjIuNTE5IDE0OC45NjVjNDIuNzkxLTQxLjcyOSAxMTIuMTcxLTQxLjcyOSAxNTQuOTYyIDBsNS4xNSA1LjAyMmMyLjE0IDIuMDg2IDIuMTQgNS40NjkgMCA3LjU1NWwtMTcuNjE3IDE3LjE4Yy0xLjA3IDEuMDQzLTIuODA0IDEuMDQzLTMuODc0IDBsLTcuMDg3LTYuOTExYy0yOS44NTMtMjkuMTExLTc4LjI1My0yOS4xMTEtMTA4LjEwNiAwbC03LjU5IDcuNDAxYy0xLjA3IDEuMDQzLTIuODA0IDEuMDQzLTMuODc0IDBsLTE3LjYxNy0xNy4xOGMtMi4xNC0yLjA4Ni0yLjE0LTUuNDY5IDAtNy41NTV6bTE5MS4zOTcgMzUuNTI5IDE1LjY3OSAxNS4yOWMyLjE0IDIuMDg2IDIuMTQgNS40NjkgMCA3LjU1NWwtNzAuNyA2OC45NDRjLTIuMTM5IDIuMDg3LTUuNjA4IDIuMDg3LTcuNzQ4IDBsLTUwLjE3OC00OC45MzFjLS41MzUtLjUyMi0xLjQwMi0uNTIyLTEuOTM3IDBsLTUwLjE3OCA0OC45MzFjLTIuMTM5IDIuMDg3LTUuNjA4IDIuMDg3LTcuNzQ4IDBsLTcwLjcwMTUtNjguOTQ1Yy0yLjEzOTYtMi4wODYtMi4xMzk2LTUuNDY5IDAtNy41NTVsMTUuNjc5NS0xNS4yOWMyLjEzOTYtMi4wODYgNS42MDg1LTIuMDg2IDcuNzQ4MSAwbDUwLjE3ODkgNDguOTMyYy41MzUuNTIyIDEuNDAyLjUyMiAxLjkzNyAwbDUwLjE3Ny00OC45MzJjMi4xMzktMi4wODcgNS42MDgtMi4wODcgNy43NDggMGw1MC4xNzkgNDguOTMyYy41MzUuNTIyIDEuNDAyLjUyMiAxLjkzNyAwbDUwLjE3OS00OC45MzFjMi4xMzktMi4wODcgNS42MDgtMi4wODcgNy43NDggMHoiIGZpbGw9IiNmZmYiLz48L2c+PC9zdmc+";
60
+ var APPKIT_SYMBOL = /* @__PURE__ */ Symbol.for("kheopskit.cachedAppKit");
61
+ var APPKIT_PROJECT_ID_SYMBOL = /* @__PURE__ */ Symbol.for("kheopskit.cachedAppKitProjectId");
62
+ var getCachedAppKit = () => globalThis[APPKIT_SYMBOL];
63
+ var getCachedAppKitProjectId = () => globalThis[APPKIT_PROJECT_ID_SYMBOL];
64
+ var setCachedAppKit = (value, projectId) => {
65
+ globalThis[APPKIT_SYMBOL] = value;
66
+ globalThis[APPKIT_PROJECT_ID_SYMBOL] = projectId;
67
+ };
68
+ var resetAppKitCache = () => {
69
+ setCachedAppKit(void 0);
70
+ };
71
+ var dropAccountsCache = (platform) => {
72
+ _chunk4ENHC7G4js.clearCachedObservablesByPrefix.call(void 0,
73
+ `accounts:${_chunk4ENHC7G4js.WALLET_CONNECT_WALLET_ID}:${platform}:`
74
+ );
75
+ };
76
+ var getWalletConnectWallet$ = (config) => {
77
+ if (!config.walletConnect) return _rxjs.of.call(void 0, null);
78
+ if (typeof window === "undefined") return _rxjs.of.call(void 0, null);
79
+ const walletConnect = config.walletConnect;
80
+ const cachedProjectId = getCachedAppKitProjectId();
81
+ if (cachedProjectId !== void 0 && cachedProjectId !== walletConnect.projectId) {
82
+ console.warn(
83
+ "[kheopskit] WalletConnect is already initialised with projectId %s; AppKit is a process-wide singleton, so the first configuration wins and projectId %s is ignored. Call resetAppKitCache() before re-initialising if the WalletConnect config must change.",
84
+ cachedProjectId,
85
+ walletConnect.projectId
86
+ );
87
+ }
88
+ let cachedAppKit = getCachedAppKit();
89
+ if (!cachedAppKit) {
90
+ cachedAppKit = _rxjs.from.call(void 0, loadAppKit()).pipe(
91
+ _rxjs.switchMap.call(void 0, (createAppKit) => {
92
+ if (!createAppKit) return _rxjs.of.call(void 0, null);
93
+ return new (0, _rxjs.Observable)((subscriber) => {
94
+ const appKit = createAppKit({
95
+ projectId: walletConnect.projectId,
96
+ metadata: walletConnect.metadata,
97
+ // Loosely typed in WalletConnectConfig to keep @reown/appkit's
98
+ // types out of core; forwarded to AppKit verbatim.
99
+ networks: walletConnect.networks,
100
+ themeMode: walletConnect.themeMode,
101
+ themeVariables: walletConnect.themeVariables,
102
+ universalProviderConfigOverride: {
103
+ methods: {
104
+ polkadot: ["polkadot_signTransaction", "polkadot_signMessage"],
105
+ solana: [
106
+ "solana_signTransaction",
107
+ "solana_signMessage",
108
+ "solana_signAndSendTransaction"
109
+ ]
110
+ }
111
+ },
112
+ allWallets: "HIDE",
113
+ debug: config.debug,
114
+ allowUnsupportedChain: true
115
+ });
116
+ const appKitInstance = appKit;
117
+ const status$ = new (0, _rxjs.BehaviorSubject)({
118
+ isPolkadotConnected: false,
119
+ isEthereumConnected: false,
120
+ isSolanaConnected: false
121
+ });
122
+ const unsubProviders = appKit.subscribeProviders((providers) => {
123
+ status$.next({
124
+ isPolkadotConnected: !!providers.polkadot,
125
+ isEthereumConnected: !!providers.eip155,
126
+ isSolanaConnected: !!providers.solana
127
+ });
128
+ });
129
+ const namespaceOf = {
130
+ polkadot: "polkadot",
131
+ ethereum: "eip155",
132
+ solana: "solana"
133
+ };
134
+ const allPlatforms = [
135
+ "polkadot",
136
+ "ethereum",
137
+ "solana"
138
+ ];
139
+ const enabledPlatforms = allPlatforms.filter(
140
+ (p) => appKit.chainNamespaces.includes(namespaceOf[p])
141
+ );
142
+ let prevConnected = {
143
+ polkadot: false,
144
+ ethereum: false,
145
+ solana: false
146
+ };
147
+ const sub = status$.pipe(
148
+ _rxjs.map.call(void 0, (s) => ({
149
+ polkadot: s.isPolkadotConnected,
150
+ ethereum: s.isEthereumConnected,
151
+ solana: s.isSolanaConnected
152
+ })),
153
+ _rxjs.distinctUntilChanged.call(void 0,
154
+ (a, b) => a.polkadot === b.polkadot && a.ethereum === b.ethereum && a.solana === b.solana
155
+ ),
156
+ _rxjs.tap.call(void 0, (connected) => {
157
+ for (const platform of allPlatforms)
158
+ if (prevConnected[platform] && !connected[platform])
159
+ dropAccountsCache(platform);
160
+ prevConnected = connected;
161
+ }),
162
+ _rxjs.map.call(void 0, (connected) => {
163
+ const platforms = enabledPlatforms.filter((p) => connected[p]);
164
+ const isConnected = platforms.length > 0;
165
+ const walletInfo = appKit.getWalletInfo();
166
+ return {
167
+ id: _chunk4ENHC7G4js.WALLET_CONNECT_WALLET_ID,
168
+ type: "walletconnect",
169
+ platforms,
170
+ appKit: appKitInstance,
171
+ name: _nullishCoalesce(_optionalChain([walletInfo, 'optionalAccess', _ => _.name]), () => ( "WalletConnect")),
172
+ icon: _nullishCoalesce(_optionalChain([walletInfo, 'optionalAccess', _2 => _2.icon]), () => ( WALLET_CONNECT_ICON)),
173
+ // One shared session: connecting opens the modal; the wallet
174
+ // approves namespaces in that single pairing. Disconnect is
175
+ // session-wide; re-pair to change the approved set.
176
+ connect: async () => {
177
+ if (!isConnected) await appKit.open();
178
+ },
179
+ disconnect: async () => {
180
+ if (isConnected) await appKit.disconnect();
181
+ },
182
+ isConnected
183
+ };
184
+ })
185
+ ).subscribe(subscriber);
186
+ return () => {
187
+ sub.unsubscribe();
188
+ unsubProviders();
189
+ };
190
+ });
191
+ }),
192
+ // refCount:false keeps the AppKit instance alive for the process lifetime
193
+ // once created: createAppKit runs at most once (Reown AppKit cannot be
194
+ // instantiated twice). With refCount:true the producer would re-run
195
+ // createAppKit whenever every subscriber drained and a new one
196
+ // re-subscribed — e.g. a React unmount/remount or StrictMode's
197
+ // mount→unmount→remount — throwing on the duplicate Lit web components and
198
+ // WalletConnect modal singleton. The replayed connector value also keeps
199
+ // the wallet list stable across such teardown/rebuild cycles.
200
+ _rxjs.shareReplay.call(void 0, { refCount: false, bufferSize: 1 })
201
+ );
202
+ setCachedAppKit(cachedAppKit, walletConnect.projectId);
203
+ }
204
+ return cachedAppKit;
205
+ };
206
+
207
+ // src/api/kheopskit.ts
208
+
209
+
210
+
211
+
212
+
213
+
214
+
215
+
216
+
217
+
41
218
 
42
219
  // src/utils/createHydrationBuffer.ts
43
220
 
@@ -169,12 +346,16 @@ var getAccounts$ = (config, wallets) => {
169
346
  const sources = config.platforms.map(
170
347
  (plugin) => plugin.getAccounts$(
171
348
  wallets.pipe(
172
- _rxjs.map.call(void 0, (ws) => ws.filter((w) => w.platform === plugin.platform))
349
+ _rxjs.map.call(void 0,
350
+ (ws) => ws.filter(
351
+ (w) => _chunk4ENHC7G4js.isWalletConnectWallet.call(void 0, w) || w.platform === plugin.platform
352
+ )
353
+ )
173
354
  )
174
355
  )
175
356
  );
176
357
  const accounts$ = sources.length ? _rxjs.combineLatest.call(void 0, sources).pipe(
177
- _rxjs.map.call(void 0, (accounts) => accounts.flat().sort(_chunkTMAPQWW2js.sortAccounts))
358
+ _rxjs.map.call(void 0, (accounts) => accounts.flat().sort(_chunkB4L6GAYDjs.sortAccounts))
178
359
  ) : _rxjs.of.call(void 0, []);
179
360
  const sub = accounts$.subscribe(subscriber);
180
361
  return () => {
@@ -194,7 +375,7 @@ var getAccounts$ = (config, wallets) => {
194
375
 
195
376
 
196
377
 
197
- var getWallets$ = (config, store2 = _chunkNU46D4MZjs.store) => {
378
+ var getWallets$ = (config, store2 = _chunkXQWJM3KCjs.store) => {
198
379
  const autoReconnectWalletIds$ = store2.observable.pipe(
199
380
  _rxjs.map.call(void 0, (s) => _nullishCoalesce(s.autoReconnect, () => ( []))),
200
381
  _rxjs.take.call(void 0, 1),
@@ -205,26 +386,40 @@ var getWallets$ = (config, store2 = _chunkNU46D4MZjs.store) => {
205
386
  const observables = config.platforms.map(
206
387
  (plugin) => plugin.getWallets$(ctx)
207
388
  );
208
- const wallets$ = observables.length ? _rxjs.combineLatest.call(void 0, observables).pipe(
209
- _rxjs.map.call(void 0, (wallets) => wallets.flat().sort(_chunkTMAPQWW2js.sortWallets))
389
+ const platformWallets$ = observables.length ? _rxjs.combineLatest.call(void 0, observables).pipe(_rxjs.map.call(void 0, (wallets) => wallets.flat())) : _rxjs.of.call(void 0, []);
390
+ const wallets$ = _rxjs.combineLatest.call(void 0, [
391
+ platformWallets$,
392
+ getWalletConnectWallet$(config)
393
+ ]).pipe(
394
+ _rxjs.map.call(void 0, ([platformWallets, walletConnect]) => {
395
+ const all = walletConnect ? [...platformWallets, walletConnect] : platformWallets;
396
+ return all.sort(_chunkB4L6GAYDjs.sortWallets);
397
+ })
210
398
  // Note: No startWith([]) here - the hydration buffer handles initial state
211
- ) : _rxjs.of.call(void 0, []);
399
+ );
212
400
  const reconnectingWallets = /* @__PURE__ */ new Set();
213
401
  const reconnectedWallets = /* @__PURE__ */ new Set();
402
+ const MAX_RECONNECT_ATTEMPTS = 3;
403
+ const failedAttempts = /* @__PURE__ */ new Map();
214
404
  const subAutoReconnect = _rxjs.combineLatest.call(void 0, [wallets$, autoReconnectWalletIds$]).pipe(
215
- _rxjs.filter.call(void 0, ([, walletIds]) => config.autoReconnect && !!_optionalChain([walletIds, 'optionalAccess', _ => _.length])),
405
+ _rxjs.filter.call(void 0, ([, walletIds]) => config.autoReconnect && !!_optionalChain([walletIds, 'optionalAccess', _3 => _3.length])),
216
406
  _rxjs.mergeMap.call(void 0,
217
- ([wallets, walletIds]) => wallets.filter((wallet) => _optionalChain([walletIds, 'optionalAccess', _2 => _2.includes, 'call', _3 => _3(wallet.id)]))
407
+ ([wallets, walletIds]) => wallets.filter((wallet) => _optionalChain([walletIds, 'optionalAccess', _4 => _4.includes, 'call', _5 => _5(wallet.id)]))
218
408
  )
219
409
  ).subscribe(async (wallet) => {
220
- if (wallet.isConnected || reconnectingWallets.has(wallet.id) || reconnectedWallets.has(wallet.id)) {
410
+ if (wallet.isConnected || reconnectingWallets.has(wallet.id) || reconnectedWallets.has(wallet.id) || (_nullishCoalesce(failedAttempts.get(wallet.id), () => ( 0))) >= MAX_RECONNECT_ATTEMPTS) {
221
411
  return;
222
412
  }
223
413
  reconnectingWallets.add(wallet.id);
224
414
  try {
225
415
  await wallet.connect();
226
416
  reconnectedWallets.add(wallet.id);
417
+ failedAttempts.delete(wallet.id);
227
418
  } catch (err) {
419
+ failedAttempts.set(
420
+ wallet.id,
421
+ (_nullishCoalesce(failedAttempts.get(wallet.id), () => ( 0))) + 1
422
+ );
228
423
  console.error("Failed to reconnect wallet %s", wallet.id, { err });
229
424
  } finally {
230
425
  reconnectingWallets.delete(wallet.id);
@@ -239,9 +434,10 @@ var getWallets$ = (config, store2 = _chunkNU46D4MZjs.store) => {
239
434
  };
240
435
 
241
436
  // src/api/kheopskit.ts
242
- var getKheopskit$ = (config, ssrCookies, existingStore) => {
243
- const kc = _chunkNU46D4MZjs.resolveConfig.call(void 0, config);
244
- const store2 = _nullishCoalesce(existingStore, () => ( _chunkNU46D4MZjs.createKheopskitStore.call(void 0, { ssrCookies, storageKey: kc.storageKey })));
437
+ var getKheopskit$ = (config, options = {}) => {
438
+ 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 })));
245
441
  if (kc.debug) console.debug("[kheopskit] config", kc);
246
442
  if (kc.debug && typeof window === "undefined" && ssrCookies === void 0) {
247
443
  console.warn(
@@ -250,16 +446,16 @@ var getKheopskit$ = (config, ssrCookies, existingStore) => {
250
446
  }
251
447
  const cachedState = store2.getCachedState();
252
448
  const cachedWallets = cachedState.wallets.map((w) => {
253
- const wallet = _chunkTMAPQWW2js.hydrateWallet.call(void 0, w);
449
+ const wallet = _chunkB4L6GAYDjs.hydrateWallet.call(void 0, w);
254
450
  if (!wallet.icon) {
255
- const cachedIcon = _chunkTMAPQWW2js.getCachedIcon.call(void 0, wallet.id);
451
+ const cachedIcon = _chunkB4L6GAYDjs.getCachedIcon.call(void 0, wallet.id);
256
452
  if (cachedIcon) {
257
453
  return { ...wallet, icon: cachedIcon };
258
454
  }
259
455
  }
260
456
  return wallet;
261
457
  });
262
- const cachedAccounts = cachedState.accounts.filter((cached) => _chunkTMAPQWW2js.acceptsCachedAccount.call(void 0, cached, kc.platforms)).map(_chunkTMAPQWW2js.hydrateAccount);
458
+ const cachedAccounts = cachedState.accounts.filter((cached) => _chunkB4L6GAYDjs.acceptsCachedAccount.call(void 0, cached, kc.platforms)).map(_chunkB4L6GAYDjs.hydrateAccount);
263
459
  if (kc.debug && cachedWallets.length > 0) {
264
460
  console.debug("[kheopskit] hydrating from cache:", {
265
461
  wallets: cachedWallets.length,
@@ -288,7 +484,7 @@ var getKheopskit$ = (config, ssrCookies, existingStore) => {
288
484
  (live, cached) => ({
289
485
  ...cached,
290
486
  // Priority: cached icon > localStorage cache > live icon
291
- icon: cached.icon || _chunkTMAPQWW2js.getCachedIcon.call(void 0, cached.id) || live.icon,
487
+ icon: cached.icon || _chunkB4L6GAYDjs.getCachedIcon.call(void 0, cached.id) || live.icon,
292
488
  // Use live wallet's connect/disconnect functions
293
489
  connect: live.connect,
294
490
  disconnect: live.disconnect
@@ -296,7 +492,7 @@ var getKheopskit$ = (config, ssrCookies, existingStore) => {
296
492
  // Transform cached-only items: add icon from localStorage cache
297
493
  (cached) => ({
298
494
  ...cached,
299
- icon: cached.icon || _chunkTMAPQWW2js.getCachedIcon.call(void 0, cached.id) || ""
495
+ icon: cached.icon || _chunkB4L6GAYDjs.getCachedIcon.call(void 0, cached.id) || ""
300
496
  })
301
497
  );
302
498
  const bufferedAccounts$ = createAccountHydrationBuffer(
@@ -333,8 +529,8 @@ var getKheopskit$ = (config, ssrCookies, existingStore) => {
333
529
  }
334
530
  return {
335
531
  config: kc,
336
- wallets: [...wallets.items].sort(_chunkTMAPQWW2js.sortWallets),
337
- accounts: [...accounts.items].sort(_chunkTMAPQWW2js.sortAccounts),
532
+ wallets: [...wallets.items].sort(_chunkB4L6GAYDjs.sortWallets),
533
+ accounts: [...accounts.items].sort(_chunkB4L6GAYDjs.sortAccounts),
338
534
  isHydrating: wallets.isHydrating || accounts.isHydrating
339
535
  };
340
536
  })
@@ -349,13 +545,16 @@ var getKheopskit$ = (config, ssrCookies, existingStore) => {
349
545
  ),
350
546
  // Debounce to avoid excessive writes
351
547
  _rxjs.debounceTime.call(void 0, 1e3),
352
- // Only persist if state actually changed
548
+ // Only persist if the serialized snapshot would actually change.
549
+ // Compare the persisted fields (not just ids): an Ethereum chain switch
550
+ // keeps the same account id but changes the cached chainId, so an
551
+ // id-only comparator would skip persisting it.
353
552
  _rxjs.distinctUntilChanged.call(void 0, (prev, curr) => {
354
- const prevWalletIds = prev.wallets.items.map((w) => w.id);
355
- const currWalletIds = curr.wallets.items.map((w) => w.id);
356
- const prevAccountIds = prev.accounts.items.map((a) => a.id);
357
- const currAccountIds = curr.accounts.items.map((a) => a.id);
358
- return arraysEqual(prevWalletIds, currWalletIds) && arraysEqual(prevAccountIds, currAccountIds);
553
+ const prevWalletKeys = prev.wallets.items.map(walletPersistKey);
554
+ const currWalletKeys = curr.wallets.items.map(walletPersistKey);
555
+ const prevAccountKeys = prev.accounts.items.map(accountChangeKey);
556
+ const currAccountKeys = curr.accounts.items.map(accountChangeKey);
557
+ return arraysEqual(prevWalletKeys, currWalletKeys) && arraysEqual(prevAccountKeys, currAccountKeys);
359
558
  })
360
559
  ).subscribe(({ wallets, accounts }) => {
361
560
  const connectedWalletIds = new Set(
@@ -371,8 +570,8 @@ var getKheopskit$ = (config, ssrCookies, existingStore) => {
371
570
  });
372
571
  }
373
572
  store2.setCachedState(
374
- wallets.items.map(_chunkTMAPQWW2js.serializeWallet),
375
- relevantAccounts.map(_chunkTMAPQWW2js.serializeAccount)
573
+ wallets.items.map(_chunkB4L6GAYDjs.serializeWallet),
574
+ relevantAccounts.map(_chunkB4L6GAYDjs.serializeAccount)
376
575
  );
377
576
  const icons = {};
378
577
  for (const wallet of wallets.items) {
@@ -380,7 +579,7 @@ var getKheopskit$ = (config, ssrCookies, existingStore) => {
380
579
  icons[wallet.id] = wallet.icon;
381
580
  }
382
581
  }
383
- _chunkTMAPQWW2js.setCachedIcons.call(void 0, icons);
582
+ _chunkB4L6GAYDjs.setCachedIcons.call(void 0, icons);
384
583
  });
385
584
  return () => {
386
585
  subscription.unsubscribe();
@@ -397,24 +596,27 @@ var getKheopskit$ = (config, ssrCookies, existingStore) => {
397
596
  );
398
597
  };
399
598
  var arraysEqual = (a, b) => a.length === b.length && a.every((v, i) => v === b[i]);
400
- var statesEqual = (a, b) => a.isHydrating === b.isHydrating && a.wallets.length === b.wallets.length && a.accounts.length === b.accounts.length && a.wallets.every(
401
- (w, i) => w.id === _optionalChain([b, 'access', _4 => _4.wallets, 'access', _5 => _5[i], 'optionalAccess', _6 => _6.id]) && w.isConnected === _optionalChain([b, 'access', _7 => _7.wallets, 'access', _8 => _8[i], 'optionalAccess', _9 => _9.isConnected])
402
- ) && a.accounts.every((acc, i) => {
403
- const other = b.accounts[i];
404
- if (acc.id !== _optionalChain([other, 'optionalAccess', _10 => _10.id])) return false;
405
- switch (acc.platform) {
599
+ var accountChangeKey = (account) => {
600
+ switch (account.platform) {
406
601
  case "ethereum":
407
- return acc.chainId === other.chainId;
602
+ return `${account.id}|${_nullishCoalesce(account.chainId, () => ( ""))}`;
408
603
  case "polkadot":
409
- return acc.type === other.type;
604
+ return `${account.id}|${_nullishCoalesce(account.type, () => ( ""))}`;
410
605
  case "solana":
411
- return arraysEqual(
412
- _nullishCoalesce(acc.chains, () => ( [])),
413
- _nullishCoalesce(other.chains, () => ( []))
414
- );
606
+ return `${account.id}|${(_nullishCoalesce(account.chains, () => ( []))).join(",")}`;
415
607
  default:
416
- return true;
608
+ return account.id;
417
609
  }
610
+ };
611
+ var walletPlatforms = (wallet) => _chunk4ENHC7G4js.isWalletConnectWallet.call(void 0, wallet) ? wallet.platforms.join(",") : "";
612
+ var walletPersistKey = (wallet) => `${wallet.id}|${wallet.isConnected ? 1 : 0}|${wallet.name}`;
613
+ var walletUiKey = (wallet) => `${walletPersistKey(wallet)}|${wallet.icon}|${walletPlatforms(wallet)}`;
614
+ 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) => {
615
+ const other = b.wallets[i];
616
+ return !!other && walletUiKey(w) === walletUiKey(other);
617
+ }) && a.accounts.every((acc, i) => {
618
+ const other = b.accounts[i];
619
+ return !!other && accountChangeKey(acc) === accountChangeKey(other);
418
620
  });
419
621
 
420
622
 
@@ -429,5 +631,9 @@ var statesEqual = (a, b) => a.isHydrating === b.isHydrating && a.wallets.length
429
631
 
430
632
 
431
633
 
432
- exports.DEFAULT_STORAGE_KEY = _chunkNU46D4MZjs.DEFAULT_STORAGE_KEY; exports.KheopskitError = _chunkNU46D4MZjs.KheopskitError; exports.clearAllCachedObservables = _chunkSIUWQBT4js.clearAllCachedObservables; exports.createKheopskitStore = _chunkNU46D4MZjs.createKheopskitStore; exports.getDefaultStore = _chunkNU46D4MZjs.getDefaultStore; exports.getKheopskit$ = getKheopskit$; exports.getWalletAccountId = _chunkNU46D4MZjs.getWalletAccountId; exports.getWalletId = _chunkSIUWQBT4js.getWalletId; exports.isValidAddress = _chunkNU46D4MZjs.isValidAddress; exports.parseWalletId = _chunkSIUWQBT4js.parseWalletId; exports.resetAppKitCache = _chunkNU46D4MZjs.resetAppKitCache; exports.resolveConfig = _chunkNU46D4MZjs.resolveConfig;
634
+
635
+
636
+
637
+
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;
433
639
  //# sourceMappingURL=index.js.map