{"version":3,"sources":["../src/format/address.ts","../src/format/asset.ts","../src/numbers/decimals.ts","../src/polkadot/polkadot.address.ts","../src/polkadot/polkadot.api.ts","../src/polkadot/polkadot.apps.ts"],"sourcesContent":["export function isHexString(asset: unknown): boolean {\n  return typeof asset === 'string' && asset.startsWith('0x');\n}\n\nexport function isEthAddress(address: string): boolean {\n  return address.length === 42 && address.startsWith('0x');\n}\n","export function formatAssetIdToERC20(id: string) {\n  if (id.startsWith('0x')) {\n    return id;\n  }\n\n  if (!/^\\d{38,39}$/.test(id)) {\n    throw new Error(`Asset id: ${id} must be a string and have 38-39 digits`);\n  }\n\n  return `0xffffffff${BigInt(id).toString(16).padStart(32, '0')}`;\n}\n\nexport function convertAddressTo32Bytes(address: string): string {\n  if (!/^0x[a-fA-F0-9]{40}$/.test(address)) {\n    throw new Error(`Invalid address: ${address}`);\n  }\n\n  return `0x000000000000000000000000${address.substring(2)}`;\n}\n","import Big, { type RoundingMode } from 'big.js';\n\nBig.NE = -18;\n\nexport function toDecimal(\n  number: bigint | number | string,\n  decimals: number,\n  maxDecimal = 6,\n  roundType?: RoundingMode,\n): string {\n  const dividend = Big(number.toString().replace(/[^0-9]/g, ''));\n  const divisor = Big(10).pow(decimals);\n  const result = dividend.div(divisor).round(maxDecimal, roundType);\n\n  return result.toString();\n}\n\nexport function toBigInt(\n  amount: bigint | string | number,\n  decimals: number,\n): bigint {\n  if (typeof amount === 'bigint') {\n    return amount;\n  }\n\n  const multiplier = Big(10).pow(decimals);\n  const result = Big(amount).mul(multiplier);\n\n  return BigInt(result.toFixed(0, Big.roundDown));\n}\n\nexport function convertDecimals(\n  number: string | bigint,\n  decimals: number,\n  targetDecimals: number,\n): bigint {\n  const decimalNumber = toDecimal(number, decimals, decimals);\n\n  return toBigInt(decimalNumber.toString(), targetDecimals);\n}\n\nexport function hasDecimalOverflow(fl: number | string, maxDecimal: number) {\n  const parts = fl.toString().split('.');\n  return parts.length > 1 && parts[1].length > maxDecimal;\n}\n","import {\n  bnToU8a,\n  compactToU8a,\n  hexToU8a,\n  stringToU8a,\n  u8aToHex,\n} from '@polkadot/util';\nimport { blake2AsU8a, decodeAddress } from '@polkadot/util-crypto';\nimport { isEthAddress } from '../format';\n\n/**\n * reference: https://github.com/Moonsong-Labs/xcm-tools/blob/main/scripts/calculate-sovereign-account.ts\n */\n\nexport function getSovereignAccountAddresses(paraId: number) {\n  const paraIdU8a = bnToU8a(paraId, { bitLength: 32 });\n  const relay = u8aToHex(\n    new Uint8Array([...stringToU8a('para'), ...paraIdU8a]),\n  ).padEnd(66, '0');\n  const generic = u8aToHex(\n    new Uint8Array([...stringToU8a('sibl'), ...paraIdU8a]),\n  ).padEnd(66, '0');\n  const moonbeam = generic.slice(0, 42);\n\n  return {\n    generic,\n    moonbeam,\n    relay,\n  };\n}\n\n/**\n * reference: https://github.com/Moonsong-Labs/xcm-tools/blob/main/scripts/calculate-multilocation-derivative-account.ts\n */\n\nexport function getMultilocationDerivedAddresses({\n  paraId,\n  address,\n  isParents = false,\n}: {\n  paraId?: number;\n  address: string;\n  isParents?: boolean;\n}) {\n  const parents = isParents ? 1 : 0;\n  const accType = isEthAddress(address) ? 'AccountKey20' : 'AccountId32';\n  const decodedAddress = isEthAddress(address)\n    ? hexToU8a(address)\n    : decodeAddress(address);\n\n  // Describe Family\n  // https://github.com/paritytech/polkadot/blob/master/xcm/xcm-builder/src/location_conversion.rs#L96-L118\n  const family =\n    parents === 0 && paraId\n      ? 'ChildChain'\n      : parents === 1 && !paraId\n        ? 'ParentChain'\n        : 'SiblingChain';\n\n  const blake = blake2AsU8a(\n    new Uint8Array([\n      ...stringToU8a(family),\n      ...(paraId ? compactToU8a(paraId) : []),\n      ...compactToU8a(accType.length + (isEthAddress(address) ? 20 : 32)),\n      ...stringToU8a(accType),\n      ...decodedAddress,\n    ]),\n  );\n\n  const address20 = u8aToHex(blake.slice(0, 20));\n  const address32 = u8aToHex(blake.slice(0, 32));\n\n  return {\n    address20,\n    address32,\n  };\n}\n","import { ApiPromise, WsProvider } from '@polkadot/api';\nimport { typesBundle } from '@polkadot/apps-config';\nimport { LRUCache } from 'lru-cache';\n\nexport enum MRLTypes {\n  // TODO handle both types according to RT version\n  XcmVersionedMultiLocation = 'XcmVersionedMultiLocation',\n  XcmVersionedLocation = 'XcmVersionedLocation',\n  XcmRoutingUserAction = 'XcmRoutingUserAction',\n  VersionedUserAction = 'VersionedUserAction',\n}\n\nconst cache = new LRUCache<string, Promise<ApiPromise>>({\n  max: 20,\n  dispose: async (promise: Promise<ApiPromise>) => {\n    const api = await promise;\n\n    if (api.isConnected) {\n      api.disconnect();\n    }\n  },\n});\n\nexport async function getPolkadotApi(\n  ws: string | string[],\n): Promise<ApiPromise> {\n  const key = Array.isArray(ws) ? ws.join(';') : ws;\n  const promise =\n    cache.get(key) ||\n    ApiPromise.create({\n      noInitWarn: true,\n      provider: new WsProvider(ws),\n      types: {\n        [MRLTypes.XcmRoutingUserAction]: {\n          destination: MRLTypes.XcmVersionedLocation,\n        },\n        [MRLTypes.VersionedUserAction]: {\n          _enum: { V1: MRLTypes.XcmRoutingUserAction },\n        },\n      },\n      typesBundle,\n    });\n\n  cache.set(key, promise);\n\n  const api = await promise;\n\n  await api.isReady;\n\n  return api;\n}\n","export function getPolkadotAppsUrl(ws: string) {\n  return `https://polkadot.js.org/apps/?rpc=${encodeURIComponent(ws)}#/explorer/query`;\n}\n"],"mappings":"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","names":["MRLTypes"]}