@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.
- package/dist/{chunk-7QSGAJ4A.mjs → chunk-3Y5N4N3Q.mjs} +119 -62
- package/dist/chunk-3Y5N4N3Q.mjs.map +1 -0
- package/dist/chunk-DF7EKK4G.mjs +106 -0
- package/dist/chunk-DF7EKK4G.mjs.map +1 -0
- package/dist/chunk-EH73P476.js +106 -0
- package/dist/chunk-EH73P476.js.map +1 -0
- package/dist/chunk-JVSCMJY5.mjs +147 -0
- package/dist/chunk-JVSCMJY5.mjs.map +1 -0
- package/dist/chunk-P7BPHHVV.js +76 -0
- package/dist/chunk-P7BPHHVV.js.map +1 -0
- package/dist/{chunk-4ENHC7G4.js → chunk-SO64R7Z6.js} +114 -57
- package/dist/chunk-SO64R7Z6.js.map +1 -0
- package/dist/chunk-WOPCW2OX.mjs +76 -0
- package/dist/chunk-WOPCW2OX.mjs.map +1 -0
- package/dist/chunk-XOGQMEV2.js +147 -0
- package/dist/chunk-XOGQMEV2.js.map +1 -0
- package/dist/ethereum.d.mts +2 -2
- package/dist/ethereum.d.ts +2 -2
- package/dist/ethereum.js +55 -115
- package/dist/ethereum.js.map +1 -1
- package/dist/ethereum.mjs +55 -115
- package/dist/ethereum.mjs.map +1 -1
- package/dist/index.d.mts +59 -3
- package/dist/index.d.ts +59 -3
- package/dist/index.js +442 -61
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +429 -48
- package/dist/index.mjs.map +1 -1
- package/dist/internal.d.mts +2 -39
- package/dist/internal.d.ts +2 -39
- package/dist/internal.js +3 -15
- package/dist/internal.js.map +1 -1
- package/dist/internal.mjs +6 -18
- package/dist/polkadot.d.mts +2 -2
- package/dist/polkadot.d.ts +2 -2
- package/dist/polkadot.js +75 -148
- package/dist/polkadot.js.map +1 -1
- package/dist/polkadot.mjs +76 -149
- package/dist/polkadot.mjs.map +1 -1
- package/dist/solana.d.mts +2 -2
- package/dist/solana.d.ts +2 -2
- package/dist/solana.js +90 -158
- package/dist/solana.js.map +1 -1
- package/dist/solana.mjs +86 -154
- package/dist/solana.mjs.map +1 -1
- package/dist/{types-C7V7DGlg.d.ts → types-0iDBydsK.d.mts} +24 -46
- package/dist/{types-C7V7DGlg.d.mts → types-0iDBydsK.d.ts} +24 -46
- package/package.json +1 -1
- package/dist/chunk-4ENHC7G4.js.map +0 -1
- package/dist/chunk-6XAZANB5.mjs +0 -450
- package/dist/chunk-6XAZANB5.mjs.map +0 -1
- package/dist/chunk-7QSGAJ4A.mjs.map +0 -1
- package/dist/chunk-B4L6GAYD.js +0 -179
- package/dist/chunk-B4L6GAYD.js.map +0 -1
- package/dist/chunk-XQWJM3KC.js +0 -450
- package/dist/chunk-XQWJM3KC.js.map +0 -1
- package/dist/chunk-YDLCHYHH.mjs +0 -179
- 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
|
-
|
|
73
|
-
`accounts:${
|
|
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:
|
|
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) =>
|
|
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(
|
|
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
|
-
|
|
379
|
-
|
|
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
|
|
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(
|
|
801
|
+
return all.sort(sortWallets);
|
|
397
802
|
})
|
|
398
803
|
// Note: No startWith([]) here - the hydration buffer handles initial state
|
|
399
804
|
);
|
|
400
|
-
const
|
|
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',
|
|
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',
|
|
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
|
|
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 =
|
|
440
|
-
const
|
|
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
|
|
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,
|
|
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 ||
|
|
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 ||
|
|
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(
|
|
533
|
-
accounts: [...accounts.items].sort(
|
|
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
|
-
|
|
573
|
-
wallets.items.map(
|
|
574
|
-
relevantAccounts.map(
|
|
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
|
-
|
|
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) =>
|
|
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
|
-
|
|
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
|