@kheopskit/core 0.0.1-alpha.1 → 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/dist/index.d.mts +54 -19
- package/dist/index.d.ts +54 -19
- package/dist/index.js +571 -224
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +610 -241
- package/dist/index.mjs.map +1 -1
- package/package.json +14 -6
- package/src/api/accounts.ts +25 -12
- package/src/api/appKit.ts +122 -0
- package/src/api/config.ts +5 -4
- package/src/api/ethereum/accounts.ts +179 -48
- package/src/api/ethereum/wallets.ts +37 -23
- package/src/api/index.ts +1 -0
- package/src/api/kheopskit.ts +35 -13
- package/src/api/polkadot/accounts.ts +113 -18
- package/src/api/polkadot/wallets.ts +88 -68
- package/src/api/store.ts +6 -3
- package/src/api/types.ts +53 -20
- package/src/api/wallets.ts +15 -13
- package/src/index.ts +0 -2
- package/src/utils/{AccountId.ts → WalletAccountId.ts} +1 -1
- package/src/utils/WalletId.ts +1 -1
- package/src/utils/createStore.ts +1 -1
- package/src/utils/getAccountAddressType.ts +2 -1
- package/src/utils/getCachedObservable.ts +12 -0
- package/src/utils/getQuery.ts +72 -0
- package/src/utils/index.ts +1 -3
- package/src/utils/isEthereumAddress.ts +3 -1
- package/src/utils/isSs58Address.ts +2 -2
- package/src/utils/isWalletPlatform.ts +1 -1
- package/src/utils/logObservable.ts +21 -0
- package/src/utils/polkadotExtensions.ts +21 -0
- package/src/utils/sortAccounts.ts +36 -0
- package/src/utils/sortWallets.ts +14 -0
- package/src/utils/isTruthy.ts +0 -3
- package/src/utils/types.ts +0 -5
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/api/kheopskit.ts","../src/api/accounts.ts","../src/utils/createStore.ts","../src/utils/isEthereumAddress.ts","../src/utils/isSs58Address.ts","../src/utils/isValidAddress.ts","../src/utils/AccountId.ts","../src/utils/isWalletPlatform.ts","../src/api/ethereum/accounts.ts","../src/api/store.ts","../src/utils/WalletId.ts","../src/api/ethereum/wallets.ts","../src/api/polkadot/accounts.ts","../src/api/polkadot/wallets.ts","../src/api/config.ts","../src/api/wallets.ts"],"sourcesContent":["import { combineLatest, map, Observable, shareReplay } 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 const getKheopskit$ = (config: KheopskitConfig) => {\n const c = resolveConfig(config);\n\n return new Observable<{ wallets: Wallet[]; accounts: WalletAccount[] }>(\n (subscriber) => {\n const subscription = combineLatest([getWallets$(c), getAccounts$(c)])\n .pipe(map(([wallets, accounts]) => ({ wallets, accounts })))\n .subscribe(subscriber);\n\n return () => {\n subscription.unsubscribe();\n };\n }\n ).pipe(shareReplay({ bufferSize: 1, refCount: true }));\n};\n","import { combineLatest, map, Observable, of, shareReplay } from \"rxjs\";\nimport type { ResolvedConfig } from \"./config\";\nimport { ethereumAccounts$ } from \"./ethereum/accounts\";\nimport { polkadotAccounts$ } from \"./polkadot/accounts\";\nimport type { WalletAccount } from \"./types\";\n\nexport const getAccounts$ = (config: ResolvedConfig) => {\n return new Observable<WalletAccount[]>((subscriber) => {\n const observables = config.platforms.map<Observable<WalletAccount[]>>(\n (platform) => {\n switch (platform) {\n case \"polkadot\":\n return polkadotAccounts$;\n case \"ethereum\":\n return ethereumAccounts$;\n }\n }\n );\n\n const accounts$ = observables.length\n ? combineLatest(observables).pipe(map((accounts) => accounts.flat()))\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","export const isEthereumAddress = (address: string): boolean =>\n /^0x[a-fA-F0-9]{40}$/.test(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 (_err) {\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 { EthereumAccount, EthereumWallet } from \"@/api/types\";\nimport { getWalletAccountId } from \"@/utils\";\nimport {\n combineLatest,\n map,\n Observable,\n of,\n shareReplay,\n switchMap,\n} from \"rxjs\";\nimport { getAddress, type EIP1193Provider } from \"viem\";\nimport { ethereumWallets$ } from \"./wallets\";\n\nconst getWalletAccounts$ = (\n wallet: EthereumWallet\n): Observable<EthereumAccount[]> => {\n if (!wallet.isConnected) return of([]);\n\n return new Observable<EthereumAccount[]>((subscriber) => {\n const getAccount = (address: string, i: number): EthereumAccount => ({\n id: getWalletAccountId(wallet.id, address),\n platform: \"ethereum\",\n provider: wallet.provider as EIP1193Provider,\n address: getAddress(address),\n walletName: wallet.name,\n walletId: wallet.id,\n isWalletDefault: i === 0,\n });\n\n const listener = (addresses: string[]) => {\n subscriber.next(addresses.map(getAccount));\n };\n\n // subscribe to changes\n wallet.provider.on(\"accountsChanged\", listener);\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(\"accountsChanged\", listener);\n };\n });\n};\n\nexport const ethereumAccounts$ = new Observable<EthereumAccount[]>(\n (subscriber) => {\n const sub = ethereumWallets$\n .pipe(\n map((wallets) => wallets.filter((w) => w.isConnected)),\n switchMap((wallets) =>\n wallets.length\n ? combineLatest(wallets.map(getWalletAccounts$))\n : of([])\n ),\n map((accounts) => accounts.flat())\n )\n .subscribe(subscriber);\n\n return () => {\n sub.unsubscribe();\n };\n }\n).pipe(shareReplay({ refCount: true, bufferSize: 1 }));\n\nethereumAccounts$.subscribe(() => {\n console.count(\"[kheopskit] ethereumAccounts$ emit\");\n});\n","import { createStore } from \"@/utils/createStore\";\nimport type { KheopskitStoreData } from \"./types\";\nimport { uniq } from \"lodash\";\nimport { parseWalletId, type WalletId } from \"@/utils/WalletId\";\n\nconst LOCAL_STORAGE_KEY = \"kheopskit\";\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 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 { store } from \"@/api/store\";\nimport type { EthereumWallet } from \"@/api/types\";\nimport { getWalletId, type WalletId } from \"@/utils/WalletId\";\nimport { createStore, type EIP6963ProviderDetail } from \"mipd\";\nimport {\n BehaviorSubject,\n combineLatest,\n map,\n Observable,\n shareReplay,\n} from \"rxjs\";\nimport type { EIP1193Provider } from \"viem\";\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\nprovidersDetails$.subscribe(() => {\n console.count(\"[kheopskit] providers$ emit\");\n});\n\nexport const ethereumWallets$ = new Observable<EthereumWallet[]>(\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 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 (\n walletId: WalletId,\n _provider: EIP1193Provider\n ) => {\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): EthereumWallet => {\n const walletId = getWalletId(\"ethereum\", pd.info.rdns);\n const provider = pd.provider as EIP1193Provider;\n\n return {\n platform: \"ethereum\",\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, provider),\n };\n });\n })\n )\n .subscribe(subscriber);\n\n return () => {\n sub.unsubscribe();\n };\n }\n).pipe(shareReplay({ refCount: true, bufferSize: 1 }));\n\nethereumWallets$.subscribe(() => {\n console.count(\"[kheopskit] ethereumWallets$ emit\");\n});\n","import type { PolkadotAccount, PolkadotWallet } from \"@/api/types\";\nimport { getWalletAccountId } from \"@/utils\";\nimport type { InjectedPolkadotAccount } from \"polkadot-api/pjs-signer\";\nimport {\n combineLatest,\n map,\n Observable,\n of,\n shareReplay,\n switchMap,\n} from \"rxjs\";\nimport { polkadotWallets$ } from \"./wallets\";\n\nconst getWalletAccounts$ = (\n wallet: PolkadotWallet\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 // subscribe to changes\n const unsubscribe = wallet.extension.subscribe((accounts) => {\n subscriber.next(accounts.map(getAccount));\n });\n\n // initial value\n subscriber.next(wallet.extension.getAccounts().map(getAccount));\n\n return () => {\n return unsubscribe();\n };\n });\n};\n\nexport const polkadotAccounts$ = new Observable<PolkadotAccount[]>(\n (subscriber) => {\n const sub = polkadotWallets$\n .pipe(\n map((wallets) => wallets.filter((w) => w.isConnected)),\n switchMap((wallets) =>\n wallets.length\n ? combineLatest(wallets.map(getWalletAccounts$))\n : of([])\n ),\n map((accounts) => accounts.flat())\n )\n .subscribe(subscriber);\n\n return () => {\n sub.unsubscribe();\n };\n }\n).pipe(shareReplay({ refCount: true, bufferSize: 1 }));\n\npolkadotAccounts$.subscribe(() => {\n console.count(\"[kheopskit] polkadotAccounts$ emit\");\n});\n","import { store } from \"@/api/store\";\nimport type { PolkadotWallet } from \"@/api/types\";\nimport { getWalletId, parseWalletId, type WalletId } from \"@/utils/WalletId\";\nimport { isEqual } from \"lodash\";\nimport {\n connectInjectedExtension,\n getInjectedExtensions,\n type InjectedExtension,\n} from \"polkadot-api/pjs-signer\";\nimport {\n BehaviorSubject,\n combineLatest,\n distinctUntilChanged,\n map,\n mergeMap,\n Observable,\n of,\n shareReplay,\n timer,\n} from \"rxjs\";\n\nconst getInjectedWalletsIds = () =>\n getInjectedExtensions().map((name) => getWalletId(\"polkadot\", name));\n\nconst polkadotInjectedWallets$ = new Observable<PolkadotWallet[]>(\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 register 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): PolkadotWallet => {\n const { identifier } = parseWalletId(id);\n const extension = enabledExtensions.get(id);\n\n return extension\n ? {\n id,\n platform: \"polkadot\",\n name: identifier,\n extensionId: identifier,\n isConnected: true,\n extension,\n disconnect: () => disconnect(id),\n }\n : {\n id,\n platform: \"polkadot\",\n name: identifier,\n extensionId: identifier,\n isConnected: false,\n connect: () => connect(id),\n };\n });\n })\n )\n .subscribe(subscriber);\n\n return () => {\n subscription.unsubscribe();\n };\n }\n).pipe(shareReplay({ refCount: true, bufferSize: 1 }));\n\n// TODO merge with wallet connect\nexport const polkadotWallets$ = polkadotInjectedWallets$;\n\npolkadotWallets$.subscribe(() => {\n console.count(\"[kheopskit] polkadotWallets$ emit\");\n});\n","import type { KheopskitConfig } from \"./types\";\n\nexport type ResolvedConfig = Required<KheopskitConfig>;\n\nexport const DEFAULT_CONFIG: ResolvedConfig = {\n autoReconnect: true,\n platforms: [\"polkadot\"],\n};\n\nexport const resolveConfig = (config: KheopskitConfig): ResolvedConfig => {\n return Object.assign({}, DEFAULT_CONFIG, config);\n};\n","import {\n combineLatest,\n distinct,\n filter,\n map,\n mergeMap,\n Observable,\n of,\n shareReplay,\n take,\n} from \"rxjs\";\nimport type { ResolvedConfig } from \"./config\";\nimport { ethereumWallets$ } from \"./ethereum/wallets\";\nimport { polkadotWallets$ } from \"./polkadot/wallets\";\nimport { store } from \"./store\";\nimport type { 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: ResolvedConfig) => {\n return new Observable<Wallet[]>((subscriber) => {\n const observables = config.platforms.map<Observable<Wallet[]>>(\n (platform) => {\n switch (platform) {\n case \"polkadot\":\n return polkadotWallets$;\n case \"ethereum\":\n return ethereumWallets$;\n }\n }\n );\n\n const wallets$ = observables.length\n ? combineLatest(observables).pipe(map((wallets) => wallets.flat()))\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"],"mappings":"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","names":["combineLatest","map","Observable","shareReplay","combineLatest","map","Observable","of","shareReplay","combineLatest","map","Observable","shareReplay","createStore","BehaviorSubject","map","store","providerDetails","Observable","map","combineLatest","shareReplay","combineLatest","map","Observable","of","shareReplay","switchMap","BehaviorSubject","combineLatest","map","Observable","of","shareReplay","getWalletAccounts$","of","Observable","map","switchMap","combineLatest","shareReplay","Observable","combineLatest","map","of","shareReplay","combineLatest","filter","map","mergeMap","Observable","of","shareReplay","map","shareReplay","Observable","combineLatest","of","filter","mergeMap","Observable","combineLatest","map","shareReplay"]}
|
|
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({}); // of(null).pipe(shareReplay({ refCount: true, bufferSize: 1 }));\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 universalProviderConfigOverride: {\n methods: {\n polkadot: [\"polkadot_signTransaction\", \"polkadot_signMessage\"],\n },\n },\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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kheopskit/core",
|
|
3
|
-
"version": "0.0.1
|
|
3
|
+
"version": "0.0.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -16,20 +16,28 @@
|
|
|
16
16
|
}
|
|
17
17
|
},
|
|
18
18
|
"keywords": [],
|
|
19
|
-
"author": "",
|
|
19
|
+
"author": "Kheops (https://github.com/0xKheops)",
|
|
20
|
+
"repository": {
|
|
21
|
+
"type": "git",
|
|
22
|
+
"url": "git+https://github.com/kheopskit/kheopskit.git"
|
|
23
|
+
},
|
|
20
24
|
"license": "ISC",
|
|
21
25
|
"peerDependencies": {
|
|
22
26
|
"polkadot-api": ">=1.10.0",
|
|
23
27
|
"rxjs": ">=7.8.0"
|
|
24
28
|
},
|
|
25
29
|
"dependencies": {
|
|
30
|
+
"@reown/appkit": "^1.7.6",
|
|
31
|
+
"@walletconnect/types": "^2.20.3",
|
|
32
|
+
"@walletconnect/universal-provider": "^2.20.3",
|
|
33
|
+
"@walletconnect/utils": "^2.20.3",
|
|
26
34
|
"lodash": "^4.17.21",
|
|
27
35
|
"mipd": "^0.0.7",
|
|
28
|
-
"viem": "^2.
|
|
36
|
+
"viem": "^2.30.1"
|
|
29
37
|
},
|
|
30
38
|
"devDependencies": {
|
|
31
|
-
"@types/lodash": "^4.17.
|
|
32
|
-
"polkadot-api": "^1.
|
|
39
|
+
"@types/lodash": "^4.17.17",
|
|
40
|
+
"polkadot-api": "^1.12.0",
|
|
33
41
|
"rxjs": "^7.8.2"
|
|
34
42
|
},
|
|
35
43
|
"tsup": {
|
|
@@ -50,6 +58,6 @@
|
|
|
50
58
|
"test": "echo \"Error: no test specified\" && exit 1",
|
|
51
59
|
"dev": "tsup --watch",
|
|
52
60
|
"build": "tsup",
|
|
53
|
-
"clean": "rm -rf dist"
|
|
61
|
+
"clean": "rm -rf ./dist && rm -rf ./node_modules"
|
|
54
62
|
}
|
|
55
63
|
}
|
package/src/api/accounts.ts
CHANGED
|
@@ -1,24 +1,37 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import type { WalletAccount } from "./types";
|
|
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
6
|
|
|
7
|
-
export const getAccounts$ = (
|
|
7
|
+
export const getAccounts$ = (
|
|
8
|
+
config: KheopskitConfig,
|
|
9
|
+
wallets: Observable<Wallet[]>,
|
|
10
|
+
) => {
|
|
8
11
|
return new Observable<WalletAccount[]>((subscriber) => {
|
|
9
|
-
const
|
|
12
|
+
const sources = config.platforms.map<Observable<WalletAccount[]>>(
|
|
10
13
|
(platform) => {
|
|
11
14
|
switch (platform) {
|
|
12
15
|
case "polkadot":
|
|
13
|
-
return
|
|
16
|
+
return getPolkadotAccounts$(
|
|
17
|
+
wallets.pipe(
|
|
18
|
+
map((w) => w.filter((w) => w.platform === "polkadot")),
|
|
19
|
+
),
|
|
20
|
+
);
|
|
14
21
|
case "ethereum":
|
|
15
|
-
return
|
|
22
|
+
return getEthereumAccounts$(
|
|
23
|
+
wallets.pipe(
|
|
24
|
+
map((w) => w.filter((w) => w.platform === "ethereum")),
|
|
25
|
+
),
|
|
26
|
+
);
|
|
16
27
|
}
|
|
17
|
-
}
|
|
28
|
+
},
|
|
18
29
|
);
|
|
19
30
|
|
|
20
|
-
const accounts$ =
|
|
21
|
-
? combineLatest(
|
|
31
|
+
const accounts$ = sources.length
|
|
32
|
+
? combineLatest(sources).pipe(
|
|
33
|
+
map((accounts) => accounts.flat().sort(sortAccounts)),
|
|
34
|
+
)
|
|
22
35
|
: of([]);
|
|
23
36
|
|
|
24
37
|
const sub = accounts$.subscribe(subscriber);
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { getWalletId } from "@/utils/WalletId";
|
|
2
|
+
import { createAppKit } from "@reown/appkit/core";
|
|
3
|
+
import {
|
|
4
|
+
BehaviorSubject,
|
|
5
|
+
Observable,
|
|
6
|
+
combineLatest,
|
|
7
|
+
distinctUntilChanged,
|
|
8
|
+
map,
|
|
9
|
+
of,
|
|
10
|
+
shareReplay,
|
|
11
|
+
} from "rxjs";
|
|
12
|
+
import type {
|
|
13
|
+
EthereumAppKitWallet,
|
|
14
|
+
KheopskitConfig,
|
|
15
|
+
PolkadotAppKitWallet,
|
|
16
|
+
} from "./types";
|
|
17
|
+
|
|
18
|
+
const WALLET_CONNECT_ICON =
|
|
19
|
+
"data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjQwMCIgdmlld0JveD0iMCAwIDQwMCA0MDAiIHdpZHRoPSI0MDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZD0ibTAgMGg0MDB2NDAwaC00MDB6Ii8+PC9jbGlwUGF0aD48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxjaXJjbGUgY3g9IjIwMCIgY3k9IjIwMCIgZmlsbD0iIzMzOTZmZiIgcj0iMTk5LjUiIHN0cm9rZT0iIzY2YjFmZiIvPjxwYXRoIGQ9Im0xMjIuNTE5IDE0OC45NjVjNDIuNzkxLTQxLjcyOSAxMTIuMTcxLTQxLjcyOSAxNTQuOTYyIDBsNS4xNSA1LjAyMmMyLjE0IDIuMDg2IDIuMTQgNS40NjkgMCA3LjU1NWwtMTcuNjE3IDE3LjE4Yy0xLjA3IDEuMDQzLTIuODA0IDEuMDQzLTMuODc0IDBsLTcuMDg3LTYuOTExYy0yOS44NTMtMjkuMTExLTc4LjI1My0yOS4xMTEtMTA4LjEwNiAwbC03LjU5IDcuNDAxYy0xLjA3IDEuMDQzLTIuODA0IDEuMDQzLTMuODc0IDBsLTE3LjYxNy0xNy4xOGMtMi4xNC0yLjA4Ni0yLjE0LTUuNDY5IDAtNy41NTV6bTE5MS4zOTcgMzUuNTI5IDE1LjY3OSAxNS4yOWMyLjE0IDIuMDg2IDIuMTQgNS40NjkgMCA3LjU1NWwtNzAuNyA2OC45NDRjLTIuMTM5IDIuMDg3LTUuNjA4IDIuMDg3LTcuNzQ4IDBsLTUwLjE3OC00OC45MzFjLS41MzUtLjUyMi0xLjQwMi0uNTIyLTEuOTM3IDBsLTUwLjE3OCA0OC45MzFjLTIuMTM5IDIuMDg3LTUuNjA4IDIuMDg3LTcuNzQ4IDBsLTcwLjcwMTUtNjguOTQ1Yy0yLjEzOTYtMi4wODYtMi4xMzk2LTUuNDY5IDAtNy41NTVsMTUuNjc5NS0xNS4yOWMyLjEzOTYtMi4wODYgNS42MDg1LTIuMDg2IDcuNzQ4MSAwbDUwLjE3ODkgNDguOTMyYy41MzUuNTIyIDEuNDAyLjUyMiAxLjkzNyAwbDUwLjE3Ny00OC45MzJjMi4xMzktMi4wODcgNS42MDgtMi4wODcgNy43NDggMGw1MC4xNzkgNDguOTMyYy41MzUuNTIyIDEuNDAyLjUyMiAxLjkzNyAwbDUwLjE3OS00OC45MzFjMi4xMzktMi4wODcgNS42MDgtMi4wODcgNy43NDggMHoiIGZpbGw9IiNmZmYiLz48L2c+PC9zdmc+";
|
|
20
|
+
|
|
21
|
+
type AppKitWallets = {
|
|
22
|
+
polkadot?: PolkadotAppKitWallet;
|
|
23
|
+
ethereum?: EthereumAppKitWallet;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
// once it exists, appKit object should never be recreated
|
|
27
|
+
let cachedAppKit: Observable<AppKitWallets> | null = null;
|
|
28
|
+
|
|
29
|
+
export const getAppKitWallets$ = (
|
|
30
|
+
config: KheopskitConfig,
|
|
31
|
+
): Observable<AppKitWallets> => {
|
|
32
|
+
if (!config.walletConnect) return of({}); // of(null).pipe(shareReplay({ refCount: true, bufferSize: 1 }));
|
|
33
|
+
|
|
34
|
+
const walletConnect = config.walletConnect;
|
|
35
|
+
|
|
36
|
+
if (!cachedAppKit) {
|
|
37
|
+
cachedAppKit = new Observable<AppKitWallets>((subscriber) => {
|
|
38
|
+
const appKit = createAppKit({
|
|
39
|
+
projectId: walletConnect.projectId,
|
|
40
|
+
metadata: walletConnect.metadata,
|
|
41
|
+
networks: walletConnect.networks,
|
|
42
|
+
universalProviderConfigOverride: {
|
|
43
|
+
methods: {
|
|
44
|
+
polkadot: ["polkadot_signTransaction", "polkadot_signMessage"],
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
const status$ = new BehaviorSubject({
|
|
50
|
+
isPolkadotConnected: false,
|
|
51
|
+
isEthereumConnected: false,
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
const unsubProviders = appKit.subscribeProviders((providers) => {
|
|
55
|
+
status$.next({
|
|
56
|
+
isPolkadotConnected: !!providers.polkadot,
|
|
57
|
+
isEthereumConnected: !!providers.eip155,
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
const polkadotWallet$ = appKit.chainNamespaces.includes("polkadot")
|
|
62
|
+
? status$.pipe(
|
|
63
|
+
map((s) => s.isPolkadotConnected),
|
|
64
|
+
distinctUntilChanged(),
|
|
65
|
+
map((isConnected): PolkadotAppKitWallet => {
|
|
66
|
+
const walletInfo = appKit.getWalletInfo();
|
|
67
|
+
|
|
68
|
+
return {
|
|
69
|
+
id: getWalletId("polkadot", "walletconnect"),
|
|
70
|
+
platform: "polkadot",
|
|
71
|
+
type: "appKit",
|
|
72
|
+
appKit, // todo maybe we dont want to expose the appKit instance
|
|
73
|
+
name: walletInfo?.name ?? "WalletConnect",
|
|
74
|
+
icon: walletInfo?.icon ?? WALLET_CONNECT_ICON,
|
|
75
|
+
connect: async () => {
|
|
76
|
+
if (!isConnected) await appKit.open();
|
|
77
|
+
},
|
|
78
|
+
disconnect: () => {
|
|
79
|
+
if (isConnected) appKit.disconnect();
|
|
80
|
+
},
|
|
81
|
+
isConnected,
|
|
82
|
+
};
|
|
83
|
+
}),
|
|
84
|
+
)
|
|
85
|
+
: of(undefined);
|
|
86
|
+
|
|
87
|
+
const ethereumWallet$ = appKit.chainNamespaces.includes("eip155")
|
|
88
|
+
? status$.pipe(
|
|
89
|
+
map((s) => s.isEthereumConnected),
|
|
90
|
+
distinctUntilChanged(),
|
|
91
|
+
map((isConnected): EthereumAppKitWallet => {
|
|
92
|
+
const walletInfo = appKit.getWalletInfo();
|
|
93
|
+
|
|
94
|
+
return {
|
|
95
|
+
id: getWalletId("ethereum", "walletconnect"),
|
|
96
|
+
platform: "ethereum",
|
|
97
|
+
type: "appKit",
|
|
98
|
+
appKit,
|
|
99
|
+
name: walletInfo?.name ?? "WalletConnect",
|
|
100
|
+
icon: walletInfo?.icon ?? WALLET_CONNECT_ICON,
|
|
101
|
+
connect: () => appKit.open(),
|
|
102
|
+
disconnect: () => appKit.disconnect(),
|
|
103
|
+
isConnected,
|
|
104
|
+
};
|
|
105
|
+
}),
|
|
106
|
+
)
|
|
107
|
+
: of(undefined);
|
|
108
|
+
|
|
109
|
+
const sub = combineLatest({
|
|
110
|
+
polkadot: polkadotWallet$,
|
|
111
|
+
ethereum: ethereumWallet$,
|
|
112
|
+
}).subscribe(subscriber);
|
|
113
|
+
|
|
114
|
+
return () => {
|
|
115
|
+
sub.unsubscribe();
|
|
116
|
+
unsubProviders();
|
|
117
|
+
};
|
|
118
|
+
}).pipe(shareReplay({ refCount: true, bufferSize: 1 }));
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
return cachedAppKit;
|
|
122
|
+
};
|
package/src/api/config.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import type { KheopskitConfig } from "./types";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export const DEFAULT_CONFIG: ResolvedConfig = {
|
|
3
|
+
const DEFAULT_CONFIG: KheopskitConfig = {
|
|
6
4
|
autoReconnect: true,
|
|
7
5
|
platforms: ["polkadot"],
|
|
6
|
+
debug: false,
|
|
8
7
|
};
|
|
9
8
|
|
|
10
|
-
export const resolveConfig = (
|
|
9
|
+
export const resolveConfig = (
|
|
10
|
+
config: Partial<KheopskitConfig> | undefined,
|
|
11
|
+
): KheopskitConfig => {
|
|
11
12
|
return Object.assign({}, DEFAULT_CONFIG, config);
|
|
12
13
|
};
|