{"version":3,"sources":["../src/utils/address/constants.ts","../src/utils/address/imports.ts","../src/utils/address/stringUtils.ts","../src/tsUtils.ts","../src/utils/address/ethereum.ts","../src/utils/address/substrate.ts","../src/utils/address/crossAccountId.ts","../src/utils/address/index.ts"],"sourcesContent":["export const STATIC_ADDRESSES = <const>{\r\n  contractHelpers: '0x842899ECF380553E8a4de75bF534cdf6fBF64049',\r\n  collectionHelpers: '0x6C4E9fE1AE37a41E93CEE429e8E1881aBdcbb54F',\r\n}\r\nexport const NESTING_PREFIX = <const>'0xf8238ccfff8ed887463fd5e0'\r\nexport const COLLECTION_ADDRESS_PREFIX = <const>'0x17c4e6453cc49aaaaeaca894e6d9683e'\r\n","import basex from 'base-x'\r\nimport {keccak_256} from '@noble/hashes/sha3'\r\nimport {blake2b} from '@noble/hashes/blake2b'\r\n\r\nconst BASE58_ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\r\nconst BASE64_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\r\n\r\nconst base58 = basex(BASE58_ALPHABET)\r\nconst base64 = basex(BASE64_ALPHABET)\r\n\r\nexport {keccak_256, blake2b, base58, base64, basex}\r\n","import {safeJSONParse} from \"../../tsUtils\";\n\nexport const vec2str = (arr: Array<number | string>) => {\n  return arr\n    .map(x => String.fromCharCode(typeof x === 'number' ? x : parseInt(x, 10)))\n    .join('')\n}\n\nexport const str2vec = (str: string) => {\n  if (typeof str !== 'string') {\n    return str\n  }\n  return str.split('').map(x => x.charCodeAt(0))\n}\n\nexport const strToU8a = (str: string): Uint8Array => new Uint8Array(str2vec(str))\n\nexport const hexToU8a = (hexString: string): Uint8Array =>\n  Uint8Array.from(((hexString.startsWith('0x') ? hexString.slice(2) : hexString).match(/.{1,2}/g) || []).map((byte) => parseInt(byte, 16)))\n\nexport const u8aToHex = (bytes: number[] | Uint8Array): string => {\n  const arr = bytes instanceof Uint8Array ? Array.from(bytes) : bytes\n  return '0x' + arr.reduce((str, byte) => str + byte.toString(16).padStart(2, '0'), '');\n}\n\nexport const hexStringToString = (hexString: string): string =>\n  ((hexString.startsWith('0x') ? hexString.slice(2) : hexString).match(/.{1,2}/g) || [])\n    .map(el => String.fromCharCode(parseInt(el, 16)))\n    .join('')\n\n\nexport const safeJsonParseStringOrHexString = <T = any>(stringOrHexString: string): T | string => {\n  try {\n    return JSON.parse(stringOrHexString) as T\n  } catch {\n    return safeJSONParse<T>(hexStringToString(stringOrHexString))\n  }\n}\n\nexport const parseAndCheckTheNumberIsDWORD = (n: number | string) => {\n  const num: number = (typeof n === 'string') ? parseInt(n, 10) : n\n\n  if (isNaN(num)) throw new Error(`Passed number is NaN: ${n}`)\n  if (num < 0) throw new Error(`Passed number is less than 0: ${n}`)\n  if (num > 0xFFFFFFFF) throw new Error(`Passed number is more than 2**32: ${n}`)\n\n  return num\n}\n\nexport const DWORDHexString = {\n  fromNumber: (n: number): string => {\n    return parseAndCheckTheNumberIsDWORD(n).toString(16).padStart(8, '0')\n  },\n  toNumber: (s: string): number => {\n    const num: number = parseInt(s, 16)\n\n    if (isNaN(num)) throw new Error(`Passed string is not hexadecimal: ${s}`)\n\n    return num\n  }\n}\n","export const getKeys = <T extends Object>(o: T) => Object.keys(o) as Array<keyof T>\r\nexport const getValues = <T extends Object>(o: T) => Object.values(o) as Array<T[keyof T]>\r\nexport const getEntries = <T extends Object>(o: T) => Object.entries(o) as Array<[keyof T, T[keyof T]]>\r\n\r\nexport type Writeable<T> = { -readonly [P in keyof T]: T[P] };\r\n\r\ntype EnumBaseType = Record<string,  number | string>\r\n\r\nexport const getEnumKeys = <T extends EnumBaseType>(en: T): Array<keyof T> => {\r\n  const arr = getValues(en)\r\n  return arr.slice(0, arr.length / 2) as any as Array<keyof T>\r\n}\r\nexport const getEnumValues = <T extends EnumBaseType>(en: T): Array<T[keyof T]> => {\r\n  const arr = getValues(en)\r\n  return arr.slice(arr.length / 2)\r\n}\r\n\r\ntype EnumReverse<T extends EnumBaseType> = {[K in T[keyof T]]: keyof T}\r\nexport const getReversedEnum = <T extends EnumBaseType>(en: T): EnumReverse<T> => {\r\n  const arr = getValues(en)\r\n  const result = {} as any\r\n  for (let i = 0; i < arr.length/2; i++) {\r\n    result[arr[i + arr.length/2]] = arr[i]\r\n  }\r\n  return result\r\n}\r\n\r\nexport const safeJSONParse = <T>(str: string): T | string => {\r\n  try {\r\n    return JSON.parse(str) as T\r\n  } catch {\r\n    return str\r\n  }\r\n}\r\n","import * as string from \"./stringUtils\"\r\nimport {keccak_256} from \"./imports\"\r\nimport {COLLECTION_ADDRESS_PREFIX, NESTING_PREFIX} from \"./constants\"\r\nimport {is, validate} from \"./index\"\r\n\r\nconst unsafeNormalizeEthereumAddress = (address: string) => {\r\n  const addr = address.toLowerCase().replace(/^0x/i, '')\r\n  const addressHash = string.u8aToHex(keccak_256(addr)).replace(/^0x/i, '')\r\n\r\n  let checksumAddress = '0x'\r\n\r\n  for (let i = 0; i < addr.length; i++) {\r\n    checksumAddress += (parseInt(addressHash[i], 16) > 7)\r\n      ? addr[i].toUpperCase()\r\n      : addr[i]\r\n  }\r\n\r\n  return checksumAddress\r\n}\r\nexport const normalizeEthereumAddress = (address: string) => {\r\n  validate.ethereumAddress(address)\r\n  return unsafeNormalizeEthereumAddress(address)\r\n}\r\n\r\ntype EthAddressObj = { Ethereum: string }\r\nexport const compareEthereumAddresses = (address1: string | EthAddressObj | object, address2: string | EthAddressObj | object): boolean => {\r\n  const addr1 = typeof address1 === 'string'\r\n    ? address1\r\n    : ((address1 as EthAddressObj).Ethereum || (address1 as any).ethereum) as string | undefined\r\n  const addr2 = typeof address2 === 'string'\r\n    ? address2\r\n    : ((address2 as EthAddressObj).Ethereum || (address2 as any).ethereum) as string | undefined\r\n\r\n  if (!addr1 || !addr2 || !is.ethereumAddress(addr1) || !is.ethereumAddress(addr2)) {\r\n    return false\r\n  }\r\n  return addr1.toLowerCase() === addr2.toLowerCase()\r\n\r\n}\r\n\r\nexport const collectionIdToEthAddress = (collectionId: number): string | null => {\r\n  validate.collectionId(collectionId)\r\n  return unsafeNormalizeEthereumAddress(\r\n    COLLECTION_ADDRESS_PREFIX +\r\n    string.DWORDHexString.fromNumber(collectionId)\r\n  )\r\n}\r\nexport const ethAddressToCollectionId = (address: string): number | null => {\r\n  validate.collectionAddress(address)\r\n  return string.DWORDHexString.toNumber(address.slice(-8))\r\n}\r\n\r\nexport const collectionIdAndTokenIdToNestingAddress = (collectionId: number, tokenId: number): string => {\r\n  validate.collectionId(collectionId)\r\n  validate.tokenId(tokenId)\r\n\r\n  return unsafeNormalizeEthereumAddress(\r\n    NESTING_PREFIX +\r\n    string.DWORDHexString.fromNumber(collectionId) +\r\n    string.DWORDHexString.fromNumber(tokenId)\r\n  )\r\n}\r\n\r\nexport const nestingAddressToCollectionIdAndTokenId = (address: string): { collectionId: number, tokenId: number } => {\r\n  validate.nestingAddress(address)\r\n  return {\r\n    collectionId: string.DWORDHexString.toNumber(address.slice(-16, -8)),\r\n    tokenId: string.DWORDHexString.toNumber(address.slice(-8)),\r\n  }\r\n}\r\n","import {base58, blake2b} from './imports'\r\nimport {DecodeSubstrateAddressResult, validate} from './index'\r\nimport {normalizeEthereumAddress} from './ethereum'\r\nimport {hexToU8a, u8aToHex} from './stringUtils'\r\nimport * as string from \"./stringUtils\";\r\n\r\nconst blake2AsU8a = (u8a: Uint8Array, dkLen: 8 | 16 | 32 | 48 | 64 = 32): Uint8Array => {\r\n  return blake2b(u8a, {dkLen})\r\n}\r\n\r\nconst u8aConcat = (u8as: readonly Uint8Array[]): Uint8Array => {\r\n  let offset = 0\r\n\r\n  let length = 0\r\n\r\n  for (let i = 0; i < u8as.length; i++) {\r\n    length += u8as[i].length\r\n  }\r\n\r\n  const result = new Uint8Array(length)\r\n\r\n  for (let i = 0; i < u8as.length; i++) {\r\n    result.set(u8as[i], offset)\r\n    offset += u8as[i].length\r\n  }\r\n\r\n  return result\r\n}\r\n\r\n// strToU8a('SS58PRE')\r\nconst SS58_PREFIX = new Uint8Array([83, 83, 53, 56, 80, 82, 69])\r\n\r\nconst sshash = (data: Uint8Array): Uint8Array => {\r\n  return blake2AsU8a(u8aConcat([SS58_PREFIX, data]), 64);\r\n}\r\n\r\nconst checkAddressChecksum = (decoded: Uint8Array): [boolean, number, number, number] => {\r\n  const ss58Length = (decoded[0] & 0b0100_0000) ? 2 : 1;\r\n  const ss58Decoded = ss58Length === 1\r\n    ? decoded[0]\r\n    : ((decoded[0] & 0x3f) << 2) | (decoded[1] >> 6) | ((decoded[1] & 0x3f) << 8);\r\n\r\n  // 32/33 bytes public + 2 bytes checksum + prefix\r\n  const isPublicKey = [34 + ss58Length, 35 + ss58Length].includes(decoded.length);\r\n  const length = decoded.length - (isPublicKey ? 2 : 1);\r\n\r\n  // calculate the hash and do the checksum byte checks\r\n  const hash = sshash(decoded.subarray(0, length));\r\n  const isValid = (decoded[0] & 0x80) === 0 && ![46, 47].includes(decoded[0]) && (\r\n    isPublicKey\r\n      ? decoded[decoded.length - 2] === hash[0] && decoded[decoded.length - 1] === hash[1]\r\n      : decoded[decoded.length - 1] === hash[0]\r\n  );\r\n\r\n  return [isValid, length, ss58Length, ss58Decoded];\r\n}\r\n\r\nexport const normalizeSubstrateAddress = (address: string, prefix: number = 42): string => {\r\n  return encodeSubstrateAddress(decodeSubstrateAddress(address).u8a, prefix)\r\n}\r\n\r\n\r\nexport function encodeSubstrateAddress (key: Uint8Array | string | bigint, ss58Format: number = 42): string {\r\n  const u8a :Uint8Array = typeof key === 'string'\r\n    ? hexToU8a(key)\r\n    : typeof key === 'bigint'\r\n      ? hexToU8a(key.toString(16))\r\n      : key\r\n\r\n  if (ss58Format < 0 || ss58Format > 16383 || [46, 47].includes(ss58Format)) {\r\n    throw new Error(`ss58Format is not valid, received ${typeof ss58Format} \"${ss58Format}\"`)\r\n  }\r\n\r\n  const allowedDecodedLengths = [1, 2, 4, 8, 32, 33]\r\n  if (!allowedDecodedLengths.includes(u8a.length)) {\r\n    throw new Error(`key length is not valid, received ${u8a.length}, valid values are ${allowedDecodedLengths.join(', ')}`)\r\n  }\r\n\r\n  const u8aPrefix = ss58Format < 64\r\n    ? new Uint8Array([ss58Format])\r\n    : new Uint8Array([\r\n      ((ss58Format & 0xfc) >> 2) | 0x40,\r\n      (ss58Format >> 8) | ((ss58Format & 0x03) << 6)\r\n    ])\r\n\r\n  const input = u8aConcat([u8aPrefix, u8a])\r\n\r\n  return base58.encode(\r\n    u8aConcat([\r\n      input,\r\n      sshash(input).subarray(0, [32, 33].includes(u8a.length) ? 2 : 1)\r\n    ])\r\n  );\r\n}\r\n\r\nexport function decodeSubstrateAddress (address: string, ignoreChecksum?: boolean, ss58Format: number = -1): DecodeSubstrateAddressResult {\r\n  let realError: Error | null = null\r\n\r\n  try {\r\n    const decoded = base58.decode(address);\r\n\r\n    const allowedEncodedLengths = [3, 4, 6, 10, 35, 36, 37, 38]\r\n\r\n    if (!allowedEncodedLengths.includes(decoded.length)) {\r\n      realError = new Error(`key length is not valid, decoded key length is ${decoded.length}, valid values are ${allowedEncodedLengths.join(', ')}`)\r\n      throw realError\r\n    }\r\n\r\n    const [isValid, endPos, ss58Length, ss58Decoded] = checkAddressChecksum(decoded)\r\n\r\n    if (!ignoreChecksum && !isValid) {\r\n      realError = new Error(`Invalid decoded address checksum`)\r\n      throw realError\r\n    }\r\n    if (![-1, ss58Decoded].includes(ss58Format)) {\r\n      realError = new Error(`Expected ss58Format ${ss58Format}, received ${ss58Decoded}`)\r\n      throw realError\r\n    }\r\n\r\n    const publicKey = decoded.slice(ss58Length, endPos)\r\n\r\n    const hex = u8aToHex(publicKey)\r\n    return {\r\n      u8a: publicKey,\r\n      hex,\r\n      bigint: BigInt(hex)\r\n    }\r\n  } catch (error) {\r\n    throw realError\r\n      ? realError\r\n      : new Error(`Decoding ${address}: ${(error as Error).message}`)\r\n  }\r\n}\r\n\r\ntype SubAddressObj = { Substrate: string }\r\nexport const compareSubstrateAddresses = (address1: string | SubAddressObj | object, address2: string | SubAddressObj | object): boolean => {\r\n  const addr1 = typeof address1 === 'string'\r\n    ? address1\r\n    : ((address1 as SubAddressObj).Substrate || (address1 as any).substrate) as string | undefined\r\n  const addr2 = typeof address2 === 'string'\r\n    ? address2\r\n    : ((address2 as SubAddressObj).Substrate || (address2 as any).substrate) as string | undefined\r\n\r\n  if (!addr1 || !addr2) {\r\n    return false\r\n  }\r\n\r\n  try {\r\n    const decoded1 = decodeSubstrateAddress(addr1)\r\n    const decoded2 = decodeSubstrateAddress(addr2)\r\n    return decoded1.bigint === decoded2.bigint\r\n  } catch(e) {\r\n    return false\r\n  }\r\n}\r\n\r\nexport const addressToEvm = (address: string, ignoreChecksum?: boolean): string => {\r\n  const truncated = decodeSubstrateAddress(address, ignoreChecksum).u8a.subarray(0, 20)\r\n  return normalizeEthereumAddress(u8aToHex(truncated))\r\n}\r\n\r\n// strToU8a('evm:')\r\nconst EVM_PREFIX_U8A = new Uint8Array([101, 118, 109, 58])\r\nexport const evmToAddress = (evmAddress: string, ss58Format: number = 42): string => {\r\n  validate.ethereumAddress(evmAddress)\r\n\r\n  const message = u8aConcat([EVM_PREFIX_U8A, hexToU8a(evmAddress)])\r\n\r\n  return encodeSubstrateAddress(blake2AsU8a(message), ss58Format)\r\n}\r\n","import {normalizeEthereumAddress} from \"./ethereum\";\r\nimport {normalizeSubstrateAddress} from \"./substrate\";\r\nimport {CrossAccountId} from \"../../types\";\r\nimport {is, mirror, normalize} from \"./index\";\r\n\r\nexport const guessAddressAndExtractItNormalizedSafe = (address: string | object): string | null => {\r\n  if (typeof address === 'object') {\r\n    if (is.substrateAddressObject(address)) return normalize.substrateAddress(address.Substrate)\r\n    else if (is.substrateAddressObjectUncapitalized(address)) return normalize.substrateAddress(address.substrate)\r\n    else if (is.ethereumAddressObject(address)) return normalizeEthereumAddress(address.Ethereum)\r\n    else if (is.ethereumAddressObjectUncapitalized(address)) return normalizeEthereumAddress(address.ethereum)\r\n    else return null\r\n  }\r\n  if (typeof address === 'string') {\r\n    if (is.substrateAddress(address)) return normalizeSubstrateAddress(address)\r\n    else if (is.ethereumAddress(address)) return normalizeEthereumAddress(address)\r\n    else return null\r\n  }\r\n\r\n  return null\r\n}\r\n\r\nexport const guessAddressAndExtractItNormalized = (address: string | object): string => {\r\n  const result = guessAddressAndExtractItNormalizedSafe(address)\r\n  if (!result) {\r\n    throw new Error(`Passed address is not a valid address string or object: ${JSON.stringify(address).slice(0, 100)}`)\r\n  }\r\n  return result\r\n}\r\n\r\nexport const addressToCrossAccountId = (address: string): CrossAccountId => {\r\n  if (is.substrateAddress(address)) {\r\n    return {Substrate: address}\r\n  } else if (is.ethereumAddress(address)) {\r\n    return {Ethereum: address}\r\n  }\r\n\r\n  throw new Error(`Passed address ${address} is not substrate nor ethereum address`)\r\n}\r\n\r\nexport const addressToCrossAccountIdNormalized = (address: string): CrossAccountId => {\r\n  if (is.substrateAddress(address)) {\r\n    return {Substrate: normalize.substrateAddress(address)}\r\n  } else if (is.ethereumAddress(address)) {\r\n    return {Ethereum: normalize.ethereumAddress(address)}\r\n  }\r\n\r\n  throw new Error(`Passed address ${address} is not substrate nor ethereum address`)\r\n}\r\n\r\nexport const substrateNormalizedWithMirrorIfEthereum = (address: string): string => {\r\n  const addressObject = addressToCrossAccountId(address)\r\n  return addressObject.Substrate\r\n    ? normalizeSubstrateAddress(addressObject.Substrate)\r\n    : mirror.ethereumToSubstrate(addressObject.Ethereum as string)\r\n}\r\n","import {COLLECTION_ADDRESS_PREFIX, NESTING_PREFIX} from './constants'\r\n\r\nimport {\r\n  addressToEvm, compareSubstrateAddresses,\r\n  decodeSubstrateAddress, encodeSubstrateAddress,\r\n  evmToAddress,\r\n  normalizeSubstrateAddress\r\n} from './substrate'\r\n\r\nimport {\r\n  collectionIdAndTokenIdToNestingAddress,\r\n  collectionIdToEthAddress, compareEthereumAddresses,\r\n  ethAddressToCollectionId,\r\n  nestingAddressToCollectionIdAndTokenId,\r\n  normalizeEthereumAddress\r\n} from './ethereum'\r\nimport {\r\n  CrossAccountId, CrossAccountIdUncapitalized,\r\n  EthAddressObj, EthAddressObjUncapitalized,\r\n  SubAddressObj, SubAddressObjUncapitalized,\r\n} from \"../../types\";\r\nimport {\r\n  substrateNormalizedWithMirrorIfEthereum,\r\n  addressToCrossAccountId, addressToCrossAccountIdNormalized,\r\n  guessAddressAndExtractItNormalized,\r\n  guessAddressAndExtractItNormalizedSafe\r\n} from \"./crossAccountId\";\r\n\r\nimport * as StringUtils from './stringUtils'\r\nimport * as algorithms from './imports'\r\nimport * as constants from './constants'\r\n\r\nexport {constants, algorithms, StringUtils}\r\n\r\nconst ETH_ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/\r\n\r\nexport type DecodeSubstrateAddressResult = {\r\n  u8a: Uint8Array,\r\n  hex: string,\r\n  bigint: bigint\r\n}\r\n\r\nexport const validate = {\r\n  substrateAddress: (address: string) => {\r\n    decodeSubstrateAddress(address)\r\n    return true\r\n  },\r\n  ethereumAddress: (address: string) => {\r\n    if (!is.ethereumAddress(address)) {\r\n      throw new Error(`address \"${address}\" is not valid ethereum address`)\r\n    }\r\n    return true\r\n  },\r\n  collectionAddress: (address: string) => {\r\n    if (!is.collectionAddress(address)) {\r\n      throw new Error(`address ${address} is not a collection address`)\r\n    }\r\n    return true\r\n  },\r\n  nestingAddress: (address: string) => {\r\n    if (!is.nestingAddress(address)) {\r\n      throw new Error(`address ${address} is not a nesting address`)\r\n    }\r\n    return true\r\n  },\r\n  collectionId: (collectionId: number) => {\r\n    if (!is.collectionId(collectionId)) {\r\n      throw new Error(`collectionId should be a number between 0 and 0xffffffff`)\r\n    }\r\n    return true\r\n  },\r\n  tokenId: (tokenId: number) => {\r\n    if (!is.tokenId(tokenId)) {\r\n      throw new Error(`collectionId should be a number between 0 and 0xffffffff`)\r\n    }\r\n    return true\r\n  },\r\n}\r\n\r\nexport const is = {\r\n  substrateAddress: (address: string): boolean => {\r\n    try {\r\n      decodeSubstrateAddress(address)\r\n      return true\r\n    } catch {\r\n      return false\r\n    }\r\n  },\r\n  ethereumAddress: (address: string): boolean => {\r\n    return typeof address === 'string' && address.length === 42 && !!address.match(ETH_ADDRESS_REGEX)\r\n  },\r\n\r\n  collectionAddress: (address: string): boolean => {\r\n    return is.ethereumAddress(address) && address.toLowerCase().startsWith(COLLECTION_ADDRESS_PREFIX)\r\n  },\r\n  nestingAddress: (address: string): boolean => {\r\n    return is.ethereumAddress(address) && address.toLowerCase().startsWith(NESTING_PREFIX)\r\n  },\r\n\r\n  collectionId: (collectionId: number): boolean => {\r\n    return !(typeof collectionId !== 'number' || isNaN(collectionId) || collectionId < 0 || collectionId > 0xffffffff)\r\n  },\r\n  tokenId: (tokenId: number): boolean => {\r\n    return !(typeof tokenId !== 'number' || isNaN(tokenId) || tokenId < 0 || tokenId > 0xffffffff)\r\n  },\r\n\r\n  crossAccountId(obj: any): obj is CrossAccountId {\r\n    return is.substrateAddressObject(obj) || is.ethereumAddressObject(obj)\r\n  },\r\n  crossAccountIdUncapitalized(obj: any): obj is CrossAccountIdUncapitalized {\r\n    return is.substrateAddressObjectUncapitalized(obj) || is.ethereumAddressObjectUncapitalized(obj)\r\n  },\r\n  substrateAddressObject(obj: any): obj is SubAddressObj {\r\n    return typeof obj === 'object' && typeof obj?.Substrate === 'string' && is.substrateAddress(obj.Substrate)\r\n  },\r\n  ethereumAddressObject(obj: any): obj is EthAddressObj {\r\n    return typeof obj === 'object' && typeof obj?.Ethereum === 'string' && is.ethereumAddress(obj.Ethereum)\r\n  },\r\n  substrateAddressObjectUncapitalized(obj: any): obj is SubAddressObjUncapitalized {\r\n    return typeof obj === 'object' && typeof obj?.substrate === 'string' && is.substrateAddress(obj.substrate)\r\n  },\r\n  ethereumAddressObjectUncapitalized(obj: any): obj is EthAddressObjUncapitalized {\r\n    return typeof obj === 'object' && typeof obj?.ethereum === 'string' && is.ethereumAddress(obj.ethereum)\r\n  },\r\n}\r\n\r\nexport const collection  = {\r\n  idToAddress: collectionIdToEthAddress,\r\n  addressToId: ethAddressToCollectionId,\r\n}\r\nexport const nesting = {\r\n  idsToAddress: collectionIdAndTokenIdToNestingAddress,\r\n  addressToIds: nestingAddressToCollectionIdAndTokenId,\r\n}\r\nexport const to = {\r\n  crossAccountId: addressToCrossAccountId,\r\n  crossAccountIdNormalized: addressToCrossAccountIdNormalized,\r\n  substrateNormalizedOrMirrorIfEthereum: substrateNormalizedWithMirrorIfEthereum,\r\n}\r\n\r\nexport const extract = {\r\n  normalizedAddressFromObject: guessAddressAndExtractItNormalized,\r\n  normalizedAddressFromObjectSafe: guessAddressAndExtractItNormalizedSafe,\r\n  crossAccountIdFromObject: (obj: any): CrossAccountId => {\r\n    return addressToCrossAccountId(guessAddressAndExtractItNormalized(obj))\r\n  },\r\n  crossAccountIdFromObjectNormalized: (obj: any): CrossAccountId => {\r\n    return addressToCrossAccountId(guessAddressAndExtractItNormalized(obj))\r\n  },\r\n}\r\n\r\nexport const mirror = {\r\n  substrateToEthereum: addressToEvm,\r\n  ethereumToSubstrate: evmToAddress,\r\n}\r\n\r\nexport const normalize = {\r\n  substrateAddress: normalizeSubstrateAddress,\r\n  ethereumAddress: normalizeEthereumAddress,\r\n}\r\n\r\nexport const compare = {\r\n  substrateAddresses: compareSubstrateAddresses,\r\n  ethereumAddresses: compareEthereumAddresses,\r\n}\r\n\r\nexport const substrate = {\r\n  encode: encodeSubstrateAddress,\r\n  decode: decodeSubstrateAddress,\r\n  compare: compareSubstrateAddresses,\r\n}\r\n\r\nexport const Address = {\r\n  constants,\r\n  is,\r\n  validate,\r\n  collection,\r\n  nesting,\r\n  to,\r\n  extract,\r\n  mirror,\r\n  normalize,\r\n  compare,\r\n  substrate,\r\n  algorithms,\r\n  StringUtils,\r\n}\r\n"],"mappings":"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","names":[]}