@kheopskit/core 4.0.0 → 5.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/dist/{chunk-SIUWQBT4.js → chunk-4ENHC7G4.js} +11 -2
  2. package/dist/chunk-4ENHC7G4.js.map +1 -0
  3. package/dist/{chunk-KWFQDD7E.mjs → chunk-6XAZANB5.mjs} +58 -186
  4. package/dist/chunk-6XAZANB5.mjs.map +1 -0
  5. package/dist/{chunk-PNPPI5CH.mjs → chunk-7QSGAJ4A.mjs} +11 -2
  6. package/dist/chunk-7QSGAJ4A.mjs.map +1 -0
  7. package/dist/{chunk-TMAPQWW2.js → chunk-B4L6GAYD.js} +24 -9
  8. package/dist/chunk-B4L6GAYD.js.map +1 -0
  9. package/dist/chunk-XQWJM3KC.js +450 -0
  10. package/dist/chunk-XQWJM3KC.js.map +1 -0
  11. package/dist/{chunk-4RBYRNY3.mjs → chunk-YDLCHYHH.mjs} +22 -7
  12. package/dist/chunk-YDLCHYHH.mjs.map +1 -0
  13. package/dist/ethereum.d.mts +4 -3
  14. package/dist/ethereum.d.ts +4 -3
  15. package/dist/ethereum.js +61 -42
  16. package/dist/ethereum.js.map +1 -1
  17. package/dist/ethereum.mjs +53 -34
  18. package/dist/ethereum.mjs.map +1 -1
  19. package/dist/index.d.mts +20 -6
  20. package/dist/index.d.ts +20 -6
  21. package/dist/index.js +253 -47
  22. package/dist/index.js.map +1 -1
  23. package/dist/index.mjs +271 -65
  24. package/dist/index.mjs.map +1 -1
  25. package/dist/internal.d.mts +4 -4
  26. package/dist/internal.d.ts +4 -4
  27. package/dist/internal.js +3 -3
  28. package/dist/internal.mjs +2 -2
  29. package/dist/polkadot.d.mts +4 -3
  30. package/dist/polkadot.d.ts +4 -3
  31. package/dist/polkadot.js +26 -37
  32. package/dist/polkadot.js.map +1 -1
  33. package/dist/polkadot.mjs +13 -24
  34. package/dist/polkadot.mjs.map +1 -1
  35. package/dist/solana.d.mts +5 -4
  36. package/dist/solana.d.ts +5 -4
  37. package/dist/solana.js +37 -42
  38. package/dist/solana.js.map +1 -1
  39. package/dist/solana.mjs +26 -31
  40. package/dist/solana.mjs.map +1 -1
  41. package/dist/{types-BNzRUNw-.d.mts → types-C7V7DGlg.d.mts} +47 -17
  42. package/dist/{types-BNzRUNw-.d.ts → types-C7V7DGlg.d.ts} +47 -17
  43. package/package.json +42 -16
  44. package/dist/chunk-4RBYRNY3.mjs.map +0 -1
  45. package/dist/chunk-FIAL4HTE.js +0 -1
  46. package/dist/chunk-FIAL4HTE.js.map +0 -1
  47. package/dist/chunk-KWFQDD7E.mjs.map +0 -1
  48. package/dist/chunk-NU46D4MZ.js +0 -578
  49. package/dist/chunk-NU46D4MZ.js.map +0 -1
  50. package/dist/chunk-PNPPI5CH.mjs.map +0 -1
  51. package/dist/chunk-SIUWQBT4.js.map +0 -1
  52. package/dist/chunk-TMAPQWW2.js.map +0 -1
  53. package/dist/chunk-YFD3IKK5.mjs +0 -1
  54. package/dist/chunk-YFD3IKK5.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/kheopskit/kheopskit/packages/core/dist/polkadot.js","../src/api/polkadot/accounts.ts","../src/api/polkadot/wallets.ts","../src/api/polkadot/plugin.ts"],"names":["address","combineLatest","distinctUntilChanged","map","Observable","shareReplay"],"mappings":"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","file":"/home/runner/work/kheopskit/kheopskit/packages/core/dist/polkadot.js","sourcesContent":[null,"import {\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 { getWalletAccountId } from \"../../utils\";\nimport { getCachedObservable$ } from \"../../utils/getCachedObservable\";\nimport { KheopskitError } from \"../errors\";\nimport type {\n\tAppKitInstance,\n\tPolkadotAccountType,\n\tPolkadotAppKitWallet,\n} from \"../types\";\nimport type {\n\tPolkadotAccount,\n\tPolkadotInjectedWallet,\n\tPolkadotWallet,\n} from \"./types\";\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\ttype: account.type ?? \"sr25519\",\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: AppKitInstance, address: string) => {\n\tconst provider = appKit.getProvider(\"polkadot\");\n\tif (!provider) throw new KheopskitError(\"NO_PROVIDER\", \"No provider found\");\n\tif (!provider.session)\n\t\tthrow new KheopskitError(\"NO_SESSION\", \"No session found\");\n\n\treturn getPolkadotSignerFromPjs(\n\t\taddress,\n\t\t(transactionPayload) => {\n\t\t\tif (!provider.session)\n\t\t\t\tthrow new KheopskitError(\"NO_SESSION\", \"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)\n\t\t\t\tthrow new KheopskitError(\"NO_SESSION\", \"No session found\");\n\t\t\tconst networks = appKit.getCaipNetworks(\"polkadot\");\n\t\t\tconst chainId = networks[0]?.caipNetworkId;\n\t\t\tif (!chainId)\n\t\t\t\tthrow new KheopskitError(\n\t\t\t\t\t\"NO_SESSION\",\n\t\t\t\t\t\"No CAIP network available for polkadot\",\n\t\t\t\t);\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$ = (\n\twallet: PolkadotAppKitWallet,\n): Observable<PolkadotAccount[]> => {\n\tconst provider = wallet.appKit.getProvider(\"polkadot\");\n\n\tif (!wallet.isConnected || !provider?.session) return of([]);\n\n\treturn getCachedObservable$(`accounts:${wallet.id}:`, () =>\n\t\tnew Observable<PolkadotAccount[]>((subscriber) => {\n\t\t\t// AppKit's getAccount(\"polkadot\").allAccounts is always empty because\n\t\t\t// AppKit has no native polkadot adapter; the WalletConnect session is the\n\t\t\t// source of truth. Accounts are CAIP-10 strings\n\t\t\t// (\"polkadot:<chainRef>:<address>\"), one entry per chain, so dedupe to\n\t\t\t// unique addresses.\n\t\t\tconst buildAccounts = (): PolkadotAccount[] => {\n\t\t\t\tconst session = provider.session;\n\t\t\t\tif (!session) return [];\n\n\t\t\t\tconst addresses = [\n\t\t\t\t\t...new Set(\n\t\t\t\t\t\tObject.values(session.namespaces)\n\t\t\t\t\t\t\t.flatMap((namespace) => namespace.accounts ?? [])\n\t\t\t\t\t\t\t.filter((account) => account.startsWith(\"polkadot:\"))\n\t\t\t\t\t\t\t.map((account) => account.split(\":\")[2])\n\t\t\t\t\t\t\t.filter((address): address is string => !!address),\n\t\t\t\t\t),\n\t\t\t\t];\n\n\t\t\t\treturn addresses.map(\n\t\t\t\t\t(address): PolkadotAccount => ({\n\t\t\t\t\t\tid: getWalletAccountId(wallet.id, address),\n\t\t\t\t\t\tplatform: \"polkadot\",\n\t\t\t\t\t\twalletName: wallet.name,\n\t\t\t\t\t\twalletId: wallet.id,\n\t\t\t\t\t\taddress,\n\t\t\t\t\t\tpolkadotSigner: getAppKitPolkadotSigner(wallet.appKit, address),\n\t\t\t\t\t\tgenesisHash: null,\n\t\t\t\t\t\tname: `${wallet.name} Polkadot`,\n\t\t\t\t\t\t// WalletConnect (Reown AppKit) doesn't expose account key type;\n\t\t\t\t\t\t// default to sr25519, which is the most common Polkadot key type.\n\t\t\t\t\t\ttype: \"sr25519\",\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t};\n\n\t\t\tsubscriber.next(buildAccounts());\n\n\t\t\t// Re-derive when the WalletConnect session's accounts change, mirroring\n\t\t\t// the injected extension's subscribe and the Solana AppKit path.\n\t\t\tconst reemit = () => subscriber.next(buildAccounts());\n\t\t\tprovider.on(\"session_update\", reemit);\n\t\t\tprovider.on(\"accountsChanged\", reemit);\n\n\t\t\treturn () => {\n\t\t\t\tprovider.off(\"session_update\", reemit);\n\t\t\t\tprovider.off(\"accountsChanged\", reemit);\n\t\t\t};\n\t\t}).pipe(shareReplay({ refCount: true, bufferSize: 1 })),\n\t);\n};\n\nexport const getPolkadotAccounts$ = (\n\tpolkadotWallets$: Observable<PolkadotWallet[]>,\n\tpolkadotAccountTypes: PolkadotAccountType[],\n) =>\n\tnew Observable<PolkadotAccount[]>((subscriber) => {\n\t\tif (polkadotAccountTypes.length === 0) {\n\t\t\tconsole.warn(\n\t\t\t\t\"[kheopskit] config.polkadotAccountTypes is empty; all Polkadot accounts will be filtered out.\",\n\t\t\t);\n\t\t}\n\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) =>\n\t\t\t\t\taccounts\n\t\t\t\t\t\t.flat()\n\t\t\t\t\t\t.filter((account) => polkadotAccountTypes.includes(account.type)),\n\t\t\t\t),\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 { isEqual } from \"lodash-es\";\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 { POLKADOT_EXTENSIONS } from \"../../utils/polkadotExtensions\";\nimport {\n\tgetWalletId,\n\tparseWalletId,\n\ttype WalletId,\n} from \"../../utils/WalletId\";\nimport { getAppKitWallets$ } from \"../appKit\";\nimport { KheopskitError } from \"../errors\";\nimport { store as defaultStore, type KheopskitStore } from \"../store\";\nimport type { KheopskitConfig } from \"../types\";\nimport type { PolkadotInjectedWallet, PolkadotWallet } from \"./types\";\n\nconst getInjectedWalletsIds = () =>\n\ttypeof window === \"undefined\"\n\t\t? []\n\t\t: getInjectedExtensions().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\t\tlet timer: ReturnType<typeof setTimeout> | undefined;\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\ttimer = setTimeout(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\ttimer = setTimeout(poll, intervals[index++] ?? 100);\n\t\t}\n\n\t\treturn () => {\n\t\t\t// Cancel any pending poll so it can't fire after unsubscribe.\n\t\t\tif (timer !== undefined) clearTimeout(timer);\n\t\t};\n\t}).pipe(\n\t\tdistinctUntilChanged<WalletId[]>(isEqual),\n\t\tshareReplay({ refCount: true, bufferSize: 1 }),\n\t);\n};\n\nconst createPolkadotInjectedWallets$ = (store: KheopskitStore) =>\n\tnew Observable<PolkadotInjectedWallet[]>((subscriber) => {\n\t\tconst enabledExtensions$ = new BehaviorSubject<\n\t\t\tMap<WalletId, InjectedExtension>\n\t\t>(new Map());\n\n\t\tconst connect = async (walletId: WalletId) => {\n\t\t\tif (enabledExtensions$.value.has(walletId))\n\t\t\t\tthrow new KheopskitError(\n\t\t\t\t\t\"WALLET_ALREADY_CONNECTED\",\n\t\t\t\t\t`wallet ${walletId} is already connected`,\n\t\t\t\t\t{ walletId },\n\t\t\t\t);\n\t\t\tconst { identifier } = parseWalletId(walletId);\n\t\t\tconst extension = await connectInjectedExtension(identifier);\n\n\t\t\tconst newMap = new Map(enabledExtensions$.value);\n\t\t\tnewMap.set(walletId, extension);\n\t\t\tenabledExtensions$.next(newMap);\n\n\t\t\tstore.addEnabledWalletId(walletId);\n\t\t};\n\n\t\tconst disconnect = async (walletId: WalletId) => {\n\t\t\tif (!enabledExtensions$.value.has(walletId))\n\t\t\t\tthrow new KheopskitError(\n\t\t\t\t\t\"WALLET_NOT_CONNECTED\",\n\t\t\t\t\t`wallet ${walletId} is not connected`,\n\t\t\t\t\t{ walletId },\n\t\t\t\t);\n\n\t\t\tconst newMap = new Map(enabledExtensions$.value);\n\t\t\tnewMap.delete(walletId);\n\t\t\tenabledExtensions$.next(newMap);\n\n\t\t\tstore.removeEnabledWalletId(walletId);\n\t\t};\n\n\t\tconst walletIds$ = createWalletIdsPoller$();\n\n\t\tconst subscription = combineLatest([walletIds$, enabledExtensions$])\n\t\t\t.pipe(\n\t\t\t\tmap(([walletIds, enabledExtensions]) => {\n\t\t\t\t\treturn walletIds.map((id): PolkadotInjectedWallet => {\n\t\t\t\t\t\tconst { identifier } = parseWalletId(id);\n\t\t\t\t\t\tconst extension = enabledExtensions.get(id);\n\t\t\t\t\t\tconst extInfo = POLKADOT_EXTENSIONS[identifier];\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\ttype: \"injected\",\n\t\t\t\t\t\t\tplatform: \"polkadot\",\n\t\t\t\t\t\t\tname: extInfo?.name ?? identifier,\n\t\t\t\t\t\t\ticon: extInfo?.icon ?? \"\",\n\t\t\t\t\t\t\tsourceId: identifier,\n\t\t\t\t\t\t\textension,\n\t\t\t\t\t\t\tisConnected: !!extension,\n\t\t\t\t\t\t\tconnect: () => connect(id),\n\t\t\t\t\t\t\tdisconnect: () => disconnect(id),\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t}),\n\t\t\t\tdistinctUntilChanged(walletsEqual),\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\nexport const getPolkadotWallets$ = (\n\tconfig: KheopskitConfig,\n\tstore: KheopskitStore = defaultStore,\n) => {\n\treturn new Observable<PolkadotWallet[]>((subscriber) => {\n\t\tconst subscription = combineLatest([\n\t\t\tcreatePolkadotInjectedWallets$(store),\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(shareReplay({ refCount: true, bufferSize: 1 }));\n};\n\n/**\n * Compare two wallet arrays by their relevant properties (not functions).\n */\nconst walletsEqual = (\n\ta: PolkadotInjectedWallet[],\n\tb: PolkadotInjectedWallet[],\n): boolean => {\n\tif (a.length !== b.length) return false;\n\treturn a.every(\n\t\t(w, i) =>\n\t\t\tw.id === b[i]?.id &&\n\t\t\tw.isConnected === b[i]?.isConnected &&\n\t\t\tw.name === b[i]?.name,\n\t);\n};\n","import type {\n\tKheopskitPlatform,\n\tPlatformContext,\n\tPolkadotAccountType,\n} from \"../types\";\nimport { getPolkadotAccounts$ } from \"./accounts\";\nimport type { PolkadotAccount, PolkadotWallet } from \"./types\";\nimport { getPolkadotWallets$ } from \"./wallets\";\n\nconst DEFAULT_ACCOUNT_TYPES: PolkadotAccountType[] = [\n\t\"sr25519\",\n\t\"ed25519\",\n\t\"ecdsa\",\n];\n\nconst VALID_ACCOUNT_TYPES = new Set<string>([\n\t\"sr25519\",\n\t\"ed25519\",\n\t\"ecdsa\",\n\t\"ethereum\",\n]);\n\nexport type PolkadotPluginOptions = {\n\t/**\n\t * Allowed Polkadot account key types. Accounts with other key types are\n\t * filtered out from kheopskit state.\n\t *\n\t * @default [\"sr25519\", \"ed25519\", \"ecdsa\"]\n\t */\n\taccountTypes?: PolkadotAccountType[];\n};\n\n/**\n * Polkadot platform plugin. Pass to `getKheopskit$({ platforms: [polkadot()] })`.\n *\n * @example\n * ```ts\n * import { polkadot } from \"@kheopskit/core/polkadot\";\n * polkadot({ accountTypes: [\"sr25519\", \"ed25519\", \"ecdsa\"] });\n * ```\n */\nexport const polkadot = (\n\toptions: PolkadotPluginOptions = {},\n): KheopskitPlatform<\"polkadot\", PolkadotWallet, PolkadotAccount> => {\n\tconst accountTypes = options.accountTypes ?? DEFAULT_ACCOUNT_TYPES;\n\n\tconst invalid = accountTypes.filter((t) => !VALID_ACCOUNT_TYPES.has(t));\n\tif (invalid.length > 0) {\n\t\tconsole.warn(\n\t\t\t`[kheopskit] Unknown polkadot accountTypes: ${JSON.stringify(invalid)}. Valid values: \"sr25519\", \"ed25519\", \"ecdsa\", \"ethereum\".`,\n\t\t);\n\t}\n\n\treturn {\n\t\tplatform: \"polkadot\",\n\t\tgetWallets$: (ctx: PlatformContext) =>\n\t\t\tgetPolkadotWallets$(ctx.config, ctx.store),\n\t\tgetAccounts$: (wallets$) => getPolkadotAccounts$(wallets$, accountTypes),\n\t\tacceptsCachedAccount: (cached) =>\n\t\t\taccountTypes.includes(cached.polkadotAccountType ?? \"sr25519\"),\n\t};\n};\n"]}
1
+ {"version":3,"sources":["/home/runner/work/kheopskit/kheopskit/packages/core/dist/polkadot.js","../src/api/polkadot/accounts.ts","../src/api/polkadot/wallets.ts","../src/api/polkadot/plugin.ts"],"names":["address","combineLatest","distinctUntilChanged","map","Observable","shareReplay","store"],"mappings":"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","file":"/home/runner/work/kheopskit/kheopskit/packages/core/dist/polkadot.js","sourcesContent":[null,"import {\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 { getWalletAccountId } from \"../../utils\";\nimport { getCachedObservable$ } from \"../../utils/getCachedObservable\";\nimport { KheopskitError } from \"../errors\";\nimport type {\n\tAppKitInstance,\n\tPolkadotAccountType,\n\tWalletConnectWallet,\n} from \"../types\";\nimport { isWalletConnectWallet } from \"../types\";\nimport type {\n\tPolkadotAccount,\n\tPolkadotInjectedWallet,\n\tPolkadotWallet,\n} from \"./types\";\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\ttype: account.type ?? \"sr25519\",\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: AppKitInstance, address: string) => {\n\tconst provider = appKit.getProvider(\"polkadot\");\n\tif (!provider) throw new KheopskitError(\"NO_PROVIDER\", \"No provider found\");\n\tif (!provider.session)\n\t\tthrow new KheopskitError(\"NO_SESSION\", \"No session found\");\n\n\treturn getPolkadotSignerFromPjs(\n\t\taddress,\n\t\t(transactionPayload) => {\n\t\t\tif (!provider.session)\n\t\t\t\tthrow new KheopskitError(\"NO_SESSION\", \"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)\n\t\t\t\tthrow new KheopskitError(\"NO_SESSION\", \"No session found\");\n\t\t\tconst networks = appKit.getCaipNetworks(\"polkadot\");\n\t\t\tconst chainId = networks[0]?.caipNetworkId;\n\t\t\tif (!chainId)\n\t\t\t\tthrow new KheopskitError(\n\t\t\t\t\t\"NO_SESSION\",\n\t\t\t\t\t\"No CAIP network available for polkadot\",\n\t\t\t\t);\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 getWalletConnectAccounts$ = (\n\twallet: WalletConnectWallet,\n): Observable<PolkadotAccount[]> => {\n\tconst provider = wallet.appKit.getProvider(\"polkadot\");\n\n\tif (!wallet.platforms.includes(\"polkadot\") || !provider?.session)\n\t\treturn of([]);\n\n\treturn getCachedObservable$(`accounts:${wallet.id}:polkadot:`, () =>\n\t\tnew Observable<PolkadotAccount[]>((subscriber) => {\n\t\t\t// AppKit's getAccount(\"polkadot\").allAccounts is always empty because\n\t\t\t// AppKit has no native polkadot adapter; the WalletConnect session is the\n\t\t\t// source of truth. Accounts are CAIP-10 strings\n\t\t\t// (\"polkadot:<chainRef>:<address>\"), one entry per chain, so dedupe to\n\t\t\t// unique addresses.\n\t\t\tconst buildAccounts = (): PolkadotAccount[] => {\n\t\t\t\tconst session = provider.session;\n\t\t\t\tif (!session) return [];\n\n\t\t\t\tconst addresses = [\n\t\t\t\t\t...new Set(\n\t\t\t\t\t\tObject.values(session.namespaces)\n\t\t\t\t\t\t\t.flatMap((namespace) => namespace.accounts ?? [])\n\t\t\t\t\t\t\t.filter((account) => account.startsWith(\"polkadot:\"))\n\t\t\t\t\t\t\t.map((account) => account.split(\":\")[2])\n\t\t\t\t\t\t\t.filter((address): address is string => !!address),\n\t\t\t\t\t),\n\t\t\t\t];\n\n\t\t\t\treturn addresses.map(\n\t\t\t\t\t(address): PolkadotAccount => ({\n\t\t\t\t\t\tid: getWalletAccountId(wallet.id, address),\n\t\t\t\t\t\tplatform: \"polkadot\",\n\t\t\t\t\t\twalletName: wallet.name,\n\t\t\t\t\t\twalletId: wallet.id,\n\t\t\t\t\t\taddress,\n\t\t\t\t\t\tpolkadotSigner: getAppKitPolkadotSigner(wallet.appKit, address),\n\t\t\t\t\t\tgenesisHash: null,\n\t\t\t\t\t\tname: `${wallet.name} Polkadot`,\n\t\t\t\t\t\t// WalletConnect (Reown AppKit) doesn't expose account key type;\n\t\t\t\t\t\t// default to sr25519, which is the most common Polkadot key type.\n\t\t\t\t\t\ttype: \"sr25519\",\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t};\n\n\t\t\tsubscriber.next(buildAccounts());\n\n\t\t\t// Re-derive when the WalletConnect session's accounts change, mirroring\n\t\t\t// the injected extension's subscribe and the Solana AppKit path.\n\t\t\tconst reemit = () => subscriber.next(buildAccounts());\n\t\t\tprovider.on(\"session_update\", reemit);\n\t\t\tprovider.on(\"accountsChanged\", reemit);\n\n\t\t\treturn () => {\n\t\t\t\tprovider.off(\"session_update\", reemit);\n\t\t\t\tprovider.off(\"accountsChanged\", reemit);\n\t\t\t};\n\t\t}).pipe(shareReplay({ refCount: true, bufferSize: 1 })),\n\t);\n};\n\nexport const getPolkadotAccounts$ = (\n\tpolkadotWallets$: Observable<(PolkadotWallet | WalletConnectWallet)[]>,\n\tpolkadotAccountTypes: PolkadotAccountType[],\n) =>\n\tnew Observable<PolkadotAccount[]>((subscriber) => {\n\t\tif (polkadotAccountTypes.length === 0) {\n\t\t\tconsole.warn(\n\t\t\t\t\"[kheopskit] config.polkadotAccountTypes is empty; all Polkadot accounts will be filtered out.\",\n\t\t\t);\n\t\t}\n\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(isWalletConnectWallet)\n\t\t\t\t\t\t\t\t\t.map(getWalletConnectAccounts$),\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) =>\n\t\t\t\t\taccounts\n\t\t\t\t\t\t.flat()\n\t\t\t\t\t\t.filter((account) => polkadotAccountTypes.includes(account.type)),\n\t\t\t\t),\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 { isEqual } from \"lodash-es\";\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 { POLKADOT_EXTENSIONS } from \"../../utils/polkadotExtensions\";\nimport {\n\tgetWalletId,\n\tparseWalletId,\n\ttype WalletId,\n} from \"../../utils/WalletId\";\nimport { KheopskitError } from \"../errors\";\nimport { store as defaultStore, type KheopskitStore } from \"../store\";\nimport type { PolkadotInjectedWallet } from \"./types\";\n\nconst getInjectedWalletsIds = () =>\n\ttypeof window === \"undefined\"\n\t\t? []\n\t\t: getInjectedExtensions().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\t\tlet timer: ReturnType<typeof setTimeout> | undefined;\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\ttimer = setTimeout(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\ttimer = setTimeout(poll, intervals[index++] ?? 100);\n\t\t}\n\n\t\treturn () => {\n\t\t\t// Cancel any pending poll so it can't fire after unsubscribe.\n\t\t\tif (timer !== undefined) clearTimeout(timer);\n\t\t};\n\t}).pipe(\n\t\tdistinctUntilChanged<WalletId[]>(isEqual),\n\t\tshareReplay({ refCount: true, bufferSize: 1 }),\n\t);\n};\n\nconst createPolkadotInjectedWallets$ = (store: KheopskitStore) =>\n\tnew Observable<PolkadotInjectedWallet[]>((subscriber) => {\n\t\tconst enabledExtensions$ = new BehaviorSubject<\n\t\t\tMap<WalletId, InjectedExtension>\n\t\t>(new Map());\n\n\t\tconst connect = async (walletId: WalletId) => {\n\t\t\tif (enabledExtensions$.value.has(walletId))\n\t\t\t\tthrow new KheopskitError(\n\t\t\t\t\t\"WALLET_ALREADY_CONNECTED\",\n\t\t\t\t\t`wallet ${walletId} is already connected`,\n\t\t\t\t\t{ walletId },\n\t\t\t\t);\n\t\t\tconst { identifier } = parseWalletId(walletId);\n\t\t\tconst extension = await connectInjectedExtension(identifier);\n\n\t\t\tconst newMap = new Map(enabledExtensions$.value);\n\t\t\tnewMap.set(walletId, extension);\n\t\t\tenabledExtensions$.next(newMap);\n\n\t\t\tstore.addEnabledWalletId(walletId);\n\t\t};\n\n\t\tconst disconnect = async (walletId: WalletId) => {\n\t\t\tif (!enabledExtensions$.value.has(walletId))\n\t\t\t\tthrow new KheopskitError(\n\t\t\t\t\t\"WALLET_NOT_CONNECTED\",\n\t\t\t\t\t`wallet ${walletId} is not connected`,\n\t\t\t\t\t{ walletId },\n\t\t\t\t);\n\n\t\t\tconst newMap = new Map(enabledExtensions$.value);\n\t\t\tnewMap.delete(walletId);\n\t\t\tenabledExtensions$.next(newMap);\n\n\t\t\tstore.removeEnabledWalletId(walletId);\n\t\t};\n\n\t\tconst walletIds$ = createWalletIdsPoller$();\n\n\t\tconst subscription = combineLatest([walletIds$, enabledExtensions$])\n\t\t\t.pipe(\n\t\t\t\tmap(([walletIds, enabledExtensions]) => {\n\t\t\t\t\treturn walletIds.map((id): PolkadotInjectedWallet => {\n\t\t\t\t\t\tconst { identifier } = parseWalletId(id);\n\t\t\t\t\t\tconst extension = enabledExtensions.get(id);\n\t\t\t\t\t\tconst extInfo = POLKADOT_EXTENSIONS[identifier];\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\ttype: \"injected\",\n\t\t\t\t\t\t\tplatform: \"polkadot\",\n\t\t\t\t\t\t\tname: extInfo?.name ?? identifier,\n\t\t\t\t\t\t\ticon: extInfo?.icon ?? \"\",\n\t\t\t\t\t\t\tsourceId: identifier,\n\t\t\t\t\t\t\textension,\n\t\t\t\t\t\t\tisConnected: !!extension,\n\t\t\t\t\t\t\tconnect: () => connect(id),\n\t\t\t\t\t\t\tdisconnect: () => disconnect(id),\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t}),\n\t\t\t\tdistinctUntilChanged(walletsEqual),\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// The shared WalletConnect connector is emitted once by core (see\n// `getWallets$`), not per platform — so this returns only injected wallets.\nexport const getPolkadotWallets$ = (store: KheopskitStore = defaultStore) =>\n\tcreatePolkadotInjectedWallets$(store);\n\n/**\n * Compare two wallet arrays by their relevant properties (not functions).\n */\nconst walletsEqual = (\n\ta: PolkadotInjectedWallet[],\n\tb: PolkadotInjectedWallet[],\n): boolean => {\n\tif (a.length !== b.length) return false;\n\treturn a.every(\n\t\t(w, i) =>\n\t\t\tw.id === b[i]?.id &&\n\t\t\tw.isConnected === b[i]?.isConnected &&\n\t\t\tw.name === b[i]?.name,\n\t);\n};\n","import type {\n\tKheopskitPlatform,\n\tPlatformContext,\n\tPolkadotAccountType,\n} from \"../types\";\nimport { getPolkadotAccounts$ } from \"./accounts\";\nimport type { PolkadotAccount, PolkadotWallet } from \"./types\";\nimport { getPolkadotWallets$ } from \"./wallets\";\n\nconst DEFAULT_ACCOUNT_TYPES: PolkadotAccountType[] = [\n\t\"sr25519\",\n\t\"ed25519\",\n\t\"ecdsa\",\n];\n\nconst VALID_ACCOUNT_TYPES = new Set<string>([\n\t\"sr25519\",\n\t\"ed25519\",\n\t\"ecdsa\",\n\t\"ethereum\",\n]);\n\nexport type PolkadotPluginOptions = {\n\t/**\n\t * Allowed Polkadot account key types. Accounts with other key types are\n\t * filtered out from kheopskit state.\n\t *\n\t * @default [\"sr25519\", \"ed25519\", \"ecdsa\"]\n\t */\n\taccountTypes?: PolkadotAccountType[];\n};\n\n/**\n * Polkadot platform plugin. Pass to `getKheopskit$({ platforms: [polkadot()] })`.\n *\n * @example\n * ```ts\n * import { polkadot } from \"@kheopskit/core/polkadot\";\n * polkadot({ accountTypes: [\"sr25519\", \"ed25519\", \"ecdsa\"] });\n * ```\n */\nexport const polkadot = (\n\toptions: PolkadotPluginOptions = {},\n): KheopskitPlatform<\"polkadot\", PolkadotWallet, PolkadotAccount> => {\n\tconst accountTypes = options.accountTypes ?? DEFAULT_ACCOUNT_TYPES;\n\n\tconst invalid = accountTypes.filter((t) => !VALID_ACCOUNT_TYPES.has(t));\n\tif (invalid.length > 0) {\n\t\tconsole.warn(\n\t\t\t`[kheopskit] Unknown polkadot accountTypes: ${JSON.stringify(invalid)}. Valid values: \"sr25519\", \"ed25519\", \"ecdsa\", \"ethereum\".`,\n\t\t);\n\t}\n\n\treturn {\n\t\tplatform: \"polkadot\",\n\t\tgetWallets$: (ctx: PlatformContext) => getPolkadotWallets$(ctx.store),\n\t\tgetAccounts$: (wallets$) => getPolkadotAccounts$(wallets$, accountTypes),\n\t\tacceptsCachedAccount: (cached) =>\n\t\t\taccountTypes.includes(cached.polkadotAccountType ?? \"sr25519\"),\n\t};\n};\n"]}
package/dist/polkadot.mjs CHANGED
@@ -1,19 +1,19 @@
1
1
  import {
2
2
  POLKADOT_EXTENSIONS
3
3
  } from "./chunk-BWUUHUDK.mjs";
4
- import "./chunk-YFD3IKK5.mjs";
5
4
  import {
6
5
  KheopskitError,
7
- getAppKitWallets$,
8
6
  getWalletAccountId,
9
7
  isSs58Address,
10
8
  store
11
- } from "./chunk-KWFQDD7E.mjs";
9
+ } from "./chunk-6XAZANB5.mjs";
12
10
  import {
13
11
  getCachedObservable$,
14
12
  getWalletId,
13
+ isInjectedWallet,
14
+ isWalletConnectWallet,
15
15
  parseWalletId
16
- } from "./chunk-PNPPI5CH.mjs";
16
+ } from "./chunk-7QSGAJ4A.mjs";
17
17
 
18
18
  // src/api/polkadot/accounts.ts
19
19
  import {
@@ -95,11 +95,12 @@ var getAppKitPolkadotSigner = (appKit, address) => {
95
95
  }
96
96
  );
97
97
  };
98
- var getAppKitAccounts$ = (wallet) => {
98
+ var getWalletConnectAccounts$ = (wallet) => {
99
99
  const provider = wallet.appKit.getProvider("polkadot");
100
- if (!wallet.isConnected || !provider?.session) return of([]);
100
+ if (!wallet.platforms.includes("polkadot") || !provider?.session)
101
+ return of([]);
101
102
  return getCachedObservable$(
102
- `accounts:${wallet.id}:`,
103
+ `accounts:${wallet.id}:polkadot:`,
103
104
  () => new Observable((subscriber) => {
104
105
  const buildAccounts = () => {
105
106
  const session = provider.session;
@@ -147,7 +148,7 @@ var getPolkadotAccounts$ = (polkadotWallets$, polkadotAccountTypes) => new Obser
147
148
  switchMap(
148
149
  (wallets) => wallets.length ? combineLatest([
149
150
  ...wallets.filter((w) => w.type === "injected").map(getInjectedWalletAccounts$),
150
- ...wallets.filter((w) => w.type === "appKit").map(getAppKitAccounts$)
151
+ ...wallets.filter(isWalletConnectWallet).map(getWalletConnectAccounts$)
151
152
  ]) : of([])
152
153
  ),
153
154
  map(
@@ -258,21 +259,7 @@ var createPolkadotInjectedWallets$ = (store2) => new Observable2((subscriber) =>
258
259
  subscription.unsubscribe();
259
260
  };
260
261
  }).pipe(shareReplay2({ refCount: true, bufferSize: 1 }));
261
- var getPolkadotWallets$ = (config, store2 = store) => {
262
- return new Observable2((subscriber) => {
263
- const subscription = combineLatest2([
264
- createPolkadotInjectedWallets$(store2),
265
- getAppKitWallets$(config).pipe(map2((w) => w.polkadot))
266
- ]).pipe(
267
- map2(
268
- ([injectedWallets, appKitWallet]) => appKitWallet ? [...injectedWallets, appKitWallet] : injectedWallets
269
- )
270
- ).subscribe(subscriber);
271
- return () => {
272
- subscription.unsubscribe();
273
- };
274
- }).pipe(shareReplay2({ refCount: true, bufferSize: 1 }));
275
- };
262
+ var getPolkadotWallets$ = (store2 = store) => createPolkadotInjectedWallets$(store2);
276
263
  var walletsEqual = (a, b) => {
277
264
  if (a.length !== b.length) return false;
278
265
  return a.every(
@@ -302,13 +289,15 @@ var polkadot = (options = {}) => {
302
289
  }
303
290
  return {
304
291
  platform: "polkadot",
305
- getWallets$: (ctx) => getPolkadotWallets$(ctx.config, ctx.store),
292
+ getWallets$: (ctx) => getPolkadotWallets$(ctx.store),
306
293
  getAccounts$: (wallets$) => getPolkadotAccounts$(wallets$, accountTypes),
307
294
  acceptsCachedAccount: (cached) => accountTypes.includes(cached.polkadotAccountType ?? "sr25519")
308
295
  };
309
296
  };
310
297
  export {
298
+ isInjectedWallet,
311
299
  isSs58Address,
300
+ isWalletConnectWallet,
312
301
  polkadot
313
302
  };
314
303
  //# sourceMappingURL=polkadot.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/api/polkadot/accounts.ts","../src/api/polkadot/wallets.ts","../src/api/polkadot/plugin.ts"],"sourcesContent":["import {\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 { getWalletAccountId } from \"../../utils\";\nimport { getCachedObservable$ } from \"../../utils/getCachedObservable\";\nimport { KheopskitError } from \"../errors\";\nimport type {\n\tAppKitInstance,\n\tPolkadotAccountType,\n\tPolkadotAppKitWallet,\n} from \"../types\";\nimport type {\n\tPolkadotAccount,\n\tPolkadotInjectedWallet,\n\tPolkadotWallet,\n} from \"./types\";\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\ttype: account.type ?? \"sr25519\",\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: AppKitInstance, address: string) => {\n\tconst provider = appKit.getProvider(\"polkadot\");\n\tif (!provider) throw new KheopskitError(\"NO_PROVIDER\", \"No provider found\");\n\tif (!provider.session)\n\t\tthrow new KheopskitError(\"NO_SESSION\", \"No session found\");\n\n\treturn getPolkadotSignerFromPjs(\n\t\taddress,\n\t\t(transactionPayload) => {\n\t\t\tif (!provider.session)\n\t\t\t\tthrow new KheopskitError(\"NO_SESSION\", \"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)\n\t\t\t\tthrow new KheopskitError(\"NO_SESSION\", \"No session found\");\n\t\t\tconst networks = appKit.getCaipNetworks(\"polkadot\");\n\t\t\tconst chainId = networks[0]?.caipNetworkId;\n\t\t\tif (!chainId)\n\t\t\t\tthrow new KheopskitError(\n\t\t\t\t\t\"NO_SESSION\",\n\t\t\t\t\t\"No CAIP network available for polkadot\",\n\t\t\t\t);\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$ = (\n\twallet: PolkadotAppKitWallet,\n): Observable<PolkadotAccount[]> => {\n\tconst provider = wallet.appKit.getProvider(\"polkadot\");\n\n\tif (!wallet.isConnected || !provider?.session) return of([]);\n\n\treturn getCachedObservable$(`accounts:${wallet.id}:`, () =>\n\t\tnew Observable<PolkadotAccount[]>((subscriber) => {\n\t\t\t// AppKit's getAccount(\"polkadot\").allAccounts is always empty because\n\t\t\t// AppKit has no native polkadot adapter; the WalletConnect session is the\n\t\t\t// source of truth. Accounts are CAIP-10 strings\n\t\t\t// (\"polkadot:<chainRef>:<address>\"), one entry per chain, so dedupe to\n\t\t\t// unique addresses.\n\t\t\tconst buildAccounts = (): PolkadotAccount[] => {\n\t\t\t\tconst session = provider.session;\n\t\t\t\tif (!session) return [];\n\n\t\t\t\tconst addresses = [\n\t\t\t\t\t...new Set(\n\t\t\t\t\t\tObject.values(session.namespaces)\n\t\t\t\t\t\t\t.flatMap((namespace) => namespace.accounts ?? [])\n\t\t\t\t\t\t\t.filter((account) => account.startsWith(\"polkadot:\"))\n\t\t\t\t\t\t\t.map((account) => account.split(\":\")[2])\n\t\t\t\t\t\t\t.filter((address): address is string => !!address),\n\t\t\t\t\t),\n\t\t\t\t];\n\n\t\t\t\treturn addresses.map(\n\t\t\t\t\t(address): PolkadotAccount => ({\n\t\t\t\t\t\tid: getWalletAccountId(wallet.id, address),\n\t\t\t\t\t\tplatform: \"polkadot\",\n\t\t\t\t\t\twalletName: wallet.name,\n\t\t\t\t\t\twalletId: wallet.id,\n\t\t\t\t\t\taddress,\n\t\t\t\t\t\tpolkadotSigner: getAppKitPolkadotSigner(wallet.appKit, address),\n\t\t\t\t\t\tgenesisHash: null,\n\t\t\t\t\t\tname: `${wallet.name} Polkadot`,\n\t\t\t\t\t\t// WalletConnect (Reown AppKit) doesn't expose account key type;\n\t\t\t\t\t\t// default to sr25519, which is the most common Polkadot key type.\n\t\t\t\t\t\ttype: \"sr25519\",\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t};\n\n\t\t\tsubscriber.next(buildAccounts());\n\n\t\t\t// Re-derive when the WalletConnect session's accounts change, mirroring\n\t\t\t// the injected extension's subscribe and the Solana AppKit path.\n\t\t\tconst reemit = () => subscriber.next(buildAccounts());\n\t\t\tprovider.on(\"session_update\", reemit);\n\t\t\tprovider.on(\"accountsChanged\", reemit);\n\n\t\t\treturn () => {\n\t\t\t\tprovider.off(\"session_update\", reemit);\n\t\t\t\tprovider.off(\"accountsChanged\", reemit);\n\t\t\t};\n\t\t}).pipe(shareReplay({ refCount: true, bufferSize: 1 })),\n\t);\n};\n\nexport const getPolkadotAccounts$ = (\n\tpolkadotWallets$: Observable<PolkadotWallet[]>,\n\tpolkadotAccountTypes: PolkadotAccountType[],\n) =>\n\tnew Observable<PolkadotAccount[]>((subscriber) => {\n\t\tif (polkadotAccountTypes.length === 0) {\n\t\t\tconsole.warn(\n\t\t\t\t\"[kheopskit] config.polkadotAccountTypes is empty; all Polkadot accounts will be filtered out.\",\n\t\t\t);\n\t\t}\n\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) =>\n\t\t\t\t\taccounts\n\t\t\t\t\t\t.flat()\n\t\t\t\t\t\t.filter((account) => polkadotAccountTypes.includes(account.type)),\n\t\t\t\t),\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 { isEqual } from \"lodash-es\";\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 { POLKADOT_EXTENSIONS } from \"../../utils/polkadotExtensions\";\nimport {\n\tgetWalletId,\n\tparseWalletId,\n\ttype WalletId,\n} from \"../../utils/WalletId\";\nimport { getAppKitWallets$ } from \"../appKit\";\nimport { KheopskitError } from \"../errors\";\nimport { store as defaultStore, type KheopskitStore } from \"../store\";\nimport type { KheopskitConfig } from \"../types\";\nimport type { PolkadotInjectedWallet, PolkadotWallet } from \"./types\";\n\nconst getInjectedWalletsIds = () =>\n\ttypeof window === \"undefined\"\n\t\t? []\n\t\t: getInjectedExtensions().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\t\tlet timer: ReturnType<typeof setTimeout> | undefined;\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\ttimer = setTimeout(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\ttimer = setTimeout(poll, intervals[index++] ?? 100);\n\t\t}\n\n\t\treturn () => {\n\t\t\t// Cancel any pending poll so it can't fire after unsubscribe.\n\t\t\tif (timer !== undefined) clearTimeout(timer);\n\t\t};\n\t}).pipe(\n\t\tdistinctUntilChanged<WalletId[]>(isEqual),\n\t\tshareReplay({ refCount: true, bufferSize: 1 }),\n\t);\n};\n\nconst createPolkadotInjectedWallets$ = (store: KheopskitStore) =>\n\tnew Observable<PolkadotInjectedWallet[]>((subscriber) => {\n\t\tconst enabledExtensions$ = new BehaviorSubject<\n\t\t\tMap<WalletId, InjectedExtension>\n\t\t>(new Map());\n\n\t\tconst connect = async (walletId: WalletId) => {\n\t\t\tif (enabledExtensions$.value.has(walletId))\n\t\t\t\tthrow new KheopskitError(\n\t\t\t\t\t\"WALLET_ALREADY_CONNECTED\",\n\t\t\t\t\t`wallet ${walletId} is already connected`,\n\t\t\t\t\t{ walletId },\n\t\t\t\t);\n\t\t\tconst { identifier } = parseWalletId(walletId);\n\t\t\tconst extension = await connectInjectedExtension(identifier);\n\n\t\t\tconst newMap = new Map(enabledExtensions$.value);\n\t\t\tnewMap.set(walletId, extension);\n\t\t\tenabledExtensions$.next(newMap);\n\n\t\t\tstore.addEnabledWalletId(walletId);\n\t\t};\n\n\t\tconst disconnect = async (walletId: WalletId) => {\n\t\t\tif (!enabledExtensions$.value.has(walletId))\n\t\t\t\tthrow new KheopskitError(\n\t\t\t\t\t\"WALLET_NOT_CONNECTED\",\n\t\t\t\t\t`wallet ${walletId} is not connected`,\n\t\t\t\t\t{ walletId },\n\t\t\t\t);\n\n\t\t\tconst newMap = new Map(enabledExtensions$.value);\n\t\t\tnewMap.delete(walletId);\n\t\t\tenabledExtensions$.next(newMap);\n\n\t\t\tstore.removeEnabledWalletId(walletId);\n\t\t};\n\n\t\tconst walletIds$ = createWalletIdsPoller$();\n\n\t\tconst subscription = combineLatest([walletIds$, enabledExtensions$])\n\t\t\t.pipe(\n\t\t\t\tmap(([walletIds, enabledExtensions]) => {\n\t\t\t\t\treturn walletIds.map((id): PolkadotInjectedWallet => {\n\t\t\t\t\t\tconst { identifier } = parseWalletId(id);\n\t\t\t\t\t\tconst extension = enabledExtensions.get(id);\n\t\t\t\t\t\tconst extInfo = POLKADOT_EXTENSIONS[identifier];\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\ttype: \"injected\",\n\t\t\t\t\t\t\tplatform: \"polkadot\",\n\t\t\t\t\t\t\tname: extInfo?.name ?? identifier,\n\t\t\t\t\t\t\ticon: extInfo?.icon ?? \"\",\n\t\t\t\t\t\t\tsourceId: identifier,\n\t\t\t\t\t\t\textension,\n\t\t\t\t\t\t\tisConnected: !!extension,\n\t\t\t\t\t\t\tconnect: () => connect(id),\n\t\t\t\t\t\t\tdisconnect: () => disconnect(id),\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t}),\n\t\t\t\tdistinctUntilChanged(walletsEqual),\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\nexport const getPolkadotWallets$ = (\n\tconfig: KheopskitConfig,\n\tstore: KheopskitStore = defaultStore,\n) => {\n\treturn new Observable<PolkadotWallet[]>((subscriber) => {\n\t\tconst subscription = combineLatest([\n\t\t\tcreatePolkadotInjectedWallets$(store),\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(shareReplay({ refCount: true, bufferSize: 1 }));\n};\n\n/**\n * Compare two wallet arrays by their relevant properties (not functions).\n */\nconst walletsEqual = (\n\ta: PolkadotInjectedWallet[],\n\tb: PolkadotInjectedWallet[],\n): boolean => {\n\tif (a.length !== b.length) return false;\n\treturn a.every(\n\t\t(w, i) =>\n\t\t\tw.id === b[i]?.id &&\n\t\t\tw.isConnected === b[i]?.isConnected &&\n\t\t\tw.name === b[i]?.name,\n\t);\n};\n","import type {\n\tKheopskitPlatform,\n\tPlatformContext,\n\tPolkadotAccountType,\n} from \"../types\";\nimport { getPolkadotAccounts$ } from \"./accounts\";\nimport type { PolkadotAccount, PolkadotWallet } from \"./types\";\nimport { getPolkadotWallets$ } from \"./wallets\";\n\nconst DEFAULT_ACCOUNT_TYPES: PolkadotAccountType[] = [\n\t\"sr25519\",\n\t\"ed25519\",\n\t\"ecdsa\",\n];\n\nconst VALID_ACCOUNT_TYPES = new Set<string>([\n\t\"sr25519\",\n\t\"ed25519\",\n\t\"ecdsa\",\n\t\"ethereum\",\n]);\n\nexport type PolkadotPluginOptions = {\n\t/**\n\t * Allowed Polkadot account key types. Accounts with other key types are\n\t * filtered out from kheopskit state.\n\t *\n\t * @default [\"sr25519\", \"ed25519\", \"ecdsa\"]\n\t */\n\taccountTypes?: PolkadotAccountType[];\n};\n\n/**\n * Polkadot platform plugin. Pass to `getKheopskit$({ platforms: [polkadot()] })`.\n *\n * @example\n * ```ts\n * import { polkadot } from \"@kheopskit/core/polkadot\";\n * polkadot({ accountTypes: [\"sr25519\", \"ed25519\", \"ecdsa\"] });\n * ```\n */\nexport const polkadot = (\n\toptions: PolkadotPluginOptions = {},\n): KheopskitPlatform<\"polkadot\", PolkadotWallet, PolkadotAccount> => {\n\tconst accountTypes = options.accountTypes ?? DEFAULT_ACCOUNT_TYPES;\n\n\tconst invalid = accountTypes.filter((t) => !VALID_ACCOUNT_TYPES.has(t));\n\tif (invalid.length > 0) {\n\t\tconsole.warn(\n\t\t\t`[kheopskit] Unknown polkadot accountTypes: ${JSON.stringify(invalid)}. Valid values: \"sr25519\", \"ed25519\", \"ecdsa\", \"ethereum\".`,\n\t\t);\n\t}\n\n\treturn {\n\t\tplatform: \"polkadot\",\n\t\tgetWallets$: (ctx: PlatformContext) =>\n\t\t\tgetPolkadotWallets$(ctx.config, ctx.store),\n\t\tgetAccounts$: (wallets$) => getPolkadotAccounts$(wallets$, accountTypes),\n\t\tacceptsCachedAccount: (cached) =>\n\t\t\taccountTypes.includes(cached.polkadotAccountType ?? \"sr25519\"),\n\t};\n};\n"],"mappings":"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","names":["address","combineLatest","distinctUntilChanged","map","Observable","shareReplay","Observable","distinctUntilChanged","shareReplay","store","combineLatest","map"]}
1
+ {"version":3,"sources":["../src/api/polkadot/accounts.ts","../src/api/polkadot/wallets.ts","../src/api/polkadot/plugin.ts"],"sourcesContent":["import {\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 { getWalletAccountId } from \"../../utils\";\nimport { getCachedObservable$ } from \"../../utils/getCachedObservable\";\nimport { KheopskitError } from \"../errors\";\nimport type {\n\tAppKitInstance,\n\tPolkadotAccountType,\n\tWalletConnectWallet,\n} from \"../types\";\nimport { isWalletConnectWallet } from \"../types\";\nimport type {\n\tPolkadotAccount,\n\tPolkadotInjectedWallet,\n\tPolkadotWallet,\n} from \"./types\";\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\ttype: account.type ?? \"sr25519\",\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: AppKitInstance, address: string) => {\n\tconst provider = appKit.getProvider(\"polkadot\");\n\tif (!provider) throw new KheopskitError(\"NO_PROVIDER\", \"No provider found\");\n\tif (!provider.session)\n\t\tthrow new KheopskitError(\"NO_SESSION\", \"No session found\");\n\n\treturn getPolkadotSignerFromPjs(\n\t\taddress,\n\t\t(transactionPayload) => {\n\t\t\tif (!provider.session)\n\t\t\t\tthrow new KheopskitError(\"NO_SESSION\", \"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)\n\t\t\t\tthrow new KheopskitError(\"NO_SESSION\", \"No session found\");\n\t\t\tconst networks = appKit.getCaipNetworks(\"polkadot\");\n\t\t\tconst chainId = networks[0]?.caipNetworkId;\n\t\t\tif (!chainId)\n\t\t\t\tthrow new KheopskitError(\n\t\t\t\t\t\"NO_SESSION\",\n\t\t\t\t\t\"No CAIP network available for polkadot\",\n\t\t\t\t);\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 getWalletConnectAccounts$ = (\n\twallet: WalletConnectWallet,\n): Observable<PolkadotAccount[]> => {\n\tconst provider = wallet.appKit.getProvider(\"polkadot\");\n\n\tif (!wallet.platforms.includes(\"polkadot\") || !provider?.session)\n\t\treturn of([]);\n\n\treturn getCachedObservable$(`accounts:${wallet.id}:polkadot:`, () =>\n\t\tnew Observable<PolkadotAccount[]>((subscriber) => {\n\t\t\t// AppKit's getAccount(\"polkadot\").allAccounts is always empty because\n\t\t\t// AppKit has no native polkadot adapter; the WalletConnect session is the\n\t\t\t// source of truth. Accounts are CAIP-10 strings\n\t\t\t// (\"polkadot:<chainRef>:<address>\"), one entry per chain, so dedupe to\n\t\t\t// unique addresses.\n\t\t\tconst buildAccounts = (): PolkadotAccount[] => {\n\t\t\t\tconst session = provider.session;\n\t\t\t\tif (!session) return [];\n\n\t\t\t\tconst addresses = [\n\t\t\t\t\t...new Set(\n\t\t\t\t\t\tObject.values(session.namespaces)\n\t\t\t\t\t\t\t.flatMap((namespace) => namespace.accounts ?? [])\n\t\t\t\t\t\t\t.filter((account) => account.startsWith(\"polkadot:\"))\n\t\t\t\t\t\t\t.map((account) => account.split(\":\")[2])\n\t\t\t\t\t\t\t.filter((address): address is string => !!address),\n\t\t\t\t\t),\n\t\t\t\t];\n\n\t\t\t\treturn addresses.map(\n\t\t\t\t\t(address): PolkadotAccount => ({\n\t\t\t\t\t\tid: getWalletAccountId(wallet.id, address),\n\t\t\t\t\t\tplatform: \"polkadot\",\n\t\t\t\t\t\twalletName: wallet.name,\n\t\t\t\t\t\twalletId: wallet.id,\n\t\t\t\t\t\taddress,\n\t\t\t\t\t\tpolkadotSigner: getAppKitPolkadotSigner(wallet.appKit, address),\n\t\t\t\t\t\tgenesisHash: null,\n\t\t\t\t\t\tname: `${wallet.name} Polkadot`,\n\t\t\t\t\t\t// WalletConnect (Reown AppKit) doesn't expose account key type;\n\t\t\t\t\t\t// default to sr25519, which is the most common Polkadot key type.\n\t\t\t\t\t\ttype: \"sr25519\",\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t};\n\n\t\t\tsubscriber.next(buildAccounts());\n\n\t\t\t// Re-derive when the WalletConnect session's accounts change, mirroring\n\t\t\t// the injected extension's subscribe and the Solana AppKit path.\n\t\t\tconst reemit = () => subscriber.next(buildAccounts());\n\t\t\tprovider.on(\"session_update\", reemit);\n\t\t\tprovider.on(\"accountsChanged\", reemit);\n\n\t\t\treturn () => {\n\t\t\t\tprovider.off(\"session_update\", reemit);\n\t\t\t\tprovider.off(\"accountsChanged\", reemit);\n\t\t\t};\n\t\t}).pipe(shareReplay({ refCount: true, bufferSize: 1 })),\n\t);\n};\n\nexport const getPolkadotAccounts$ = (\n\tpolkadotWallets$: Observable<(PolkadotWallet | WalletConnectWallet)[]>,\n\tpolkadotAccountTypes: PolkadotAccountType[],\n) =>\n\tnew Observable<PolkadotAccount[]>((subscriber) => {\n\t\tif (polkadotAccountTypes.length === 0) {\n\t\t\tconsole.warn(\n\t\t\t\t\"[kheopskit] config.polkadotAccountTypes is empty; all Polkadot accounts will be filtered out.\",\n\t\t\t);\n\t\t}\n\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(isWalletConnectWallet)\n\t\t\t\t\t\t\t\t\t.map(getWalletConnectAccounts$),\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) =>\n\t\t\t\t\taccounts\n\t\t\t\t\t\t.flat()\n\t\t\t\t\t\t.filter((account) => polkadotAccountTypes.includes(account.type)),\n\t\t\t\t),\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 { isEqual } from \"lodash-es\";\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 { POLKADOT_EXTENSIONS } from \"../../utils/polkadotExtensions\";\nimport {\n\tgetWalletId,\n\tparseWalletId,\n\ttype WalletId,\n} from \"../../utils/WalletId\";\nimport { KheopskitError } from \"../errors\";\nimport { store as defaultStore, type KheopskitStore } from \"../store\";\nimport type { PolkadotInjectedWallet } from \"./types\";\n\nconst getInjectedWalletsIds = () =>\n\ttypeof window === \"undefined\"\n\t\t? []\n\t\t: getInjectedExtensions().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\t\tlet timer: ReturnType<typeof setTimeout> | undefined;\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\ttimer = setTimeout(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\ttimer = setTimeout(poll, intervals[index++] ?? 100);\n\t\t}\n\n\t\treturn () => {\n\t\t\t// Cancel any pending poll so it can't fire after unsubscribe.\n\t\t\tif (timer !== undefined) clearTimeout(timer);\n\t\t};\n\t}).pipe(\n\t\tdistinctUntilChanged<WalletId[]>(isEqual),\n\t\tshareReplay({ refCount: true, bufferSize: 1 }),\n\t);\n};\n\nconst createPolkadotInjectedWallets$ = (store: KheopskitStore) =>\n\tnew Observable<PolkadotInjectedWallet[]>((subscriber) => {\n\t\tconst enabledExtensions$ = new BehaviorSubject<\n\t\t\tMap<WalletId, InjectedExtension>\n\t\t>(new Map());\n\n\t\tconst connect = async (walletId: WalletId) => {\n\t\t\tif (enabledExtensions$.value.has(walletId))\n\t\t\t\tthrow new KheopskitError(\n\t\t\t\t\t\"WALLET_ALREADY_CONNECTED\",\n\t\t\t\t\t`wallet ${walletId} is already connected`,\n\t\t\t\t\t{ walletId },\n\t\t\t\t);\n\t\t\tconst { identifier } = parseWalletId(walletId);\n\t\t\tconst extension = await connectInjectedExtension(identifier);\n\n\t\t\tconst newMap = new Map(enabledExtensions$.value);\n\t\t\tnewMap.set(walletId, extension);\n\t\t\tenabledExtensions$.next(newMap);\n\n\t\t\tstore.addEnabledWalletId(walletId);\n\t\t};\n\n\t\tconst disconnect = async (walletId: WalletId) => {\n\t\t\tif (!enabledExtensions$.value.has(walletId))\n\t\t\t\tthrow new KheopskitError(\n\t\t\t\t\t\"WALLET_NOT_CONNECTED\",\n\t\t\t\t\t`wallet ${walletId} is not connected`,\n\t\t\t\t\t{ walletId },\n\t\t\t\t);\n\n\t\t\tconst newMap = new Map(enabledExtensions$.value);\n\t\t\tnewMap.delete(walletId);\n\t\t\tenabledExtensions$.next(newMap);\n\n\t\t\tstore.removeEnabledWalletId(walletId);\n\t\t};\n\n\t\tconst walletIds$ = createWalletIdsPoller$();\n\n\t\tconst subscription = combineLatest([walletIds$, enabledExtensions$])\n\t\t\t.pipe(\n\t\t\t\tmap(([walletIds, enabledExtensions]) => {\n\t\t\t\t\treturn walletIds.map((id): PolkadotInjectedWallet => {\n\t\t\t\t\t\tconst { identifier } = parseWalletId(id);\n\t\t\t\t\t\tconst extension = enabledExtensions.get(id);\n\t\t\t\t\t\tconst extInfo = POLKADOT_EXTENSIONS[identifier];\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\ttype: \"injected\",\n\t\t\t\t\t\t\tplatform: \"polkadot\",\n\t\t\t\t\t\t\tname: extInfo?.name ?? identifier,\n\t\t\t\t\t\t\ticon: extInfo?.icon ?? \"\",\n\t\t\t\t\t\t\tsourceId: identifier,\n\t\t\t\t\t\t\textension,\n\t\t\t\t\t\t\tisConnected: !!extension,\n\t\t\t\t\t\t\tconnect: () => connect(id),\n\t\t\t\t\t\t\tdisconnect: () => disconnect(id),\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t}),\n\t\t\t\tdistinctUntilChanged(walletsEqual),\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// The shared WalletConnect connector is emitted once by core (see\n// `getWallets$`), not per platform — so this returns only injected wallets.\nexport const getPolkadotWallets$ = (store: KheopskitStore = defaultStore) =>\n\tcreatePolkadotInjectedWallets$(store);\n\n/**\n * Compare two wallet arrays by their relevant properties (not functions).\n */\nconst walletsEqual = (\n\ta: PolkadotInjectedWallet[],\n\tb: PolkadotInjectedWallet[],\n): boolean => {\n\tif (a.length !== b.length) return false;\n\treturn a.every(\n\t\t(w, i) =>\n\t\t\tw.id === b[i]?.id &&\n\t\t\tw.isConnected === b[i]?.isConnected &&\n\t\t\tw.name === b[i]?.name,\n\t);\n};\n","import type {\n\tKheopskitPlatform,\n\tPlatformContext,\n\tPolkadotAccountType,\n} from \"../types\";\nimport { getPolkadotAccounts$ } from \"./accounts\";\nimport type { PolkadotAccount, PolkadotWallet } from \"./types\";\nimport { getPolkadotWallets$ } from \"./wallets\";\n\nconst DEFAULT_ACCOUNT_TYPES: PolkadotAccountType[] = [\n\t\"sr25519\",\n\t\"ed25519\",\n\t\"ecdsa\",\n];\n\nconst VALID_ACCOUNT_TYPES = new Set<string>([\n\t\"sr25519\",\n\t\"ed25519\",\n\t\"ecdsa\",\n\t\"ethereum\",\n]);\n\nexport type PolkadotPluginOptions = {\n\t/**\n\t * Allowed Polkadot account key types. Accounts with other key types are\n\t * filtered out from kheopskit state.\n\t *\n\t * @default [\"sr25519\", \"ed25519\", \"ecdsa\"]\n\t */\n\taccountTypes?: PolkadotAccountType[];\n};\n\n/**\n * Polkadot platform plugin. Pass to `getKheopskit$({ platforms: [polkadot()] })`.\n *\n * @example\n * ```ts\n * import { polkadot } from \"@kheopskit/core/polkadot\";\n * polkadot({ accountTypes: [\"sr25519\", \"ed25519\", \"ecdsa\"] });\n * ```\n */\nexport const polkadot = (\n\toptions: PolkadotPluginOptions = {},\n): KheopskitPlatform<\"polkadot\", PolkadotWallet, PolkadotAccount> => {\n\tconst accountTypes = options.accountTypes ?? DEFAULT_ACCOUNT_TYPES;\n\n\tconst invalid = accountTypes.filter((t) => !VALID_ACCOUNT_TYPES.has(t));\n\tif (invalid.length > 0) {\n\t\tconsole.warn(\n\t\t\t`[kheopskit] Unknown polkadot accountTypes: ${JSON.stringify(invalid)}. Valid values: \"sr25519\", \"ed25519\", \"ecdsa\", \"ethereum\".`,\n\t\t);\n\t}\n\n\treturn {\n\t\tplatform: \"polkadot\",\n\t\tgetWallets$: (ctx: PlatformContext) => getPolkadotWallets$(ctx.store),\n\t\tgetAccounts$: (wallets$) => getPolkadotAccounts$(wallets$, accountTypes),\n\t\tacceptsCachedAccount: (cached) =>\n\t\t\taccountTypes.includes(cached.polkadotAccountType ?? \"sr25519\"),\n\t};\n};\n"],"mappings":"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","names":["address","combineLatest","distinctUntilChanged","map","Observable","shareReplay","Observable","distinctUntilChanged","shareReplay","store","combineLatest","map"]}
package/dist/solana.d.mts CHANGED
@@ -1,4 +1,5 @@
1
- import { W as WalletAccountId, a as WalletId, S as SolanaAppKitWallet, K as KheopskitPlatform } from './types-BNzRUNw-.mjs';
1
+ import { W as WalletAccountId, a as WalletId, K as KheopskitPlatform } from './types-C7V7DGlg.mjs';
2
+ export { b as WalletConnectWallet, i as isInjectedWallet, c as isWalletConnectWallet } from './types-C7V7DGlg.mjs';
2
3
  import { MessageModifyingSigner, TransactionModifyingSigner, TransactionSendingSigner } from '@solana/kit';
3
4
  import { Wallet } from '@wallet-standard/base';
4
5
  import 'rxjs';
@@ -17,7 +18,7 @@ declare const isSolanaAddress: (address: string) => boolean;
17
18
  * Wallet Standard chain identifiers for Solana clusters.
18
19
  *
19
20
  * These are the values wallets advertise in their `chains` arrays and the
20
- * values kheopskit accepts in `config.solanaChain`.
21
+ * values kheopskit accepts in `solana({ chain })`.
21
22
  *
22
23
  * @see https://github.com/anza-xyz/wallet-standard
23
24
  */
@@ -58,7 +59,7 @@ type SolanaInjectedWallet = {
58
59
  connect: () => Promise<void>;
59
60
  disconnect: () => Promise<void>;
60
61
  };
61
- type SolanaWallet = SolanaInjectedWallet | SolanaAppKitWallet;
62
+ type SolanaWallet = SolanaInjectedWallet;
62
63
  type SolanaAccount = {
63
64
  id: WalletAccountId;
64
65
  platform: "solana";
@@ -94,4 +95,4 @@ type SolanaPluginOptions = {
94
95
  */
95
96
  declare const solana: (options?: SolanaPluginOptions) => KheopskitPlatform<"solana", SolanaWallet, SolanaAccount>;
96
97
 
97
- export { DEFAULT_SOLANA_CHAIN, type SolanaAccount, SolanaAppKitWallet, type SolanaChainId, type SolanaInjectedWallet, type SolanaPluginOptions, type SolanaSigner, type SolanaWallet, getSolanaCaip2, isSolanaAddress, isSolanaChainId, solana };
98
+ export { DEFAULT_SOLANA_CHAIN, type SolanaAccount, type SolanaChainId, type SolanaInjectedWallet, type SolanaPluginOptions, type SolanaSigner, type SolanaWallet, getSolanaCaip2, isSolanaAddress, isSolanaChainId, solana };
package/dist/solana.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- import { W as WalletAccountId, a as WalletId, S as SolanaAppKitWallet, K as KheopskitPlatform } from './types-BNzRUNw-.js';
1
+ import { W as WalletAccountId, a as WalletId, K as KheopskitPlatform } from './types-C7V7DGlg.js';
2
+ export { b as WalletConnectWallet, i as isInjectedWallet, c as isWalletConnectWallet } from './types-C7V7DGlg.js';
2
3
  import { MessageModifyingSigner, TransactionModifyingSigner, TransactionSendingSigner } from '@solana/kit';
3
4
  import { Wallet } from '@wallet-standard/base';
4
5
  import 'rxjs';
@@ -17,7 +18,7 @@ declare const isSolanaAddress: (address: string) => boolean;
17
18
  * Wallet Standard chain identifiers for Solana clusters.
18
19
  *
19
20
  * These are the values wallets advertise in their `chains` arrays and the
20
- * values kheopskit accepts in `config.solanaChain`.
21
+ * values kheopskit accepts in `solana({ chain })`.
21
22
  *
22
23
  * @see https://github.com/anza-xyz/wallet-standard
23
24
  */
@@ -58,7 +59,7 @@ type SolanaInjectedWallet = {
58
59
  connect: () => Promise<void>;
59
60
  disconnect: () => Promise<void>;
60
61
  };
61
- type SolanaWallet = SolanaInjectedWallet | SolanaAppKitWallet;
62
+ type SolanaWallet = SolanaInjectedWallet;
62
63
  type SolanaAccount = {
63
64
  id: WalletAccountId;
64
65
  platform: "solana";
@@ -94,4 +95,4 @@ type SolanaPluginOptions = {
94
95
  */
95
96
  declare const solana: (options?: SolanaPluginOptions) => KheopskitPlatform<"solana", SolanaWallet, SolanaAccount>;
96
97
 
97
- export { DEFAULT_SOLANA_CHAIN, type SolanaAccount, SolanaAppKitWallet, type SolanaChainId, type SolanaInjectedWallet, type SolanaPluginOptions, type SolanaSigner, type SolanaWallet, getSolanaCaip2, isSolanaAddress, isSolanaChainId, solana };
98
+ export { DEFAULT_SOLANA_CHAIN, type SolanaAccount, type SolanaChainId, type SolanaInjectedWallet, type SolanaPluginOptions, type SolanaSigner, type SolanaWallet, getSolanaCaip2, isSolanaAddress, isSolanaChainId, solana };
package/dist/solana.js CHANGED
@@ -1,16 +1,16 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }require('./chunk-FIAL4HTE.js');
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
3
 
4
4
 
5
5
 
6
+ var _chunkXQWJM3KCjs = require('./chunk-XQWJM3KC.js');
6
7
 
7
8
 
8
- var _chunkNU46D4MZjs = require('./chunk-NU46D4MZ.js');
9
9
 
10
10
 
11
11
 
12
12
 
13
- var _chunkSIUWQBT4js = require('./chunk-SIUWQBT4.js');
13
+ var _chunk4ENHC7G4js = require('./chunk-4ENHC7G4.js');
14
14
 
15
15
  // src/api/solana/chains.ts
16
16
  var DEFAULT_SOLANA_CHAIN = "solana:mainnet";
@@ -29,18 +29,25 @@ var SOLANA_CHAIN_TO_CAIP2 = {
29
29
  var getSolanaCaip2 = (chain) => {
30
30
  const caip2 = SOLANA_CHAIN_TO_CAIP2[chain];
31
31
  if (!caip2)
32
- throw new (0, _chunkNU46D4MZjs.KheopskitError)(
32
+ throw new (0, _chunkXQWJM3KCjs.KheopskitError)(
33
33
  "UNSUPPORTED_CHAIN",
34
34
  `Solana chain "${chain}" cannot be used over WalletConnect (no CAIP-2 id).`
35
35
  );
36
36
  return caip2;
37
37
  };
38
- var CAIP2_TO_SOLANA_CHAIN = Object.fromEntries(
39
- Object.entries(SOLANA_CHAIN_TO_CAIP2).map(([chain, caip2]) => [
40
- caip2,
41
- chain
42
- ])
43
- );
38
+ var DEPRECATED_CAIP2_TO_SOLANA_CHAIN = {
39
+ "solana:4sGjMW1sUnHzSxGspuhpqLDx6wiyjNtZ": "solana:mainnet",
40
+ "solana:8E9rvCKLFQia2Y35HXjjpWzj8weVo44K": "solana:devnet"
41
+ };
42
+ var CAIP2_TO_SOLANA_CHAIN = {
43
+ ...Object.fromEntries(
44
+ Object.entries(SOLANA_CHAIN_TO_CAIP2).map(([chain, caip2]) => [
45
+ caip2,
46
+ chain
47
+ ])
48
+ ),
49
+ ...DEPRECATED_CAIP2_TO_SOLANA_CHAIN
50
+ };
44
51
  var getSolanaChainIdFromCaip2 = (caip2) => CAIP2_TO_SOLANA_CHAIN[caip2];
45
52
 
46
53
  // src/api/solana/accounts.ts
@@ -70,7 +77,7 @@ var SOLANA_SIGN_AND_SEND_TRANSACTION = "solana:signAndSendTransaction";
70
77
  var requireFeature = (wallet, name) => {
71
78
  const feature = wallet.features[name];
72
79
  if (!feature)
73
- throw new (0, _chunkNU46D4MZjs.KheopskitError)(
80
+ throw new (0, _chunkXQWJM3KCjs.KheopskitError)(
74
81
  "FEATURE_NOT_SUPPORTED",
75
82
  `wallet "${wallet.name}" does not support ${name}`
76
83
  );
@@ -142,7 +149,7 @@ var createWalletConnectSolanaSigner = (provider, accountAddress, chain) => {
142
149
  const signerAddress = _kit.address.call(void 0, accountAddress);
143
150
  const request = (method, params) => {
144
151
  if (!provider.session)
145
- throw new (0, _chunkNU46D4MZjs.KheopskitError)("NO_SESSION", "No session found");
152
+ throw new (0, _chunkXQWJM3KCjs.KheopskitError)("NO_SESSION", "No session found");
146
153
  return provider.client.request({
147
154
  topic: provider.session.topic,
148
155
  chainId: getSolanaCaip2(chain),
@@ -220,13 +227,13 @@ var createWalletConnectSolanaSigner = (provider, accountAddress, chain) => {
220
227
  // src/api/solana/accounts.ts
221
228
  var getInjectedWalletAccounts$ = (wallet, chain) => {
222
229
  if (!wallet.isConnected) return _rxjs.of.call(void 0, []);
223
- return _chunkSIUWQBT4js.getCachedObservable$.call(void 0,
230
+ return _chunk4ENHC7G4js.getCachedObservable$.call(void 0,
224
231
  `accounts:${wallet.id}:${chain}`,
225
232
  () => new (0, _rxjs.Observable)((subscriber) => {
226
233
  const standardWallet = wallet.wallet;
227
234
  const buildAccounts = () => standardWallet.accounts.map(
228
235
  (account) => ({
229
- id: _chunkNU46D4MZjs.getWalletAccountId.call(void 0, wallet.id, account.address),
236
+ id: _chunkXQWJM3KCjs.getWalletAccountId.call(void 0, wallet.id, account.address),
230
237
  platform: "solana",
231
238
  address: account.address,
232
239
  chains: wallet.chains,
@@ -248,11 +255,11 @@ var getInjectedWalletAccounts$ = (wallet, chain) => {
248
255
  }).pipe(_rxjs.shareReplay.call(void 0, { refCount: true, bufferSize: 1 }))
249
256
  );
250
257
  };
251
- var getAppKitAccounts$ = (wallet, chain) => {
258
+ var getWalletConnectAccounts$ = (wallet, chain) => {
252
259
  const provider = wallet.appKit.getProvider("solana");
253
- if (!wallet.isConnected || !_optionalChain([provider, 'optionalAccess', _4 => _4.session])) return _rxjs.of.call(void 0, []);
254
- return _chunkSIUWQBT4js.getCachedObservable$.call(void 0,
255
- `accounts:${wallet.id}:${chain}`,
260
+ if (!wallet.platforms.includes("solana") || !_optionalChain([provider, 'optionalAccess', _4 => _4.session])) return _rxjs.of.call(void 0, []);
261
+ return _chunk4ENHC7G4js.getCachedObservable$.call(void 0,
262
+ `accounts:${wallet.id}:solana:${chain}`,
256
263
  () => new (0, _rxjs.Observable)((subscriber) => {
257
264
  const buildAccounts = () => {
258
265
  const session = provider.session;
@@ -271,7 +278,7 @@ var getAppKitAccounts$ = (wallet, chain) => {
271
278
  const chains = advertisedChains.length ? advertisedChains : [chain];
272
279
  return addresses.map(
273
280
  (accountAddress) => ({
274
- id: _chunkNU46D4MZjs.getWalletAccountId.call(void 0, wallet.id, accountAddress),
281
+ id: _chunkXQWJM3KCjs.getWalletAccountId.call(void 0, wallet.id, accountAddress),
275
282
  platform: "solana",
276
283
  address: accountAddress,
277
284
  chains,
@@ -303,7 +310,7 @@ var getSolanaAccounts$ = (solanaWallets$, solanaChain) => new (0, _rxjs.Observab
303
310
  _rxjs.switchMap.call(void 0,
304
311
  (wallets) => wallets.length ? _rxjs.combineLatest.call(void 0, [
305
312
  ...wallets.filter((w) => w.type === "injected").map((w) => getInjectedWalletAccounts$(w, solanaChain)),
306
- ...wallets.filter((w) => w.type === "appKit").map((w) => getAppKitAccounts$(w, solanaChain))
313
+ ...wallets.filter(_chunk4ENHC7G4js.isWalletConnectWallet).map((w) => getWalletConnectAccounts$(w, solanaChain))
307
314
  ]) : _rxjs.of.call(void 0, [])
308
315
  ),
309
316
  _rxjs.map.call(void 0, (accounts) => accounts.flat()),
@@ -362,14 +369,14 @@ var createSolanaInjectedWallets$ = (store2) => new (0, _rxjs.Observable)((subscr
362
369
  const enabledWalletIds$ = new (0, _rxjs.BehaviorSubject)(/* @__PURE__ */ new Set());
363
370
  const connect = async (wallet, walletId) => {
364
371
  if (enabledWalletIds$.value.has(walletId))
365
- throw new (0, _chunkNU46D4MZjs.KheopskitError)(
372
+ throw new (0, _chunkXQWJM3KCjs.KheopskitError)(
366
373
  "WALLET_ALREADY_CONNECTED",
367
374
  `wallet ${walletId} is already connected`,
368
375
  { walletId }
369
376
  );
370
377
  const feature = wallet.features["standard:connect"];
371
378
  if (!feature)
372
- throw new (0, _chunkNU46D4MZjs.KheopskitError)(
379
+ throw new (0, _chunkXQWJM3KCjs.KheopskitError)(
373
380
  "FEATURE_NOT_SUPPORTED",
374
381
  `wallet ${walletId} does not support standard:connect`,
375
382
  { walletId }
@@ -382,7 +389,7 @@ var createSolanaInjectedWallets$ = (store2) => new (0, _rxjs.Observable)((subscr
382
389
  };
383
390
  const disconnect = async (wallet, walletId) => {
384
391
  if (!enabledWalletIds$.value.has(walletId))
385
- throw new (0, _chunkNU46D4MZjs.KheopskitError)(
392
+ throw new (0, _chunkXQWJM3KCjs.KheopskitError)(
386
393
  "WALLET_NOT_CONNECTED",
387
394
  `wallet ${walletId} is not connected`,
388
395
  { walletId }
@@ -393,12 +400,12 @@ var createSolanaInjectedWallets$ = (store2) => new (0, _rxjs.Observable)((subscr
393
400
  newSet.delete(walletId);
394
401
  enabledWalletIds$.next(newSet);
395
402
  store2.removeEnabledWalletId(walletId);
396
- _chunkSIUWQBT4js.clearCachedObservablesByPrefix.call(void 0, `accounts:${walletId}:`);
403
+ _chunk4ENHC7G4js.clearCachedObservablesByPrefix.call(void 0, `accounts:${walletId}:`);
397
404
  };
398
405
  const sub = _rxjs.combineLatest.call(void 0, [walletStandardWallets$, enabledWalletIds$]).pipe(
399
406
  _rxjs.map.call(void 0,
400
407
  ([wallets, enabledWalletIds]) => wallets.map((wallet) => {
401
- const walletId = _chunkSIUWQBT4js.getWalletId.call(void 0, "solana", wallet.name);
408
+ const walletId = _chunk4ENHC7G4js.getWalletId.call(void 0, "solana", wallet.name);
402
409
  return {
403
410
  platform: "solana",
404
411
  type: "injected",
@@ -420,21 +427,7 @@ var createSolanaInjectedWallets$ = (store2) => new (0, _rxjs.Observable)((subscr
420
427
  sub.unsubscribe();
421
428
  };
422
429
  }).pipe(_rxjs.shareReplay.call(void 0, { refCount: true, bufferSize: 1 }));
423
- var getSolanaWallets$ = (config, store2 = _chunkNU46D4MZjs.store) => {
424
- return new (0, _rxjs.Observable)((subscriber) => {
425
- const subscription = _rxjs.combineLatest.call(void 0, [
426
- createSolanaInjectedWallets$(store2),
427
- _chunkNU46D4MZjs.getAppKitWallets$.call(void 0, config).pipe(_rxjs.map.call(void 0, (w) => w.solana))
428
- ]).pipe(
429
- _rxjs.map.call(void 0,
430
- ([injectedWallets, appKitWallet]) => appKitWallet ? [...injectedWallets, appKitWallet] : injectedWallets
431
- )
432
- ).subscribe(subscriber);
433
- return () => {
434
- subscription.unsubscribe();
435
- };
436
- }).pipe(_rxjs.shareReplay.call(void 0, { refCount: true, bufferSize: 1 }));
437
- };
430
+ var getSolanaWallets$ = (store2 = _chunkXQWJM3KCjs.store) => createSolanaInjectedWallets$(store2);
438
431
  var walletsEqual = (a, b) => {
439
432
  if (a.length !== b.length) return false;
440
433
  return a.every(
@@ -452,7 +445,7 @@ var solana = (options = {}) => {
452
445
  }
453
446
  return {
454
447
  platform: "solana",
455
- getWallets$: (ctx) => getSolanaWallets$(ctx.config, ctx.store),
448
+ getWallets$: (ctx) => getSolanaWallets$(ctx.store),
456
449
  getAccounts$: (wallets$) => getSolanaAccounts$(wallets$, chain)
457
450
  };
458
451
  };
@@ -462,5 +455,7 @@ var solana = (options = {}) => {
462
455
 
463
456
 
464
457
 
465
- exports.DEFAULT_SOLANA_CHAIN = DEFAULT_SOLANA_CHAIN; exports.getSolanaCaip2 = getSolanaCaip2; exports.isSolanaAddress = _chunkNU46D4MZjs.isSolanaAddress; exports.isSolanaChainId = isSolanaChainId; exports.solana = solana;
458
+
459
+
460
+ exports.DEFAULT_SOLANA_CHAIN = DEFAULT_SOLANA_CHAIN; exports.getSolanaCaip2 = getSolanaCaip2; exports.isInjectedWallet = _chunk4ENHC7G4js.isInjectedWallet; exports.isSolanaAddress = _chunkXQWJM3KCjs.isSolanaAddress; exports.isSolanaChainId = isSolanaChainId; exports.isWalletConnectWallet = _chunk4ENHC7G4js.isWalletConnectWallet; exports.solana = solana;
466
461
  //# sourceMappingURL=solana.js.map