@kheopskit/core 0.0.1-alpha.0
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 +7 -0
- package/dist/index.d.mts +94 -0
- package/dist/index.d.ts +94 -0
- package/dist/index.js +458 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +474 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +55 -0
- package/src/api/accounts.ts +30 -0
- package/src/api/config.ts +12 -0
- package/src/api/ethereum/accounts.ts +86 -0
- package/src/api/ethereum/wallets.ts +103 -0
- package/src/api/index.ts +2 -0
- package/src/api/kheopskit.ts +23 -0
- package/src/api/polkadot/accounts.ts +71 -0
- package/src/api/polkadot/wallets.ts +103 -0
- package/src/api/store.ts +33 -0
- package/src/api/types.ts +92 -0
- package/src/api/wallets.ts +70 -0
- package/src/index.ts +3 -0
- package/src/utils/AccountId.ts +22 -0
- package/src/utils/WalletId.ts +21 -0
- package/src/utils/createStore.ts +45 -0
- package/src/utils/getAccountAddressType.ts +10 -0
- package/src/utils/index.ts +12 -0
- package/src/utils/isEthereumAddress.ts +2 -0
- package/src/utils/isSs58Address.ts +15 -0
- package/src/utils/isTruthy.ts +3 -0
- package/src/utils/isValidAddress.ts +8 -0
- package/src/utils/isWalletPlatform.ts +7 -0
- package/src/utils/sleep.ts +2 -0
- package/src/utils/throwAfter.ts +6 -0
- package/src/utils/types.ts +5 -0
- package/tsconfig.json +10 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../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":["export * from \"./api\";\n\nexport type { KheopskitConfig } from \"./api/types\";\n","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 AccountId = string;\n\nexport const getAccountId = (\n walletId: string,\n address: SS58String\n): AccountId => {\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 parseAccountId = (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 { EthereumWallet } from \"@/api/types\";\nimport { getAccountId, type AccountId } 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\nexport type EthereumAccount = {\n id: AccountId;\n platform: \"ethereum\";\n provider: EIP1193Provider;\n address: `0x${string}`;\n walletName: string;\n walletId: string;\n isWalletDefault: boolean;\n};\n\nconst getWalletAccounts$ = (\n wallet: EthereumWallet\n): Observable<EthereumAccount[]> => {\n if (!wallet.isEnabled) return of([]);\n\n return new Observable<EthereumAccount[]>((subscriber) => {\n const getAccount = (address: string, i: number): EthereumAccount => ({\n id: getAccountId(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.isEnabled)),\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 isEnabled: 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 { PolkadotWallet } from \"@/api/types\";\nimport { getAccountId, type AccountId } 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\nexport type PolkadotAccount = InjectedPolkadotAccount & {\n id: AccountId;\n platform: \"polkadot\";\n walletName: string;\n walletId: string;\n};\n\nconst getWalletAccounts$ = (\n wallet: PolkadotWallet\n): Observable<PolkadotAccount[]> => {\n if (!wallet.isEnabled) return of([]);\n\n return new Observable<PolkadotAccount[]>((subscriber) => {\n const getAccount = (account: InjectedPolkadotAccount): PolkadotAccount => ({\n id: getAccountId(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.isEnabled)),\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 isEnabled: true,\n extension,\n disconnect: () => disconnect(id),\n }\n : {\n id,\n platform: \"polkadot\",\n name: identifier,\n extensionId: identifier,\n isEnabled: 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.isEnabled) {\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":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAA,eAA4D;;;ACA5D,IAAAC,eAAgE;;;ACAhE,kBAAwD;AAEjD,IAAM,cAAc,CAAI,KAAa,iBAAoB;AAC9D,QAAM,UAAU,IAAI,4BAAmB,cAAc,KAAK,YAAY,CAAC;AAGvE,6BAAwB,QAAQ,SAAS,EACtC;AAAA,QACC,oBAAO,CAAC,UAAU,MAAM,QAAQ,GAAG;AAAA,QACnC,iBAAI,CAAC,UAAU,UAAU,MAAM,UAAU,YAAY,CAAC;AAAA,EACxD,EACC,UAAU,CAAC,aAAa,QAAQ,KAAK,QAAQ,CAAC;AAEjD,QAAM,SAAS,CAAC,QAAW;AACzB,kBAAc,KAAK,GAAG;AACtB,YAAQ,KAAK,GAAG;AAAA,EAClB;AAEA,SAAO;AAAA,IACL,YAAY,QAAQ,aAAa;AAAA,IACjC,KAAK,CAAC,QAAW,OAAO,GAAG;AAAA,IAC3B,QAAQ,CAAC,cACP,OAAO,UAAU,QAAQ,SAAS,CAAC,CAAC;AAAA,IACtC,KAAK,MAAM,gBAAgB,QAAQ,SAAS,CAAC;AAAA,EAC/C;AACF;AAEA,IAAM,YAAY,CAAI,KAAoB,iBAAuB;AAC/D,MAAI;AACF,QAAI,IAAK,QAAO,KAAK,MAAM,GAAG;AAAA,EAChC,QAAQ;AAAA,EAER;AACA,SAAO;AACT;AAEA,IAAM,gBAAgB,CAAI,KAAa,iBAAuB;AAC5D,QAAM,MAAM,aAAa,QAAQ,GAAG;AACpC,SAAO,UAAU,KAAK,YAAY;AACpC;AAEA,IAAM,gBAAgB,CAAI,KAAa,QAAW;AAChD,QAAM,MAAM,KAAK,UAAU,GAAG;AAC9B,eAAa,QAAQ,KAAK,GAAG;AAC/B;;;AC5CO,IAAM,oBAAoB,CAAC,YAChC,sBAAsB,KAAK,OAAO;;;ACDpC,0BAA2C;AAE3C,IAAM,uBAAmB,+BAAU,EAAE;AAE9B,IAAM,gBAAgB,CAC3B,YAC0B;AAC1B,MAAI;AACF,QAAI,CAAC,QAAS,QAAO;AACrB,qBAAiB,OAAO;AACxB,WAAO;AAAA,EACT,SAAS,MAAM;AACb,WAAO;AAAA,EACT;AACF;;;ACXO,IAAM,iBAAiB,CAAC,YAA6B;AAC1D,SAAO,QAAQ,WAAW,IAAI,IAC1B,kBAAkB,OAAO,IACzB,cAAc,OAAO;AAC3B;;;ACDO,IAAM,eAAe,CAC1B,UACA,YACc;AACd,MAAI,CAAC,SAAU,OAAM,IAAI,MAAM,kBAAkB;AACjD,MAAI,CAAC,eAAe,OAAO,EAAG,OAAM,IAAI,MAAM,iBAAiB;AAC/D,SAAO,GAAG,QAAQ,KAAK,OAAO;AAChC;;;ACXO,IAAM,mBAAmB,CAC9B,aAEA,OAAO,aAAa,YACpB,CAAC,YAAY,UAAU,EAAE,SAAS,QAA0B;;;ACJ9D,IAAAC,eAOO;AACP,kBAAiD;;;ACRjD,oBAAqB;;;ACGd,IAAM,cAAc,CACzB,UACA,eACa;AACb,MAAI,CAAC,iBAAiB,QAAQ,EAAG,OAAM,IAAI,MAAM,kBAAkB;AACnE,MAAI,CAAC,WAAY,OAAM,IAAI,MAAM,cAAc;AAC/C,SAAO,GAAG,QAAQ,IAAI,UAAU;AAClC;AAEO,IAAM,gBAAgB,CAAC,aAAqB;AACjD,MAAI,CAAC,SAAU,OAAM,IAAI,MAAM,kBAAkB;AACjD,QAAM,CAAC,UAAU,UAAU,IAAI,SAAS,MAAM,GAAG;AACjD,MAAI,CAAC,iBAAiB,QAAQ,EAAG,OAAM,IAAI,MAAM,kBAAkB;AACnE,MAAI,CAAC,WAAY,OAAM,IAAI,MAAM,iBAAiB;AAClD,SAAO,EAAE,UAAU,WAAW;AAChC;;;ADfA,IAAM,oBAAoB;AAE1B,IAAM,mBAAuC,CAAC;AAE9C,IAAM,UAAU,YAAY,mBAAmB,gBAAgB;AAExD,IAAM,qBAAqB,CAAC,aAAuB;AACxD,gBAAc,QAAQ;AACtB,UAAQ,OAAO,CAAC,UAAU;AAAA,IACxB,GAAG;AAAA,IACH,mBAAe,qBAAM,KAAK,iBAAiB,CAAC,GAAG,OAAO,QAAQ,CAAC;AAAA,EACjE,EAAE;AACJ;AAEO,IAAM,wBAAwB,CAAC,aAAuB;AAC3D,UAAQ,OAAO,CAAC,UAAU;AAAA,IACxB,GAAG;AAAA,IACH,mBAAe;AAAA,OACZ,KAAK,iBAAiB,CAAC,GAAG,OAAO,CAAC,OAAO,OAAO,QAAQ;AAAA,IAC3D;AAAA,EACF,EAAE;AACJ;AAEO,IAAM,QAAQ;AAAA,EACnB,YAAY,QAAQ;AAAA,EACpB;AAAA,EACA;AACF;;;AE7BA,kBAAwD;AACxD,IAAAC,eAMO;AAGP,IAAM,oBAAoB,IAAI;AAAA,EAC5B,CAAC,eAAe;AACd,UAAMC,aAAQ,yBAAY;AAE1B,UAAM,cAAcA,OAAM,UAAU,CAACC,qBAAoB;AACvD,iBAAW,KAAKA,gBAA0C;AAAA,IAC5D,CAAC;AAED,UAAM,kBAAkBD,OAAM,aAAa;AAE3C,eAAW,KAAK,eAA0C;AAE1D,WAAO,MAAM;AACX,kBAAY;AACZ,MAAAA,OAAM,QAAQ;AAAA,IAChB;AAAA,EACF;AACF,EAAE,SAAK,0BAAY,EAAE,UAAU,MAAM,YAAY,EAAE,CAAC,CAAC;AAErD,kBAAkB,UAAU,MAAM;AAChC,UAAQ,MAAM,6BAA6B;AAC7C,CAAC;AAEM,IAAM,mBAAmB,IAAI;AAAA,EAClC,CAAC,eAAe;AACd,UAAM,oBAAoB,IAAI,6BAA+B,oBAAI,IAAI,CAAC;AAEtE,UAAM,gBAAgB,OACpB,UACA,aACG;AACH,UAAI,kBAAkB,MAAM,IAAI,QAAQ;AACtC,cAAM,IAAI,MAAM,aAAa,QAAQ,oBAAoB;AAE3D,eAAS,QAAQ;AAAA,QACf,QAAQ;AAAA,MACV,CAAC;AAED,YAAM,SAAS,IAAI,IAAI,kBAAkB,KAAK;AAC9C,aAAO,IAAI,QAAQ;AACnB,wBAAkB,KAAK,MAAM;AAE7B,YAAM,mBAAmB,QAAQ;AAAA,IACnC;AAEA,UAAM,mBAAmB,OACvB,UACA,cACG;AACH,UAAI,CAAC,kBAAkB,MAAM,IAAI,QAAQ;AACvC,cAAM,IAAI,MAAM,aAAa,QAAQ,mBAAmB;AAC1D,YAAM,SAAS,IAAI,IAAI,kBAAkB,KAAK;AAC9C,aAAO,OAAO,QAAQ;AACtB,wBAAkB,KAAK,MAAM;AAE7B,YAAM,sBAAsB,QAAQ;AAAA,IACtC;AAEA,UAAM,UAAM,4BAAc,CAAC,mBAAmB,iBAAiB,CAAC,EAC7D;AAAA,UACC,kBAAI,CAAC,CAAC,iBAAiB,gBAAgB,MAAM;AAC3C,eAAO,gBAAgB,IAAI,CAAC,OAAuB;AACjD,gBAAM,WAAW,YAAY,YAAY,GAAG,KAAK,IAAI;AACrD,gBAAM,WAAW,GAAG;AAEpB,iBAAO;AAAA,YACL,UAAU;AAAA,YACV,IAAI;AAAA,YACJ,MAAM,GAAG,KAAK;AAAA,YACd,MAAM,GAAG,KAAK;AAAA,YACd;AAAA,YACA,WAAW,iBAAiB,IAAI,QAAQ;AAAA,YACxC,YAAY,GAAG,KAAK;AAAA,YACpB,SAAS,MAAM,cAAc,UAAU,QAAQ;AAAA,YAC/C,YAAY,MAAM,iBAAiB,UAAU,QAAQ;AAAA,UACvD;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AAAA,IACH,EACC,UAAU,UAAU;AAEvB,WAAO,MAAM;AACX,UAAI,YAAY;AAAA,IAClB;AAAA,EACF;AACF,EAAE,SAAK,0BAAY,EAAE,UAAU,MAAM,YAAY,EAAE,CAAC,CAAC;AAErD,iBAAiB,UAAU,MAAM;AAC/B,UAAQ,MAAM,mCAAmC;AACnD,CAAC;;;AH/ED,IAAM,qBAAqB,CACzB,WACkC;AAClC,MAAI,CAAC,OAAO,UAAW,YAAO,iBAAG,CAAC,CAAC;AAEnC,SAAO,IAAI,wBAA8B,CAAC,eAAe;AACvD,UAAM,aAAa,CAAC,SAAiB,OAAgC;AAAA,MACnE,IAAI,aAAa,OAAO,IAAI,OAAO;AAAA,MACnC,UAAU;AAAA,MACV,UAAU,OAAO;AAAA,MACjB,aAAS,wBAAW,OAAO;AAAA,MAC3B,YAAY,OAAO;AAAA,MACnB,UAAU,OAAO;AAAA,MACjB,iBAAiB,MAAM;AAAA,IACzB;AAEA,UAAM,WAAW,CAAC,cAAwB;AACxC,iBAAW,KAAK,UAAU,IAAI,UAAU,CAAC;AAAA,IAC3C;AAGA,WAAO,SAAS,GAAG,mBAAmB,QAAQ;AAG9C,WAAO,SACJ,QAAQ,EAAE,QAAQ,eAAe,CAAC,EAClC,KAAK,CAAC,cAAwB;AAC7B,iBAAW,KAAK,UAAU,IAAI,UAAU,CAAC;AAAA,IAC3C,CAAC,EACA,MAAM,CAAC,QAAQ;AACd,cAAQ,MAAM,0BAA0B,GAAG;AAC3C,iBAAW,KAAK,CAAC,CAAC;AAAA,IACpB,CAAC;AAEH,WAAO,MAAM;AACX,aAAO,SAAS,eAAe,mBAAmB,QAAQ;AAAA,IAC5D;AAAA,EACF,CAAC;AACH;AAEO,IAAM,oBAAoB,IAAI;AAAA,EACnC,CAAC,eAAe;AACd,UAAM,MAAM,iBACT;AAAA,UACC,kBAAI,CAAC,YAAY,QAAQ,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC;AAAA,UACnD;AAAA,QAAU,CAAC,YACT,QAAQ,aACJ,4BAAc,QAAQ,IAAI,kBAAkB,CAAC,QAC7C,iBAAG,CAAC,CAAC;AAAA,MACX;AAAA,UACA,kBAAI,CAAC,aAAa,SAAS,KAAK,CAAC;AAAA,IACnC,EACC,UAAU,UAAU;AAEvB,WAAO,MAAM;AACX,UAAI,YAAY;AAAA,IAClB;AAAA,EACF;AACF,EAAE,SAAK,0BAAY,EAAE,UAAU,MAAM,YAAY,EAAE,CAAC,CAAC;AAErD,kBAAkB,UAAU,MAAM;AAChC,UAAQ,MAAM,oCAAoC;AACpD,CAAC;;;AIlFD,IAAAE,eAOO;;;ACPP,IAAAC,iBAAwB;AACxB,wBAIO;AACP,IAAAC,eAUO;AAEP,IAAM,wBAAwB,UAC5B,yCAAsB,EAAE,IAAI,CAAC,SAAS,YAAY,YAAY,IAAI,CAAC;AAErE,IAAM,2BAA2B,IAAI;AAAA,EACnC,CAAC,eAAe;AACd,UAAM,qBAAqB,IAAI,6BAE7B,oBAAI,IAAI,CAAC;AAEX,UAAM,UAAU,OAAO,aAAuB;AAC5C,UAAI,mBAAmB,MAAM,IAAI,QAAQ;AACvC,cAAM,IAAI,MAAM,aAAa,QAAQ,oBAAoB;AAC3D,YAAM,EAAE,WAAW,IAAI,cAAc,QAAQ;AAC7C,YAAM,YAAY,UAAM,4CAAyB,UAAU;AAE3D,YAAM,SAAS,IAAI,IAAI,mBAAmB,KAAK;AAC/C,aAAO,IAAI,UAAU,SAAS;AAC9B,yBAAmB,KAAK,MAAM;AAE9B,YAAM,mBAAmB,QAAQ;AAAA,IACnC;AAEA,UAAM,aAAa,CAAC,aAAuB;AACzC,UAAI,CAAC,mBAAmB,MAAM,IAAI,QAAQ;AACxC,cAAM,IAAI,MAAM,aAAa,QAAQ,mBAAmB;AAE1D,YAAM,SAAS,IAAI,IAAI,mBAAmB,KAAK;AAC/C,aAAO,OAAO,QAAQ;AACtB,yBAAmB,KAAK,MAAM;AAE9B,YAAM,sBAAsB,QAAQ;AAAA,IACtC;AAEA,UAAM,iBAAa,iBAAG,GAAG,KAAK,KAAK,GAAI,EACpC;AAAA,UACC,uBAAS,CAAC,aAAS,oBAAM,IAAI,CAAC;AAAA,UAC9B,kBAAI,MAAM,sBAAsB,CAAC;AAAA,UACjC,mCAAiC,sBAAO;AAAA,IAC1C;AAEF,UAAM,mBAAe,4BAAc,CAAC,YAAY,kBAAkB,CAAC,EAChE;AAAA,UACC,kBAAI,CAAC,CAAC,WAAW,iBAAiB,MAAM;AACtC,eAAO,UAAU,IAAI,CAAC,OAAuB;AAC3C,gBAAM,EAAE,WAAW,IAAI,cAAc,EAAE;AACvC,gBAAM,YAAY,kBAAkB,IAAI,EAAE;AAE1C,iBAAO,YACH;AAAA,YACE;AAAA,YACA,UAAU;AAAA,YACV,MAAM;AAAA,YACN,aAAa;AAAA,YACb,WAAW;AAAA,YACX;AAAA,YACA,YAAY,MAAM,WAAW,EAAE;AAAA,UACjC,IACA;AAAA,YACE;AAAA,YACA,UAAU;AAAA,YACV,MAAM;AAAA,YACN,aAAa;AAAA,YACb,WAAW;AAAA,YACX,SAAS,MAAM,QAAQ,EAAE;AAAA,UAC3B;AAAA,QACN,CAAC;AAAA,MACH,CAAC;AAAA,IACH,EACC,UAAU,UAAU;AAEvB,WAAO,MAAM;AACX,mBAAa,YAAY;AAAA,IAC3B;AAAA,EACF;AACF,EAAE,SAAK,0BAAY,EAAE,UAAU,MAAM,YAAY,EAAE,CAAC,CAAC;AAG9C,IAAM,mBAAmB;AAEhC,iBAAiB,UAAU,MAAM;AAC/B,UAAQ,MAAM,mCAAmC;AACnD,CAAC;;;ADlFD,IAAMC,sBAAqB,CACzB,WACkC;AAClC,MAAI,CAAC,OAAO,UAAW,YAAO,iBAAG,CAAC,CAAC;AAEnC,SAAO,IAAI,wBAA8B,CAAC,eAAe;AACvD,UAAM,aAAa,CAAC,aAAuD;AAAA,MACzE,IAAI,aAAa,OAAO,IAAI,QAAQ,OAAO;AAAA,MAC3C,GAAG;AAAA,MACH,UAAU;AAAA,MACV,YAAY,OAAO;AAAA,MACnB,UAAU,OAAO;AAAA,IACnB;AAGA,UAAM,cAAc,OAAO,UAAU,UAAU,CAAC,aAAa;AAC3D,iBAAW,KAAK,SAAS,IAAI,UAAU,CAAC;AAAA,IAC1C,CAAC;AAGD,eAAW,KAAK,OAAO,UAAU,YAAY,EAAE,IAAI,UAAU,CAAC;AAE9D,WAAO,MAAM;AACX,aAAO,YAAY;AAAA,IACrB;AAAA,EACF,CAAC;AACH;AAEO,IAAM,oBAAoB,IAAI;AAAA,EACnC,CAAC,eAAe;AACd,UAAM,MAAM,iBACT;AAAA,UACC,kBAAI,CAAC,YAAY,QAAQ,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC;AAAA,UACnD;AAAA,QAAU,CAAC,YACT,QAAQ,aACJ,4BAAc,QAAQ,IAAIA,mBAAkB,CAAC,QAC7C,iBAAG,CAAC,CAAC;AAAA,MACX;AAAA,UACA,kBAAI,CAAC,aAAa,SAAS,KAAK,CAAC;AAAA,IACnC,EACC,UAAU,UAAU;AAEvB,WAAO,MAAM;AACX,UAAI,YAAY;AAAA,IAClB;AAAA,EACF;AACF,EAAE,SAAK,0BAAY,EAAE,UAAU,MAAM,YAAY,EAAE,CAAC,CAAC;AAErD,kBAAkB,UAAU,MAAM;AAChC,UAAQ,MAAM,oCAAoC;AACpD,CAAC;;;AXhEM,IAAM,eAAe,CAAC,WAA2B;AACtD,SAAO,IAAI,wBAA4B,CAAC,eAAe;AACrD,UAAM,cAAc,OAAO,UAAU;AAAA,MACnC,CAAC,aAAa;AACZ,gBAAQ,UAAU;AAAA,UAChB,KAAK;AACH,mBAAO;AAAA,UACT,KAAK;AACH,mBAAO;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAEA,UAAM,YAAY,YAAY,aAC1B,4BAAc,WAAW,EAAE,SAAK,kBAAI,CAAC,aAAa,SAAS,KAAK,CAAC,CAAC,QAClE,iBAAG,CAAC,CAAC;AAET,UAAM,MAAM,UAAU,UAAU,UAAU;AAE1C,WAAO,MAAM;AACX,UAAI,YAAY;AAAA,IAClB;AAAA,EACF,CAAC,EAAE,SAAK,0BAAY,EAAE,UAAU,MAAM,YAAY,EAAE,CAAC,CAAC;AACxD;;;AazBO,IAAM,iBAAiC;AAAA,EAC5C,eAAe;AAAA,EACf,WAAW,CAAC,UAAU;AACxB;AAEO,IAAM,gBAAgB,CAAC,WAA4C;AACxE,SAAO,OAAO,OAAO,CAAC,GAAG,gBAAgB,MAAM;AACjD;;;ACXA,IAAAC,eAUO;AAQP,IAAM,0BAA0B,MAAM,WAAW;AAAA,MAC/C,kBAAI,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AAAA,MAChC,mBAAK,CAAC;AAAA,MACN,0BAAY,CAAC;AACf;AAEO,IAAM,cAAc,CAAC,WAA2B;AACrD,SAAO,IAAI,wBAAqB,CAAC,eAAe;AAC9C,UAAM,cAAc,OAAO,UAAU;AAAA,MACnC,CAAC,aAAa;AACZ,gBAAQ,UAAU;AAAA,UAChB,KAAK;AACH,mBAAO;AAAA,UACT,KAAK;AACH,mBAAO;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAEA,UAAM,WAAW,YAAY,aACzB,4BAAc,WAAW,EAAE,SAAK,kBAAI,CAAC,YAAY,QAAQ,KAAK,CAAC,CAAC,QAChE,iBAAG,CAAC,CAAC;AAET,UAAM,uBAAmB,4BAAc,CAAC,UAAU,uBAAuB,CAAC,EACvE;AAAA,UACC,qBAAO,CAAC,CAAC,EAAE,SAAS,MAAM,OAAO,iBAAiB,CAAC,CAAC,WAAW,MAAM;AAAA,UACrE;AAAA,QAAS,CAAC,CAAC,SAAS,SAAS,MAC3B,QAAQ,OAAO,CAAC,WAAW,WAAW,SAAS,OAAO,EAAE,CAAC;AAAA,MAC3D;AAAA,UACA,uBAAS,CAAC,MAAM,EAAE,EAAE;AAAA,IACtB,EACC,UAAU,OAAO,WAAW;AAC3B,UAAI,OAAO,WAAW;AACpB,gBAAQ,KAAK,+BAA+B,OAAO,EAAE;AACrD;AAAA,MACF;AAEA,UAAI;AACF,cAAM,OAAO,QAAQ;AAAA,MACvB,SAAS,KAAK;AACZ,gBAAQ,MAAM,iCAAiC,OAAO,IAAI,EAAE,IAAI,CAAC;AAAA,MACnE;AAAA,IACF,CAAC;AAEH,UAAM,aAAa,SAAS,UAAU,UAAU;AAEhD,WAAO,MAAM;AACX,uBAAiB,YAAY;AAC7B,iBAAW,YAAY;AAAA,IACzB;AAAA,EACF,CAAC,EAAE,SAAK,0BAAY,EAAE,UAAU,MAAM,YAAY,EAAE,CAAC,CAAC;AACxD;;;Af7DO,IAAM,gBAAgB,CAAC,WAA4B;AACxD,QAAM,IAAI,cAAc,MAAM;AAE9B,SAAO,IAAI;AAAA,IACT,CAAC,eAAe;AACd,YAAM,mBAAe,4BAAc,CAAC,YAAY,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EACjE,SAAK,kBAAI,CAAC,CAAC,SAAS,QAAQ,OAAO,EAAE,SAAS,SAAS,EAAE,CAAC,EAC1D,UAAU,UAAU;AAEvB,aAAO,MAAM;AACX,qBAAa,YAAY;AAAA,MAC3B;AAAA,IACF;AAAA,EACF,EAAE,SAAK,0BAAY,EAAE,YAAY,GAAG,UAAU,KAAK,CAAC,CAAC;AACvD;","names":["import_rxjs","import_rxjs","import_rxjs","import_rxjs","store","providerDetails","import_rxjs","import_lodash","import_rxjs","getWalletAccounts$","import_rxjs"]}
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,474 @@
|
|
|
1
|
+
// src/api/kheopskit.ts
|
|
2
|
+
import { combineLatest as combineLatest7, map as map8, Observable as Observable7, shareReplay as shareReplay7 } from "rxjs";
|
|
3
|
+
|
|
4
|
+
// src/api/accounts.ts
|
|
5
|
+
import { combineLatest as combineLatest5, map as map6, Observable as Observable5, of as of4, shareReplay as shareReplay5 } from "rxjs";
|
|
6
|
+
|
|
7
|
+
// src/utils/createStore.ts
|
|
8
|
+
import { BehaviorSubject, filter, fromEvent, map } from "rxjs";
|
|
9
|
+
var createStore = (key, defaultValue) => {
|
|
10
|
+
const subject = new BehaviorSubject(getStoredData(key, defaultValue));
|
|
11
|
+
fromEvent(window, "storage").pipe(
|
|
12
|
+
filter((event) => event.key === key),
|
|
13
|
+
map((event) => parseData(event.newValue, defaultValue))
|
|
14
|
+
).subscribe((newValue) => subject.next(newValue));
|
|
15
|
+
const update = (val) => {
|
|
16
|
+
setStoredData(key, val);
|
|
17
|
+
subject.next(val);
|
|
18
|
+
};
|
|
19
|
+
return {
|
|
20
|
+
observable: subject.asObservable(),
|
|
21
|
+
set: (val) => update(val),
|
|
22
|
+
mutate: (transform) => update(transform(subject.getValue())),
|
|
23
|
+
get: () => structuredClone(subject.getValue())
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
var parseData = (str, defaultValue) => {
|
|
27
|
+
try {
|
|
28
|
+
if (str) return JSON.parse(str);
|
|
29
|
+
} catch {
|
|
30
|
+
}
|
|
31
|
+
return defaultValue;
|
|
32
|
+
};
|
|
33
|
+
var getStoredData = (key, defaultValue) => {
|
|
34
|
+
const str = localStorage.getItem(key);
|
|
35
|
+
return parseData(str, defaultValue);
|
|
36
|
+
};
|
|
37
|
+
var setStoredData = (key, val) => {
|
|
38
|
+
const str = JSON.stringify(val);
|
|
39
|
+
localStorage.setItem(key, str);
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
// src/utils/isEthereumAddress.ts
|
|
43
|
+
var isEthereumAddress = (address) => /^0x[a-fA-F0-9]{40}$/.test(address);
|
|
44
|
+
|
|
45
|
+
// src/utils/isSs58Address.ts
|
|
46
|
+
import { AccountId } from "polkadot-api";
|
|
47
|
+
var accountIdEncoder = AccountId().enc;
|
|
48
|
+
var isSs58Address = (address) => {
|
|
49
|
+
try {
|
|
50
|
+
if (!address) return false;
|
|
51
|
+
accountIdEncoder(address);
|
|
52
|
+
return true;
|
|
53
|
+
} catch (_err) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
// src/utils/isValidAddress.ts
|
|
59
|
+
var isValidAddress = (address) => {
|
|
60
|
+
return address.startsWith("0x") ? isEthereumAddress(address) : isSs58Address(address);
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
// src/utils/AccountId.ts
|
|
64
|
+
var getAccountId = (walletId, address) => {
|
|
65
|
+
if (!walletId) throw new Error("Missing walletId");
|
|
66
|
+
if (!isValidAddress(address)) throw new Error("Invalid address");
|
|
67
|
+
return `${walletId}::${address}`;
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
// src/utils/isWalletPlatform.ts
|
|
71
|
+
var isWalletPlatform = (platform) => typeof platform === "string" && ["polkadot", "ethereum"].includes(platform);
|
|
72
|
+
|
|
73
|
+
// src/api/ethereum/accounts.ts
|
|
74
|
+
import {
|
|
75
|
+
combineLatest as combineLatest2,
|
|
76
|
+
map as map3,
|
|
77
|
+
Observable as Observable2,
|
|
78
|
+
of,
|
|
79
|
+
shareReplay as shareReplay2,
|
|
80
|
+
switchMap
|
|
81
|
+
} from "rxjs";
|
|
82
|
+
import { getAddress } from "viem";
|
|
83
|
+
|
|
84
|
+
// src/api/store.ts
|
|
85
|
+
import { uniq } from "lodash";
|
|
86
|
+
|
|
87
|
+
// src/utils/WalletId.ts
|
|
88
|
+
var getWalletId = (platform, identifier) => {
|
|
89
|
+
if (!isWalletPlatform(platform)) throw new Error("Invalid platform");
|
|
90
|
+
if (!identifier) throw new Error("Invalid name");
|
|
91
|
+
return `${platform}:${identifier}`;
|
|
92
|
+
};
|
|
93
|
+
var parseWalletId = (walletId) => {
|
|
94
|
+
if (!walletId) throw new Error("Invalid walletId");
|
|
95
|
+
const [platform, identifier] = walletId.split(":");
|
|
96
|
+
if (!isWalletPlatform(platform)) throw new Error("Invalid platform");
|
|
97
|
+
if (!identifier) throw new Error("Invalid address");
|
|
98
|
+
return { platform, identifier };
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
// src/api/store.ts
|
|
102
|
+
var LOCAL_STORAGE_KEY = "kheopskit";
|
|
103
|
+
var DEFAULT_SETTINGS = {};
|
|
104
|
+
var storage = createStore(LOCAL_STORAGE_KEY, DEFAULT_SETTINGS);
|
|
105
|
+
var addEnabledWalletId = (walletId) => {
|
|
106
|
+
parseWalletId(walletId);
|
|
107
|
+
storage.mutate((prev) => ({
|
|
108
|
+
...prev,
|
|
109
|
+
autoReconnect: uniq((prev.autoReconnect ?? []).concat(walletId))
|
|
110
|
+
}));
|
|
111
|
+
};
|
|
112
|
+
var removeEnabledWalletId = (walletId) => {
|
|
113
|
+
storage.mutate((prev) => ({
|
|
114
|
+
...prev,
|
|
115
|
+
autoReconnect: uniq(
|
|
116
|
+
(prev.autoReconnect ?? []).filter((id) => id !== walletId)
|
|
117
|
+
)
|
|
118
|
+
}));
|
|
119
|
+
};
|
|
120
|
+
var store = {
|
|
121
|
+
observable: storage.observable,
|
|
122
|
+
addEnabledWalletId,
|
|
123
|
+
removeEnabledWalletId
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
// src/api/ethereum/wallets.ts
|
|
127
|
+
import { createStore as createStore2 } from "mipd";
|
|
128
|
+
import {
|
|
129
|
+
BehaviorSubject as BehaviorSubject2,
|
|
130
|
+
combineLatest,
|
|
131
|
+
map as map2,
|
|
132
|
+
Observable,
|
|
133
|
+
shareReplay
|
|
134
|
+
} from "rxjs";
|
|
135
|
+
var providersDetails$ = new Observable(
|
|
136
|
+
(subscriber) => {
|
|
137
|
+
const store2 = createStore2();
|
|
138
|
+
const unsubscribe = store2.subscribe((providerDetails2) => {
|
|
139
|
+
subscriber.next(providerDetails2);
|
|
140
|
+
});
|
|
141
|
+
const providerDetails = store2.getProviders();
|
|
142
|
+
subscriber.next(providerDetails);
|
|
143
|
+
return () => {
|
|
144
|
+
unsubscribe();
|
|
145
|
+
store2.destroy();
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
).pipe(shareReplay({ refCount: true, bufferSize: 1 }));
|
|
149
|
+
providersDetails$.subscribe(() => {
|
|
150
|
+
console.count("[kheopskit] providers$ emit");
|
|
151
|
+
});
|
|
152
|
+
var ethereumWallets$ = new Observable(
|
|
153
|
+
(subscriber) => {
|
|
154
|
+
const enabledWalletIds$ = new BehaviorSubject2(/* @__PURE__ */ new Set());
|
|
155
|
+
const connectWallet = async (walletId, provider) => {
|
|
156
|
+
if (enabledWalletIds$.value.has(walletId))
|
|
157
|
+
throw new Error(`Extension ${walletId} already connected`);
|
|
158
|
+
provider.request({
|
|
159
|
+
method: "eth_requestAccounts"
|
|
160
|
+
});
|
|
161
|
+
const newSet = new Set(enabledWalletIds$.value);
|
|
162
|
+
newSet.add(walletId);
|
|
163
|
+
enabledWalletIds$.next(newSet);
|
|
164
|
+
store.addEnabledWalletId(walletId);
|
|
165
|
+
};
|
|
166
|
+
const disconnectWallet = async (walletId, _provider) => {
|
|
167
|
+
if (!enabledWalletIds$.value.has(walletId))
|
|
168
|
+
throw new Error(`Extension ${walletId} is not connected`);
|
|
169
|
+
const newSet = new Set(enabledWalletIds$.value);
|
|
170
|
+
newSet.delete(walletId);
|
|
171
|
+
enabledWalletIds$.next(newSet);
|
|
172
|
+
store.removeEnabledWalletId(walletId);
|
|
173
|
+
};
|
|
174
|
+
const sub = combineLatest([providersDetails$, enabledWalletIds$]).pipe(
|
|
175
|
+
map2(([providerDetails, enabledWalletIds]) => {
|
|
176
|
+
return providerDetails.map((pd) => {
|
|
177
|
+
const walletId = getWalletId("ethereum", pd.info.rdns);
|
|
178
|
+
const provider = pd.provider;
|
|
179
|
+
return {
|
|
180
|
+
platform: "ethereum",
|
|
181
|
+
id: walletId,
|
|
182
|
+
name: pd.info.name,
|
|
183
|
+
icon: pd.info.icon,
|
|
184
|
+
provider,
|
|
185
|
+
isEnabled: enabledWalletIds.has(walletId),
|
|
186
|
+
providerId: pd.info.rdns,
|
|
187
|
+
connect: () => connectWallet(walletId, provider),
|
|
188
|
+
disconnect: () => disconnectWallet(walletId, provider)
|
|
189
|
+
};
|
|
190
|
+
});
|
|
191
|
+
})
|
|
192
|
+
).subscribe(subscriber);
|
|
193
|
+
return () => {
|
|
194
|
+
sub.unsubscribe();
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
).pipe(shareReplay({ refCount: true, bufferSize: 1 }));
|
|
198
|
+
ethereumWallets$.subscribe(() => {
|
|
199
|
+
console.count("[kheopskit] ethereumWallets$ emit");
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
// src/api/ethereum/accounts.ts
|
|
203
|
+
var getWalletAccounts$ = (wallet) => {
|
|
204
|
+
if (!wallet.isEnabled) return of([]);
|
|
205
|
+
return new Observable2((subscriber) => {
|
|
206
|
+
const getAccount = (address, i) => ({
|
|
207
|
+
id: getAccountId(wallet.id, address),
|
|
208
|
+
platform: "ethereum",
|
|
209
|
+
provider: wallet.provider,
|
|
210
|
+
address: getAddress(address),
|
|
211
|
+
walletName: wallet.name,
|
|
212
|
+
walletId: wallet.id,
|
|
213
|
+
isWalletDefault: i === 0
|
|
214
|
+
});
|
|
215
|
+
const listener = (addresses) => {
|
|
216
|
+
subscriber.next(addresses.map(getAccount));
|
|
217
|
+
};
|
|
218
|
+
wallet.provider.on("accountsChanged", listener);
|
|
219
|
+
wallet.provider.request({ method: "eth_accounts" }).then((addresses) => {
|
|
220
|
+
subscriber.next(addresses.map(getAccount));
|
|
221
|
+
}).catch((err) => {
|
|
222
|
+
console.error("Failed to get accounts", err);
|
|
223
|
+
subscriber.next([]);
|
|
224
|
+
});
|
|
225
|
+
return () => {
|
|
226
|
+
wallet.provider.removeListener("accountsChanged", listener);
|
|
227
|
+
};
|
|
228
|
+
});
|
|
229
|
+
};
|
|
230
|
+
var ethereumAccounts$ = new Observable2(
|
|
231
|
+
(subscriber) => {
|
|
232
|
+
const sub = ethereumWallets$.pipe(
|
|
233
|
+
map3((wallets) => wallets.filter((w) => w.isEnabled)),
|
|
234
|
+
switchMap(
|
|
235
|
+
(wallets) => wallets.length ? combineLatest2(wallets.map(getWalletAccounts$)) : of([])
|
|
236
|
+
),
|
|
237
|
+
map3((accounts) => accounts.flat())
|
|
238
|
+
).subscribe(subscriber);
|
|
239
|
+
return () => {
|
|
240
|
+
sub.unsubscribe();
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
).pipe(shareReplay2({ refCount: true, bufferSize: 1 }));
|
|
244
|
+
ethereumAccounts$.subscribe(() => {
|
|
245
|
+
console.count("[kheopskit] ethereumAccounts$ emit");
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
// src/api/polkadot/accounts.ts
|
|
249
|
+
import {
|
|
250
|
+
combineLatest as combineLatest4,
|
|
251
|
+
map as map5,
|
|
252
|
+
Observable as Observable4,
|
|
253
|
+
of as of3,
|
|
254
|
+
shareReplay as shareReplay4,
|
|
255
|
+
switchMap as switchMap2
|
|
256
|
+
} from "rxjs";
|
|
257
|
+
|
|
258
|
+
// src/api/polkadot/wallets.ts
|
|
259
|
+
import { isEqual } from "lodash";
|
|
260
|
+
import {
|
|
261
|
+
connectInjectedExtension,
|
|
262
|
+
getInjectedExtensions
|
|
263
|
+
} from "polkadot-api/pjs-signer";
|
|
264
|
+
import {
|
|
265
|
+
BehaviorSubject as BehaviorSubject3,
|
|
266
|
+
combineLatest as combineLatest3,
|
|
267
|
+
distinctUntilChanged,
|
|
268
|
+
map as map4,
|
|
269
|
+
mergeMap,
|
|
270
|
+
Observable as Observable3,
|
|
271
|
+
of as of2,
|
|
272
|
+
shareReplay as shareReplay3,
|
|
273
|
+
timer
|
|
274
|
+
} from "rxjs";
|
|
275
|
+
var getInjectedWalletsIds = () => getInjectedExtensions().map((name) => getWalletId("polkadot", name));
|
|
276
|
+
var polkadotInjectedWallets$ = new Observable3(
|
|
277
|
+
(subscriber) => {
|
|
278
|
+
const enabledExtensions$ = new BehaviorSubject3(/* @__PURE__ */ new Map());
|
|
279
|
+
const connect = async (walletId) => {
|
|
280
|
+
if (enabledExtensions$.value.has(walletId))
|
|
281
|
+
throw new Error(`Extension ${walletId} already connected`);
|
|
282
|
+
const { identifier } = parseWalletId(walletId);
|
|
283
|
+
const extension = await connectInjectedExtension(identifier);
|
|
284
|
+
const newMap = new Map(enabledExtensions$.value);
|
|
285
|
+
newMap.set(walletId, extension);
|
|
286
|
+
enabledExtensions$.next(newMap);
|
|
287
|
+
store.addEnabledWalletId(walletId);
|
|
288
|
+
};
|
|
289
|
+
const disconnect = (walletId) => {
|
|
290
|
+
if (!enabledExtensions$.value.has(walletId))
|
|
291
|
+
throw new Error(`Extension ${walletId} is not connected`);
|
|
292
|
+
const newMap = new Map(enabledExtensions$.value);
|
|
293
|
+
newMap.delete(walletId);
|
|
294
|
+
enabledExtensions$.next(newMap);
|
|
295
|
+
store.removeEnabledWalletId(walletId);
|
|
296
|
+
};
|
|
297
|
+
const walletIds$ = of2(0, 200, 500, 1e3).pipe(
|
|
298
|
+
mergeMap((time) => timer(time)),
|
|
299
|
+
map4(() => getInjectedWalletsIds()),
|
|
300
|
+
distinctUntilChanged(isEqual)
|
|
301
|
+
);
|
|
302
|
+
const subscription = combineLatest3([walletIds$, enabledExtensions$]).pipe(
|
|
303
|
+
map4(([walletIds, enabledExtensions]) => {
|
|
304
|
+
return walletIds.map((id) => {
|
|
305
|
+
const { identifier } = parseWalletId(id);
|
|
306
|
+
const extension = enabledExtensions.get(id);
|
|
307
|
+
return extension ? {
|
|
308
|
+
id,
|
|
309
|
+
platform: "polkadot",
|
|
310
|
+
name: identifier,
|
|
311
|
+
extensionId: identifier,
|
|
312
|
+
isEnabled: true,
|
|
313
|
+
extension,
|
|
314
|
+
disconnect: () => disconnect(id)
|
|
315
|
+
} : {
|
|
316
|
+
id,
|
|
317
|
+
platform: "polkadot",
|
|
318
|
+
name: identifier,
|
|
319
|
+
extensionId: identifier,
|
|
320
|
+
isEnabled: false,
|
|
321
|
+
connect: () => connect(id)
|
|
322
|
+
};
|
|
323
|
+
});
|
|
324
|
+
})
|
|
325
|
+
).subscribe(subscriber);
|
|
326
|
+
return () => {
|
|
327
|
+
subscription.unsubscribe();
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
).pipe(shareReplay3({ refCount: true, bufferSize: 1 }));
|
|
331
|
+
var polkadotWallets$ = polkadotInjectedWallets$;
|
|
332
|
+
polkadotWallets$.subscribe(() => {
|
|
333
|
+
console.count("[kheopskit] polkadotWallets$ emit");
|
|
334
|
+
});
|
|
335
|
+
|
|
336
|
+
// src/api/polkadot/accounts.ts
|
|
337
|
+
var getWalletAccounts$2 = (wallet) => {
|
|
338
|
+
if (!wallet.isEnabled) return of3([]);
|
|
339
|
+
return new Observable4((subscriber) => {
|
|
340
|
+
const getAccount = (account) => ({
|
|
341
|
+
id: getAccountId(wallet.id, account.address),
|
|
342
|
+
...account,
|
|
343
|
+
platform: "polkadot",
|
|
344
|
+
walletName: wallet.name,
|
|
345
|
+
walletId: wallet.id
|
|
346
|
+
});
|
|
347
|
+
const unsubscribe = wallet.extension.subscribe((accounts) => {
|
|
348
|
+
subscriber.next(accounts.map(getAccount));
|
|
349
|
+
});
|
|
350
|
+
subscriber.next(wallet.extension.getAccounts().map(getAccount));
|
|
351
|
+
return () => {
|
|
352
|
+
return unsubscribe();
|
|
353
|
+
};
|
|
354
|
+
});
|
|
355
|
+
};
|
|
356
|
+
var polkadotAccounts$ = new Observable4(
|
|
357
|
+
(subscriber) => {
|
|
358
|
+
const sub = polkadotWallets$.pipe(
|
|
359
|
+
map5((wallets) => wallets.filter((w) => w.isEnabled)),
|
|
360
|
+
switchMap2(
|
|
361
|
+
(wallets) => wallets.length ? combineLatest4(wallets.map(getWalletAccounts$2)) : of3([])
|
|
362
|
+
),
|
|
363
|
+
map5((accounts) => accounts.flat())
|
|
364
|
+
).subscribe(subscriber);
|
|
365
|
+
return () => {
|
|
366
|
+
sub.unsubscribe();
|
|
367
|
+
};
|
|
368
|
+
}
|
|
369
|
+
).pipe(shareReplay4({ refCount: true, bufferSize: 1 }));
|
|
370
|
+
polkadotAccounts$.subscribe(() => {
|
|
371
|
+
console.count("[kheopskit] polkadotAccounts$ emit");
|
|
372
|
+
});
|
|
373
|
+
|
|
374
|
+
// src/api/accounts.ts
|
|
375
|
+
var getAccounts$ = (config) => {
|
|
376
|
+
return new Observable5((subscriber) => {
|
|
377
|
+
const observables = config.platforms.map(
|
|
378
|
+
(platform) => {
|
|
379
|
+
switch (platform) {
|
|
380
|
+
case "polkadot":
|
|
381
|
+
return polkadotAccounts$;
|
|
382
|
+
case "ethereum":
|
|
383
|
+
return ethereumAccounts$;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
);
|
|
387
|
+
const accounts$ = observables.length ? combineLatest5(observables).pipe(map6((accounts) => accounts.flat())) : of4([]);
|
|
388
|
+
const sub = accounts$.subscribe(subscriber);
|
|
389
|
+
return () => {
|
|
390
|
+
sub.unsubscribe();
|
|
391
|
+
};
|
|
392
|
+
}).pipe(shareReplay5({ refCount: true, bufferSize: 1 }));
|
|
393
|
+
};
|
|
394
|
+
|
|
395
|
+
// src/api/config.ts
|
|
396
|
+
var DEFAULT_CONFIG = {
|
|
397
|
+
autoReconnect: true,
|
|
398
|
+
platforms: ["polkadot"]
|
|
399
|
+
};
|
|
400
|
+
var resolveConfig = (config) => {
|
|
401
|
+
return Object.assign({}, DEFAULT_CONFIG, config);
|
|
402
|
+
};
|
|
403
|
+
|
|
404
|
+
// src/api/wallets.ts
|
|
405
|
+
import {
|
|
406
|
+
combineLatest as combineLatest6,
|
|
407
|
+
distinct,
|
|
408
|
+
filter as filter2,
|
|
409
|
+
map as map7,
|
|
410
|
+
mergeMap as mergeMap2,
|
|
411
|
+
Observable as Observable6,
|
|
412
|
+
of as of5,
|
|
413
|
+
shareReplay as shareReplay6,
|
|
414
|
+
take
|
|
415
|
+
} from "rxjs";
|
|
416
|
+
var autoReconnectWalletIds$ = store.observable.pipe(
|
|
417
|
+
map7((s) => s.autoReconnect ?? []),
|
|
418
|
+
take(1),
|
|
419
|
+
shareReplay6(1)
|
|
420
|
+
);
|
|
421
|
+
var getWallets$ = (config) => {
|
|
422
|
+
return new Observable6((subscriber) => {
|
|
423
|
+
const observables = config.platforms.map(
|
|
424
|
+
(platform) => {
|
|
425
|
+
switch (platform) {
|
|
426
|
+
case "polkadot":
|
|
427
|
+
return polkadotWallets$;
|
|
428
|
+
case "ethereum":
|
|
429
|
+
return ethereumWallets$;
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
);
|
|
433
|
+
const wallets$ = observables.length ? combineLatest6(observables).pipe(map7((wallets) => wallets.flat())) : of5([]);
|
|
434
|
+
const subAutoReconnect = combineLatest6([wallets$, autoReconnectWalletIds$]).pipe(
|
|
435
|
+
filter2(([, walletIds]) => config.autoReconnect && !!walletIds?.length),
|
|
436
|
+
mergeMap2(
|
|
437
|
+
([wallets, walletIds]) => wallets.filter((wallet) => walletIds?.includes(wallet.id))
|
|
438
|
+
),
|
|
439
|
+
distinct((w) => w.id)
|
|
440
|
+
).subscribe(async (wallet) => {
|
|
441
|
+
if (wallet.isEnabled) {
|
|
442
|
+
console.warn("Wallet %s already connected", wallet.id);
|
|
443
|
+
return;
|
|
444
|
+
}
|
|
445
|
+
try {
|
|
446
|
+
await wallet.connect();
|
|
447
|
+
} catch (err) {
|
|
448
|
+
console.error("Failed to reconnect wallet %s", wallet.id, { err });
|
|
449
|
+
}
|
|
450
|
+
});
|
|
451
|
+
const subWallets = wallets$.subscribe(subscriber);
|
|
452
|
+
return () => {
|
|
453
|
+
subAutoReconnect.unsubscribe();
|
|
454
|
+
subWallets.unsubscribe();
|
|
455
|
+
};
|
|
456
|
+
}).pipe(shareReplay6({ refCount: true, bufferSize: 1 }));
|
|
457
|
+
};
|
|
458
|
+
|
|
459
|
+
// src/api/kheopskit.ts
|
|
460
|
+
var getKheopskit$ = (config) => {
|
|
461
|
+
const c = resolveConfig(config);
|
|
462
|
+
return new Observable7(
|
|
463
|
+
(subscriber) => {
|
|
464
|
+
const subscription = combineLatest7([getWallets$(c), getAccounts$(c)]).pipe(map8(([wallets, accounts]) => ({ wallets, accounts }))).subscribe(subscriber);
|
|
465
|
+
return () => {
|
|
466
|
+
subscription.unsubscribe();
|
|
467
|
+
};
|
|
468
|
+
}
|
|
469
|
+
).pipe(shareReplay7({ bufferSize: 1, refCount: true }));
|
|
470
|
+
};
|
|
471
|
+
export {
|
|
472
|
+
getKheopskit$
|
|
473
|
+
};
|
|
474
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +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 AccountId = string;\n\nexport const getAccountId = (\n walletId: string,\n address: SS58String\n): AccountId => {\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 parseAccountId = (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 { EthereumWallet } from \"@/api/types\";\nimport { getAccountId, type AccountId } 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\nexport type EthereumAccount = {\n id: AccountId;\n platform: \"ethereum\";\n provider: EIP1193Provider;\n address: `0x${string}`;\n walletName: string;\n walletId: string;\n isWalletDefault: boolean;\n};\n\nconst getWalletAccounts$ = (\n wallet: EthereumWallet\n): Observable<EthereumAccount[]> => {\n if (!wallet.isEnabled) return of([]);\n\n return new Observable<EthereumAccount[]>((subscriber) => {\n const getAccount = (address: string, i: number): EthereumAccount => ({\n id: getAccountId(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.isEnabled)),\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 isEnabled: 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 { PolkadotWallet } from \"@/api/types\";\nimport { getAccountId, type AccountId } 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\nexport type PolkadotAccount = InjectedPolkadotAccount & {\n id: AccountId;\n platform: \"polkadot\";\n walletName: string;\n walletId: string;\n};\n\nconst getWalletAccounts$ = (\n wallet: PolkadotWallet\n): Observable<PolkadotAccount[]> => {\n if (!wallet.isEnabled) return of([]);\n\n return new Observable<PolkadotAccount[]>((subscriber) => {\n const getAccount = (account: InjectedPolkadotAccount): PolkadotAccount => ({\n id: getAccountId(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.isEnabled)),\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 isEnabled: true,\n extension,\n disconnect: () => disconnect(id),\n }\n : {\n id,\n platform: \"polkadot\",\n name: identifier,\n extensionId: identifier,\n isEnabled: 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.isEnabled) {\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"]}
|