@kheopskit/core 0.0.21 → 0.0.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -1,9 +1,9 @@
1
- import { Observable } from 'rxjs';
2
1
  import { AppKit, ThemeMode, ThemeVariables } from '@reown/appkit/core';
3
2
  import { AppKitNetwork } from '@reown/appkit/networks';
4
3
  import { Metadata } from '@walletconnect/universal-provider';
5
4
  import { InjectedExtension, InjectedPolkadotAccount } from 'polkadot-api/pjs-signer';
6
5
  import { EIP1193Provider, WalletClient, CustomTransport, Account } from 'viem';
6
+ import { Observable } from 'rxjs';
7
7
 
8
8
  type WalletAccountId = string;
9
9
 
@@ -94,6 +94,8 @@ type EthereumAccount = {
94
94
  };
95
95
  type WalletAccount = PolkadotAccount | EthereumAccount;
96
96
 
97
+ declare const resolveConfig: (config: Partial<KheopskitConfig> | undefined) => KheopskitConfig;
98
+
97
99
  type KheopskitState = {
98
100
  wallets: Wallet[];
99
101
  accounts: WalletAccount[];
@@ -101,6 +103,4 @@ type KheopskitState = {
101
103
  };
102
104
  declare const getKheopskit$: (config?: Partial<KheopskitConfig>) => Observable<KheopskitState>;
103
105
 
104
- declare const resolveConfig: (config: Partial<KheopskitConfig> | undefined) => KheopskitConfig;
105
-
106
106
  export { type EthereumAccount, type EthereumAppKitWallet, type EthereumInjectedWallet, type EthereumWallet, type KheopskitConfig, type KheopskitState, type PolkadotAccount, type PolkadotAppKitWallet, type PolkadotInjectedWallet, type PolkadotWallet, type Wallet, type WalletAccount, type WalletPlatform, getKheopskit$, resolveConfig };
package/dist/index.d.ts CHANGED
@@ -1,9 +1,9 @@
1
- import { Observable } from 'rxjs';
2
1
  import { AppKit, ThemeMode, ThemeVariables } from '@reown/appkit/core';
3
2
  import { AppKitNetwork } from '@reown/appkit/networks';
4
3
  import { Metadata } from '@walletconnect/universal-provider';
5
4
  import { InjectedExtension, InjectedPolkadotAccount } from 'polkadot-api/pjs-signer';
6
5
  import { EIP1193Provider, WalletClient, CustomTransport, Account } from 'viem';
6
+ import { Observable } from 'rxjs';
7
7
 
8
8
  type WalletAccountId = string;
9
9
 
@@ -94,6 +94,8 @@ type EthereumAccount = {
94
94
  };
95
95
  type WalletAccount = PolkadotAccount | EthereumAccount;
96
96
 
97
+ declare const resolveConfig: (config: Partial<KheopskitConfig> | undefined) => KheopskitConfig;
98
+
97
99
  type KheopskitState = {
98
100
  wallets: Wallet[];
99
101
  accounts: WalletAccount[];
@@ -101,6 +103,4 @@ type KheopskitState = {
101
103
  };
102
104
  declare const getKheopskit$: (config?: Partial<KheopskitConfig>) => Observable<KheopskitState>;
103
105
 
104
- declare const resolveConfig: (config: Partial<KheopskitConfig> | undefined) => KheopskitConfig;
105
-
106
106
  export { type EthereumAccount, type EthereumAppKitWallet, type EthereumInjectedWallet, type EthereumWallet, type KheopskitConfig, type KheopskitState, type PolkadotAccount, type PolkadotAppKitWallet, type PolkadotInjectedWallet, type PolkadotWallet, type Wallet, type WalletAccount, type WalletPlatform, getKheopskit$, resolveConfig };
package/dist/index.js CHANGED
@@ -25,6 +25,19 @@ __export(index_exports, {
25
25
  });
26
26
  module.exports = __toCommonJS(index_exports);
27
27
 
28
+ // src/api/config.ts
29
+ var DEFAULT_CONFIG = {
30
+ autoReconnect: true,
31
+ platforms: ["polkadot"],
32
+ debug: false
33
+ };
34
+ var resolveConfig = (config) => {
35
+ return Object.assign({}, DEFAULT_CONFIG, config);
36
+ };
37
+
38
+ // src/api/kheopskit.ts
39
+ var import_rxjs10 = require("rxjs");
40
+
28
41
  // src/utils/logObservable.ts
29
42
  var import_rxjs = require("rxjs");
30
43
  var logObservable = (label, opts) => (0, import_rxjs.tap)((value) => {
@@ -35,8 +48,8 @@ var logObservable = (label, opts) => (0, import_rxjs.tap)((value) => {
35
48
  else console.debug(text);
36
49
  });
37
50
 
38
- // src/api/kheopskit.ts
39
- var import_rxjs10 = require("rxjs");
51
+ // src/api/accounts.ts
52
+ var import_rxjs5 = require("rxjs");
40
53
 
41
54
  // src/utils/sortAccounts.ts
42
55
  var sortAccounts = (a1, a2) => {
@@ -62,8 +75,9 @@ var sortAccounts = (a1, a2) => {
62
75
  return 0;
63
76
  };
64
77
 
65
- // src/api/accounts.ts
66
- var import_rxjs5 = require("rxjs");
78
+ // src/api/ethereum/accounts.ts
79
+ var import_rxjs3 = require("rxjs");
80
+ var import_viem2 = require("viem");
67
81
 
68
82
  // src/utils/createStore.ts
69
83
  var import_rxjs2 = require("rxjs");
@@ -122,6 +136,9 @@ var isValidAddress = (address) => {
122
136
  return address.startsWith("0x") ? isEthereumAddress(address) : isSs58Address(address);
123
137
  };
124
138
 
139
+ // src/utils/isWalletPlatform.ts
140
+ var isWalletPlatform = (platform) => typeof platform === "string" && ["polkadot", "ethereum"].includes(platform);
141
+
125
142
  // src/utils/WalletAccountId.ts
126
143
  var getWalletAccountId = (walletId, address) => {
127
144
  if (!walletId) throw new Error("Missing walletId");
@@ -129,9 +146,6 @@ var getWalletAccountId = (walletId, address) => {
129
146
  return `${walletId}::${address}`;
130
147
  };
131
148
 
132
- // src/utils/isWalletPlatform.ts
133
- var isWalletPlatform = (platform) => typeof platform === "string" && ["polkadot", "ethereum"].includes(platform);
134
-
135
149
  // src/utils/getCachedObservable.ts
136
150
  var CACHE = /* @__PURE__ */ new Map();
137
151
  var getCachedObservable$ = (key, create) => {
@@ -140,8 +154,6 @@ var getCachedObservable$ = (key, create) => {
140
154
  };
141
155
 
142
156
  // src/api/ethereum/accounts.ts
143
- var import_rxjs3 = require("rxjs");
144
- var import_viem2 = require("viem");
145
157
  var getInjectedWalletAccounts$ = (wallet) => {
146
158
  if (!wallet.isConnected) return (0, import_rxjs3.of)([]);
147
159
  return getCachedObservable$(
@@ -215,7 +227,7 @@ var getAppKitAccounts$ = (wallet) => {
215
227
  (caipNetworkId) => (0, import_viem2.custom)(
216
228
  wrapWalletConnectProvider(
217
229
  provider,
218
- // biome-ignore lint/style/noNonNullAssertion: <explanation>
230
+ // biome-ignore lint/style/noNonNullAssertion: legacy
219
231
  provider.session.topic,
220
232
  caipNetworkId
221
233
  )
@@ -406,15 +418,8 @@ var getAccounts$ = (config, wallets) => {
406
418
  }).pipe((0, import_rxjs5.shareReplay)({ refCount: true, bufferSize: 1 }));
407
419
  };
408
420
 
409
- // src/api/config.ts
410
- var DEFAULT_CONFIG = {
411
- autoReconnect: true,
412
- platforms: ["polkadot"],
413
- debug: false
414
- };
415
- var resolveConfig = (config) => {
416
- return Object.assign({}, DEFAULT_CONFIG, config);
417
- };
421
+ // src/api/wallets.ts
422
+ var import_rxjs9 = require("rxjs");
418
423
 
419
424
  // src/utils/sortWallets.ts
420
425
  var sortWallets = (w1, w2) => {
@@ -426,8 +431,12 @@ var sortWallets = (w1, w2) => {
426
431
  return w1.name.localeCompare(w2.name);
427
432
  };
428
433
 
429
- // src/api/wallets.ts
430
- var import_rxjs9 = require("rxjs");
434
+ // src/api/ethereum/wallets.ts
435
+ var import_mipd = require("mipd");
436
+ var import_rxjs7 = require("rxjs");
437
+
438
+ // src/api/store.ts
439
+ var import_lodash = require("lodash");
431
440
 
432
441
  // src/utils/WalletId.ts
433
442
  var getWalletId = (platform, identifier) => {
@@ -444,7 +453,6 @@ var parseWalletId = (walletId) => {
444
453
  };
445
454
 
446
455
  // src/api/store.ts
447
- var import_lodash = require("lodash");
448
456
  var LOCAL_STORAGE_KEY = "kheopskit";
449
457
  var DEFAULT_SETTINGS = {};
450
458
  var storage = createStore(LOCAL_STORAGE_KEY, DEFAULT_SETTINGS);
@@ -469,10 +477,6 @@ var store = {
469
477
  removeEnabledWalletId
470
478
  };
471
479
 
472
- // src/api/ethereum/wallets.ts
473
- var import_mipd = require("mipd");
474
- var import_rxjs7 = require("rxjs");
475
-
476
480
  // src/api/appKit.ts
477
481
  var import_core = require("@reown/appkit/core");
478
482
  var import_rxjs6 = require("rxjs");
@@ -640,6 +644,11 @@ var getEthereumWallets$ = (config) => {
640
644
  }).pipe((0, import_rxjs7.shareReplay)({ refCount: true, bufferSize: 1 }));
641
645
  };
642
646
 
647
+ // src/api/polkadot/wallets.ts
648
+ var import_lodash2 = require("lodash");
649
+ var import_pjs_signer2 = require("polkadot-api/pjs-signer");
650
+ var import_rxjs8 = require("rxjs");
651
+
643
652
  // src/utils/polkadotExtensions.ts
644
653
  var POLKADOT_EXTENSIONS = {
645
654
  talisman: {
@@ -661,10 +670,29 @@ var POLKADOT_EXTENSIONS = {
661
670
  };
662
671
 
663
672
  // src/api/polkadot/wallets.ts
664
- var import_lodash2 = require("lodash");
665
- var import_pjs_signer2 = require("polkadot-api/pjs-signer");
666
- var import_rxjs8 = require("rxjs");
667
673
  var getInjectedWalletsIds = () => (0, import_pjs_signer2.getInjectedExtensions)().map((name) => getWalletId("polkadot", name));
674
+ var createWalletIdsPoller$ = () => {
675
+ return new import_rxjs8.Observable((subscriber) => {
676
+ subscriber.next(getInjectedWalletsIds());
677
+ const intervals = [100, 200, 300, 500];
678
+ let index = 0;
679
+ const poll = () => {
680
+ subscriber.next(getInjectedWalletsIds());
681
+ if (index < intervals.length) {
682
+ const delay = intervals[index++];
683
+ setTimeout(poll, delay);
684
+ }
685
+ };
686
+ if (intervals.length > 0) {
687
+ setTimeout(poll, intervals[index++] ?? 100);
688
+ }
689
+ return () => {
690
+ };
691
+ }).pipe(
692
+ (0, import_rxjs8.distinctUntilChanged)(import_lodash2.isEqual),
693
+ (0, import_rxjs8.shareReplay)({ refCount: true, bufferSize: 1 })
694
+ );
695
+ };
668
696
  var polkadotInjectedWallets$ = new import_rxjs8.Observable((subscriber) => {
669
697
  const enabledExtensions$ = new import_rxjs8.BehaviorSubject(/* @__PURE__ */ new Map());
670
698
  const connect = async (walletId) => {
@@ -685,11 +713,7 @@ var polkadotInjectedWallets$ = new import_rxjs8.Observable((subscriber) => {
685
713
  enabledExtensions$.next(newMap);
686
714
  store.removeEnabledWalletId(walletId);
687
715
  };
688
- const walletIds$ = (0, import_rxjs8.of)(0, 200, 500, 1e3).pipe(
689
- (0, import_rxjs8.mergeMap)((time) => (0, import_rxjs8.timer)(time)),
690
- (0, import_rxjs8.map)(() => getInjectedWalletsIds()),
691
- (0, import_rxjs8.distinctUntilChanged)(import_lodash2.isEqual)
692
- );
716
+ const walletIds$ = createWalletIdsPoller$();
693
717
  const subscription = (0, import_rxjs8.combineLatest)([walletIds$, enabledExtensions$]).pipe(
694
718
  (0, import_rxjs8.map)(([walletIds, enabledExtensions]) => {
695
719
  return walletIds.map((id) => {
@@ -756,8 +780,11 @@ var getWallets$ = (config) => {
756
780
  }
757
781
  );
758
782
  const wallets$ = observables.length ? (0, import_rxjs9.combineLatest)(observables).pipe(
759
- (0, import_rxjs9.map)((wallets) => wallets.flat().sort(sortWallets))
783
+ (0, import_rxjs9.map)((wallets) => wallets.flat().sort(sortWallets)),
784
+ // Emit empty array immediately so UI doesn't wait
785
+ (0, import_rxjs9.startWith)([])
760
786
  ) : (0, import_rxjs9.of)([]);
787
+ const reconnectingWallets = /* @__PURE__ */ new Set();
761
788
  const subAutoReconnect = (0, import_rxjs9.combineLatest)([wallets$, autoReconnectWalletIds$]).pipe(
762
789
  (0, import_rxjs9.filter)(([, walletIds]) => config.autoReconnect && !!walletIds?.length),
763
790
  (0, import_rxjs9.mergeMap)(
@@ -765,14 +792,16 @@ var getWallets$ = (config) => {
765
792
  ),
766
793
  (0, import_rxjs9.distinct)((w) => w.id)
767
794
  ).subscribe(async (wallet) => {
768
- if (wallet.isConnected) {
769
- console.warn("Wallet %s already connected", wallet.id);
795
+ if (wallet.isConnected || reconnectingWallets.has(wallet.id)) {
770
796
  return;
771
797
  }
798
+ reconnectingWallets.add(wallet.id);
772
799
  try {
773
800
  await wallet.connect();
774
801
  } catch (err) {
775
802
  console.error("Failed to reconnect wallet %s", wallet.id, { err });
803
+ } finally {
804
+ reconnectingWallets.delete(wallet.id);
776
805
  }
777
806
  });
778
807
  const subWallets = wallets$.subscribe(subscriber);
@@ -797,7 +826,8 @@ var getKheopskit$ = (config) => {
797
826
  subscription.unsubscribe();
798
827
  };
799
828
  }).pipe(
800
- (0, import_rxjs10.throttleTime)(50, void 0, { leading: true, trailing: true }),
829
+ (0, import_rxjs10.throttleTime)(16, void 0, { leading: true, trailing: true }),
830
+ // ~1 frame at 60fps
801
831
  logObservable("kheopskit$", { enabled: kc.debug, printValue: true }),
802
832
  (0, import_rxjs10.shareReplay)({ bufferSize: 1, refCount: true })
803
833
  );
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/utils/logObservable.ts","../src/api/kheopskit.ts","../src/utils/sortAccounts.ts","../src/api/accounts.ts","../src/utils/createStore.ts","../src/utils/isEthereumAddress.ts","../src/utils/isSs58Address.ts","../src/utils/isValidAddress.ts","../src/utils/WalletAccountId.ts","../src/utils/isWalletPlatform.ts","../src/utils/getCachedObservable.ts","../src/api/ethereum/accounts.ts","../src/api/polkadot/accounts.ts","../src/api/config.ts","../src/utils/sortWallets.ts","../src/api/wallets.ts","../src/utils/WalletId.ts","../src/api/store.ts","../src/api/ethereum/wallets.ts","../src/api/appKit.ts","../src/utils/polkadotExtensions.ts","../src/api/polkadot/wallets.ts"],"sourcesContent":["export * from \"./api\";\n","import { type MonoTypeOperatorFunction, tap } from \"rxjs\";\n\ntype Opts = {\n printValue?: boolean;\n enabled?: boolean;\n};\n\nexport const logObservable = <T>(\n label: string,\n opts?: Opts,\n): MonoTypeOperatorFunction<T> =>\n tap((value) => {\n const { printValue = false, enabled = true } = opts || {};\n\n if (!label || !enabled) return;\n\n const text = `[kheopskit] observable ${label} emit`;\n\n if (printValue) console.debug(text, value);\n else console.debug(text);\n });\n","import { logObservable } from \"@/utils/logObservable\";\nimport {\n Observable,\n combineLatest,\n map,\n shareReplay,\n throttleTime,\n} from \"rxjs\";\nimport { getAccounts$ } from \"./accounts\";\nimport { resolveConfig } from \"./config\";\nimport type { KheopskitConfig, Wallet, WalletAccount } from \"./types\";\nimport { getWallets$ } from \"./wallets\";\n\nexport type { KheopskitConfig } from \"./types\";\n\nexport type KheopskitState = {\n wallets: Wallet[];\n accounts: WalletAccount[];\n config: KheopskitConfig;\n};\n\nexport const getKheopskit$ = (config?: Partial<KheopskitConfig>) => {\n const kc = resolveConfig(config);\n\n console.debug(\"[kheopskit] config\", kc);\n\n return new Observable<KheopskitState>((subscriber) => {\n const wallets$ = getWallets$(kc);\n\n const subscription = combineLatest({\n wallets: wallets$,\n accounts: getAccounts$(kc, wallets$),\n })\n .pipe(map(({ wallets, accounts }) => ({ config: kc, wallets, accounts })))\n .subscribe(subscriber);\n\n return () => {\n subscription.unsubscribe();\n };\n }).pipe(\n throttleTime(50, undefined, { leading: true, trailing: true }),\n logObservable(\"kheopskit$\", { enabled: kc.debug, printValue: true }),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n};\n","import type { WalletAccount } from \"@/api\";\n\nexport const sortAccounts = (a1: WalletAccount, a2: WalletAccount) => {\n if (a1.platform === \"polkadot\") {\n if (a2.platform === \"polkadot\") {\n // sort by wallet name, fallback to address\n if (a1.walletName !== a2.walletName) {\n if (a1.walletName === \"talisman\") return -1;\n if (a2.walletName === \"talisman\") return 1;\n return a1.walletName.localeCompare(a2.walletName);\n }\n\n // sort by name, fallback to address\n return a1.name !== a2.name\n ? (a1.name ?? \"\").localeCompare(a2.name ?? \"\")\n : a1.address.localeCompare(a2.address);\n }\n\n return -1; // polkadot accounts first\n }\n\n if (a2.platform === \"ethereum\") {\n // sort by wallet name, fallback to address\n if (a1.walletName !== a2.walletName) {\n if (a1.walletName === \"Talisman\") return -1;\n if (a2.walletName === \"Talisman\") return 1;\n return a1.walletName.localeCompare(a2.walletName);\n }\n\n // keep order as provider by the wallet\n return 0;\n }\n\n // impossible case\n return 0;\n};\n","import { sortAccounts } from \"@/utils/sortAccounts\";\nimport { Observable, combineLatest, map, of, shareReplay } from \"rxjs\";\nimport { getEthereumAccounts$ } from \"./ethereum/accounts\";\nimport { getPolkadotAccounts$ } from \"./polkadot/accounts\";\nimport type { KheopskitConfig, Wallet, WalletAccount } from \"./types\";\n\nexport const getAccounts$ = (\n config: KheopskitConfig,\n wallets: Observable<Wallet[]>,\n) => {\n return new Observable<WalletAccount[]>((subscriber) => {\n const sources = config.platforms.map<Observable<WalletAccount[]>>(\n (platform) => {\n switch (platform) {\n case \"polkadot\":\n return getPolkadotAccounts$(\n wallets.pipe(\n map((w) => w.filter((w) => w.platform === \"polkadot\")),\n ),\n );\n case \"ethereum\":\n return getEthereumAccounts$(\n wallets.pipe(\n map((w) => w.filter((w) => w.platform === \"ethereum\")),\n ),\n );\n }\n },\n );\n\n const accounts$ = sources.length\n ? combineLatest(sources).pipe(\n map((accounts) => accounts.flat().sort(sortAccounts)),\n )\n : of([]);\n\n const sub = accounts$.subscribe(subscriber);\n\n return () => {\n sub.unsubscribe();\n };\n }).pipe(shareReplay({ refCount: true, bufferSize: 1 }));\n};\n","import { BehaviorSubject, filter, fromEvent, map } from \"rxjs\";\n\nexport const createStore = <T>(key: string, defaultValue: T) => {\n const subject = new BehaviorSubject<T>(getStoredData(key, defaultValue));\n\n // Cross-tab sync via 'storage' event (won't fire if key is updated from same tab)\n fromEvent<StorageEvent>(window, \"storage\")\n .pipe(\n filter((event) => event.key === key),\n map((event) => parseData(event.newValue, defaultValue)),\n )\n .subscribe((newValue) => subject.next(newValue));\n\n const update = (val: T) => {\n setStoredData(key, val);\n subject.next(val);\n };\n\n return {\n observable: subject.asObservable(),\n set: (val: T) => update(val),\n mutate: (transform: (prev: T) => T) =>\n update(transform(subject.getValue())),\n get: () => structuredClone(subject.getValue()),\n };\n};\n\nconst parseData = <T>(str: string | null, defaultValue: T): T => {\n try {\n if (str) return JSON.parse(str);\n } catch {\n // invalid data\n }\n return defaultValue;\n};\n\nconst getStoredData = <T>(key: string, defaultValue: T): T => {\n const str = localStorage.getItem(key);\n return parseData(str, defaultValue);\n};\n\nconst setStoredData = <T>(key: string, val: T) => {\n const str = JSON.stringify(val);\n localStorage.setItem(key, str);\n};\n","import { isAddress } from \"viem\";\n\nexport const isEthereumAddress = (address: string): boolean =>\n isAddress(address);\n","import { AccountId, type SS58String } from \"polkadot-api\";\n\nconst accountIdEncoder = AccountId().enc;\n\nexport const isSs58Address = (\n address: SS58String | string,\n): address is SS58String => {\n try {\n if (!address) return false;\n accountIdEncoder(address);\n return true;\n } catch {\n return false;\n }\n};\n","import { isEthereumAddress } from \"./isEthereumAddress\";\nimport { isSs58Address } from \"./isSs58Address\";\n\nexport const isValidAddress = (address: string): boolean => {\n return address.startsWith(\"0x\")\n ? isEthereumAddress(address)\n : isSs58Address(address);\n};\n","import type { SS58String } from \"polkadot-api\";\n\nimport { isValidAddress } from \"./isValidAddress\";\n\nexport type WalletAccountId = string;\n\nexport const getWalletAccountId = (\n walletId: string,\n address: SS58String,\n): WalletAccountId => {\n if (!walletId) throw new Error(\"Missing walletId\");\n if (!isValidAddress(address)) throw new Error(\"Invalid address\");\n return `${walletId}::${address}`;\n};\n\nexport const parseWalletAccountId = (accountId: string) => {\n if (!accountId) throw new Error(\"Invalid walletAccountId\");\n const [walletId, address] = accountId.split(\"::\");\n if (!walletId) throw new Error(\"Missing walletId\");\n if (!address || !isValidAddress(address)) throw new Error(\"Invalid address\");\n return { walletId, address };\n};\n","import type { WalletPlatform } from \"@/api/types\";\n\nexport const isWalletPlatform = (\n platform: unknown,\n): platform is WalletPlatform =>\n typeof platform === \"string\" &&\n [\"polkadot\", \"ethereum\"].includes(platform as WalletPlatform);\n","import type { Observable } from \"rxjs\";\n\nconst CACHE = new Map<string, Observable<unknown>>();\n\nexport const getCachedObservable$ = <T, Obs = Observable<T>>(\n key: string,\n create: () => Obs,\n): Obs => {\n if (!CACHE.has(key)) CACHE.set(key, create() as Observable<unknown>);\n\n return CACHE.get(key) as Obs;\n};\n","import type {\n EthereumAccount,\n EthereumAppKitWallet,\n EthereumInjectedWallet,\n EthereumWallet,\n} from \"@/api/types\";\nimport { getWalletAccountId } from \"@/utils\";\nimport { getCachedObservable$ } from \"@/utils/getCachedObservable\";\nimport type UniversalProvider from \"@walletconnect/universal-provider\";\nimport {\n Observable,\n ReplaySubject,\n combineLatest,\n distinctUntilChanged,\n map,\n of,\n shareReplay,\n switchMap,\n} from \"rxjs\";\nimport {\n type EIP1193Provider,\n createWalletClient,\n custom,\n getAddress,\n} from \"viem\";\n\nconst getInjectedWalletAccounts$ = (\n wallet: EthereumInjectedWallet,\n): Observable<EthereumAccount[]> => {\n if (!wallet.isConnected) return of([]);\n\n return getCachedObservable$(`accounts:${wallet.id}`, () =>\n new Observable<EthereumAccount[]>((subscriber) => {\n const getAccount = (address: string, i: number): EthereumAccount => {\n // console.log(\"[Injected] createWalletClient\", address);\n const client = createWalletClient({\n account: address as `0x${string}`,\n transport: custom(wallet.provider as EIP1193Provider),\n });\n\n return {\n id: getWalletAccountId(wallet.id, address),\n platform: \"ethereum\",\n client,\n address: getAddress(address),\n walletName: wallet.name,\n walletId: wallet.id,\n isWalletDefault: i === 0,\n };\n };\n\n const handleAccountsChanged = (addresses: string[]) => {\n subscriber.next(addresses.map(getAccount));\n };\n\n // subscribe to changes\n wallet.provider.on(\"accountsChanged\", handleAccountsChanged);\n\n // initial value\n wallet.provider\n .request({ method: \"eth_accounts\" })\n .then((addresses: string[]) => {\n subscriber.next(addresses.map(getAccount));\n })\n .catch((err) => {\n console.error(\"Failed to get accounts\", err);\n subscriber.next([]);\n });\n\n return () => {\n wallet.provider.removeListener(\n \"accountsChanged\",\n handleAccountsChanged,\n );\n };\n }).pipe(shareReplay({ refCount: true, bufferSize: 1 })),\n );\n};\n\nconst wrapWalletConnectProvider = (\n provider: EIP1193Provider,\n sessionTopic: string,\n caipNetworkId: string,\n): EIP1193Provider => {\n return new Proxy(provider, {\n get(target, prop, receiver) {\n if (prop !== \"request\") return Reflect.get(target, prop, receiver);\n\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n return (args: any) => {\n // console.log(\"request\", { target, prop, receiver, caipNetworkId, args });\n\n if (args && typeof args === \"object\" && args.method) {\n if (!args.topic) args.topic = sessionTopic;\n if (!args.chainId) args.chainId = caipNetworkId;\n }\n return target.request(args);\n };\n },\n });\n};\n\nconst getAppKitAccounts$ = (\n wallet: EthereumAppKitWallet,\n): Observable<EthereumAccount[]> => {\n const account = wallet.appKit.getAccount(\"eip155\");\n const provider = wallet.appKit.getProvider<UniversalProvider>(\"eip155\");\n\n if (\n !wallet.isConnected ||\n !wallet.appKit ||\n !account?.allAccounts.length ||\n !provider?.session\n )\n return of([]);\n\n return getCachedObservable$(\"accounts:appKit\", () =>\n new Observable<EthereumAccount[]>((subscriber) => {\n const caipNetworkId$ = new ReplaySubject<string>(1);\n\n const handleChainChanged = (chainId: unknown) => {\n caipNetworkId$.next(`eip155:${chainId}`);\n };\n\n provider.on(\"chainChanged\", handleChainChanged);\n provider.request({ method: \"eth_chainId\" }).then(handleChainChanged);\n\n const sub = caipNetworkId$\n .pipe(\n distinctUntilChanged(),\n map((caipNetworkId) =>\n custom(\n wrapWalletConnectProvider(\n provider as EIP1193Provider,\n // biome-ignore lint/style/noNonNullAssertion: <explanation>\n provider.session!.topic,\n caipNetworkId,\n ),\n ),\n ),\n map((transport) =>\n account.allAccounts.map((acc, i): EthereumAccount => {\n // console.log(\"[AppKit] createWalletClient\", acc);\n const client = createWalletClient({\n account: acc.address as `0x${string}`,\n transport,\n });\n\n return {\n id: getWalletAccountId(wallet.id, acc.address),\n platform: \"ethereum\",\n walletName: wallet.name,\n walletId: wallet.id,\n address: acc.address as `0x${string}`,\n client,\n isWalletDefault: i === 0,\n };\n }),\n ),\n )\n .subscribe(subscriber);\n\n return () => {\n provider.off(\"chainChanged\", handleChainChanged);\n sub.unsubscribe();\n };\n }).pipe(shareReplay({ refCount: true, bufferSize: 1 })),\n );\n};\n\nexport const getEthereumAccounts$ = (\n ethereumWallets: Observable<EthereumWallet[]>,\n) =>\n new Observable<EthereumAccount[]>((subscriber) => {\n const sub = ethereumWallets\n .pipe(\n map((wallets) => wallets.filter((w) => w.isConnected)),\n switchMap((wallets) => {\n return wallets.length\n ? combineLatest([\n ...wallets\n .filter((w) => w.type === \"injected\")\n .map(getInjectedWalletAccounts$),\n ...wallets\n .filter((w) => w.type === \"appKit\")\n .map(getAppKitAccounts$),\n // todo appkit\n ])\n : of([]);\n }),\n map((accounts) => accounts.flat()),\n distinctUntilChanged(isSameAccountsList),\n )\n .subscribe(subscriber);\n\n return () => {\n sub.unsubscribe();\n };\n }).pipe(\n // logObservable(\"ethereumAccounts$\", true),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n\nconst isSameAccountsList = (a: EthereumAccount[], b: EthereumAccount[]) => {\n if (a.length !== b.length) return false;\n return a.every((account, i) => account.id === b[i]?.id);\n};\n","import type {\n PolkadotAccount,\n PolkadotAppKitWallet,\n PolkadotInjectedWallet,\n PolkadotWallet,\n} from \"@/api/types\";\nimport { getWalletAccountId } from \"@/utils\";\nimport type { AppKit } from \"@reown/appkit/core\";\nimport type UniversalProvider from \"@walletconnect/universal-provider\";\nimport {\n type InjectedExtension,\n type InjectedPolkadotAccount,\n getPolkadotSignerFromPjs,\n} from \"polkadot-api/pjs-signer\";\nimport {\n Observable,\n combineLatest,\n distinctUntilChanged,\n map,\n of,\n shareReplay,\n switchMap,\n} from \"rxjs\";\n\nconst getInjectedWalletAccounts$ = (\n wallet: PolkadotInjectedWallet,\n): Observable<PolkadotAccount[]> => {\n if (!wallet.isConnected) return of([]);\n\n return new Observable<PolkadotAccount[]>((subscriber) => {\n const getAccount = (account: InjectedPolkadotAccount): PolkadotAccount => ({\n id: getWalletAccountId(wallet.id, account.address),\n ...account,\n platform: \"polkadot\",\n walletName: wallet.name,\n walletId: wallet.id,\n });\n\n const extension = wallet.extension as InjectedExtension;\n\n // subscribe to changes\n const unsubscribe = extension.subscribe((accounts) => {\n subscriber.next(accounts.map(getAccount));\n });\n\n // initial value\n subscriber.next(extension.getAccounts().map(getAccount));\n\n return () => {\n return unsubscribe();\n };\n });\n};\n\nconst getAppKitPolkadotSigner = (appKit: AppKit, address: string) => {\n const provider = appKit.getProvider<UniversalProvider>(\"polkadot\");\n if (!provider) throw new Error(\"No provider found\");\n if (!provider.session) throw new Error(\"No session found\");\n\n return getPolkadotSignerFromPjs(\n address,\n (transactionPayload) => {\n if (!provider.session) throw new Error(\"No session found\");\n\n return provider.client.request({\n topic: provider.session.topic,\n chainId: `polkadot:${transactionPayload.genesisHash.substring(2, 34)}`,\n request: {\n method: \"polkadot_signTransaction\",\n params: {\n address,\n transactionPayload,\n },\n },\n });\n },\n async ({ address, data }) => {\n if (!provider.session) throw new Error(\"No session found\");\n const networks = appKit.getCaipNetworks(\"polkadot\");\n const chainId = networks[0]?.caipNetworkId;\n if (!chainId) throw new Error(\"No chainId found\");\n\n return provider.client.request({\n topic: provider.session.topic,\n chainId,\n request: {\n method: \"polkadot_signMessage\",\n params: {\n address,\n message: data,\n },\n },\n });\n },\n );\n};\n\nconst getAppKitAccounts$ = (wallet: PolkadotAppKitWallet) => {\n const account = wallet.appKit.getAccount(\"polkadot\");\n const provider = wallet.appKit.getProvider<UniversalProvider>(\"polkadot\");\n\n if (\n !wallet.isConnected ||\n !wallet.appKit ||\n !account?.allAccounts.length ||\n !provider?.session\n )\n return of([]);\n\n return of(\n account.allAccounts.map(\n (acc): PolkadotAccount => ({\n id: getWalletAccountId(wallet.id, acc.address),\n platform: \"polkadot\",\n walletName: wallet.name,\n walletId: wallet.id,\n address: acc.address,\n polkadotSigner: getAppKitPolkadotSigner(wallet.appKit, acc.address),\n genesisHash: null,\n name: `${wallet.name} Polkadot`,\n type: \"sr25519\",\n }),\n ),\n );\n};\n\nexport const getPolkadotAccounts$ = (\n polkadotWallets$: Observable<PolkadotWallet[]>,\n) =>\n new Observable<PolkadotAccount[]>((subscriber) => {\n const sub = polkadotWallets$\n .pipe(\n map((wallets) => wallets.filter((w) => w.isConnected)),\n switchMap((wallets) =>\n wallets.length\n ? combineLatest([\n ...wallets\n .filter((w) => w.type === \"injected\")\n .map(getInjectedWalletAccounts$),\n ...wallets\n .filter((w) => w.type === \"appKit\")\n .map(getAppKitAccounts$),\n ])\n : of([]),\n ),\n map((accounts) => accounts.flat()),\n distinctUntilChanged(isSameAccountsList),\n )\n .subscribe(subscriber);\n\n return () => {\n sub.unsubscribe();\n };\n }).pipe(shareReplay({ refCount: true, bufferSize: 1 }));\n\nconst isSameAccountsList = (a: PolkadotAccount[], b: PolkadotAccount[]) => {\n if (a.length !== b.length) return false;\n return a.every((account, i) => account.id === b[i]?.id);\n};\n","import type { KheopskitConfig } from \"./types\";\n\nconst DEFAULT_CONFIG: KheopskitConfig = {\n autoReconnect: true,\n platforms: [\"polkadot\"],\n debug: false,\n};\n\nexport const resolveConfig = (\n config: Partial<KheopskitConfig> | undefined,\n): KheopskitConfig => {\n return Object.assign({}, DEFAULT_CONFIG, config);\n};\n","import type { Wallet } from \"@/api\";\n\nexport const sortWallets = (w1: Wallet, w2: Wallet) => {\n // Sort by platform first: polkadot first, then ethereum\n if (w1.platform !== w2.platform) {\n return w1.platform === \"polkadot\" ? -1 : 1;\n }\n\n // Sort by name, but Talisman first\n if (w1.name.toLowerCase() === \"talisman\") return -1;\n if (w2.name.toLowerCase() === \"talisman\") return 1;\n\n return w1.name.localeCompare(w2.name);\n};\n","import { sortWallets } from \"@/utils/sortWallets\";\nimport {\n Observable,\n combineLatest,\n distinct,\n filter,\n map,\n mergeMap,\n of,\n shareReplay,\n take,\n} from \"rxjs\";\nimport { getEthereumWallets$ } from \"./ethereum/wallets\";\nimport { getPolkadotWallets$ } from \"./polkadot/wallets\";\nimport { store } from \"./store\";\nimport type { KheopskitConfig, Wallet } from \"./types\";\n\n// lock the list of wallets to auto reconnect on first call\nconst autoReconnectWalletIds$ = store.observable.pipe(\n map((s) => s.autoReconnect ?? []),\n take(1),\n shareReplay(1),\n);\n\nexport const getWallets$ = (config: KheopskitConfig) => {\n return new Observable<Wallet[]>((subscriber) => {\n const observables = config.platforms.map<Observable<Wallet[]>>(\n (platform) => {\n switch (platform) {\n case \"polkadot\":\n return getPolkadotWallets$(config);\n case \"ethereum\":\n return getEthereumWallets$(config);\n }\n },\n );\n\n const wallets$ = observables.length\n ? combineLatest(observables).pipe(\n map((wallets) => wallets.flat().sort(sortWallets)),\n )\n : of([]);\n\n const subAutoReconnect = combineLatest([wallets$, autoReconnectWalletIds$])\n .pipe(\n filter(([, walletIds]) => config.autoReconnect && !!walletIds?.length),\n mergeMap(([wallets, walletIds]) =>\n wallets.filter((wallet) => walletIds?.includes(wallet.id)),\n ),\n distinct((w) => w.id),\n )\n .subscribe(async (wallet) => {\n if (wallet.isConnected) {\n console.warn(\"Wallet %s already connected\", wallet.id);\n return;\n }\n\n try {\n await wallet.connect();\n } catch (err) {\n console.error(\"Failed to reconnect wallet %s\", wallet.id, { err });\n }\n });\n\n const subWallets = wallets$.subscribe(subscriber);\n\n return () => {\n subAutoReconnect.unsubscribe();\n subWallets.unsubscribe();\n };\n }).pipe(shareReplay({ refCount: true, bufferSize: 1 }));\n};\n","import type { WalletPlatform } from \"@/api/types\";\nimport { isWalletPlatform } from \"./isWalletPlatform\";\n\nexport type WalletId = string;\n\nexport const getWalletId = (\n platform: WalletPlatform,\n identifier: string,\n): WalletId => {\n if (!isWalletPlatform(platform)) throw new Error(\"Invalid platform\");\n if (!identifier) throw new Error(\"Invalid name\");\n return `${platform}:${identifier}`;\n};\n\nexport const parseWalletId = (walletId: string) => {\n if (!walletId) throw new Error(\"Invalid walletId\");\n const [platform, identifier] = walletId.split(\":\");\n if (!isWalletPlatform(platform)) throw new Error(\"Invalid platform\");\n if (!identifier) throw new Error(\"Invalid address\");\n return { platform, identifier };\n};\n","import { type WalletId, parseWalletId } from \"@/utils/WalletId\";\nimport { createStore } from \"@/utils/createStore\";\nimport { uniq } from \"lodash\";\n\nconst LOCAL_STORAGE_KEY = \"kheopskit\";\n\nexport type KheopskitStoreData = {\n autoReconnect?: WalletId[];\n};\n\nconst DEFAULT_SETTINGS: KheopskitStoreData = {};\n\nconst storage = createStore(LOCAL_STORAGE_KEY, DEFAULT_SETTINGS);\n\nexport const addEnabledWalletId = (walletId: WalletId) => {\n parseWalletId(walletId); // validate walletId\n storage.mutate((prev) => ({\n ...prev,\n autoReconnect: uniq((prev.autoReconnect ?? []).concat(walletId)),\n }));\n};\n\nexport const removeEnabledWalletId = (walletId: WalletId) => {\n storage.mutate((prev) => ({\n ...prev,\n autoReconnect: uniq(\n (prev.autoReconnect ?? []).filter((id) => id !== walletId),\n ),\n }));\n};\n\nexport const store = {\n observable: storage.observable,\n addEnabledWalletId,\n removeEnabledWalletId,\n};\n","import { store } from \"@/api/store\";\nimport type {\n EthereumInjectedWallet,\n EthereumWallet,\n KheopskitConfig,\n} from \"@/api/types\";\nimport { type WalletId, getWalletId } from \"@/utils/WalletId\";\nimport { type EIP6963ProviderDetail, createStore } from \"mipd\";\nimport {\n BehaviorSubject,\n Observable,\n combineLatest,\n map,\n shareReplay,\n} from \"rxjs\";\nimport type { EIP1193Provider } from \"viem\";\nimport { getAppKitWallets$ } from \"../appKit\";\n\nconst providersDetails$ = new Observable<EIP6963ProviderDetail[]>(\n (subscriber) => {\n const store = createStore();\n\n const unsubscribe = store.subscribe((providerDetails) => {\n subscriber.next(providerDetails as EIP6963ProviderDetail[]);\n });\n\n const providerDetails = store.getProviders();\n\n subscriber.next(providerDetails as EIP6963ProviderDetail[]);\n\n return () => {\n unsubscribe();\n store.destroy();\n };\n },\n).pipe(shareReplay({ refCount: true, bufferSize: 1 }));\n\nconst ethereumInjectedWallets$ = new Observable<EthereumInjectedWallet[]>(\n (subscriber) => {\n const enabledWalletIds$ = new BehaviorSubject<Set<WalletId>>(new Set());\n\n const connectWallet = async (\n walletId: WalletId,\n provider: EIP1193Provider,\n ) => {\n if (enabledWalletIds$.value.has(walletId))\n throw new Error(`Extension ${walletId} already connected`);\n\n await provider.request({\n method: \"eth_requestAccounts\",\n });\n\n const newSet = new Set(enabledWalletIds$.value);\n newSet.add(walletId);\n enabledWalletIds$.next(newSet);\n\n store.addEnabledWalletId(walletId);\n };\n\n const disconnectWallet = async (walletId: WalletId) => {\n if (!enabledWalletIds$.value.has(walletId))\n throw new Error(`Extension ${walletId} is not connected`);\n const newSet = new Set(enabledWalletIds$.value);\n newSet.delete(walletId);\n enabledWalletIds$.next(newSet);\n\n store.removeEnabledWalletId(walletId);\n };\n\n const sub = combineLatest([providersDetails$, enabledWalletIds$])\n .pipe(\n map(([providerDetails, enabledWalletIds]) => {\n return providerDetails.map((pd): EthereumInjectedWallet => {\n const walletId = getWalletId(\"ethereum\", pd.info.rdns);\n const provider = pd.provider as EIP1193Provider;\n\n return {\n platform: \"ethereum\",\n type: \"injected\",\n id: walletId,\n name: pd.info.name,\n icon: pd.info.icon,\n provider,\n isConnected: enabledWalletIds.has(walletId),\n providerId: pd.info.rdns,\n connect: () => connectWallet(walletId, provider),\n disconnect: () => disconnectWallet(walletId),\n };\n });\n }),\n )\n .subscribe(subscriber);\n\n return () => {\n sub.unsubscribe();\n };\n },\n).pipe(shareReplay({ refCount: true, bufferSize: 1 }));\n\nexport const getEthereumWallets$ = (config: KheopskitConfig) => {\n return new Observable<EthereumWallet[]>((subscriber) => {\n const subscription = combineLatest([\n ethereumInjectedWallets$,\n getAppKitWallets$(config)?.pipe(map((w) => w.ethereum)),\n ])\n .pipe(\n map(([injectedWallets, appKitWallet]) =>\n appKitWallet ? [...injectedWallets, appKitWallet] : injectedWallets,\n ),\n )\n .subscribe(subscriber);\n\n return () => {\n subscription.unsubscribe();\n };\n }).pipe(shareReplay({ refCount: true, bufferSize: 1 }));\n};\n","import { getWalletId } from \"@/utils/WalletId\";\nimport { createAppKit } from \"@reown/appkit/core\";\nimport {\n BehaviorSubject,\n Observable,\n combineLatest,\n distinctUntilChanged,\n map,\n of,\n shareReplay,\n} from \"rxjs\";\nimport type {\n EthereumAppKitWallet,\n KheopskitConfig,\n PolkadotAppKitWallet,\n} from \"./types\";\n\nconst WALLET_CONNECT_ICON =\n \"data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjQwMCIgdmlld0JveD0iMCAwIDQwMCA0MDAiIHdpZHRoPSI0MDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZD0ibTAgMGg0MDB2NDAwaC00MDB6Ii8+PC9jbGlwUGF0aD48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxjaXJjbGUgY3g9IjIwMCIgY3k9IjIwMCIgZmlsbD0iIzMzOTZmZiIgcj0iMTk5LjUiIHN0cm9rZT0iIzY2YjFmZiIvPjxwYXRoIGQ9Im0xMjIuNTE5IDE0OC45NjVjNDIuNzkxLTQxLjcyOSAxMTIuMTcxLTQxLjcyOSAxNTQuOTYyIDBsNS4xNSA1LjAyMmMyLjE0IDIuMDg2IDIuMTQgNS40NjkgMCA3LjU1NWwtMTcuNjE3IDE3LjE4Yy0xLjA3IDEuMDQzLTIuODA0IDEuMDQzLTMuODc0IDBsLTcuMDg3LTYuOTExYy0yOS44NTMtMjkuMTExLTc4LjI1My0yOS4xMTEtMTA4LjEwNiAwbC03LjU5IDcuNDAxYy0xLjA3IDEuMDQzLTIuODA0IDEuMDQzLTMuODc0IDBsLTE3LjYxNy0xNy4xOGMtMi4xNC0yLjA4Ni0yLjE0LTUuNDY5IDAtNy41NTV6bTE5MS4zOTcgMzUuNTI5IDE1LjY3OSAxNS4yOWMyLjE0IDIuMDg2IDIuMTQgNS40NjkgMCA3LjU1NWwtNzAuNyA2OC45NDRjLTIuMTM5IDIuMDg3LTUuNjA4IDIuMDg3LTcuNzQ4IDBsLTUwLjE3OC00OC45MzFjLS41MzUtLjUyMi0xLjQwMi0uNTIyLTEuOTM3IDBsLTUwLjE3OCA0OC45MzFjLTIuMTM5IDIuMDg3LTUuNjA4IDIuMDg3LTcuNzQ4IDBsLTcwLjcwMTUtNjguOTQ1Yy0yLjEzOTYtMi4wODYtMi4xMzk2LTUuNDY5IDAtNy41NTVsMTUuNjc5NS0xNS4yOWMyLjEzOTYtMi4wODYgNS42MDg1LTIuMDg2IDcuNzQ4MSAwbDUwLjE3ODkgNDguOTMyYy41MzUuNTIyIDEuNDAyLjUyMiAxLjkzNyAwbDUwLjE3Ny00OC45MzJjMi4xMzktMi4wODcgNS42MDgtMi4wODcgNy43NDggMGw1MC4xNzkgNDguOTMyYy41MzUuNTIyIDEuNDAyLjUyMiAxLjkzNyAwbDUwLjE3OS00OC45MzFjMi4xMzktMi4wODcgNS42MDgtMi4wODcgNy43NDggMHoiIGZpbGw9IiNmZmYiLz48L2c+PC9zdmc+\";\n\ntype AppKitWallets = {\n polkadot?: PolkadotAppKitWallet;\n ethereum?: EthereumAppKitWallet;\n};\n\n// once it exists, appKit object should never be recreated\nlet cachedAppKit: Observable<AppKitWallets> | null = null;\n\nexport const getAppKitWallets$ = (\n config: KheopskitConfig,\n): Observable<AppKitWallets> => {\n if (!config.walletConnect) return of({});\n\n const walletConnect = config.walletConnect;\n\n if (!cachedAppKit) {\n cachedAppKit = new Observable<AppKitWallets>((subscriber) => {\n const appKit = createAppKit({\n projectId: walletConnect.projectId,\n metadata: walletConnect.metadata,\n networks: walletConnect.networks,\n themeMode: walletConnect.themeMode,\n themeVariables: walletConnect.themeVariables,\n universalProviderConfigOverride: {\n methods: {\n polkadot: [\"polkadot_signTransaction\", \"polkadot_signMessage\"],\n },\n },\n allWallets: \"HIDE\",\n debug: config.debug,\n allowUnsupportedChain: true,\n });\n\n const status$ = new BehaviorSubject({\n isPolkadotConnected: false,\n isEthereumConnected: false,\n });\n\n const unsubProviders = appKit.subscribeProviders((providers) => {\n status$.next({\n isPolkadotConnected: !!providers.polkadot,\n isEthereumConnected: !!providers.eip155,\n });\n });\n\n const polkadotWallet$ = appKit.chainNamespaces.includes(\"polkadot\")\n ? status$.pipe(\n map((s) => s.isPolkadotConnected),\n distinctUntilChanged(),\n map((isConnected): PolkadotAppKitWallet => {\n const walletInfo = appKit.getWalletInfo();\n\n return {\n id: getWalletId(\"polkadot\", \"walletconnect\"),\n platform: \"polkadot\",\n type: \"appKit\",\n appKit, // todo maybe we dont want to expose the appKit instance\n name: walletInfo?.name ?? \"WalletConnect\",\n icon: walletInfo?.icon ?? WALLET_CONNECT_ICON,\n connect: async () => {\n if (!isConnected) await appKit.open();\n },\n disconnect: () => {\n if (isConnected) appKit.disconnect();\n },\n isConnected,\n };\n }),\n )\n : of(undefined);\n\n const ethereumWallet$ = appKit.chainNamespaces.includes(\"eip155\")\n ? status$.pipe(\n map((s) => s.isEthereumConnected),\n distinctUntilChanged(),\n map((isConnected): EthereumAppKitWallet => {\n const walletInfo = appKit.getWalletInfo();\n\n return {\n id: getWalletId(\"ethereum\", \"walletconnect\"),\n platform: \"ethereum\",\n type: \"appKit\",\n appKit,\n name: walletInfo?.name ?? \"WalletConnect\",\n icon: walletInfo?.icon ?? WALLET_CONNECT_ICON,\n connect: () => appKit.open(),\n disconnect: () => appKit.disconnect(),\n isConnected,\n };\n }),\n )\n : of(undefined);\n\n const sub = combineLatest({\n polkadot: polkadotWallet$,\n ethereum: ethereumWallet$,\n }).subscribe(subscriber);\n\n return () => {\n sub.unsubscribe();\n unsubProviders();\n };\n }).pipe(shareReplay({ refCount: true, bufferSize: 1 }));\n }\n\n return cachedAppKit;\n};\n","export const POLKADOT_EXTENSIONS: Record<\n string,\n { name: string; icon: string }\n> = {\n talisman: {\n name: \"Talisman\",\n icon: \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgdmlld0JveD0iMCAwIDEyOCAxMjgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8cGF0aCBmaWxsPSIjZGRmZTc2IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0wIDcwLjI1YzAgMjEuMjU1IDAgMzEuODgzIDQuNDYzIDM5Ljg1MmEzNSAzNSAwIDAgMCAxMy40MzUgMTMuNDM1QzI1Ljg2NyAxMjggMzYuNDk1IDEyOCA1Ny43NSAxMjhoMTIuNWMyMS4yNTUgMCAzMS44ODMgMCAzOS44NTItNC40NjNhMzUgMzUgMCAwIDAgMTMuNDM1LTEzLjQzNUMxMjggMTAyLjEzMyAxMjggOTEuNTA1IDEyOCA3MC4yNXYtMTIuNWMwLTIxLjI1NSAwLTMxLjg4My00LjQ2My0zOS44NTJhMzUgMzUgMCAwIDAtMTMuNDM1LTEzLjQzNUMxMDIuMTMzIDAgOTEuNTA1IDAgNzAuMjUgMGgtMTIuNUMzNi40OTUgMCAyNS44NjcgMCAxNy44OTggNC40NjNBMzUgMzUgMCAwIDAgNC40NjMgMTcuODk4QzAgMjUuODY3IDAgMzYuNDk1IDAgNTcuNzVaIi8+CiAgICA8cGF0aCBmaWxsPSIjZWE1NzUwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Im0zMy44NzkgMzUuMTE3LS41IDE5LjE2NWM4LjEwNyA0LjE2OCAxNS43NSA0LjA3NSAyNC43NCAyLjA2MyAzLjU2LTEuMzk3IDYuMDU2LTEuNzAyIDkuNTExIDAgOS4wNjcgMi44MTYgMTYuOTY5IDEuOTUgMjUuMTg1LTIuMjQzbC0uNDg1LTE5LjE4N2MwLTEwLjgwNS03LjAwNC0xNC45NjItMTQuNjMyLTEyLjczOS0uNzc5LjIzMi0xLjk0NCAxLjI3NC0xLjk0NCAyLjIwN2wtLjE4MSAxOC43MzNhMS43NyAxLjc3IDAgMSAxLTMuNTM4LS4wMTVWMjAuMDY3YTguODM4IDguODM4IDAgMCAwLTE3LjY3NSAwVjQzLjFhMS43NyAxLjc3IDAgMSAxLTMuNTM4LjAxNWwtLjE3Ni0xOC43NDNjMC0uOTIzLTEuMTA5LTEuOTYtMS44ODItMi4xOTItOC44LTIuNjEtMTQuODggMi41MzgtMTQuODggMTIuOTM2Wm0yLjQ3NSAyMy44NDNhNDguNDMgNDguNDMgMCAwIDEtNS4yMDktMi4yNTRjLTQuNzMtMi4yNjktMTIuMDk1LTEuNTYyLTE3LjA3MiA0LjExMS0yLjI3NCAyLjYtLjUxNSA2LjM2IDIuNzcgNy40NDggMS41ODMuNTI2IDMuMDE3IDEuNDEzIDQuMzUzIDIuNDA4bC40NjQuMzM2YzQuMTMyIDIuOTY1IDYuNzkzIDcuNDA2IDcuMDU2IDEyLjQ4NmwuMjUzIDQuODEyYTMxLjYxNiAzMS42MTYgMCAwIDAgMTkuNDI4IDI1Ljk1OSAzOC41OSAzOC41OSAwIDAgMCAyOS4zMjcgMCAzMS42MTYgMzEuNjE2IDAgMCAwIDE5LjQyOS0yNS45NTljLjA0Ni0uODI1LjA2MS0xLjY1LjA1MS0yLjQ2NWwuMTI0LTIuMzQ3Yy4yNjMtNS4wOCAyLjkyNC05LjUyIDcuMDU2LTEyLjQ4NmwuNDY0LS4zMzZjMS4zNC0uOTk1IDIuNzctMS44ODIgNC4zNTMtMi40MDggMy4yODUtMS4wODkgNS4wNS00Ljg0OSAyLjc3LTcuNDQ4LTQuOTc4LTUuNjczLTEyLjM0My02LjM3NS0xNy4wNzItNC4xMS0xLjcxOC44MjUtMy40MzUgMS42NS01LjIxIDIuMjUzbC0zLjYyIDEuMjM4LS4wMS4wNDFjLTYuNjU0IDEuODQyLTEyLjEyIDEuODQ3LTE4LjM5OC0uNzQyLTMuMTc3LTEuMzEtNi4zOC0xLjU1OC05LjQ4IDAtNS45NjcgMS44NTYtMTIuMDQ4IDIuNjQtMTguMjA2LjcwMWwtMy42MjYtMS4yMzhabTI2LjY2NSA0NC43MzJjMTMuMzkgMCAyNC4yNDEtMTUuNTk2IDI0LjI0MS0xNS41OTZTNzYuNDEgNzIuNDk5IDYzLjAyIDcyLjQ5OWMtMTMuMzg1IDAtMjQuMjM2IDE1LjU5Ny0yNC4yMzYgMTUuNTk3czEwLjg1MSAxNS41OTYgMjQuMjQgMTUuNTk2Wm0xMC44ODMtMTUuNTk2YzAgNi4wMS00Ljg3MiAxMC44ODItMTAuODgzIDEwLjg4Mi02LjAxIDAtMTAuODgyLTQuODcyLTEwLjg4Mi0xMC44ODJzNC44NzItMTAuODgzIDEwLjg4Mi0xMC44ODMgMTAuODgzIDQuODcyIDEwLjg4MyAxMC44ODNabS0xMC44ODMgNC45MzZhNC45MzYgNC45MzYgMCAxIDAgMC05Ljg3MiA0LjkzNiA0LjkzNiAwIDAgMCAwIDkuODcyWiIvPgo8L3N2Zz4K\",\n },\n \"polkadot-js\": {\n name: \"Polkadot.js\",\n icon: \"data:image/svg+xml;base64,ICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEwNi4yIDEwNi4yIj4KICAgIDxkZWZzPjwvZGVmcz4KICAgIDxnIGlkPSJMYXllcl8yIiBkYXRhLW5hbWU9IkxheWVyIDIiPgogICAgICA8ZyBpZD0iTGF5ZXJfMS0yIiBkYXRhLW5hbWU9IkxheWVyIDEiPgogICAgICAgIDxjaXJjbGUgY3g9IjUzLjEiIGN5PSI1My4xIiByPSI1My4xIiBmaWxsPSIjZjI5MjM1IiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICBmaWxsPSIjZmZmIgogICAgICAgICAgZD0iTTU0LjQ3IDEzLjc2YTI4Ljg1IDI4Ljg1IDAgMDAtMjguNzMgMjguNzMgMjkuMzQgMjkuMzQgMCAwMDEuNTIgOS4zNCA0IDQgMCAxMDcuNDktMi41MkExOC42NyAxOC42NyAwIDAxMzMuNjMgNDJhMjAuNzIgMjAuNzIgMCAxMTIyIDIxLjMxcy00IC4yNS02IC40OWMtLjc0LjExLTEuNDguMjYtMi4yLjQ0YS4yOC4yOCAwIDAxLS4zOCAwIC4yNy4yNyAwIDAxMC0uMzJsLjYzLTMuNDEgMy43OS0xN2EzLjk0IDMuOTQgMCAxMC03LjcxLTEuNjVzLTkgNDEuNy05IDQyLjA4YTMuNzkgMy43OSAwIDAwMi43NCA0LjZoLjI4YTMuNzggMy43OCAwIDAwNC42MS0yLjcxLjQzLjQzIDAgMDAwLS4xMXYtLjE5Yy4xMS0uNDkgMS4yNS02IDEuMjUtNmExMC4yMyAxMC4yMyAwIDAxOC40Ni04Yy44Ny0uMTMgNC41My0uMzggNC41My0uMzhhMjguNzEgMjguNzEgMCAwMC0yLjExLTU3LjI3eiIKICAgICAgICAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICBmaWxsPSIjZmZmIgogICAgICAgICAgZD0iTTU2LjIxIDgwYTQuNzggNC43OCAwIDAwLTUuNjYgMy43MS4yNC4yNCAwIDAxMCAuMDggNC43NyA0Ljc3IDAgMDAzLjY1IDUuNjdoLjE0QTQuNyA0LjcgMCAwMDYwIDg2di0uMzJBNSA1IDAgMDA1Ni4yMSA4MHoiCiAgICAgICAgLz4KICAgICAgPC9nPgogICAgPC9nPgogIDwvc3ZnPg==\",\n },\n \"subwallet-js\": {\n name: \"SubWallet\",\n icon: \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYwIiBoZWlnaHQ9IjE2MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNODAgNGM1Ny42MyAwIDc2IDE4LjM3IDc2IDc2IDAgNTcuNjMtMTguMzcgNzYtNzYgNzYtNTcuNjMgMC03Ni0xOC4zNy03Ni03NkM0IDIyLjM3IDIyLjM3IDQgODAgNFoiIGZpbGw9InVybCgjYSkiLz48ZyBjbGlwLXBhdGg9InVybCgjYikiPjxwYXRoIGQ9Ik0xMTIuNjE1IDY2LjcyVjUzLjM5OEw1OC43NiAzMiA0OCAzNy40MTJsLjA1NyA0MS40NjQgNDAuMjkyIDE2LjA3LTIxLjUyIDkuMDc1di03LjAxOEw1Ni45NSA5My4wM2wtOC44OTMgNC4xNjN2MjUuMzk1TDU4Ljc2OSAxMjhsNTMuODQ2LTI0LjA2MlY4Ni44NjlMNjQuMTU0IDY3LjY1N1Y1NmwzOC40NDkgMTUuMjE2IDEwLjAxMi00LjQ5NloiIGZpbGw9IiNmZmYiLz48L2c+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJhIiB4MT0iODAiIHkxPSI0IiB4Mj0iODAiIHkyPSIxNTYiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjMDA0QkZGIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNENFQUFDIi8+PC9saW5lYXJHcmFkaWVudD48Y2xpcFBhdGggaWQ9ImIiPjxwYXRoIGZpbGw9IiNmZmYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4IDMyKSIgZD0iTTAgMGg2NC42MTV2OTZIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=\",\n },\n enkrypt: {\n name: \"Enkrypt\",\n icon: \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODEiIGhlaWdodD0iODEiIHZpZXdCb3g9IjAgMCA4MSA4MSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNy4wMDU3IDE3LjAwNjJDMTguOTMwMyAxNS4wODE2IDIxLjU0MDUgMTQuMDAwNCAyNC4yNjIyIDE0LjAwMDRMNjcuMzI5NiAxNFYyMS44NzQxQzY3LjMyOTYgMjMuODMwNSA2Ni41NTIzIDI1LjcwNjcgNjUuMTY5IDI3LjA5QzYzLjc4NTcgMjguNDczMyA2MS45MDk1IDI5LjI1MDQgNTkuOTUzMiAyOS4yNTA0SDM5LjcwNDVDMzYuOTgyOCAyOS4yNTA0IDM0LjM3MjYgMzAuMzMxNiAzMi40NDggMzIuMjU2MUMzMC41MjM1IDM0LjE4MDcgMjkuNDQyMyAzNi43OTA5IDI5LjQ0MjMgMzkuNTEyNlY0Mi4xMjQyQzI5LjQ0MjMgNDQuODQ1OSAzMC41MjM1IDQ3LjQ1NjEgMzIuNDQ4IDQ5LjM4MDZDMzQuMzcyNiA1MS4zMDUxIDM2Ljk4MjggNTIuMzg2MyAzOS43MDQ1IDUyLjM4NjNINTkuOTUzMkM2MS45MDk1IDUyLjM4NjMgNjMuNzg1NyA1My4xNjM1IDY1LjE2OSA1NC41NDY4QzY2LjU1MjMgNTUuOTMwMSA2Ny4zMjk2IDU3LjgwNjMgNjcuMzI5NiA1OS43NjI2VjY3LjMzSDI0LjI2MjJDMjEuNTQwNSA2Ny4zMyAxOC45MzAzIDY2LjI0ODggMTcuMDA1NyA2NC4zMjQzQzE1LjA4MTIgNjIuMzk5NyAxNCA1OS43ODk1IDE0IDU3LjA2NzhWMjQuMjYyNkMxNCAyMS41NDA5IDE1LjA4MTIgMTguOTMwNyAxNy4wMDU3IDE3LjAwNjJaTTQwLjE0NzkgMzMuNTQyM0g2MC45MTU3QzY0LjQ1OCAzMy41NDIzIDY3LjMyOTUgMzYuNDEzOCA2Ny4zMjk1IDM5Ljk1NjFWNDEuNjgxNkM2Ny4zMjk1IDQ1LjIyMzggNjQuNDU4IDQ4LjA5NTQgNjAuOTE1NyA0OC4wOTU0SDQwLjE0NzlDMzYuNjA1NyA0OC4wOTU0IDMzLjczNDEgNDUuMjIzOCAzMy43MzQxIDQxLjY4MTZWMzkuOTU2MUMzMy43MzQxIDM2LjQxMzggMzYuNjA1NyAzMy41NDIzIDQwLjE0NzkgMzMuNTQyM1oiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcl8yODdfMjM1OSkiLz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl8yODdfMjM1OSIgeDE9IjE5LjM2MDIiIHkxPSIxNCIgeDI9IjU2Ljc2OTYiIHkyPSI2OS44MDA1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiNDNTQ5RkYiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNjU0QkZGIi8+CjwvbGluZWFyR3JhZGllbnQ+CjwvZGVmcz4KPC9zdmc+Cg==\",\n },\n};\n","import { store } from \"@/api/store\";\nimport type {\n KheopskitConfig,\n PolkadotInjectedWallet,\n PolkadotWallet,\n} from \"@/api/types\";\nimport { type WalletId, getWalletId, parseWalletId } from \"@/utils/WalletId\";\nimport { POLKADOT_EXTENSIONS } from \"@/utils/polkadotExtensions\";\nimport { isEqual } from \"lodash\";\nimport {\n type InjectedExtension,\n connectInjectedExtension,\n getInjectedExtensions,\n} from \"polkadot-api/pjs-signer\";\nimport {\n BehaviorSubject,\n Observable,\n combineLatest,\n distinctUntilChanged,\n map,\n mergeMap,\n of,\n shareReplay,\n timer,\n} from \"rxjs\";\nimport { getAppKitWallets$ } from \"../appKit\";\n\nconst getInjectedWalletsIds = () =>\n getInjectedExtensions().map((name) => getWalletId(\"polkadot\", name));\n\nexport const polkadotInjectedWallets$ = new Observable<\n PolkadotInjectedWallet[]\n>((subscriber) => {\n const enabledExtensions$ = new BehaviorSubject<\n Map<WalletId, InjectedExtension>\n >(new Map());\n\n const connect = async (walletId: WalletId) => {\n if (enabledExtensions$.value.has(walletId))\n throw new Error(`Extension ${walletId} already connected`);\n const { identifier } = parseWalletId(walletId);\n const extension = await connectInjectedExtension(identifier);\n\n const newMap = new Map(enabledExtensions$.value);\n newMap.set(walletId, extension);\n enabledExtensions$.next(newMap);\n\n store.addEnabledWalletId(walletId);\n };\n\n const disconnect = (walletId: WalletId) => {\n if (!enabledExtensions$.value.has(walletId))\n throw new Error(`Extension ${walletId} is not connected`);\n\n const newMap = new Map(enabledExtensions$.value);\n newMap.delete(walletId);\n enabledExtensions$.next(newMap);\n\n store.removeEnabledWalletId(walletId);\n };\n\n const walletIds$ = of(0, 200, 500, 1000) // poll for wallets that inject after page load\n .pipe(\n mergeMap((time) => timer(time)),\n map(() => getInjectedWalletsIds()),\n distinctUntilChanged<WalletId[]>(isEqual),\n );\n\n const subscription = combineLatest([walletIds$, enabledExtensions$])\n .pipe(\n map(([walletIds, enabledExtensions]) => {\n return walletIds.map((id): PolkadotInjectedWallet => {\n const { identifier } = parseWalletId(id);\n const extension = enabledExtensions.get(id);\n const extInfo = POLKADOT_EXTENSIONS[identifier];\n\n return {\n id,\n type: \"injected\",\n platform: \"polkadot\",\n name: extInfo?.name ?? identifier,\n icon: extInfo?.icon ?? \"\",\n extensionId: identifier,\n extension,\n isConnected: !!extension,\n connect: () => connect(id),\n disconnect: () => disconnect(id),\n };\n });\n }),\n )\n .subscribe(subscriber);\n\n return () => {\n // console.log(\"Unsubscribing from polkadotInjectedWallets$\");\n subscription.unsubscribe();\n };\n}).pipe(\n // logObservable(\"polkadotInjectedWallets$\"),\n shareReplay({ refCount: true, bufferSize: 1 }),\n);\n\nexport const getPolkadotWallets$ = (config: KheopskitConfig) => {\n return new Observable<PolkadotWallet[]>((subscriber) => {\n const subscription = combineLatest([\n polkadotInjectedWallets$,\n getAppKitWallets$(config)?.pipe(map((w) => w.polkadot)),\n ])\n .pipe(\n map(([injectedWallets, appKitWallet]) =>\n appKitWallet ? [...injectedWallets, appKitWallet] : injectedWallets,\n ),\n )\n .subscribe(subscriber);\n\n return () => {\n subscription.unsubscribe();\n };\n }).pipe(\n // logObservable(\"getPolkadotWallets$\"),\n shareReplay({ refCount: true, bufferSize: 1 }),\n );\n};\n"],"mappings":"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","names":["import_rxjs","import_rxjs","import_rxjs","import_rxjs","import_viem","import_rxjs","getInjectedWalletAccounts$","address","getAppKitAccounts$","isSameAccountsList","w","import_rxjs","import_rxjs","import_rxjs","store","providerDetails","import_lodash","import_pjs_signer","import_rxjs"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/api/config.ts","../src/api/kheopskit.ts","../src/utils/logObservable.ts","../src/api/accounts.ts","../src/utils/sortAccounts.ts","../src/api/ethereum/accounts.ts","../src/utils/createStore.ts","../src/utils/isEthereumAddress.ts","../src/utils/isSs58Address.ts","../src/utils/isValidAddress.ts","../src/utils/isWalletPlatform.ts","../src/utils/WalletAccountId.ts","../src/utils/getCachedObservable.ts","../src/api/polkadot/accounts.ts","../src/api/wallets.ts","../src/utils/sortWallets.ts","../src/api/ethereum/wallets.ts","../src/api/store.ts","../src/utils/WalletId.ts","../src/api/appKit.ts","../src/api/polkadot/wallets.ts","../src/utils/polkadotExtensions.ts"],"sourcesContent":["export * from \"./api\";\n","import type { KheopskitConfig } from \"./types\";\n\nconst DEFAULT_CONFIG: KheopskitConfig = {\n\tautoReconnect: true,\n\tplatforms: [\"polkadot\"],\n\tdebug: false,\n};\n\nexport const resolveConfig = (\n\tconfig: Partial<KheopskitConfig> | undefined,\n): KheopskitConfig => {\n\treturn Object.assign({}, DEFAULT_CONFIG, config);\n};\n","import {\n\tcombineLatest,\n\tmap,\n\tObservable,\n\tshareReplay,\n\tthrottleTime,\n} from \"rxjs\";\nimport { logObservable } from \"@/utils/logObservable\";\nimport { getAccounts$ } from \"./accounts\";\nimport { resolveConfig } from \"./config\";\nimport type { KheopskitConfig, Wallet, WalletAccount } from \"./types\";\nimport { getWallets$ } from \"./wallets\";\n\nexport type { KheopskitConfig } from \"./types\";\n\nexport type KheopskitState = {\n\twallets: Wallet[];\n\taccounts: WalletAccount[];\n\tconfig: KheopskitConfig;\n};\n\nexport const getKheopskit$ = (config?: Partial<KheopskitConfig>) => {\n\tconst kc = resolveConfig(config);\n\n\tconsole.debug(\"[kheopskit] config\", kc);\n\n\treturn new Observable<KheopskitState>((subscriber) => {\n\t\tconst wallets$ = getWallets$(kc);\n\n\t\tconst subscription = combineLatest({\n\t\t\twallets: wallets$,\n\t\t\taccounts: getAccounts$(kc, wallets$),\n\t\t})\n\t\t\t.pipe(map(({ wallets, accounts }) => ({ config: kc, wallets, accounts })))\n\t\t\t.subscribe(subscriber);\n\n\t\treturn () => {\n\t\t\tsubscription.unsubscribe();\n\t\t};\n\t}).pipe(\n\t\tthrottleTime(16, undefined, { leading: true, trailing: true }), // ~1 frame at 60fps\n\t\tlogObservable(\"kheopskit$\", { enabled: kc.debug, printValue: true }),\n\t\tshareReplay({ bufferSize: 1, refCount: true }),\n\t);\n};\n","import { type MonoTypeOperatorFunction, tap } from \"rxjs\";\n\ntype Opts = {\n\tprintValue?: boolean;\n\tenabled?: boolean;\n};\n\nexport const logObservable = <T>(\n\tlabel: string,\n\topts?: Opts,\n): MonoTypeOperatorFunction<T> =>\n\ttap((value) => {\n\t\tconst { printValue = false, enabled = true } = opts || {};\n\n\t\tif (!label || !enabled) return;\n\n\t\tconst text = `[kheopskit] observable ${label} emit`;\n\n\t\tif (printValue) console.debug(text, value);\n\t\telse console.debug(text);\n\t});\n","import { combineLatest, map, Observable, of, shareReplay } from \"rxjs\";\nimport { sortAccounts } from \"@/utils/sortAccounts\";\nimport { getEthereumAccounts$ } from \"./ethereum/accounts\";\nimport { getPolkadotAccounts$ } from \"./polkadot/accounts\";\nimport type { KheopskitConfig, Wallet, WalletAccount } from \"./types\";\n\nexport const getAccounts$ = (\n\tconfig: KheopskitConfig,\n\twallets: Observable<Wallet[]>,\n) => {\n\treturn new Observable<WalletAccount[]>((subscriber) => {\n\t\t// biome-ignore lint/suspicious/useIterableCallbackReturn: false positive\n\t\tconst sources = config.platforms.map<Observable<WalletAccount[]>>(\n\t\t\t(platform) => {\n\t\t\t\tswitch (platform) {\n\t\t\t\t\tcase \"polkadot\":\n\t\t\t\t\t\treturn getPolkadotAccounts$(\n\t\t\t\t\t\t\twallets.pipe(\n\t\t\t\t\t\t\t\tmap((w) => w.filter((w) => w.platform === \"polkadot\")),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\tcase \"ethereum\":\n\t\t\t\t\t\treturn getEthereumAccounts$(\n\t\t\t\t\t\t\twallets.pipe(\n\t\t\t\t\t\t\t\tmap((w) => w.filter((w) => w.platform === \"ethereum\")),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\n\t\tconst accounts$ = sources.length\n\t\t\t? combineLatest(sources).pipe(\n\t\t\t\t\tmap((accounts) => accounts.flat().sort(sortAccounts)),\n\t\t\t\t)\n\t\t\t: of([]);\n\n\t\tconst sub = accounts$.subscribe(subscriber);\n\n\t\treturn () => {\n\t\t\tsub.unsubscribe();\n\t\t};\n\t}).pipe(shareReplay({ refCount: true, bufferSize: 1 }));\n};\n","import type { WalletAccount } from \"@/api\";\n\nexport const sortAccounts = (a1: WalletAccount, a2: WalletAccount) => {\n\tif (a1.platform === \"polkadot\") {\n\t\tif (a2.platform === \"polkadot\") {\n\t\t\t// sort by wallet name, fallback to address\n\t\t\tif (a1.walletName !== a2.walletName) {\n\t\t\t\tif (a1.walletName === \"talisman\") return -1;\n\t\t\t\tif (a2.walletName === \"talisman\") return 1;\n\t\t\t\treturn a1.walletName.localeCompare(a2.walletName);\n\t\t\t}\n\n\t\t\t// sort by name, fallback to address\n\t\t\treturn a1.name !== a2.name\n\t\t\t\t? (a1.name ?? \"\").localeCompare(a2.name ?? \"\")\n\t\t\t\t: a1.address.localeCompare(a2.address);\n\t\t}\n\n\t\treturn -1; // polkadot accounts first\n\t}\n\n\tif (a2.platform === \"ethereum\") {\n\t\t// sort by wallet name, fallback to address\n\t\tif (a1.walletName !== a2.walletName) {\n\t\t\tif (a1.walletName === \"Talisman\") return -1;\n\t\t\tif (a2.walletName === \"Talisman\") return 1;\n\t\t\treturn a1.walletName.localeCompare(a2.walletName);\n\t\t}\n\n\t\t// keep order as provider by the wallet\n\t\treturn 0;\n\t}\n\n\t// impossible case\n\treturn 0;\n};\n","import type UniversalProvider from \"@walletconnect/universal-provider\";\nimport {\n\tcombineLatest,\n\tdistinctUntilChanged,\n\tmap,\n\tObservable,\n\tof,\n\tReplaySubject,\n\tshareReplay,\n\tswitchMap,\n} from \"rxjs\";\nimport {\n\tcreateWalletClient,\n\tcustom,\n\ttype EIP1193Provider,\n\tgetAddress,\n} from \"viem\";\nimport type {\n\tEthereumAccount,\n\tEthereumAppKitWallet,\n\tEthereumInjectedWallet,\n\tEthereumWallet,\n} from \"@/api/types\";\nimport { getWalletAccountId } from \"@/utils\";\nimport { getCachedObservable$ } from \"@/utils/getCachedObservable\";\n\nconst getInjectedWalletAccounts$ = (\n\twallet: EthereumInjectedWallet,\n): Observable<EthereumAccount[]> => {\n\tif (!wallet.isConnected) return of([]);\n\n\treturn getCachedObservable$(`accounts:${wallet.id}`, () =>\n\t\tnew Observable<EthereumAccount[]>((subscriber) => {\n\t\t\tconst getAccount = (address: string, i: number): EthereumAccount => {\n\t\t\t\t// console.log(\"[Injected] createWalletClient\", address);\n\t\t\t\tconst client = createWalletClient({\n\t\t\t\t\taccount: address as `0x${string}`,\n\t\t\t\t\ttransport: custom(wallet.provider as EIP1193Provider),\n\t\t\t\t});\n\n\t\t\t\treturn {\n\t\t\t\t\tid: getWalletAccountId(wallet.id, address),\n\t\t\t\t\tplatform: \"ethereum\",\n\t\t\t\t\tclient,\n\t\t\t\t\taddress: getAddress(address),\n\t\t\t\t\twalletName: wallet.name,\n\t\t\t\t\twalletId: wallet.id,\n\t\t\t\t\tisWalletDefault: i === 0,\n\t\t\t\t};\n\t\t\t};\n\n\t\t\tconst handleAccountsChanged = (addresses: string[]) => {\n\t\t\t\tsubscriber.next(addresses.map(getAccount));\n\t\t\t};\n\n\t\t\t// subscribe to changes\n\t\t\twallet.provider.on(\"accountsChanged\", handleAccountsChanged);\n\n\t\t\t// initial value\n\t\t\twallet.provider\n\t\t\t\t.request({ method: \"eth_accounts\" })\n\t\t\t\t.then((addresses: string[]) => {\n\t\t\t\t\tsubscriber.next(addresses.map(getAccount));\n\t\t\t\t})\n\t\t\t\t.catch((err) => {\n\t\t\t\t\tconsole.error(\"Failed to get accounts\", err);\n\t\t\t\t\tsubscriber.next([]);\n\t\t\t\t});\n\n\t\t\treturn () => {\n\t\t\t\twallet.provider.removeListener(\n\t\t\t\t\t\"accountsChanged\",\n\t\t\t\t\thandleAccountsChanged,\n\t\t\t\t);\n\t\t\t};\n\t\t}).pipe(shareReplay({ refCount: true, bufferSize: 1 })),\n\t);\n};\n\nconst wrapWalletConnectProvider = (\n\tprovider: EIP1193Provider,\n\tsessionTopic: string,\n\tcaipNetworkId: string,\n): EIP1193Provider => {\n\treturn new Proxy(provider, {\n\t\tget(target, prop, receiver) {\n\t\t\tif (prop !== \"request\") return Reflect.get(target, prop, receiver);\n\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: legacy\n\t\t\treturn (args: any) => {\n\t\t\t\tif (args && typeof args === \"object\" && args.method) {\n\t\t\t\t\tif (!args.topic) args.topic = sessionTopic;\n\t\t\t\t\tif (!args.chainId) args.chainId = caipNetworkId;\n\t\t\t\t}\n\t\t\t\treturn target.request(args);\n\t\t\t};\n\t\t},\n\t});\n};\n\nconst getAppKitAccounts$ = (\n\twallet: EthereumAppKitWallet,\n): Observable<EthereumAccount[]> => {\n\tconst account = wallet.appKit.getAccount(\"eip155\");\n\tconst provider = wallet.appKit.getProvider<UniversalProvider>(\"eip155\");\n\n\tif (\n\t\t!wallet.isConnected ||\n\t\t!wallet.appKit ||\n\t\t!account?.allAccounts.length ||\n\t\t!provider?.session\n\t)\n\t\treturn of([]);\n\n\treturn getCachedObservable$(\"accounts:appKit\", () =>\n\t\tnew Observable<EthereumAccount[]>((subscriber) => {\n\t\t\tconst caipNetworkId$ = new ReplaySubject<string>(1);\n\n\t\t\tconst handleChainChanged = (chainId: unknown) => {\n\t\t\t\tcaipNetworkId$.next(`eip155:${chainId}`);\n\t\t\t};\n\n\t\t\tprovider.on(\"chainChanged\", handleChainChanged);\n\t\t\tprovider.request({ method: \"eth_chainId\" }).then(handleChainChanged);\n\n\t\t\tconst sub = caipNetworkId$\n\t\t\t\t.pipe(\n\t\t\t\t\tdistinctUntilChanged(),\n\t\t\t\t\tmap((caipNetworkId) =>\n\t\t\t\t\t\tcustom(\n\t\t\t\t\t\t\twrapWalletConnectProvider(\n\t\t\t\t\t\t\t\tprovider as EIP1193Provider,\n\t\t\t\t\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: legacy\n\t\t\t\t\t\t\t\tprovider.session!.topic,\n\t\t\t\t\t\t\t\tcaipNetworkId,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t\tmap((transport) =>\n\t\t\t\t\t\taccount.allAccounts.map((acc, i): EthereumAccount => {\n\t\t\t\t\t\t\t// console.log(\"[AppKit] createWalletClient\", acc);\n\t\t\t\t\t\t\tconst client = createWalletClient({\n\t\t\t\t\t\t\t\taccount: acc.address as `0x${string}`,\n\t\t\t\t\t\t\t\ttransport,\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tid: getWalletAccountId(wallet.id, acc.address),\n\t\t\t\t\t\t\t\tplatform: \"ethereum\",\n\t\t\t\t\t\t\t\twalletName: wallet.name,\n\t\t\t\t\t\t\t\twalletId: wallet.id,\n\t\t\t\t\t\t\t\taddress: acc.address as `0x${string}`,\n\t\t\t\t\t\t\t\tclient,\n\t\t\t\t\t\t\t\tisWalletDefault: i === 0,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t\t.subscribe(subscriber);\n\n\t\t\treturn () => {\n\t\t\t\tprovider.off(\"chainChanged\", handleChainChanged);\n\t\t\t\tsub.unsubscribe();\n\t\t\t};\n\t\t}).pipe(shareReplay({ refCount: true, bufferSize: 1 })),\n\t);\n};\n\nexport const getEthereumAccounts$ = (\n\tethereumWallets: Observable<EthereumWallet[]>,\n) =>\n\tnew Observable<EthereumAccount[]>((subscriber) => {\n\t\tconst sub = ethereumWallets\n\t\t\t.pipe(\n\t\t\t\tmap((wallets) => wallets.filter((w) => w.isConnected)),\n\t\t\t\tswitchMap((wallets) => {\n\t\t\t\t\treturn wallets.length\n\t\t\t\t\t\t? combineLatest([\n\t\t\t\t\t\t\t\t...wallets\n\t\t\t\t\t\t\t\t\t.filter((w) => w.type === \"injected\")\n\t\t\t\t\t\t\t\t\t.map(getInjectedWalletAccounts$),\n\t\t\t\t\t\t\t\t...wallets\n\t\t\t\t\t\t\t\t\t.filter((w) => w.type === \"appKit\")\n\t\t\t\t\t\t\t\t\t.map(getAppKitAccounts$),\n\t\t\t\t\t\t\t\t// todo appkit\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t: of([]);\n\t\t\t\t}),\n\t\t\t\tmap((accounts) => accounts.flat()),\n\t\t\t\tdistinctUntilChanged(isSameAccountsList),\n\t\t\t)\n\t\t\t.subscribe(subscriber);\n\n\t\treturn () => {\n\t\t\tsub.unsubscribe();\n\t\t};\n\t}).pipe(\n\t\t// logObservable(\"ethereumAccounts$\", true),\n\t\tshareReplay({ refCount: true, bufferSize: 1 }),\n\t);\n\nconst isSameAccountsList = (a: EthereumAccount[], b: EthereumAccount[]) => {\n\tif (a.length !== b.length) return false;\n\treturn a.every((account, i) => account.id === b[i]?.id);\n};\n","import { BehaviorSubject, filter, fromEvent, map } from \"rxjs\";\n\nexport const createStore = <T>(key: string, defaultValue: T) => {\n\tconst subject = new BehaviorSubject<T>(getStoredData(key, defaultValue));\n\n\t// Cross-tab sync via 'storage' event (won't fire if key is updated from same tab)\n\tfromEvent<StorageEvent>(window, \"storage\")\n\t\t.pipe(\n\t\t\tfilter((event) => event.key === key),\n\t\t\tmap((event) => parseData(event.newValue, defaultValue)),\n\t\t)\n\t\t.subscribe((newValue) => subject.next(newValue));\n\n\tconst update = (val: T) => {\n\t\tsetStoredData(key, val);\n\t\tsubject.next(val);\n\t};\n\n\treturn {\n\t\tobservable: subject.asObservable(),\n\t\tset: (val: T) => update(val),\n\t\tmutate: (transform: (prev: T) => T) =>\n\t\t\tupdate(transform(subject.getValue())),\n\t\tget: () => structuredClone(subject.getValue()),\n\t};\n};\n\nconst parseData = <T>(str: string | null, defaultValue: T): T => {\n\ttry {\n\t\tif (str) return JSON.parse(str);\n\t} catch {\n\t\t// invalid data\n\t}\n\treturn defaultValue;\n};\n\nconst getStoredData = <T>(key: string, defaultValue: T): T => {\n\tconst str = localStorage.getItem(key);\n\treturn parseData(str, defaultValue);\n};\n\nconst setStoredData = <T>(key: string, val: T) => {\n\tconst str = JSON.stringify(val);\n\tlocalStorage.setItem(key, str);\n};\n","import { isAddress } from \"viem\";\n\nexport const isEthereumAddress = (address: string): boolean =>\n\tisAddress(address);\n","import { AccountId, type SS58String } from \"polkadot-api\";\n\nconst accountIdEncoder = AccountId().enc;\n\nexport const isSs58Address = (\n\taddress: SS58String | string,\n): address is SS58String => {\n\ttry {\n\t\tif (!address) return false;\n\t\taccountIdEncoder(address);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n};\n","import { isEthereumAddress } from \"./isEthereumAddress\";\nimport { isSs58Address } from \"./isSs58Address\";\n\nexport const isValidAddress = (address: string): boolean => {\n\treturn address.startsWith(\"0x\")\n\t\t? isEthereumAddress(address)\n\t\t: isSs58Address(address);\n};\n","import type { WalletPlatform } from \"@/api/types\";\n\nexport const isWalletPlatform = (\n\tplatform: unknown,\n): platform is WalletPlatform =>\n\ttypeof platform === \"string\" &&\n\t[\"polkadot\", \"ethereum\"].includes(platform as WalletPlatform);\n","import type { SS58String } from \"polkadot-api\";\n\nimport { isValidAddress } from \"./isValidAddress\";\n\nexport type WalletAccountId = string;\n\nexport const getWalletAccountId = (\n\twalletId: string,\n\taddress: SS58String,\n): WalletAccountId => {\n\tif (!walletId) throw new Error(\"Missing walletId\");\n\tif (!isValidAddress(address)) throw new Error(\"Invalid address\");\n\treturn `${walletId}::${address}`;\n};\n\nexport const parseWalletAccountId = (accountId: string) => {\n\tif (!accountId) throw new Error(\"Invalid walletAccountId\");\n\tconst [walletId, address] = accountId.split(\"::\");\n\tif (!walletId) throw new Error(\"Missing walletId\");\n\tif (!address || !isValidAddress(address)) throw new Error(\"Invalid address\");\n\treturn { walletId, address };\n};\n","import type { Observable } from \"rxjs\";\n\nconst CACHE = new Map<string, Observable<unknown>>();\n\nexport const getCachedObservable$ = <T, Obs = Observable<T>>(\n\tkey: string,\n\tcreate: () => Obs,\n): Obs => {\n\tif (!CACHE.has(key)) CACHE.set(key, create() as Observable<unknown>);\n\n\treturn CACHE.get(key) as Obs;\n};\n","import type { AppKit } from \"@reown/appkit/core\";\nimport type UniversalProvider from \"@walletconnect/universal-provider\";\nimport {\n\tgetPolkadotSignerFromPjs,\n\ttype InjectedExtension,\n\ttype InjectedPolkadotAccount,\n} from \"polkadot-api/pjs-signer\";\nimport {\n\tcombineLatest,\n\tdistinctUntilChanged,\n\tmap,\n\tObservable,\n\tof,\n\tshareReplay,\n\tswitchMap,\n} from \"rxjs\";\nimport type {\n\tPolkadotAccount,\n\tPolkadotAppKitWallet,\n\tPolkadotInjectedWallet,\n\tPolkadotWallet,\n} from \"@/api/types\";\nimport { getWalletAccountId } from \"@/utils\";\n\nconst getInjectedWalletAccounts$ = (\n\twallet: PolkadotInjectedWallet,\n): Observable<PolkadotAccount[]> => {\n\tif (!wallet.isConnected) return of([]);\n\n\treturn new Observable<PolkadotAccount[]>((subscriber) => {\n\t\tconst getAccount = (account: InjectedPolkadotAccount): PolkadotAccount => ({\n\t\t\tid: getWalletAccountId(wallet.id, account.address),\n\t\t\t...account,\n\t\t\tplatform: \"polkadot\",\n\t\t\twalletName: wallet.name,\n\t\t\twalletId: wallet.id,\n\t\t});\n\n\t\tconst extension = wallet.extension as InjectedExtension;\n\n\t\t// subscribe to changes\n\t\tconst unsubscribe = extension.subscribe((accounts) => {\n\t\t\tsubscriber.next(accounts.map(getAccount));\n\t\t});\n\n\t\t// initial value\n\t\tsubscriber.next(extension.getAccounts().map(getAccount));\n\n\t\treturn () => {\n\t\t\treturn unsubscribe();\n\t\t};\n\t});\n};\n\nconst getAppKitPolkadotSigner = (appKit: AppKit, address: string) => {\n\tconst provider = appKit.getProvider<UniversalProvider>(\"polkadot\");\n\tif (!provider) throw new Error(\"No provider found\");\n\tif (!provider.session) throw new Error(\"No session found\");\n\n\treturn getPolkadotSignerFromPjs(\n\t\taddress,\n\t\t(transactionPayload) => {\n\t\t\tif (!provider.session) throw new Error(\"No session found\");\n\n\t\t\treturn provider.client.request({\n\t\t\t\ttopic: provider.session.topic,\n\t\t\t\tchainId: `polkadot:${transactionPayload.genesisHash.substring(2, 34)}`,\n\t\t\t\trequest: {\n\t\t\t\t\tmethod: \"polkadot_signTransaction\",\n\t\t\t\t\tparams: {\n\t\t\t\t\t\taddress,\n\t\t\t\t\t\ttransactionPayload,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t\tasync ({ address, data }) => {\n\t\t\tif (!provider.session) throw new Error(\"No session found\");\n\t\t\tconst networks = appKit.getCaipNetworks(\"polkadot\");\n\t\t\tconst chainId = networks[0]?.caipNetworkId;\n\t\t\tif (!chainId) throw new Error(\"No chainId found\");\n\n\t\t\treturn provider.client.request({\n\t\t\t\ttopic: provider.session.topic,\n\t\t\t\tchainId,\n\t\t\t\trequest: {\n\t\t\t\t\tmethod: \"polkadot_signMessage\",\n\t\t\t\t\tparams: {\n\t\t\t\t\t\taddress,\n\t\t\t\t\t\tmessage: data,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t);\n};\n\nconst getAppKitAccounts$ = (wallet: PolkadotAppKitWallet) => {\n\tconst account = wallet.appKit.getAccount(\"polkadot\");\n\tconst provider = wallet.appKit.getProvider<UniversalProvider>(\"polkadot\");\n\n\tif (\n\t\t!wallet.isConnected ||\n\t\t!wallet.appKit ||\n\t\t!account?.allAccounts.length ||\n\t\t!provider?.session\n\t)\n\t\treturn of([]);\n\n\treturn of(\n\t\taccount.allAccounts.map(\n\t\t\t(acc): PolkadotAccount => ({\n\t\t\t\tid: getWalletAccountId(wallet.id, acc.address),\n\t\t\t\tplatform: \"polkadot\",\n\t\t\t\twalletName: wallet.name,\n\t\t\t\twalletId: wallet.id,\n\t\t\t\taddress: acc.address,\n\t\t\t\tpolkadotSigner: getAppKitPolkadotSigner(wallet.appKit, acc.address),\n\t\t\t\tgenesisHash: null,\n\t\t\t\tname: `${wallet.name} Polkadot`,\n\t\t\t\ttype: \"sr25519\",\n\t\t\t}),\n\t\t),\n\t);\n};\n\nexport const getPolkadotAccounts$ = (\n\tpolkadotWallets$: Observable<PolkadotWallet[]>,\n) =>\n\tnew Observable<PolkadotAccount[]>((subscriber) => {\n\t\tconst sub = polkadotWallets$\n\t\t\t.pipe(\n\t\t\t\tmap((wallets) => wallets.filter((w) => w.isConnected)),\n\t\t\t\tswitchMap((wallets) =>\n\t\t\t\t\twallets.length\n\t\t\t\t\t\t? combineLatest([\n\t\t\t\t\t\t\t\t...wallets\n\t\t\t\t\t\t\t\t\t.filter((w) => w.type === \"injected\")\n\t\t\t\t\t\t\t\t\t.map(getInjectedWalletAccounts$),\n\t\t\t\t\t\t\t\t...wallets\n\t\t\t\t\t\t\t\t\t.filter((w) => w.type === \"appKit\")\n\t\t\t\t\t\t\t\t\t.map(getAppKitAccounts$),\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t: of([]),\n\t\t\t\t),\n\t\t\t\tmap((accounts) => accounts.flat()),\n\t\t\t\tdistinctUntilChanged(isSameAccountsList),\n\t\t\t)\n\t\t\t.subscribe(subscriber);\n\n\t\treturn () => {\n\t\t\tsub.unsubscribe();\n\t\t};\n\t}).pipe(shareReplay({ refCount: true, bufferSize: 1 }));\n\nconst isSameAccountsList = (a: PolkadotAccount[], b: PolkadotAccount[]) => {\n\tif (a.length !== b.length) return false;\n\treturn a.every((account, i) => account.id === b[i]?.id);\n};\n","import {\n\tcombineLatest,\n\tdistinct,\n\tfilter,\n\tmap,\n\tmergeMap,\n\tObservable,\n\tof,\n\tshareReplay,\n\tstartWith,\n\ttake,\n} from \"rxjs\";\nimport { sortWallets } from \"@/utils/sortWallets\";\nimport { getEthereumWallets$ } from \"./ethereum/wallets\";\nimport { getPolkadotWallets$ } from \"./polkadot/wallets\";\nimport { store } from \"./store\";\nimport type { KheopskitConfig, Wallet } from \"./types\";\n\n// lock the list of wallets to auto reconnect on first call\nconst autoReconnectWalletIds$ = store.observable.pipe(\n\tmap((s) => s.autoReconnect ?? []),\n\ttake(1),\n\tshareReplay(1),\n);\n\nexport const getWallets$ = (config: KheopskitConfig) => {\n\treturn new Observable<Wallet[]>((subscriber) => {\n\t\t// biome-ignore lint/suspicious/useIterableCallbackReturn: false positive\n\t\tconst observables = config.platforms.map(\n\t\t\t(platform): Observable<Wallet[]> => {\n\t\t\t\tswitch (platform) {\n\t\t\t\t\tcase \"polkadot\":\n\t\t\t\t\t\treturn getPolkadotWallets$(config);\n\t\t\t\t\tcase \"ethereum\":\n\t\t\t\t\t\treturn getEthereumWallets$(config);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\n\t\tconst wallets$ = observables.length\n\t\t\t? combineLatest(observables).pipe(\n\t\t\t\t\tmap((wallets) => wallets.flat().sort(sortWallets)),\n\t\t\t\t\t// Emit empty array immediately so UI doesn't wait\n\t\t\t\t\tstartWith([] as Wallet[]),\n\t\t\t\t)\n\t\t\t: of([]);\n\n\t\t// Track wallets being reconnected to avoid duplicate attempts\n\t\tconst reconnectingWallets = new Set<string>();\n\n\t\tconst subAutoReconnect = combineLatest([wallets$, autoReconnectWalletIds$])\n\t\t\t.pipe(\n\t\t\t\tfilter(([, walletIds]) => config.autoReconnect && !!walletIds?.length),\n\t\t\t\tmergeMap(([wallets, walletIds]) =>\n\t\t\t\t\twallets.filter((wallet) => walletIds?.includes(wallet.id)),\n\t\t\t\t),\n\t\t\t\tdistinct((w) => w.id),\n\t\t\t)\n\t\t\t.subscribe(async (wallet) => {\n\t\t\t\tif (wallet.isConnected || reconnectingWallets.has(wallet.id)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\treconnectingWallets.add(wallet.id);\n\t\t\t\ttry {\n\t\t\t\t\tawait wallet.connect();\n\t\t\t\t} catch (err) {\n\t\t\t\t\tconsole.error(\"Failed to reconnect wallet %s\", wallet.id, { err });\n\t\t\t\t} finally {\n\t\t\t\t\treconnectingWallets.delete(wallet.id);\n\t\t\t\t}\n\t\t\t});\n\n\t\tconst subWallets = wallets$.subscribe(subscriber);\n\n\t\treturn () => {\n\t\t\tsubAutoReconnect.unsubscribe();\n\t\t\tsubWallets.unsubscribe();\n\t\t};\n\t}).pipe(shareReplay({ refCount: true, bufferSize: 1 }));\n};\n","import type { Wallet } from \"@/api\";\n\nexport const sortWallets = (w1: Wallet, w2: Wallet) => {\n\t// Sort by platform first: polkadot first, then ethereum\n\tif (w1.platform !== w2.platform) {\n\t\treturn w1.platform === \"polkadot\" ? -1 : 1;\n\t}\n\n\t// Sort by name, but Talisman first\n\tif (w1.name.toLowerCase() === \"talisman\") return -1;\n\tif (w2.name.toLowerCase() === \"talisman\") return 1;\n\n\treturn w1.name.localeCompare(w2.name);\n};\n","import { createStore, type EIP6963ProviderDetail } from \"mipd\";\nimport {\n\tBehaviorSubject,\n\tcombineLatest,\n\tmap,\n\tObservable,\n\tshareReplay,\n} from \"rxjs\";\nimport type { EIP1193Provider } from \"viem\";\nimport { store } from \"@/api/store\";\nimport type {\n\tEthereumInjectedWallet,\n\tEthereumWallet,\n\tKheopskitConfig,\n} from \"@/api/types\";\nimport { getWalletId, type WalletId } from \"@/utils/WalletId\";\nimport { getAppKitWallets$ } from \"../appKit\";\n\nconst providersDetails$ = new Observable<EIP6963ProviderDetail[]>(\n\t(subscriber) => {\n\t\tconst store = createStore();\n\n\t\tconst unsubscribe = store.subscribe((providerDetails) => {\n\t\t\tsubscriber.next(providerDetails as EIP6963ProviderDetail[]);\n\t\t});\n\n\t\tconst providerDetails = store.getProviders();\n\n\t\tsubscriber.next(providerDetails as EIP6963ProviderDetail[]);\n\n\t\treturn () => {\n\t\t\tunsubscribe();\n\t\t\tstore.destroy();\n\t\t};\n\t},\n).pipe(shareReplay({ refCount: true, bufferSize: 1 }));\n\nconst ethereumInjectedWallets$ = new Observable<EthereumInjectedWallet[]>(\n\t(subscriber) => {\n\t\tconst enabledWalletIds$ = new BehaviorSubject<Set<WalletId>>(new Set());\n\n\t\tconst connectWallet = async (\n\t\t\twalletId: WalletId,\n\t\t\tprovider: EIP1193Provider,\n\t\t) => {\n\t\t\tif (enabledWalletIds$.value.has(walletId))\n\t\t\t\tthrow new Error(`Extension ${walletId} already connected`);\n\n\t\t\tawait provider.request({\n\t\t\t\tmethod: \"eth_requestAccounts\",\n\t\t\t});\n\n\t\t\tconst newSet = new Set(enabledWalletIds$.value);\n\t\t\tnewSet.add(walletId);\n\t\t\tenabledWalletIds$.next(newSet);\n\n\t\t\tstore.addEnabledWalletId(walletId);\n\t\t};\n\n\t\tconst disconnectWallet = async (walletId: WalletId) => {\n\t\t\tif (!enabledWalletIds$.value.has(walletId))\n\t\t\t\tthrow new Error(`Extension ${walletId} is not connected`);\n\t\t\tconst newSet = new Set(enabledWalletIds$.value);\n\t\t\tnewSet.delete(walletId);\n\t\t\tenabledWalletIds$.next(newSet);\n\n\t\t\tstore.removeEnabledWalletId(walletId);\n\t\t};\n\n\t\tconst sub = combineLatest([providersDetails$, enabledWalletIds$])\n\t\t\t.pipe(\n\t\t\t\tmap(([providerDetails, enabledWalletIds]) => {\n\t\t\t\t\treturn providerDetails.map((pd): EthereumInjectedWallet => {\n\t\t\t\t\t\tconst walletId = getWalletId(\"ethereum\", pd.info.rdns);\n\t\t\t\t\t\tconst provider = pd.provider as EIP1193Provider;\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tplatform: \"ethereum\",\n\t\t\t\t\t\t\ttype: \"injected\",\n\t\t\t\t\t\t\tid: walletId,\n\t\t\t\t\t\t\tname: pd.info.name,\n\t\t\t\t\t\t\ticon: pd.info.icon,\n\t\t\t\t\t\t\tprovider,\n\t\t\t\t\t\t\tisConnected: enabledWalletIds.has(walletId),\n\t\t\t\t\t\t\tproviderId: pd.info.rdns,\n\t\t\t\t\t\t\tconnect: () => connectWallet(walletId, provider),\n\t\t\t\t\t\t\tdisconnect: () => disconnectWallet(walletId),\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.subscribe(subscriber);\n\n\t\treturn () => {\n\t\t\tsub.unsubscribe();\n\t\t};\n\t},\n).pipe(shareReplay({ refCount: true, bufferSize: 1 }));\n\nexport const getEthereumWallets$ = (config: KheopskitConfig) => {\n\treturn new Observable<EthereumWallet[]>((subscriber) => {\n\t\tconst subscription = combineLatest([\n\t\t\tethereumInjectedWallets$,\n\t\t\tgetAppKitWallets$(config)?.pipe(map((w) => w.ethereum)),\n\t\t])\n\t\t\t.pipe(\n\t\t\t\tmap(([injectedWallets, appKitWallet]) =>\n\t\t\t\t\tappKitWallet ? [...injectedWallets, appKitWallet] : injectedWallets,\n\t\t\t\t),\n\t\t\t)\n\t\t\t.subscribe(subscriber);\n\n\t\treturn () => {\n\t\t\tsubscription.unsubscribe();\n\t\t};\n\t}).pipe(shareReplay({ refCount: true, bufferSize: 1 }));\n};\n","import { uniq } from \"lodash\";\nimport { createStore } from \"@/utils/createStore\";\nimport { parseWalletId, type WalletId } from \"@/utils/WalletId\";\n\nconst LOCAL_STORAGE_KEY = \"kheopskit\";\n\nexport type KheopskitStoreData = {\n\tautoReconnect?: WalletId[];\n};\n\nconst DEFAULT_SETTINGS: KheopskitStoreData = {};\n\nconst storage = createStore(LOCAL_STORAGE_KEY, DEFAULT_SETTINGS);\n\nexport const addEnabledWalletId = (walletId: WalletId) => {\n\tparseWalletId(walletId); // validate walletId\n\tstorage.mutate((prev) => ({\n\t\t...prev,\n\t\tautoReconnect: uniq((prev.autoReconnect ?? []).concat(walletId)),\n\t}));\n};\n\nexport const removeEnabledWalletId = (walletId: WalletId) => {\n\tstorage.mutate((prev) => ({\n\t\t...prev,\n\t\tautoReconnect: uniq(\n\t\t\t(prev.autoReconnect ?? []).filter((id) => id !== walletId),\n\t\t),\n\t}));\n};\n\nexport const store = {\n\tobservable: storage.observable,\n\taddEnabledWalletId,\n\tremoveEnabledWalletId,\n};\n","import type { WalletPlatform } from \"@/api/types\";\nimport { isWalletPlatform } from \"./isWalletPlatform\";\n\nexport type WalletId = string;\n\nexport const getWalletId = (\n\tplatform: WalletPlatform,\n\tidentifier: string,\n): WalletId => {\n\tif (!isWalletPlatform(platform)) throw new Error(\"Invalid platform\");\n\tif (!identifier) throw new Error(\"Invalid name\");\n\treturn `${platform}:${identifier}`;\n};\n\nexport const parseWalletId = (walletId: string) => {\n\tif (!walletId) throw new Error(\"Invalid walletId\");\n\tconst [platform, identifier] = walletId.split(\":\");\n\tif (!isWalletPlatform(platform)) throw new Error(\"Invalid platform\");\n\tif (!identifier) throw new Error(\"Invalid address\");\n\treturn { platform, identifier };\n};\n","import { createAppKit } from \"@reown/appkit/core\";\nimport {\n\tBehaviorSubject,\n\tcombineLatest,\n\tdistinctUntilChanged,\n\tmap,\n\tObservable,\n\tof,\n\tshareReplay,\n} from \"rxjs\";\nimport { getWalletId } from \"@/utils/WalletId\";\nimport type {\n\tEthereumAppKitWallet,\n\tKheopskitConfig,\n\tPolkadotAppKitWallet,\n} from \"./types\";\n\nconst WALLET_CONNECT_ICON =\n\t\"data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjQwMCIgdmlld0JveD0iMCAwIDQwMCA0MDAiIHdpZHRoPSI0MDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZD0ibTAgMGg0MDB2NDAwaC00MDB6Ii8+PC9jbGlwUGF0aD48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxjaXJjbGUgY3g9IjIwMCIgY3k9IjIwMCIgZmlsbD0iIzMzOTZmZiIgcj0iMTk5LjUiIHN0cm9rZT0iIzY2YjFmZiIvPjxwYXRoIGQ9Im0xMjIuNTE5IDE0OC45NjVjNDIuNzkxLTQxLjcyOSAxMTIuMTcxLTQxLjcyOSAxNTQuOTYyIDBsNS4xNSA1LjAyMmMyLjE0IDIuMDg2IDIuMTQgNS40NjkgMCA3LjU1NWwtMTcuNjE3IDE3LjE4Yy0xLjA3IDEuMDQzLTIuODA0IDEuMDQzLTMuODc0IDBsLTcuMDg3LTYuOTExYy0yOS44NTMtMjkuMTExLTc4LjI1My0yOS4xMTEtMTA4LjEwNiAwbC03LjU5IDcuNDAxYy0xLjA3IDEuMDQzLTIuODA0IDEuMDQzLTMuODc0IDBsLTE3LjYxNy0xNy4xOGMtMi4xNC0yLjA4Ni0yLjE0LTUuNDY5IDAtNy41NTV6bTE5MS4zOTcgMzUuNTI5IDE1LjY3OSAxNS4yOWMyLjE0IDIuMDg2IDIuMTQgNS40NjkgMCA3LjU1NWwtNzAuNyA2OC45NDRjLTIuMTM5IDIuMDg3LTUuNjA4IDIuMDg3LTcuNzQ4IDBsLTUwLjE3OC00OC45MzFjLS41MzUtLjUyMi0xLjQwMi0uNTIyLTEuOTM3IDBsLTUwLjE3OCA0OC45MzFjLTIuMTM5IDIuMDg3LTUuNjA4IDIuMDg3LTcuNzQ4IDBsLTcwLjcwMTUtNjguOTQ1Yy0yLjEzOTYtMi4wODYtMi4xMzk2LTUuNDY5IDAtNy41NTVsMTUuNjc5NS0xNS4yOWMyLjEzOTYtMi4wODYgNS42MDg1LTIuMDg2IDcuNzQ4MSAwbDUwLjE3ODkgNDguOTMyYy41MzUuNTIyIDEuNDAyLjUyMiAxLjkzNyAwbDUwLjE3Ny00OC45MzJjMi4xMzktMi4wODcgNS42MDgtMi4wODcgNy43NDggMGw1MC4xNzkgNDguOTMyYy41MzUuNTIyIDEuNDAyLjUyMiAxLjkzNyAwbDUwLjE3OS00OC45MzFjMi4xMzktMi4wODcgNS42MDgtMi4wODcgNy43NDggMHoiIGZpbGw9IiNmZmYiLz48L2c+PC9zdmc+\";\n\ntype AppKitWallets = {\n\tpolkadot?: PolkadotAppKitWallet;\n\tethereum?: EthereumAppKitWallet;\n};\n\n// once it exists, appKit object should never be recreated\nlet cachedAppKit: Observable<AppKitWallets> | null = null;\n\nexport const getAppKitWallets$ = (\n\tconfig: KheopskitConfig,\n): Observable<AppKitWallets> => {\n\tif (!config.walletConnect) return of({});\n\n\tconst walletConnect = config.walletConnect;\n\n\tif (!cachedAppKit) {\n\t\tcachedAppKit = new Observable<AppKitWallets>((subscriber) => {\n\t\t\tconst appKit = createAppKit({\n\t\t\t\tprojectId: walletConnect.projectId,\n\t\t\t\tmetadata: walletConnect.metadata,\n\t\t\t\tnetworks: walletConnect.networks,\n\t\t\t\tthemeMode: walletConnect.themeMode,\n\t\t\t\tthemeVariables: walletConnect.themeVariables,\n\t\t\t\tuniversalProviderConfigOverride: {\n\t\t\t\t\tmethods: {\n\t\t\t\t\t\tpolkadot: [\"polkadot_signTransaction\", \"polkadot_signMessage\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tallWallets: \"HIDE\",\n\t\t\t\tdebug: config.debug,\n\t\t\t\tallowUnsupportedChain: true,\n\t\t\t});\n\n\t\t\tconst status$ = new BehaviorSubject({\n\t\t\t\tisPolkadotConnected: false,\n\t\t\t\tisEthereumConnected: false,\n\t\t\t});\n\n\t\t\tconst unsubProviders = appKit.subscribeProviders((providers) => {\n\t\t\t\tstatus$.next({\n\t\t\t\t\tisPolkadotConnected: !!providers.polkadot,\n\t\t\t\t\tisEthereumConnected: !!providers.eip155,\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tconst polkadotWallet$ = appKit.chainNamespaces.includes(\"polkadot\")\n\t\t\t\t? status$.pipe(\n\t\t\t\t\t\tmap((s) => s.isPolkadotConnected),\n\t\t\t\t\t\tdistinctUntilChanged(),\n\t\t\t\t\t\tmap((isConnected): PolkadotAppKitWallet => {\n\t\t\t\t\t\t\tconst walletInfo = appKit.getWalletInfo();\n\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tid: getWalletId(\"polkadot\", \"walletconnect\"),\n\t\t\t\t\t\t\t\tplatform: \"polkadot\",\n\t\t\t\t\t\t\t\ttype: \"appKit\",\n\t\t\t\t\t\t\t\tappKit, // todo maybe we dont want to expose the appKit instance\n\t\t\t\t\t\t\t\tname: walletInfo?.name ?? \"WalletConnect\",\n\t\t\t\t\t\t\t\ticon: walletInfo?.icon ?? WALLET_CONNECT_ICON,\n\t\t\t\t\t\t\t\tconnect: async () => {\n\t\t\t\t\t\t\t\t\tif (!isConnected) await appKit.open();\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tdisconnect: () => {\n\t\t\t\t\t\t\t\t\tif (isConnected) appKit.disconnect();\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tisConnected,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t: of(undefined);\n\n\t\t\tconst ethereumWallet$ = appKit.chainNamespaces.includes(\"eip155\")\n\t\t\t\t? status$.pipe(\n\t\t\t\t\t\tmap((s) => s.isEthereumConnected),\n\t\t\t\t\t\tdistinctUntilChanged(),\n\t\t\t\t\t\tmap((isConnected): EthereumAppKitWallet => {\n\t\t\t\t\t\t\tconst walletInfo = appKit.getWalletInfo();\n\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tid: getWalletId(\"ethereum\", \"walletconnect\"),\n\t\t\t\t\t\t\t\tplatform: \"ethereum\",\n\t\t\t\t\t\t\t\ttype: \"appKit\",\n\t\t\t\t\t\t\t\tappKit,\n\t\t\t\t\t\t\t\tname: walletInfo?.name ?? \"WalletConnect\",\n\t\t\t\t\t\t\t\ticon: walletInfo?.icon ?? WALLET_CONNECT_ICON,\n\t\t\t\t\t\t\t\tconnect: () => appKit.open(),\n\t\t\t\t\t\t\t\tdisconnect: () => appKit.disconnect(),\n\t\t\t\t\t\t\t\tisConnected,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t: of(undefined);\n\n\t\t\tconst sub = combineLatest({\n\t\t\t\tpolkadot: polkadotWallet$,\n\t\t\t\tethereum: ethereumWallet$,\n\t\t\t}).subscribe(subscriber);\n\n\t\t\treturn () => {\n\t\t\t\tsub.unsubscribe();\n\t\t\t\tunsubProviders();\n\t\t\t};\n\t\t}).pipe(shareReplay({ refCount: true, bufferSize: 1 }));\n\t}\n\n\treturn cachedAppKit;\n};\n","import { isEqual } from \"lodash\";\nimport {\n\tconnectInjectedExtension,\n\tgetInjectedExtensions,\n\ttype InjectedExtension,\n} from \"polkadot-api/pjs-signer\";\nimport {\n\tBehaviorSubject,\n\tcombineLatest,\n\tdistinctUntilChanged,\n\tmap,\n\tObservable,\n\tshareReplay,\n} from \"rxjs\";\nimport { store } from \"@/api/store\";\nimport type {\n\tKheopskitConfig,\n\tPolkadotInjectedWallet,\n\tPolkadotWallet,\n} from \"@/api/types\";\nimport { POLKADOT_EXTENSIONS } from \"@/utils/polkadotExtensions\";\nimport { getWalletId, parseWalletId, type WalletId } from \"@/utils/WalletId\";\nimport { getAppKitWallets$ } from \"../appKit\";\n\nconst getInjectedWalletsIds = () =>\n\tgetInjectedExtensions().map((name) => getWalletId(\"polkadot\", name));\n\n// Create a polling observable that starts immediately and polls at intervals\nconst createWalletIdsPoller$ = () => {\n\treturn new Observable<WalletId[]>((subscriber) => {\n\t\t// Emit immediately on subscribe\n\t\tsubscriber.next(getInjectedWalletsIds());\n\n\t\t// Poll at shorter intervals initially, then slow down\n\t\tconst intervals = [100, 200, 300, 500];\n\t\tlet index = 0;\n\n\t\tconst poll = () => {\n\t\t\tsubscriber.next(getInjectedWalletsIds());\n\t\t\tif (index < intervals.length) {\n\t\t\t\tconst delay = intervals[index++];\n\t\t\t\tsetTimeout(poll, delay);\n\t\t\t}\n\t\t};\n\n\t\t// Start polling after first immediate emission\n\t\tif (intervals.length > 0) {\n\t\t\tsetTimeout(poll, intervals[index++] ?? 100);\n\t\t}\n\n\t\treturn () => {\n\t\t\t// Cleanup handled by setTimeout naturally expiring\n\t\t};\n\t}).pipe(\n\t\tdistinctUntilChanged<WalletId[]>(isEqual),\n\t\tshareReplay({ refCount: true, bufferSize: 1 }),\n\t);\n};\n\nexport const polkadotInjectedWallets$ = new Observable<\n\tPolkadotInjectedWallet[]\n>((subscriber) => {\n\tconst enabledExtensions$ = new BehaviorSubject<\n\t\tMap<WalletId, InjectedExtension>\n\t>(new Map());\n\n\tconst connect = async (walletId: WalletId) => {\n\t\tif (enabledExtensions$.value.has(walletId))\n\t\t\tthrow new Error(`Extension ${walletId} already connected`);\n\t\tconst { identifier } = parseWalletId(walletId);\n\t\tconst extension = await connectInjectedExtension(identifier);\n\n\t\tconst newMap = new Map(enabledExtensions$.value);\n\t\tnewMap.set(walletId, extension);\n\t\tenabledExtensions$.next(newMap);\n\n\t\tstore.addEnabledWalletId(walletId);\n\t};\n\n\tconst disconnect = (walletId: WalletId) => {\n\t\tif (!enabledExtensions$.value.has(walletId))\n\t\t\tthrow new Error(`Extension ${walletId} is not connected`);\n\n\t\tconst newMap = new Map(enabledExtensions$.value);\n\t\tnewMap.delete(walletId);\n\t\tenabledExtensions$.next(newMap);\n\n\t\tstore.removeEnabledWalletId(walletId);\n\t};\n\n\tconst walletIds$ = createWalletIdsPoller$();\n\n\tconst subscription = combineLatest([walletIds$, enabledExtensions$])\n\t\t.pipe(\n\t\t\tmap(([walletIds, enabledExtensions]) => {\n\t\t\t\treturn walletIds.map((id): PolkadotInjectedWallet => {\n\t\t\t\t\tconst { identifier } = parseWalletId(id);\n\t\t\t\t\tconst extension = enabledExtensions.get(id);\n\t\t\t\t\tconst extInfo = POLKADOT_EXTENSIONS[identifier];\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid,\n\t\t\t\t\t\ttype: \"injected\",\n\t\t\t\t\t\tplatform: \"polkadot\",\n\t\t\t\t\t\tname: extInfo?.name ?? identifier,\n\t\t\t\t\t\ticon: extInfo?.icon ?? \"\",\n\t\t\t\t\t\textensionId: identifier,\n\t\t\t\t\t\textension,\n\t\t\t\t\t\tisConnected: !!extension,\n\t\t\t\t\t\tconnect: () => connect(id),\n\t\t\t\t\t\tdisconnect: () => disconnect(id),\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t}),\n\t\t)\n\t\t.subscribe(subscriber);\n\n\treturn () => {\n\t\t// console.log(\"Unsubscribing from polkadotInjectedWallets$\");\n\t\tsubscription.unsubscribe();\n\t};\n}).pipe(\n\t// logObservable(\"polkadotInjectedWallets$\"),\n\tshareReplay({ refCount: true, bufferSize: 1 }),\n);\n\nexport const getPolkadotWallets$ = (config: KheopskitConfig) => {\n\treturn new Observable<PolkadotWallet[]>((subscriber) => {\n\t\tconst subscription = combineLatest([\n\t\t\tpolkadotInjectedWallets$,\n\t\t\tgetAppKitWallets$(config)?.pipe(map((w) => w.polkadot)),\n\t\t])\n\t\t\t.pipe(\n\t\t\t\tmap(([injectedWallets, appKitWallet]) =>\n\t\t\t\t\tappKitWallet ? [...injectedWallets, appKitWallet] : injectedWallets,\n\t\t\t\t),\n\t\t\t)\n\t\t\t.subscribe(subscriber);\n\n\t\treturn () => {\n\t\t\tsubscription.unsubscribe();\n\t\t};\n\t}).pipe(\n\t\t// logObservable(\"getPolkadotWallets$\"),\n\t\tshareReplay({ refCount: true, bufferSize: 1 }),\n\t);\n};\n","export const POLKADOT_EXTENSIONS: Record<\n\tstring,\n\t{ name: string; icon: string }\n> = {\n\ttalisman: {\n\t\tname: \"Talisman\",\n\t\ticon: \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgdmlld0JveD0iMCAwIDEyOCAxMjgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8cGF0aCBmaWxsPSIjZGRmZTc2IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0wIDcwLjI1YzAgMjEuMjU1IDAgMzEuODgzIDQuNDYzIDM5Ljg1MmEzNSAzNSAwIDAgMCAxMy40MzUgMTMuNDM1QzI1Ljg2NyAxMjggMzYuNDk1IDEyOCA1Ny43NSAxMjhoMTIuNWMyMS4yNTUgMCAzMS44ODMgMCAzOS44NTItNC40NjNhMzUgMzUgMCAwIDAgMTMuNDM1LTEzLjQzNUMxMjggMTAyLjEzMyAxMjggOTEuNTA1IDEyOCA3MC4yNXYtMTIuNWMwLTIxLjI1NSAwLTMxLjg4My00LjQ2My0zOS44NTJhMzUgMzUgMCAwIDAtMTMuNDM1LTEzLjQzNUMxMDIuMTMzIDAgOTEuNTA1IDAgNzAuMjUgMGgtMTIuNUMzNi40OTUgMCAyNS44NjcgMCAxNy44OTggNC40NjNBMzUgMzUgMCAwIDAgNC40NjMgMTcuODk4QzAgMjUuODY3IDAgMzYuNDk1IDAgNTcuNzVaIi8+CiAgICA8cGF0aCBmaWxsPSIjZWE1NzUwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Im0zMy44NzkgMzUuMTE3LS41IDE5LjE2NWM4LjEwNyA0LjE2OCAxNS43NSA0LjA3NSAyNC43NCAyLjA2MyAzLjU2LTEuMzk3IDYuMDU2LTEuNzAyIDkuNTExIDAgOS4wNjcgMi44MTYgMTYuOTY5IDEuOTUgMjUuMTg1LTIuMjQzbC0uNDg1LTE5LjE4N2MwLTEwLjgwNS03LjAwNC0xNC45NjItMTQuNjMyLTEyLjczOS0uNzc5LjIzMi0xLjk0NCAxLjI3NC0xLjk0NCAyLjIwN2wtLjE4MSAxOC43MzNhMS43NyAxLjc3IDAgMSAxLTMuNTM4LS4wMTVWMjAuMDY3YTguODM4IDguODM4IDAgMCAwLTE3LjY3NSAwVjQzLjFhMS43NyAxLjc3IDAgMSAxLTMuNTM4LjAxNWwtLjE3Ni0xOC43NDNjMC0uOTIzLTEuMTA5LTEuOTYtMS44ODItMi4xOTItOC44LTIuNjEtMTQuODggMi41MzgtMTQuODggMTIuOTM2Wm0yLjQ3NSAyMy44NDNhNDguNDMgNDguNDMgMCAwIDEtNS4yMDktMi4yNTRjLTQuNzMtMi4yNjktMTIuMDk1LTEuNTYyLTE3LjA3MiA0LjExMS0yLjI3NCAyLjYtLjUxNSA2LjM2IDIuNzcgNy40NDggMS41ODMuNTI2IDMuMDE3IDEuNDEzIDQuMzUzIDIuNDA4bC40NjQuMzM2YzQuMTMyIDIuOTY1IDYuNzkzIDcuNDA2IDcuMDU2IDEyLjQ4NmwuMjUzIDQuODEyYTMxLjYxNiAzMS42MTYgMCAwIDAgMTkuNDI4IDI1Ljk1OSAzOC41OSAzOC41OSAwIDAgMCAyOS4zMjcgMCAzMS42MTYgMzEuNjE2IDAgMCAwIDE5LjQyOS0yNS45NTljLjA0Ni0uODI1LjA2MS0xLjY1LjA1MS0yLjQ2NWwuMTI0LTIuMzQ3Yy4yNjMtNS4wOCAyLjkyNC05LjUyIDcuMDU2LTEyLjQ4NmwuNDY0LS4zMzZjMS4zNC0uOTk1IDIuNzctMS44ODIgNC4zNTMtMi40MDggMy4yODUtMS4wODkgNS4wNS00Ljg0OSAyLjc3LTcuNDQ4LTQuOTc4LTUuNjczLTEyLjM0My02LjM3NS0xNy4wNzItNC4xMS0xLjcxOC44MjUtMy40MzUgMS42NS01LjIxIDIuMjUzbC0zLjYyIDEuMjM4LS4wMS4wNDFjLTYuNjU0IDEuODQyLTEyLjEyIDEuODQ3LTE4LjM5OC0uNzQyLTMuMTc3LTEuMzEtNi4zOC0xLjU1OC05LjQ4IDAtNS45NjcgMS44NTYtMTIuMDQ4IDIuNjQtMTguMjA2LjcwMWwtMy42MjYtMS4yMzhabTI2LjY2NSA0NC43MzJjMTMuMzkgMCAyNC4yNDEtMTUuNTk2IDI0LjI0MS0xNS41OTZTNzYuNDEgNzIuNDk5IDYzLjAyIDcyLjQ5OWMtMTMuMzg1IDAtMjQuMjM2IDE1LjU5Ny0yNC4yMzYgMTUuNTk3czEwLjg1MSAxNS41OTYgMjQuMjQgMTUuNTk2Wm0xMC44ODMtMTUuNTk2YzAgNi4wMS00Ljg3MiAxMC44ODItMTAuODgzIDEwLjg4Mi02LjAxIDAtMTAuODgyLTQuODcyLTEwLjg4Mi0xMC44ODJzNC44NzItMTAuODgzIDEwLjg4Mi0xMC44ODMgMTAuODgzIDQuODcyIDEwLjg4MyAxMC44ODNabS0xMC44ODMgNC45MzZhNC45MzYgNC45MzYgMCAxIDAgMC05Ljg3MiA0LjkzNiA0LjkzNiAwIDAgMCAwIDkuODcyWiIvPgo8L3N2Zz4K\",\n\t},\n\t\"polkadot-js\": {\n\t\tname: \"Polkadot.js\",\n\t\ticon: \"data:image/svg+xml;base64,ICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEwNi4yIDEwNi4yIj4KICAgIDxkZWZzPjwvZGVmcz4KICAgIDxnIGlkPSJMYXllcl8yIiBkYXRhLW5hbWU9IkxheWVyIDIiPgogICAgICA8ZyBpZD0iTGF5ZXJfMS0yIiBkYXRhLW5hbWU9IkxheWVyIDEiPgogICAgICAgIDxjaXJjbGUgY3g9IjUzLjEiIGN5PSI1My4xIiByPSI1My4xIiBmaWxsPSIjZjI5MjM1IiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICBmaWxsPSIjZmZmIgogICAgICAgICAgZD0iTTU0LjQ3IDEzLjc2YTI4Ljg1IDI4Ljg1IDAgMDAtMjguNzMgMjguNzMgMjkuMzQgMjkuMzQgMCAwMDEuNTIgOS4zNCA0IDQgMCAxMDcuNDktMi41MkExOC42NyAxOC42NyAwIDAxMzMuNjMgNDJhMjAuNzIgMjAuNzIgMCAxMTIyIDIxLjMxcy00IC4yNS02IC40OWMtLjc0LjExLTEuNDguMjYtMi4yLjQ0YS4yOC4yOCAwIDAxLS4zOCAwIC4yNy4yNyAwIDAxMC0uMzJsLjYzLTMuNDEgMy43OS0xN2EzLjk0IDMuOTQgMCAxMC03LjcxLTEuNjVzLTkgNDEuNy05IDQyLjA4YTMuNzkgMy43OSAwIDAwMi43NCA0LjZoLjI4YTMuNzggMy43OCAwIDAwNC42MS0yLjcxLjQzLjQzIDAgMDAwLS4xMXYtLjE5Yy4xMS0uNDkgMS4yNS02IDEuMjUtNmExMC4yMyAxMC4yMyAwIDAxOC40Ni04Yy44Ny0uMTMgNC41My0uMzggNC41My0uMzhhMjguNzEgMjguNzEgMCAwMC0yLjExLTU3LjI3eiIKICAgICAgICAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICBmaWxsPSIjZmZmIgogICAgICAgICAgZD0iTTU2LjIxIDgwYTQuNzggNC43OCAwIDAwLTUuNjYgMy43MS4yNC4yNCAwIDAxMCAuMDggNC43NyA0Ljc3IDAgMDAzLjY1IDUuNjdoLjE0QTQuNyA0LjcgMCAwMDYwIDg2di0uMzJBNSA1IDAgMDA1Ni4yMSA4MHoiCiAgICAgICAgLz4KICAgICAgPC9nPgogICAgPC9nPgogIDwvc3ZnPg==\",\n\t},\n\t\"subwallet-js\": {\n\t\tname: \"SubWallet\",\n\t\ticon: \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYwIiBoZWlnaHQ9IjE2MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNODAgNGM1Ny42MyAwIDc2IDE4LjM3IDc2IDc2IDAgNTcuNjMtMTguMzcgNzYtNzYgNzYtNTcuNjMgMC03Ni0xOC4zNy03Ni03NkM0IDIyLjM3IDIyLjM3IDQgODAgNFoiIGZpbGw9InVybCgjYSkiLz48ZyBjbGlwLXBhdGg9InVybCgjYikiPjxwYXRoIGQ9Ik0xMTIuNjE1IDY2LjcyVjUzLjM5OEw1OC43NiAzMiA0OCAzNy40MTJsLjA1NyA0MS40NjQgNDAuMjkyIDE2LjA3LTIxLjUyIDkuMDc1di03LjAxOEw1Ni45NSA5My4wM2wtOC44OTMgNC4xNjN2MjUuMzk1TDU4Ljc2OSAxMjhsNTMuODQ2LTI0LjA2MlY4Ni44NjlMNjQuMTU0IDY3LjY1N1Y1NmwzOC40NDkgMTUuMjE2IDEwLjAxMi00LjQ5NloiIGZpbGw9IiNmZmYiLz48L2c+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJhIiB4MT0iODAiIHkxPSI0IiB4Mj0iODAiIHkyPSIxNTYiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjMDA0QkZGIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNENFQUFDIi8+PC9saW5lYXJHcmFkaWVudD48Y2xpcFBhdGggaWQ9ImIiPjxwYXRoIGZpbGw9IiNmZmYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4IDMyKSIgZD0iTTAgMGg2NC42MTV2OTZIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=\",\n\t},\n\tenkrypt: {\n\t\tname: \"Enkrypt\",\n\t\ticon: \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODEiIGhlaWdodD0iODEiIHZpZXdCb3g9IjAgMCA4MSA4MSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNy4wMDU3IDE3LjAwNjJDMTguOTMwMyAxNS4wODE2IDIxLjU0MDUgMTQuMDAwNCAyNC4yNjIyIDE0LjAwMDRMNjcuMzI5NiAxNFYyMS44NzQxQzY3LjMyOTYgMjMuODMwNSA2Ni41NTIzIDI1LjcwNjcgNjUuMTY5IDI3LjA5QzYzLjc4NTcgMjguNDczMyA2MS45MDk1IDI5LjI1MDQgNTkuOTUzMiAyOS4yNTA0SDM5LjcwNDVDMzYuOTgyOCAyOS4yNTA0IDM0LjM3MjYgMzAuMzMxNiAzMi40NDggMzIuMjU2MUMzMC41MjM1IDM0LjE4MDcgMjkuNDQyMyAzNi43OTA5IDI5LjQ0MjMgMzkuNTEyNlY0Mi4xMjQyQzI5LjQ0MjMgNDQuODQ1OSAzMC41MjM1IDQ3LjQ1NjEgMzIuNDQ4IDQ5LjM4MDZDMzQuMzcyNiA1MS4zMDUxIDM2Ljk4MjggNTIuMzg2MyAzOS43MDQ1IDUyLjM4NjNINTkuOTUzMkM2MS45MDk1IDUyLjM4NjMgNjMuNzg1NyA1My4xNjM1IDY1LjE2OSA1NC41NDY4QzY2LjU1MjMgNTUuOTMwMSA2Ny4zMjk2IDU3LjgwNjMgNjcuMzI5NiA1OS43NjI2VjY3LjMzSDI0LjI2MjJDMjEuNTQwNSA2Ny4zMyAxOC45MzAzIDY2LjI0ODggMTcuMDA1NyA2NC4zMjQzQzE1LjA4MTIgNjIuMzk5NyAxNCA1OS43ODk1IDE0IDU3LjA2NzhWMjQuMjYyNkMxNCAyMS41NDA5IDE1LjA4MTIgMTguOTMwNyAxNy4wMDU3IDE3LjAwNjJaTTQwLjE0NzkgMzMuNTQyM0g2MC45MTU3QzY0LjQ1OCAzMy41NDIzIDY3LjMyOTUgMzYuNDEzOCA2Ny4zMjk1IDM5Ljk1NjFWNDEuNjgxNkM2Ny4zMjk1IDQ1LjIyMzggNjQuNDU4IDQ4LjA5NTQgNjAuOTE1NyA0OC4wOTU0SDQwLjE0NzlDMzYuNjA1NyA0OC4wOTU0IDMzLjczNDEgNDUuMjIzOCAzMy43MzQxIDQxLjY4MTZWMzkuOTU2MUMzMy43MzQxIDM2LjQxMzggMzYuNjA1NyAzMy41NDIzIDQwLjE0NzkgMzMuNTQyM1oiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcl8yODdfMjM1OSkiLz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl8yODdfMjM1OSIgeDE9IjE5LjM2MDIiIHkxPSIxNCIgeDI9IjU2Ljc2OTYiIHkyPSI2OS44MDA1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiNDNTQ5RkYiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNjU0QkZGIi8+CjwvbGluZWFyR3JhZGllbnQ+CjwvZGVmcz4KPC9zdmc+Cg==\",\n\t},\n};\n"],"mappings":"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","names":["import_rxjs","import_rxjs","import_rxjs","import_viem","import_rxjs","import_rxjs","getInjectedWalletAccounts$","address","getAppKitAccounts$","isSameAccountsList","w","import_rxjs","import_rxjs","import_rxjs","store","providerDetails","import_lodash","import_pjs_signer","import_rxjs"]}