@kheopskit/core 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -119,6 +119,7 @@ var hydrateAccount = (cached) => {
119
119
  id: cached.id,
120
120
  platform: "ethereum",
121
121
  address: cached.address,
122
+ chainId: cached.chainId,
122
123
  walletId: cached.walletId,
123
124
  walletName: cached.walletName,
124
125
  isWalletDefault: false,
@@ -141,6 +142,7 @@ var serializeAccount = (account) => ({
141
142
  platform: account.platform,
142
143
  address: account.address,
143
144
  name: "name" in account ? account.name : void 0,
145
+ chainId: account.platform === "ethereum" ? account.chainId : void 0,
144
146
  walletId: account.walletId,
145
147
  walletName: account.walletName
146
148
  });
@@ -693,12 +695,37 @@ var getWalletAccountId = (walletId, address) => {
693
695
  };
694
696
 
695
697
  // src/api/ethereum/accounts.ts
698
+ var normalizeEvmChainId = (value) => {
699
+ let raw = value;
700
+ if (typeof raw === "string" && raw.startsWith("eip155:")) {
701
+ raw = raw.slice("eip155:".length);
702
+ }
703
+ if (typeof raw === "bigint") {
704
+ return raw >= 0n ? Number(raw) : void 0;
705
+ }
706
+ if (typeof raw === "number") {
707
+ return Number.isInteger(raw) && raw >= 0 ? raw : void 0;
708
+ }
709
+ if (typeof raw === "string") {
710
+ const normalized = raw.trim().toLowerCase();
711
+ if (!normalized) return void 0;
712
+ const parsed = normalized.startsWith("0x") ? Number.parseInt(normalized, 16) : Number.parseInt(normalized, 10);
713
+ return Number.isNaN(parsed) ? void 0 : parsed;
714
+ }
715
+ return void 0;
716
+ };
717
+ var toCaipNetworkId = (value) => {
718
+ const chainId = normalizeEvmChainId(value);
719
+ return chainId === void 0 ? void 0 : `eip155:${chainId}`;
720
+ };
696
721
  var getInjectedWalletAccounts$ = (wallet) => {
697
722
  if (!wallet.isConnected) return of2([]);
698
723
  return getCachedObservable$(
699
724
  `accounts:${wallet.id}`,
700
725
  () => new Observable3((subscriber) => {
701
- const getAccount = (address, i) => {
726
+ const addresses$ = new ReplaySubject(1);
727
+ const chainId$ = new ReplaySubject(1);
728
+ const getAccount = (address, i, chainId) => {
702
729
  const client = createWalletClient({
703
730
  account: address,
704
731
  transport: custom(wallet.provider)
@@ -708,26 +735,42 @@ var getInjectedWalletAccounts$ = (wallet) => {
708
735
  platform: "ethereum",
709
736
  client,
710
737
  address: getAddress(address),
738
+ chainId,
711
739
  walletName: wallet.name,
712
740
  walletId: wallet.id,
713
741
  isWalletDefault: i === 0
714
742
  };
715
743
  };
716
- const handleAccountsChanged = (addresses) => {
717
- subscriber.next(addresses.map(getAccount));
744
+ const handleAccountsChanged = (addrs) => {
745
+ addresses$.next(addrs);
746
+ };
747
+ const handleChainChanged = (chainIdHex) => {
748
+ chainId$.next(normalizeEvmChainId(chainIdHex));
749
+ };
750
+ const handleDisconnect = () => {
751
+ chainId$.next(void 0);
718
752
  };
719
753
  wallet.provider.on("accountsChanged", handleAccountsChanged);
720
- wallet.provider.request({ method: "eth_accounts" }).then((addresses) => {
721
- subscriber.next(addresses.map(getAccount));
722
- }).catch((err) => {
754
+ wallet.provider.on("chainChanged", handleChainChanged);
755
+ wallet.provider.on("disconnect", handleDisconnect);
756
+ wallet.provider.request({ method: "eth_accounts" }).then((addrs) => addresses$.next(addrs)).catch((err) => {
723
757
  console.error("Failed to get accounts", err);
724
- subscriber.next([]);
758
+ addresses$.next([]);
725
759
  });
760
+ wallet.provider.request({ method: "eth_chainId" }).then(handleChainChanged).catch(() => chainId$.next(void 0));
761
+ const sub = combineLatest3([addresses$, chainId$]).pipe(
762
+ map3(
763
+ ([addresses, chainId]) => addresses.map((addr, i) => getAccount(addr, i, chainId))
764
+ )
765
+ ).subscribe(subscriber);
726
766
  return () => {
727
767
  wallet.provider.removeListener(
728
768
  "accountsChanged",
729
769
  handleAccountsChanged
730
770
  );
771
+ wallet.provider.removeListener("chainChanged", handleChainChanged);
772
+ wallet.provider.removeListener("disconnect", handleDisconnect);
773
+ sub.unsubscribe();
731
774
  };
732
775
  }).pipe(shareReplay3({ refCount: true, bufferSize: 1 }))
733
776
  );
@@ -756,24 +799,29 @@ var getAppKitAccounts$ = (wallet) => {
756
799
  () => new Observable3((subscriber) => {
757
800
  const caipNetworkId$ = new ReplaySubject(1);
758
801
  const handleChainChanged = (chainId) => {
759
- caipNetworkId$.next(`eip155:${chainId}`);
802
+ const caipNetworkId = toCaipNetworkId(chainId);
803
+ if (caipNetworkId) {
804
+ caipNetworkId$.next(caipNetworkId);
805
+ }
760
806
  };
761
807
  provider.on("chainChanged", handleChainChanged);
762
808
  provider.request({ method: "eth_chainId" }).then(handleChainChanged);
763
809
  const sub = caipNetworkId$.pipe(
764
810
  distinctUntilChanged2(),
765
- map3(
766
- (caipNetworkId) => custom(
811
+ map3((caipNetworkId) => {
812
+ const chainId = normalizeEvmChainId(caipNetworkId);
813
+ const transport = custom(
767
814
  wrapWalletConnectProvider(
768
815
  provider,
769
816
  // biome-ignore lint/style/noNonNullAssertion: legacy
770
817
  provider.session.topic,
771
818
  caipNetworkId
772
819
  )
773
- )
774
- ),
820
+ );
821
+ return { transport, chainId };
822
+ }),
775
823
  map3(
776
- (transport) => account.allAccounts.map((acc, i) => {
824
+ ({ transport, chainId }) => account.allAccounts.map((acc, i) => {
777
825
  const client = createWalletClient({
778
826
  account: acc.address,
779
827
  transport
@@ -785,6 +833,7 @@ var getAppKitAccounts$ = (wallet) => {
785
833
  walletId: wallet.id,
786
834
  address: acc.address,
787
835
  client,
836
+ chainId,
788
837
  isWalletDefault: i === 0
789
838
  };
790
839
  })
@@ -819,7 +868,9 @@ var getEthereumAccounts$ = (ethereumWallets) => new Observable3((subscriber) =>
819
868
  );
820
869
  var isSameAccountsList = (a, b) => {
821
870
  if (a.length !== b.length) return false;
822
- return a.every((account, i) => account.id === b[i]?.id);
871
+ return a.every(
872
+ (account, i) => account.id === b[i]?.id && account.chainId === b[i]?.chainId
873
+ );
823
874
  };
824
875
 
825
876
  // src/api/polkadot/accounts.ts
@@ -1045,7 +1096,8 @@ var toCompactStore = (data) => {
1045
1096
  (account) => [
1046
1097
  account.walletId,
1047
1098
  account.address,
1048
- account.name ?? null
1099
+ account.name ?? null,
1100
+ account.chainId ?? null
1049
1101
  ]
1050
1102
  );
1051
1103
  return {
@@ -1070,13 +1122,14 @@ var fromCompactStore = (data) => {
1070
1122
  };
1071
1123
  });
1072
1124
  const accounts = (data.a ?? []).map((item) => {
1073
- const [walletId, address, name] = item;
1125
+ const [walletId, address, name, chainId] = item;
1074
1126
  const { platform } = parseWalletId(walletId);
1075
1127
  return {
1076
1128
  id: getWalletAccountId(walletId, address),
1077
1129
  platform,
1078
1130
  address,
1079
1131
  name: name ?? void 0,
1132
+ chainId: chainId ?? void 0,
1080
1133
  walletId,
1081
1134
  walletName: walletNameMap.get(walletId) ?? walletId
1082
1135
  };
@@ -1567,7 +1620,9 @@ var getKheopskit$ = (config, ssrCookies, existingStore) => {
1567
1620
  var arraysEqual = (a, b) => a.length === b.length && a.every((v, i) => v === b[i]);
1568
1621
  var statesEqual = (a, b) => a.isHydrating === b.isHydrating && a.wallets.length === b.wallets.length && a.accounts.length === b.accounts.length && a.wallets.every(
1569
1622
  (w, i) => w.id === b.wallets[i]?.id && w.isConnected === b.wallets[i]?.isConnected
1570
- ) && a.accounts.every((acc, i) => acc.id === b.accounts[i]?.id);
1623
+ ) && a.accounts.every(
1624
+ (acc, i) => acc.id === b.accounts[i]?.id && (acc.platform !== "ethereum" || acc.chainId === b.accounts[i]?.chainId)
1625
+ );
1571
1626
  export {
1572
1627
  DEFAULT_STORAGE_KEY,
1573
1628
  clearAllCachedObservables,