{"version":3,"sources":["../src/ExtensionTools/utils.ts","../src/ExtensionTools/ethereum.ts","../src/ExtensionTools/polkadot.ts","../src/ExtensionTools/index.ts"],"sourcesContent":["export const documentReadyPromiseAndWindowIsOk = (): Promise<boolean> => {\n  if (typeof window === 'undefined') {\n    return Promise.resolve(false)\n  } else if(window.document.readyState === 'complete') {\n    return Promise.resolve(true)\n  } else {\n    return new Promise<true>(resolve => window.addEventListener('load', () => resolve(true), {once: true}));\n  }\n}\n","import {documentReadyPromiseAndWindowIsOk} from './utils'\n\nexport const windowIsOkSync = (): boolean => {\n  return typeof window !== 'undefined' && !!(window as any).ethereum;\n}\n\nexport interface AddEthereumChainParameter {\n  chainId: string // A 0x-prefixed hexadecimal string\n  chainName: string\n  nativeCurrency: {\n    name: string\n    symbol: string // 2-6 characters long\n    decimals: 18\n  }\n  rpcUrls: string[]\n  blockExplorerUrls?: string[]\n  iconUrls?: string[] // Currently ignored\n}\n\nexport type UNIQUE_CHAIN = 'unique' | 'quartz' | 'opal' | 'sapphire'\nconst UNIQUE_CHAINS: UNIQUE_CHAIN[] = ['unique', 'quartz', 'opal', 'sapphire']\nconst UNIQUE_CHAIN_IDS: number[] = [8880, 8881, 8882, 8883]\n\nconst UniqueChainName: Record<UNIQUE_CHAIN, UNIQUE_CHAIN> = {\n  unique: 'unique',\n  quartz: 'quartz',\n  opal: 'opal',\n  sapphire: 'sapphire',\n}\nconst chainNameToChainId: Record<UNIQUE_CHAIN, number> = {\n  unique: 8880,\n  quartz: 8881,\n  opal: 8882,\n  sapphire: 8883\n}\nconst chainIdToChainName: Record<number, UNIQUE_CHAIN> = {\n  8880: 'unique',\n  8881: 'quartz',\n  8882: 'opal',\n  8883: 'sapphire'\n}\n\nconst isUniqueChainFactory = (chainName: UNIQUE_CHAIN) => (): boolean => {\n  if (!windowIsOkSync()) {\n    return false\n  }\n  const chainId = parseInt((window as any).ethereum.chainId, 16)\n  return chainId === chainNameToChainId[chainName]\n}\nconst currentChainIs: Record<UNIQUE_CHAIN, () => boolean> & {\n  anyUniqueChain: (chainId: string | number) => boolean\n  byName: (chainName: string) => boolean\n} = {\n  unique: isUniqueChainFactory('unique'),\n  quartz: isUniqueChainFactory('quartz'),\n  opal: isUniqueChainFactory('opal'),\n  sapphire: isUniqueChainFactory('sapphire'),\n  byName: (chainName: string) => {\n    if (!UNIQUE_CHAINS.includes(chainName as UNIQUE_CHAIN)) {\n      throw new Error(`Invalid chain name: ${chainName}`)\n    }\n    return isUniqueChainFactory(chainName as UNIQUE_CHAIN)()\n  },\n  anyUniqueChain: (chainId: string | number | null | undefined): boolean => {\n    if (!chainId) return false\n\n    // check if chain id is in the list of unique chains in string or number format\n    return (\n      (typeof chainId === 'string' && UNIQUE_CHAINS.includes(chainId as UNIQUE_CHAIN)) ||\n      (typeof chainId === 'number' && UNIQUE_CHAIN_IDS.includes(chainId))\n    )\n  }\n}\n\n\nexport type IEthereumExtensionResult = {\n  address: string\n  chainId: number\n}\n\nexport type IEthereumExtensionError = Error & {\n  extensionNotFound: boolean\n  userRejected: boolean\n  needToRequestAccess: boolean\n  chainId: number | null\n}\n\n/**\n * @param requestInsteadOfGet - if true, will call eth_requestAccounts instead of eth_accounts\n * @returns {Promise<IEthereumExtensionResult>}\n * @throws {IEthereumExtensionError}\n */\nconst getOrRequestAccounts = async (requestInsteadOfGet: boolean = false): Promise<IEthereumExtensionResult> => {\n  const windowIsOk = await documentReadyPromiseAndWindowIsOk()\n\n  if (!windowIsOk) {\n    // silently return empty result in non browser environment (e.g. nodejs)\n    // to not bother if someone is using this lib in nodejs\n    return {address: '', chainId: 0}\n  }\n\n  if (!(window as any).ethereum) {\n    const error = new Error('No extension found') as IEthereumExtensionError\n    error.extensionNotFound = true\n    error.userRejected = false\n    error.needToRequestAccess = false\n    error.chainId = null\n\n    throw error\n  }\n\n  const ethereum = (window as any).ethereum\n  let accounts: string[] = []\n  let chainId: number | null = null\n  try {\n    accounts = await ethereum.request({method: requestInsteadOfGet ? 'eth_requestAccounts' : 'eth_accounts'})\n    chainId = parseInt(ethereum.chainId, 16)\n  } catch (_error: any) {\n    // EIP-1193 userRejectedRequest error code is 4001\n    // If this happens, the user rejected the connection request.\n\n    const error = _error as IEthereumExtensionError\n    error.userRejected = _error.code === 4001\n    error.extensionNotFound = false\n    error.needToRequestAccess = false\n\n    const chainIdStr = (window as any).ethereum?.chainId\n    error.chainId = typeof chainIdStr === 'string' ? parseInt(chainIdStr, 16) : NaN\n\n    throw error\n  }\n\n  const account = accounts[0]\n  if (!account) {\n    const error = new Error('Need to request account') as IEthereumExtensionError\n    error.extensionNotFound = false\n    error.userRejected = false\n    error.needToRequestAccess = true\n    error.chainId = chainId\n\n    throw error\n  }\n  return {\n    address: accounts[0],\n    chainId,\n  }\n}\n\nexport type IEthereumExtensionResultSafe = {\n  result: IEthereumExtensionResult\n  error: null\n} | {\n  result: null\n  error: IEthereumExtensionError\n}\n\nconst getOrRequestAccountsSafe = async (requestInsteadOfGet: boolean = false): Promise<IEthereumExtensionResultSafe> => {\n  try {\n    return {result: await getOrRequestAccounts(requestInsteadOfGet), error: null}\n  } catch (error: any) {\n    return {result: null, error}\n  }\n}\n\nexport const addChainToExtension = async (chainData: AddEthereumChainParameter): Promise<void> => {\n  const windowIsOk = await documentReadyPromiseAndWindowIsOk()\n  if (!windowIsOk) return\n\n  const ethereum = (window as any).ethereum\n\n  if (ethereum.chainId === chainData.chainId) {\n    console.log(`No need to add the chain to wallet - wallet already has ${chainData.chainName}'s chainId: ${ethereum.chainId} (${parseInt(ethereum.chainId)})`)\n    return\n  }\n\n  try {\n    await ethereum.request({\n      method: 'wallet_addEthereumChain',\n      params: [chainData],\n    })\n  } catch (error: any) {\n    console.error('Error during attempt to add chain to wallet', error.code, error)\n    throw error\n  }\n}\n\n\nconst UNIQUE_CHAINS_DATA_FOR_EXTENSIONS: Record<UNIQUE_CHAIN, AddEthereumChainParameter> = {\n  unique: {\n    chainId: '0x22b0',\n    chainName: 'Unique',\n    nativeCurrency: {\n      name: 'Unique',\n      symbol: 'UNQ',\n      decimals: 18,\n    },\n    rpcUrls: [`https://rpc.unique.network`],\n    iconUrls: [`https://ipfs.unique.network/ipfs/QmbJ7CGZ2GxWMp7s6jy71UGzRsMe4w3KANKXDAExYWdaFR`],\n    blockExplorerUrls: ['https://uniquescan.io/unique/'],\n  },\n  quartz: {\n    chainId: '0x22b1',\n    chainName: 'Quartz by Unique',\n    nativeCurrency: {\n      name: 'Quartz',\n      symbol: 'QTZ',\n      decimals: 18,\n    },\n    rpcUrls: [`https://rpc-quartz.unique.network`],\n    iconUrls: [`https://ipfs.unique.network/ipfs/QmaGPdccULQEFcCGxzstnmE8THfac2kSiGwvWRAiaRq4dp`],\n    blockExplorerUrls: ['https://uniquescan.io/quartz/'],\n  },\n  opal: {\n    chainId: '0x22b2',\n    chainName: 'Opal by Unique',\n    nativeCurrency: {\n      name: 'Opal',\n      symbol: 'OPL',\n      decimals: 18,\n    },\n    rpcUrls: [`https://rpc-opal.unique.network`],\n    iconUrls: [`https://ipfs.unique.network/ipfs/QmYJDpmWyjDa3H6BxweFmQXk4fU8b1GU7M9EqYcaUNvXzc`],\n    blockExplorerUrls: ['https://uniquescan.io/opal/'],\n  },\n  sapphire: {\n    chainId: '0x22b3',\n    chainName: 'Sapphire by Unique',\n    nativeCurrency: {\n      name: 'Quartz',\n      symbol: 'QTZ',\n      decimals: 18,\n    },\n    rpcUrls: [`https://rpc-sapphire.unique.network`],\n    iconUrls: [`https://ipfs.unique.network/ipfs/Qmd1PGt4cDRjFbh4ihP5QKEd4XQVwN1MkebYKdF56V74pf`],\n    blockExplorerUrls: ['https://uniquescan.io/sapphire/'],\n  },\n}\n\nconst addChain: Record<UNIQUE_CHAIN, () => Promise<void>> & {\n  anyChain: (chainData: AddEthereumChainParameter) => Promise<void>\n  byName: (chainName: string) => Promise<void>\n} = {\n  unique: () => addChainToExtension(UNIQUE_CHAINS_DATA_FOR_EXTENSIONS.unique),\n  quartz: () => addChainToExtension(UNIQUE_CHAINS_DATA_FOR_EXTENSIONS.quartz),\n  opal: () => addChainToExtension(UNIQUE_CHAINS_DATA_FOR_EXTENSIONS.opal),\n  sapphire: () => addChainToExtension(UNIQUE_CHAINS_DATA_FOR_EXTENSIONS.sapphire),\n  anyChain: (chainData: AddEthereumChainParameter) => addChainToExtension(chainData),\n  byName: (chainName: string) => {\n    if (!UNIQUE_CHAINS.includes(chainName as UNIQUE_CHAIN)) {\n      throw new Error(`Invalid chain name: ${chainName}`)\n    }\n    return addChainToExtension(UNIQUE_CHAINS_DATA_FOR_EXTENSIONS[chainName as UNIQUE_CHAIN])\n  },\n}\n\nconst switchToChain = async (chainId: number | string): Promise<void> => {\n  const windowIsOk = await documentReadyPromiseAndWindowIsOk()\n  if (!windowIsOk) return\n\n  const parsedChainId: string = typeof chainId === 'string' ? chainId : '0x' + chainId.toString(16)\n\n  await (window as any).ethereum.request({method: 'wallet_switchEthereumChain', params: [{chainId: parsedChainId}]})\n}\nconst switchChainTo: Record<UNIQUE_CHAIN, () => Promise<void>> & {\n  anyChain: (chainId: number | string) => Promise<void>\n  byName: (chainName: string) => Promise<void>\n} = {\n  unique: () => switchToChain(chainNameToChainId.unique),\n  quartz: () => switchToChain(chainNameToChainId.quartz),\n  opal: () => switchToChain(chainNameToChainId.opal),\n  sapphire: () => switchToChain(chainNameToChainId.sapphire),\n  anyChain: (chainId) => switchToChain(chainId),\n  byName: (chainName) => {\n    if (!UNIQUE_CHAINS.includes(chainName as UNIQUE_CHAIN)) {\n      throw new Error(`Invalid chain name: ${chainName}`)\n    }\n    return switchToChain(chainNameToChainId[chainName as UNIQUE_CHAIN])\n  },\n}\n\nexport type UpdateReason = 'account' | 'chain'\n\nconst subscribeOnChanges = (cb: (result: { reason: UpdateReason, chainId: number, address: string }) => void): (() => void) => {\n  if (typeof window === 'undefined' || !(window as any).ethereum) {\n    return () => undefined\n  }\n\n  const ethereum = (window as any).ethereum\n\n  const refresh = (reason: UpdateReason) => {\n    if (ethereum.chainId && ethereum.selectedAddress) {\n      cb({reason, address: ethereum.selectedAddress, chainId: parseInt(ethereum.chainId, 16)})\n    } else {\n      getAccounts().then(({chainId, address}) => {\n        cb({reason, chainId, address})\n      }).catch((e) => console.error(`Error during attempt to update account info in subscribeOnChanges`, e))\n    }\n  }\n\n  ethereum.on('accountsChanged', () => {\n    refresh('account')\n  })\n  ethereum.on('chainChanged', () => {\n    refresh('chain')\n  })\n  return () => {\n    ethereum.removeListener('accountsChanged', refresh)\n    ethereum.removeListener('networkChanged', refresh)\n  }\n}\n\nimport type {ContractReceipt, Event} from 'ethers'\n\nconst parseEthersTxReceipt = <ParsedEvents = any>(tx: ContractReceipt, options = {decimals: 18}) => {\n  const events = (tx.events || []).filter(event => !!event.event).map((event: Event, index) => {\n    const args = event.args\n    return {\n      name: event.event || `event_${index.toString().padStart(4, '0')}`,\n      // args: event.args!,\n      events: !args ? {} : Object.keys(args)\n        .filter(key => isNaN(parseInt(key)))\n        .reduce((acc, key) => {\n          const rawValue = args[key]\n          const value = (typeof rawValue === 'object' && rawValue?._isBigNumber)\n            ? rawValue.toBigInt()\n            : rawValue\n          acc[key] = value\n          return acc\n        }, {} as { [K: string]: any })\n    }\n  }).reduce((acc, elem) => {\n    acc[elem.name] = elem.events\n    return acc\n  }, {} as { [K: string]: any }) as ParsedEvents\n\n  const rawPrice = tx.gasUsed.toBigInt() * tx.effectiveGasPrice.toBigInt()\n  const priceStr = rawPrice.toString().padStart(options.decimals + 1, '0')\n  const price = parseFloat([priceStr.slice(0, -options.decimals), '.', priceStr.slice(-options.decimals)].join(''))\n\n  return {\n    get tx() {\n      return tx\n    },\n    from: tx.from,\n    to: tx.to,\n    rawPrice,\n    price,\n    rawEvents: tx.events || [],\n    events,\n    gasUsed: tx.gasUsed.toBigInt(),\n    cumulativeGasUsed: tx.cumulativeGasUsed.toBigInt(),\n    effectiveGasPrice: tx.effectiveGasPrice.toBigInt(),\n  }\n}\n\n/**\n * @returns {Promise<IEthereumExtensionResult>}\n * @throws {IEthereumExtensionError}\n */\nconst requestAccounts = () => getOrRequestAccounts(true)\n\n/**\n * @returns {Promise<IEthereumExtensionResult>}\n * @throws {IEthereumExtensionError}\n */\nconst getAccounts = () => getOrRequestAccounts()\n\nexport const Ethereum = {\n  getOrRequestAccounts,\n  getOrRequestAccountsSafe,\n\n  requestAccounts,\n  getAccounts,\n\n  requestAccountsSafe: () => getOrRequestAccountsSafe(true),\n  getAccountsSafe: () => getOrRequestAccountsSafe(),\n\n  subscribeOnChanges,\n\n  chainNameToChainId,\n  chainIdToChainName,\n\n  currentChainIs,\n  addChain,\n  switchChainTo,\n\n  UNIQUE_CHAINS_DATA_FOR_EXTENSIONS,\n\n  UNIQUE_CHAINS,\n  UNIQUE_CHAIN_IDS,\n  UniqueChainName,\n\n  parseEthersTxReceipt,\n}\n","// =========================================\n// Polkadot types\n// =========================================\nimport {documentReadyPromiseAndWindowIsOk} from './utils'\n\nexport type KeypairType = 'ed25519' | 'sr25519' | 'ecdsa' | 'ethereum'\n\ninterface InjectedAccount {\n  address: string\n  genesisHash?: string | null\n  name?: string\n  type?: KeypairType\n}\n\ninterface InjectedWallet {\n  accounts: {\n    get(): Promise<InjectedAccount[]>\n  }\n  metadata?: any\n  provider?: any\n  signer: Signer\n}\n\ninterface NonInjectedWallet {\n  enable(): Promise<InjectedWallet>\n\n  version: string\n\n  // waiting for PR https://github.com/polkadot-js/extension/pull/1126 being merged\n  isEnabled?: boolean\n}\n\nexport interface SignerPayloadJSON {\n  address: string\n  blockHash: string\n  blockNumber: string\n  era: string\n  genesisHash: string\n  method: string\n  nonce: string\n  specVersion: string\n  tip: string\n  transactionVersion: string\n  signedExtensions: string[]\n  version: number\n}\n\nexport type SignerPayloadJSONWithAddressOptional = Omit<SignerPayloadJSON, 'address'> & { address?: string }\n\nexport interface SignerPayloadRaw {\n  data: string\n  address: string\n  type: 'bytes' | 'payload'\n}\n\nexport type SignerPayloadRawWithAddressAndTypeOptional = {\n  data: string\n  address?: SignerPayloadRaw['address']\n  type?: SignerPayloadRaw['type']\n}\n\nexport interface SignerResult {\n  id: number\n  signature: string //The resulting signature in hex string\n}\n\ninterface Signer {\n  signPayload: (payload: SignerPayloadJSON) => Promise<SignerResult>\n  signRaw: (raw: SignerPayloadRaw) => Promise<SignerResult>\n  update?: (id: number, status: any) => void\n}\n\n// =========================================\n// Unique SDK types\n// =========================================\nexport interface UNIQUE_SDK_UnsignedTxPayloadBody {\n  signerPayloadJSON?: SignerPayloadJSON\n  signerPayloadRaw?: SignerPayloadRaw\n  signerPayloadHex: string\n}\n\nexport interface UNIQUE_SDK_SignTxResultResponse {\n  signature: string\n  signatureType: KeypairType\n}\n\n\n// =========================================\n// module types\n// =========================================\nexport interface IPolkadotExtensionWalletInfo {\n  name: string\n  version: string\n  isEnabled: boolean | undefined\n  prettyName: string\n  logo: {\n    ipfsCid: string,\n    url: string,\n  }\n}\n\nexport interface IPolkadotExtensionWallet extends IPolkadotExtensionWalletInfo, Omit<InjectedWallet, 'accounts'> {\n  accounts: IPolkadotExtensionAccount[]\n}\n\nexport interface IPolkadotExtensionAccount extends Omit<Signer, 'signRaw'> {\n  name: string\n\n  address: string\n  addressShort: string\n\n  id: string\n  wallet: IPolkadotExtensionWalletInfo\n  signRaw: (raw: SignerPayloadRawWithAddressAndTypeOptional | string) => Promise<SignerResult>\n  // signPayload and update are inherited from Signer\n\n  signer: {\n    address: string\n    sign: (unsignedTxPayload: UNIQUE_SDK_UnsignedTxPayloadBody) => Promise<UNIQUE_SDK_SignTxResultResponse>\n  }\n\n  meta: {\n    genesisHash: string | null\n    name: string\n    source: string\n  }\n  type: KeypairType\n}\n\nexport type IPolkadotExtensionGenericInfo = Pick<IPolkadotExtensionWalletInfo, 'name' | 'prettyName' | 'logo'> & {\n  webpage: string\n}\n\n\n// =========================================\n// constants\n// =========================================\nconst IPFS_GATEWAY = 'https://gateway.pinata.cloud/ipfs/'\n\nconst KNOWN_POLKADOT_EXTENSIONS: { [K: string]: { logoIpfsCid: string, prettyName: string, webpage: string } } = {\n  'polkadot-js': {\n    logoIpfsCid: 'QmYWczavyNyh3yM56axyyQLgRqcFQYNKe5cDFPfLL94yrz',\n    prettyName: 'Polkadot{.js}',\n    webpage: 'https://polkadot.js.org/extension/',\n  },\n  'subwallet-js': {\n    logoIpfsCid: 'QmZ8BvFzGL5DRugJ3pytc1Jo1rTVYjW3mKUWBx7SvaEsdS',\n    prettyName: 'Subwallet',\n    webpage: 'https://subwallet.app/',\n  },\n  'talisman': {\n    logoIpfsCid: 'QmWHn4kVoG43U5coNhoR7Ec3Vus5YPjo9SkMvoiiLoy2bY',\n    prettyName: 'Talisman',\n    webpage: 'https://talisman.xyz/',\n  },\n}\nconst FALLBACK_WALLET_LOGO_IPFS_CID = 'QmSC1B9X9ugWkfHKtd5guKTidh2qjvgdn8xXzbFrrHMiBM'\n\nconst compareTwoStrings = (a: string, b: string): number => a > b ? 1 : a < b ? -1 : 0\n\nconst knownPolkadotExtensions: IPolkadotExtensionGenericInfo[] = Object.entries(KNOWN_POLKADOT_EXTENSIONS).map(([name, info]) => {\n  return {\n    name,\n    prettyName: info.prettyName,\n    logo: {\n      ipfsCid: info.logoIpfsCid,\n      url: IPFS_GATEWAY + info.logoIpfsCid,\n    },\n    webpage: info.webpage,\n  }\n}).sort((a, b) => compareTwoStrings(a.name, b.name))\n\nconst isWeb3Environment = async (): Promise<boolean> => {\n  const windowIsOk = await documentReadyPromiseAndWindowIsOk()\n  if (!windowIsOk) {\n    return false\n  }\n\n  const injectedWeb3 = (window as any).injectedWeb3\n\n  return !!injectedWeb3 && Object.keys(injectedWeb3).length !== 0\n}\n\nexport interface IPolkadotExtensionListWalletsResult {\n  wallets: IPolkadotExtensionWalletInfo[]\n  info: {\n    extensionFound: boolean\n    enabledWalletsNumber: number\n  }\n}\n\nconst getWalletInfo = (walletName: string, nonInjectedWallet: NonInjectedWallet): IPolkadotExtensionWalletInfo => {\n  // waiting for PR https://github.com/polkadot-js/extension/pull/1126 being merged\n  const isEnabled = nonInjectedWallet.isEnabled // walletName === 'polkadot-js' // for testing,\n\n  const prettyName = KNOWN_POLKADOT_EXTENSIONS[walletName]?.prettyName || walletName\n  const logo = {\n    ipfsCid: KNOWN_POLKADOT_EXTENSIONS[walletName]?.logoIpfsCid || FALLBACK_WALLET_LOGO_IPFS_CID,\n    url: IPFS_GATEWAY + (KNOWN_POLKADOT_EXTENSIONS[walletName]?.logoIpfsCid || FALLBACK_WALLET_LOGO_IPFS_CID),\n  }\n\n  return {\n    name: walletName,\n    version: nonInjectedWallet.version,\n    prettyName,\n    logo,\n    isEnabled,\n  }\n}\n\nconst listWallets = async (): Promise<IPolkadotExtensionListWalletsResult> => {\n  if (!(await isWeb3Environment())) {\n    return {wallets: [], info: {extensionFound: false, enabledWalletsNumber: 0}}\n  }\n\n  const walletsArray = Object.entries((window as any).injectedWeb3) as Array<[string, NonInjectedWallet]>\n\n  const wallets = walletsArray.map(([name, injectedWallet]) => getWalletInfo(name, injectedWallet))\n\n  return {\n    wallets,\n    info: {\n      extensionFound: true,\n      enabledWalletsNumber: wallets.reduce((acc, wallet) => acc + (wallet.isEnabled ? 1 : 0), 0),\n    },\n  }\n}\n\nexport type IPolkadotExtensionLoadWalletByNameResultSafe = {\n  result: IPolkadotExtensionWallet\n  error: null\n} | {\n  result: null\n  error: Error\n}\n\nconst loadWalletByNameSafe = async (walletName: string): Promise<IPolkadotExtensionLoadWalletByNameResultSafe> => {\n  if (!(await isWeb3Environment())) {\n    return {result: null, error: new Error(`now injected web3 found or environment not a browser`)}\n  }\n\n  const injectedWeb3 = (window as any).injectedWeb3\n  const rawWallet = injectedWeb3[walletName] as NonInjectedWallet\n\n  if (!rawWallet) {\n    return {result: null, error: new Error(`Wallet with name ${walletName} not found in \"window.injectedWeb3\"`)}\n  }\n\n  try {\n    const walletInfo = getWalletInfo(walletName, rawWallet)\n\n    const wallet = await rawWallet.enable()\n    const accounts = await wallet.accounts.get()\n\n    const parsedWallet: IPolkadotExtensionWallet = {\n      ...walletInfo,\n      ...wallet,\n      accounts: accounts.map((account) => {\n        const address = account.address\n        const addressShort = `${address.slice(0, 5)}...${address.slice(-5)}`\n\n        const id = `${walletName}/${address}`\n        const accountName = account.name || `${walletName}/${addressShort}`\n\n        const accountType = account.type || 'sr25519'\n\n        const signRaw = async (payloadRaw: SignerPayloadRawWithAddressAndTypeOptional | string): Promise<SignerResult> => {\n          if (!wallet.signer.signRaw) {\n            throw new Error(`no signRaw in the wallet ${walletName}`)\n          }\n\n          const payload: SignerPayloadRaw = typeof payloadRaw === 'string'\n            ? {address, data: payloadRaw, type: 'bytes'}\n            : {address, ...payloadRaw, type: payloadRaw.type || 'bytes'}\n\n          return wallet.signer.signRaw(payload)\n        }\n        const signPayload = async (payloadJSON: SignerPayloadJSONWithAddressOptional): Promise<SignerResult> => {\n          if (!wallet.signer.signPayload) {\n            throw new Error(`no signPayload in the wallet ${walletName}`)\n          }\n          return wallet.signer.signPayload({address, ...payloadJSON,})\n        }\n\n        const signer = {\n          address,\n          sign: async (unsignedTxPayload: UNIQUE_SDK_UnsignedTxPayloadBody): Promise<UNIQUE_SDK_SignTxResultResponse> => {\n            const signatureType = accountType\n\n            if (unsignedTxPayload.signerPayloadJSON) {\n              const {signature} = await signPayload(unsignedTxPayload.signerPayloadJSON)\n\n              return {signatureType, signature}\n            }\n\n            const toSign = unsignedTxPayload.signerPayloadRaw || unsignedTxPayload.signerPayloadHex\n\n            const {signature} = await signRaw(toSign)\n\n            return {signatureType, signature}\n          }\n        }\n\n        const enhancedAccount: IPolkadotExtensionAccount = {\n          ...account,\n          name: accountName,\n          id,\n          address,\n          addressShort,\n          type: accountType,\n          meta: {\n            genesisHash: account.genesisHash || null,\n            name: accountName,\n            source: walletName,\n          },\n          wallet: walletInfo,\n          signRaw,\n          signPayload,\n          update: wallet.signer.update,\n\n          signer,\n        }\n\n        return enhancedAccount\n      }),\n    }\n    return {result: parsedWallet, error: null}\n  } catch (e: any) {\n    return {result: null, error: e}\n  }\n}\n\nconst loadWalletByName = async (walletName: string): Promise<IPolkadotExtensionWallet> => {\n  const {result, error} = await loadWalletByNameSafe(walletName)\n  if (error) {\n    throw error\n  }\n  return result!\n}\n\nexport type IPolkadotExtensionLoadWalletsError = Error & {\n  extensionNotFound: boolean\n  accountsNotFound: boolean\n  userHasWalletsButHasNoAccounts: boolean\n  userHasBlockedAllWallets: boolean\n}\n\nexport interface IPolkadotExtensionLoadWalletsResult {\n  wallets: IPolkadotExtensionWallet[]\n  accounts: IPolkadotExtensionAccount[]\n\n  rejectedWallets: Array<IPolkadotExtensionWalletInfo & {\n    error: Error\n    isBlockedByUser: boolean\n  }>\n}\n\n/**\n * Load all wallets and accounts\n * @param onlyEnabled\n * @returns {Promise<IPolkadotExtensionLoadWalletsResult>}\n * @throws {IPolkadotExtensionLoadWalletsError}\n */\nconst loadWallets = async (onlyEnabled: boolean = false): Promise<IPolkadotExtensionLoadWalletsResult> => {\n  if (!(await documentReadyPromiseAndWindowIsOk())) {\n    return {wallets: [], accounts: [], rejectedWallets: []}\n  }\n  if (!(await isWeb3Environment())) {\n    const error = new Error(`No injected web3 found`) as IPolkadotExtensionLoadWalletsError\n\n    error.extensionNotFound = true\n    error.accountsNotFound = false\n    error.userHasWalletsButHasNoAccounts = false\n    error.userHasBlockedAllWallets = false\n\n    throw error\n  }\n\n  const allWallets = await Promise.all((await listWallets()).wallets\n    .filter(wallet => !onlyEnabled || wallet.isEnabled)\n    .map(async (wallet) => ({\n      info: wallet,\n      enabled: await loadWalletByNameSafe(wallet.name)\n    }))\n  )\n\n  const wallets: IPolkadotExtensionLoadWalletsResult['wallets'] = allWallets\n    .filter(wallet => !!wallet.enabled.result)\n    .map(wallet => wallet.enabled.result as IPolkadotExtensionWallet)\n    .sort((a, b) => compareTwoStrings(a.name, b.name))\n\n  const rejectedWallets: IPolkadotExtensionLoadWalletsResult['rejectedWallets'] = allWallets\n    .filter(wallet => !!wallet.enabled.error)\n    .map(wallet => {\n      const error = wallet.enabled.error as Error\n\n      const result: IPolkadotExtensionLoadWalletsResult['rejectedWallets'][number] = {\n        ...wallet.info,\n        error,\n        isBlockedByUser: error.message.indexOf('is not allowed to interact with this extension') >= 0,\n      }\n\n      return result\n    })\n    .sort((a, b) => compareTwoStrings(a.name, b.name))\n\n\n  const accounts: IPolkadotExtensionLoadWalletsResult['accounts'] = wallets\n    .flatMap(wallet => wallet.accounts)\n    .sort((a, b) =>\n      compareTwoStrings(a.wallet.name + a.name + a.address, b.wallet.name + b.name + b.address)\n    )\n\n  if (!accounts.length) {\n    const error = new Error(`No accounts found`) as IPolkadotExtensionLoadWalletsError\n\n    error.extensionNotFound = false\n    error.accountsNotFound = true\n    error.userHasWalletsButHasNoAccounts = !!wallets.length\n    error.userHasBlockedAllWallets = !wallets.length && !!rejectedWallets.length && rejectedWallets.every(w => w.isBlockedByUser)\n\n    throw error\n  }\n\n  return {\n    wallets,\n    rejectedWallets,\n    accounts,\n  }\n}\n\nexport type IPolkadotExtensionLoadWalletsResultSafe = {\n  result: IPolkadotExtensionLoadWalletsResult\n  error: null\n} | {\n  result: null\n  error: IPolkadotExtensionLoadWalletsError\n}\n\nconst loadWalletsSafe = async (onlyEnabled: boolean = false): Promise<IPolkadotExtensionLoadWalletsResultSafe> => {\n  try {\n    return {result: await loadWallets(onlyEnabled), error: null}\n  } catch (e: any) {\n    return {result: null, error: e}\n  }\n}\n\nexport const Polkadot = {\n  listWallets,\n\n  enableAndLoadAllWallets: () => loadWallets(false),\n  loadEnabledWallets: () => loadWallets(true),\n\n  enableAndLoadAllWalletsSafe: () => loadWalletsSafe(false),\n  loadEnabledWalletsSafe: () => loadWalletsSafe(true),\n\n  loadWalletByName,\n  loadWalletByNameSafe,\n\n  constants: {\n    knownPolkadotExtensions,\n    extensionNames: {\n      polkadot: 'polkadot-js',\n      subwallet: 'subwallet-js',\n      talisman: 'talisman',\n    }\n  }\n}\n","import {Ethereum} from './ethereum'\nimport {Polkadot} from './polkadot'\n\nconst ExtensionTools = {\n  Ethereum,\n  Polkadot,\n}\n\nconst UniqueChainName = Ethereum.UniqueChainName\n\nexport {ExtensionTools, Ethereum, Polkadot, UniqueChainName}\n\nexport default ExtensionTools\n\n// =========================================\n// types\n// =========================================\n\n\nexport type {\n  AddEthereumChainParameter,\n  UNIQUE_CHAIN,\n  UpdateReason,\n  IEthereumExtensionResult,\n  IEthereumExtensionError,\n  IEthereumExtensionResultSafe,\n} from './ethereum'\n\nexport type {\n  IPolkadotExtensionWallet,\n  IPolkadotExtensionWalletInfo,\n  IPolkadotExtensionAccount,\n  IPolkadotExtensionGenericInfo,\n  IPolkadotExtensionLoadWalletsResult,\n  IPolkadotExtensionListWalletsResult,\n  IPolkadotExtensionLoadWalletsResultSafe,\n  IPolkadotExtensionLoadWalletByNameResultSafe,\n  IPolkadotExtensionLoadWalletsError,\n  SignerPayloadJSON,\n  SignerPayloadRaw,\n  SignerPayloadRawWithAddressAndTypeOptional,\n  SignerPayloadJSONWithAddressOptional,\n  SignerResult,\n} from './polkadot'\n"],"mappings":"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","names":["signature","UniqueChainName"]}