@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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../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":["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":["Observable","combineLatest","map","shareReplay","Observable","combineLatest","map","of","shareReplay","map","Observable","combineLatest","distinctUntilChanged","map","of","shareReplay","switchMap","getInjectedWalletAccounts$","address","getAppKitAccounts$","isSameAccountsList","Observable","map","w","combineLatest","of","shareReplay","Observable","combineLatest","filter","map","mergeMap","of","shareReplay","createStore","BehaviorSubject","Observable","combineLatest","map","shareReplay","BehaviorSubject","Observable","combineLatest","distinctUntilChanged","map","of","shareReplay","Observable","store","createStore","providerDetails","shareReplay","BehaviorSubject","combineLatest","map","BehaviorSubject","Observable","combineLatest","distinctUntilChanged","map","of","shareReplay","Observable","BehaviorSubject","of","map","distinctUntilChanged","combineLatest","shareReplay","map","shareReplay","Observable","combineLatest","of","filter","mergeMap","Observable","combineLatest","map","shareReplay"]}
1
+ {"version":3,"sources":["../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":["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":["combineLatest","map","Observable","shareReplay","combineLatest","map","Observable","of","shareReplay","map","map","combineLatest","distinctUntilChanged","map","Observable","of","shareReplay","switchMap","getInjectedWalletAccounts$","of","Observable","address","getAppKitAccounts$","map","switchMap","combineLatest","distinctUntilChanged","isSameAccountsList","shareReplay","Observable","map","w","combineLatest","of","shareReplay","combineLatest","filter","map","Observable","of","shareReplay","createStore","BehaviorSubject","combineLatest","map","Observable","shareReplay","BehaviorSubject","combineLatest","distinctUntilChanged","map","Observable","of","shareReplay","of","Observable","BehaviorSubject","map","distinctUntilChanged","combineLatest","shareReplay","Observable","store","createStore","providerDetails","shareReplay","BehaviorSubject","combineLatest","map","BehaviorSubject","combineLatest","distinctUntilChanged","map","Observable","shareReplay","Observable","distinctUntilChanged","shareReplay","BehaviorSubject","combineLatest","map","map","shareReplay","Observable","combineLatest","of","filter","Observable","combineLatest","map","shareReplay"]}
package/package.json CHANGED
@@ -1,11 +1,14 @@
1
1
  {
2
2
  "name": "@kheopskit/core",
3
- "version": "0.0.21",
3
+ "version": "0.0.22",
4
4
  "description": "",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
8
8
  "private": false,
9
+ "files": [
10
+ "dist"
11
+ ],
9
12
  "main": "dist/index.cjs",
10
13
  "module": "dist/index.mjs",
11
14
  "types": "dist/index.d.ts",
@@ -24,7 +27,7 @@
24
27
  },
25
28
  "license": "ISC",
26
29
  "peerDependencies": {
27
- "polkadot-api": ">=1.10.0",
30
+ "polkadot-api": ">=1.21.0",
28
31
  "rxjs": ">=7.0.0"
29
32
  },
30
33
  "dependencies": {
@@ -59,6 +62,7 @@
59
62
  "test": "echo \"Error: no test specified\" && exit 1",
60
63
  "dev": "tsup --watch",
61
64
  "build": "tsup",
62
- "clean": "rm -rf ./dist && rm -rf ./node_modules"
65
+ "clean": "rm -rf ./dist && rm -rf ./node_modules",
66
+ "typecheck": "tsc --noEmit"
63
67
  }
64
68
  }
package/CHANGELOG.md DELETED
@@ -1,131 +0,0 @@
1
- # @kheopskit/core
2
-
3
- ## 0.0.21
4
-
5
- ### Patch Changes
6
-
7
- - [`b3d5f98`](https://github.com/kheopskit/kheopskit/commit/b3d5f989a33f9c13f56833f71494df5091c4930c) Thanks [@0xKheops](https://github.com/0xKheops)! - feat: theme variables
8
-
9
- - [`cd73eb1`](https://github.com/kheopskit/kheopskit/commit/cd73eb18840a69b49238629051450eca26b9e275) Thanks [@0xKheops](https://github.com/0xKheops)! - fix: hide all wallets
10
-
11
- ## 0.0.20
12
-
13
- ### Patch Changes
14
-
15
- - [`87bbfb0`](https://github.com/kheopskit/kheopskit/commit/87bbfb016b15bd0378a62943ccbe1403a6e5d07e) Thanks [@0xKheops](https://github.com/0xKheops)! - test: changeset2
16
-
17
- ## 0.0.19
18
-
19
- ### Patch Changes
20
-
21
- - [`e68aaa5`](https://github.com/kheopskit/kheopskit/commit/e68aaa5019630b03660d1cb5e95a9188cf972ebf) Thanks [@0xKheops](https://github.com/0xKheops)! - test: changeset
22
-
23
- ## 0.0.18
24
-
25
- ### Patch Changes
26
-
27
- - [`2e04a98`](https://github.com/kheopskit/kheopskit/commit/2e04a9893795e6aa43c942dee61443b4700c3294) Thanks [@0xKheops](https://github.com/0xKheops)! - fix: sync changesets
28
-
29
- ## 0.0.15
30
-
31
- ### Patch Changes
32
-
33
- - [`a540c06`](https://github.com/kheopskit/kheopskit/commit/a540c06e90816656a1a21df3d95d0328bff78455) Thanks [@0xKheops](https://github.com/0xKheops)! - test: one more changeset
34
-
35
- ## 0.0.14
36
-
37
- ### Patch Changes
38
-
39
- - [`b8242ab`](https://github.com/kheopskit/kheopskit/commit/b8242abd31a6512b16399dd44ca5e5d82f6c70bf) Thanks [@0xKheops](https://github.com/0xKheops)! - test: changeset
40
-
41
- ## 0.0.13
42
-
43
- ### Patch Changes
44
-
45
- - [`5e07091`](https://github.com/kheopskit/kheopskit/commit/5e070910229cb9202f5d2f1869bfb16c5180d273) Thanks [@0xKheops](https://github.com/0xKheops)! - test: changeset
46
-
47
- ## 0.0.12
48
-
49
- ### Patch Changes
50
-
51
- - [`2f34f0c`](https://github.com/kheopskit/kheopskit/commit/2f34f0c16c7866a4187b4474a45f93e2ad07f5c7) Thanks [@0xKheops](https://github.com/0xKheops)! - test: changeset
52
-
53
- ## 0.0.11
54
-
55
- ### Patch Changes
56
-
57
- - [`9d4f86e`](https://github.com/kheopskit/kheopskit/commit/9d4f86e7632843fad089ce930b209aee9b9e2b41) Thanks [@0xKheops](https://github.com/0xKheops)! - test changeset
58
-
59
- ## 0.0.10
60
-
61
- ### Patch Changes
62
-
63
- - [`c7dea32`](https://github.com/kheopskit/kheopskit/commit/c7dea32e2921716cef82b53e1960c3cdb4c8e5ae) Thanks [@0xKheops](https://github.com/0xKheops)! - test changeset
64
-
65
- ## 0.0.9
66
-
67
- ### Patch Changes
68
-
69
- - [`961f6a3`](https://github.com/kheopskit/kheopskit/commit/961f6a371c73d4065e9157c95ca4d996012098e7) Thanks [@0xKheops](https://github.com/0xKheops)! - test changeset
70
-
71
- ## 0.0.8
72
-
73
- ### Patch Changes
74
-
75
- - [`b76185f`](https://github.com/kheopskit/kheopskit/commit/b76185f99a78c5a82a8b9aead65b0708f17b0bd5) Thanks [@0xKheops](https://github.com/0xKheops)! - test changeset
76
-
77
- ## 0.0.7
78
-
79
- ### Patch Changes
80
-
81
- - [`07f8406`](https://github.com/kheopskit/kheopskit/commit/07f8406d3f176e6a8b3b06fe16396bf2b6b1db88) Thanks [@0xKheops](https://github.com/0xKheops)! - test changeset
82
-
83
- ## 0.0.6
84
-
85
- ### Patch Changes
86
-
87
- - [`5319326`](https://github.com/kheopskit/kheopskit/commit/53193262e80fec9e242986f818d7f7b53f92357a) Thanks [@0xKheops](https://github.com/0xKheops)! - test changeset
88
-
89
- ## 0.0.5
90
-
91
- ### Patch Changes
92
-
93
- - [`d865842`](https://github.com/kheopskit/kheopskit/commit/d86584236e51730e82baaa9068604fa7e703e9c2) Thanks [@0xKheops](https://github.com/0xKheops)! - test changeset
94
-
95
- ## 0.0.4
96
-
97
- ### Patch Changes
98
-
99
- - [`4a61939`](https://github.com/kheopskit/kheopskit/commit/4a61939b9a5c4ea6fb119a0427704a5fc684343e) Thanks [@0xKheops](https://github.com/0xKheops)! - test changeset
100
-
101
- ## 0.0.3
102
-
103
- ### Patch Changes
104
-
105
- - [`7a0ea89`](https://github.com/kheopskit/kheopskit/commit/7a0ea890982570ae89934fead69d319fff46dd98) Thanks [@0xKheops](https://github.com/0xKheops)! - test changeset
106
-
107
- ## 0.0.2
108
-
109
- ### Patch Changes
110
-
111
- - [`806b8d3`](https://github.com/kheopskit/kheopskit/commit/806b8d394ba7c2576c76d9de72a15d7927bcff9e) - update peer deps
112
-
113
- ## 0.0.1
114
-
115
- ### Patch Changes
116
-
117
- - [`e1cebed`](https://github.com/kheopskit/kheopskit/commit/e1cebed92d303f041070e0ae146ee34d9eb717bd) - refactor property names
118
-
119
- - [`e1cebed`](https://github.com/kheopskit/kheopskit/commit/e1cebed92d303f041070e0ae146ee34d9eb717bd) - initial alpha release
120
-
121
- ## 0.0.1-alpha.1
122
-
123
- ### Patch Changes
124
-
125
- - [`4f378f9`](https://github.com/0xKheops/kheopskit-alpha/commit/4f378f9b61e555b7b66ef3bfaf107ab8e6ac62b1) - refactor property names
126
-
127
- ## 0.0.1-alpha.0
128
-
129
- ### Patch Changes
130
-
131
- - [`3216d3b`](https://github.com/0xKheops/kheopskit-alpha/commit/3216d3b4ca1f2fadbebe9a4275e7b864ac89d222) - initial alpha release
@@ -1,43 +0,0 @@
1
- import { sortAccounts } from "@/utils/sortAccounts";
2
- import { Observable, combineLatest, map, of, shareReplay } from "rxjs";
3
- import { getEthereumAccounts$ } from "./ethereum/accounts";
4
- import { getPolkadotAccounts$ } from "./polkadot/accounts";
5
- import type { KheopskitConfig, Wallet, WalletAccount } from "./types";
6
-
7
- export const getAccounts$ = (
8
- config: KheopskitConfig,
9
- wallets: Observable<Wallet[]>,
10
- ) => {
11
- return new Observable<WalletAccount[]>((subscriber) => {
12
- const sources = config.platforms.map<Observable<WalletAccount[]>>(
13
- (platform) => {
14
- switch (platform) {
15
- case "polkadot":
16
- return getPolkadotAccounts$(
17
- wallets.pipe(
18
- map((w) => w.filter((w) => w.platform === "polkadot")),
19
- ),
20
- );
21
- case "ethereum":
22
- return getEthereumAccounts$(
23
- wallets.pipe(
24
- map((w) => w.filter((w) => w.platform === "ethereum")),
25
- ),
26
- );
27
- }
28
- },
29
- );
30
-
31
- const accounts$ = sources.length
32
- ? combineLatest(sources).pipe(
33
- map((accounts) => accounts.flat().sort(sortAccounts)),
34
- )
35
- : of([]);
36
-
37
- const sub = accounts$.subscribe(subscriber);
38
-
39
- return () => {
40
- sub.unsubscribe();
41
- };
42
- }).pipe(shareReplay({ refCount: true, bufferSize: 1 }));
43
- };