{"version":3,"file":"bin-BAoS4qtm.mjs","names":[],"sources":["../src/common/data/basex-secure.ts","../src/common/data/bin.ts"],"sourcesContent":["/* scure-base - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\nimport { stringToUInt8Array, Uint8ArrayToString } from './bin'\n\n// Utilities\n/**\n * @__NO_SIDE_EFFECTS__\n */\nexport function assertNumber(n: number) {\n  if (!Number.isSafeInteger(n)) throw new Error(`Wrong integer: ${n}`)\n}\nexport interface Coder<F, T> {\n  encode(from: F): T\n  decode(to: T): F\n}\n\nexport interface BytesCoder extends Coder<Uint8Array, string> {\n  encode: (data: Uint8Array) => string\n  decode: (str: string) => Uint8Array\n}\n\nfunction isBytes(a: unknown): a is Uint8Array {\n  return (\n    a instanceof Uint8Array ||\n    (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array')\n  )\n}\n\n// TODO: some recusive type inference so it would check correct order of input/output inside rest?\n// like <string, number>, <number, bytes>, <bytes, float>\nexport type BaseXChain = [Coder<any, any>, ...Coder<any, any>[]]\n// Extract info from Coder type\nexport type BaseXInput<F> = F extends Coder<infer T, any> ? T : never\nexport type BaseXOutput<F> = F extends Coder<any, infer T> ? T : never\n// Generic function for arrays\nexport type BaseXFirst<T> = T extends [infer U, ...any[]] ? U : never\nexport type BaseXLast<T> = T extends [...any[], infer U] ? U : never\nexport type BaseXTail<T> = T extends [any, ...infer U] ? U : never\n\nexport type BaseXAsChain<C extends BaseXChain, Rest = BaseXTail<C>> = {\n  // C[K] = Coder<Input<C[K]>, Input<Rest[k]>>\n  [K in keyof C]: Coder<BaseXInput<C[K]>, BaseXInput<K extends keyof Rest ? Rest[K] : any>>\n}\n\n// Publicly visible aliases prefixed with BaseX for clearer documentation\n// Remove old alias leftovers (we renamed core types to BaseX-prefixed names).\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction chain<T extends BaseXChain & BaseXAsChain<T>>(...args: T): Coder<BaseXInput<BaseXFirst<T>>, BaseXOutput<BaseXLast<T>>> {\n  const id = (a: any) => a\n  // Wrap call in closure so JIT can inline calls\n  const wrap = (a: any, b: any) => (c: any) => a(b(c))\n  // Construct chain of args[-1].encode(args[-2].encode([...]))\n  const encode = args.map((x) => x.encode).reduceRight(wrap, id)\n  // Construct chain of args[0].decode(args[1].decode(...))\n  const decode = args.map((x) => x.decode).reduce(wrap, id)\n  return { encode, decode }\n}\n\nexport type BaseXAlphabet = string[] | string\n/**\n * Encodes integer radix representation to array of strings using alphabet and back\n * @__NO_SIDE_EFFECTS__\n */\nfunction alphabet(alphabet: BaseXAlphabet): Coder<number[], string[]> {\n  return {\n    encode: (digits: number[]) => {\n      if (!Array.isArray(digits) || (digits.length && typeof digits[0] !== 'number'))\n        throw new Error('alphabet.encode input should be an array of numbers')\n      return digits.map((i) => {\n        assertNumber(i)\n        if (i < 0 || i >= alphabet.length)\n          throw new Error(`Digit index outside alphabet: ${i} (alphabet: ${alphabet.length})`)\n        return alphabet[i]!\n      })\n    },\n    decode: (input: string[]) => {\n      if (!Array.isArray(input) || (input.length && typeof input[0] !== 'string'))\n        throw new Error('alphabet.decode input should be array of strings')\n      return input.map((letter) => {\n        if (typeof letter !== 'string')\n          throw new Error(`alphabet.decode: not string element=${letter}`)\n        const index = alphabet.indexOf(letter)\n        if (index === -1) throw new Error(`Unknown letter: \"${letter}\". Allowed: ${alphabet}`)\n        return index\n      })\n    },\n  }\n}\n// Alias exported after Alphabet is declared (kept only for backwards compat if needed)\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction join(separator = ''): Coder<string[], string> {\n  if (typeof separator !== 'string') throw new Error('join separator should be string')\n  return {\n    encode: (from) => {\n      if (!Array.isArray(from) || (from.length && typeof from[0] !== 'string'))\n        throw new Error('join.encode input should be array of strings')\n      for (let i of from)\n        if (typeof i !== 'string') throw new Error(`join.encode: non-string input=${i}`)\n      return from.join(separator)\n    },\n    decode: (to) => {\n      if (typeof to !== 'string') throw new Error('join.decode input should be string')\n      return to.split(separator)\n    },\n  }\n}\n\n/**\n * Pad strings array so it has integer number of bits\n * @__NO_SIDE_EFFECTS__\n */\nfunction padding(bits: number, chr = '='): Coder<string[], string[]> {\n  assertNumber(bits)\n  if (typeof chr !== 'string') throw new Error('padding chr should be string')\n  return {\n    encode(data: string[]): string[] {\n      if (!Array.isArray(data) || (data.length && typeof data[0] !== 'string'))\n        throw new Error('padding.encode input should be array of strings')\n      for (let i of data)\n        if (typeof i !== 'string') throw new Error(`padding.encode: non-string input=${i}`)\n      while ((data.length * bits) % 8) data.push(chr)\n      return data\n    },\n    decode(input: string[]): string[] {\n      if (!Array.isArray(input) || (input.length && typeof input[0] !== 'string'))\n        throw new Error('padding.encode input should be array of strings')\n      for (let i of input)\n        if (typeof i !== 'string') throw new Error(`padding.decode: non-string input=${i}`)\n      let end = input.length\n      if ((end * bits) % 8)\n        throw new Error('Invalid padding: string should have whole number of bytes')\n      for (; end > 0 && input[end - 1] === chr; end--) {\n        if (!(((end - 1) * bits) % 8))\n          throw new Error('Invalid padding: string has too much padding')\n      }\n      return input.slice(0, end)\n    },\n  }\n}\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction normalize<T>(fn: (val: T) => T): Coder<T, T> {\n  if (typeof fn !== 'function') throw new Error('normalize fn should be function')\n  return { encode: (from: T) => from, decode: (to: T) => fn(to) }\n}\n\n/**\n * Slow: O(n^2) time complexity\n * @__NO_SIDE_EFFECTS__\n */\nfunction convertRadix(data: number[], from: number, to: number): number[] {\n  // base 1 is impossible\n  if (from < 2) throw new Error(`convertRadix: wrong from=${from}, base cannot be less than 2`)\n  if (to < 2) throw new Error(`convertRadix: wrong to=${to}, base cannot be less than 2`)\n  if (!Array.isArray(data)) throw new Error('convertRadix: data should be array')\n  if (!data.length) return []\n  let pos = 0\n  const res = []\n  const digits = Array.from(data)\n  digits.forEach((d) => {\n    assertNumber(d)\n    if (d < 0 || d >= from) throw new Error(`Wrong integer: ${d}`)\n  })\n  while (true) {\n    let carry = 0\n    let done = true\n    for (let i = pos; i < digits.length; i++) {\n      const digit = digits[i]!\n      const digitBase = from * carry + digit\n      if (\n        !Number.isSafeInteger(digitBase) ||\n        (from * carry) / from !== carry ||\n        digitBase - digit !== from * carry\n      ) {\n        throw new Error('convertRadix: carry overflow')\n      }\n      carry = digitBase % to\n      const rounded = Math.floor(digitBase / to)\n      digits[i] = rounded\n      if (!Number.isSafeInteger(rounded) || rounded * to + carry !== digitBase)\n        throw new Error('convertRadix: carry overflow')\n      if (!done) continue\n      else if (!rounded) pos = i\n      else done = false\n    }\n    res.push(carry)\n    if (done) break\n  }\n  for (let i = 0; i < data.length - 1 && data[i] === 0; i++) res.push(0)\n  return res.reverse()\n}\n\nconst gcd = /* @__NO_SIDE_EFFECTS__ */ (a: number, b: number): number => (!b ? a : gcd(b, a % b))\nconst radix2carry = /*@__NO_SIDE_EFFECTS__ */ (from: number, to: number) =>\n  from + (to - gcd(from, to))\n/**\n * Implemented with numbers, because BigInt is 5x slower\n * @__NO_SIDE_EFFECTS__\n */\nfunction convertRadix2(data: number[], from: number, to: number, padding: boolean): number[] {\n  if (!Array.isArray(data)) throw new Error('convertRadix2: data should be array')\n  if (from <= 0 || from > 32) throw new Error(`convertRadix2: wrong from=${from}`)\n  if (to <= 0 || to > 32) throw new Error(`convertRadix2: wrong to=${to}`)\n  if (radix2carry(from, to) > 32) {\n    throw new Error(\n      `convertRadix2: carry overflow from=${from} to=${to} carryBits=${radix2carry(from, to)}`\n    )\n  }\n  let carry = 0\n  let pos = 0 // bitwise position in current element\n  const mask = 2 ** to - 1\n  const res: number[] = []\n  for (const n of data) {\n    assertNumber(n)\n    if (n >= 2 ** from) throw new Error(`convertRadix2: invalid data word=${n} from=${from}`)\n    carry = (carry << from) | n\n    if (pos + from > 32) throw new Error(`convertRadix2: carry overflow pos=${pos} from=${from}`)\n    pos += from\n    for (; pos >= to; pos -= to) res.push(((carry >> (pos - to)) & mask) >>> 0)\n    carry &= 2 ** pos - 1 // clean carry, otherwise it will cause overflow\n  }\n  carry = (carry << (to - pos)) & mask\n  if (!padding && pos >= from) throw new Error('Excess padding')\n  if (!padding && carry) throw new Error(`Non-zero padding: ${carry}`)\n  if (padding && pos > 0) res.push(carry >>> 0)\n  return res\n}\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction radix(num: number): Coder<Uint8Array, number[]> {\n  assertNumber(num)\n  return {\n    encode: (bytes: Uint8Array) => {\n      if (!isBytes(bytes)) throw new Error('radix.encode input should be Uint8Array')\n      return convertRadix(Array.from(bytes), 2 ** 8, num)\n    },\n    decode: (digits: number[]) => {\n      if (!Array.isArray(digits) || (digits.length && typeof digits[0] !== 'number'))\n        throw new Error('radix.decode input should be array of numbers')\n      return Uint8Array.from(convertRadix(digits, num, 2 ** 8))\n    },\n  }\n}\n\n/**\n * If both bases are power of same number (like `2**8 <-> 2**64`),\n * there is a linear algorithm. For now we have implementation for power-of-two bases only.\n * @__NO_SIDE_EFFECTS__\n */\nfunction radix2(bits: number, revPadding = false): Coder<Uint8Array, number[]> {\n  assertNumber(bits)\n  if (bits <= 0 || bits > 32) throw new Error('radix2: bits should be in (0..32]')\n  if (radix2carry(8, bits) > 32 || radix2carry(bits, 8) > 32)\n    throw new Error('radix2: carry overflow')\n  return {\n    encode: (bytes: Uint8Array) => {\n      if (!isBytes(bytes)) throw new Error('radix2.encode input should be Uint8Array')\n      return convertRadix2(Array.from(bytes), 8, bits, !revPadding)\n    },\n    decode: (digits: number[]) => {\n      if (!Array.isArray(digits) || (digits.length && typeof digits[0] !== 'number'))\n        throw new Error('radix2.decode input should be array of numbers')\n      return Uint8Array.from(convertRadix2(digits, bits, 8, revPadding))\n    },\n  }\n}\n\ntype ArgumentTypes<F extends Function> = F extends (...args: infer A) => any ? A : never\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction unsafeWrapper<T extends (...args: any) => any>(fn: T) {\n  if (typeof fn !== 'function') throw new Error('unsafeWrapper fn should be function')\n  return function (...args: ArgumentTypes<T>): ReturnType<T> | void {\n    try {\n      return fn.apply(null, args)\n    } catch (e) { }\n  }\n}\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction checksum(\n  len: number,\n  fn: (data: Uint8Array) => Uint8Array\n): Coder<Uint8Array, Uint8Array> {\n  assertNumber(len)\n  if (typeof fn !== 'function') throw new Error('checksum fn should be function')\n  return {\n    encode(data: Uint8Array) {\n      if (!isBytes(data)) throw new Error('checksum.encode: input should be Uint8Array')\n      const checksum = fn(data).slice(0, len)\n      const res = new Uint8Array(data.length + len)\n      res.set(data)\n      res.set(checksum, data.length)\n      return res\n    },\n    decode(data: Uint8Array) {\n      if (!isBytes(data)) throw new Error('checksum.decode: input should be Uint8Array')\n      const payload = data.slice(0, -len)\n      const newChecksum = fn(payload).slice(0, len)\n      const oldChecksum = data.slice(-len)\n      for (let i = 0; i < len; i++)\n        if (newChecksum[i] !== oldChecksum[i]) throw new Error('Invalid checksum')\n      return payload\n    },\n  }\n}\n\n// prettier-ignore\nexport const utils = {\n  alphabet, chain, checksum, convertRadix, convertRadix2, radix, radix2, join, padding,\n}\n\n// RFC 4648 aka RFC 3548\n// ---------------------\nexport const base16: BytesCoder = /* @__PURE__ */ chain(\n  radix2(4),\n  alphabet('0123456789ABCDEF'),\n  join('')\n)\nexport const base32: BytesCoder = /* @__PURE__ */ chain(\n  radix2(5),\n  alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'),\n  padding(5),\n  join('')\n)\nexport const base32nopad: BytesCoder = /* @__PURE__ */ chain(\n  radix2(5),\n  alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'),\n  join('')\n)\nexport const base32hex: BytesCoder = /* @__PURE__ */ chain(\n  radix2(5),\n  alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'),\n  padding(5),\n  join('')\n)\nexport const base32hexnopad: BytesCoder = /* @__PURE__ */ chain(\n  radix2(5),\n  alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'),\n  join('')\n)\nexport const base32agnoster: BytesCoder = /* @__PURE__ */ chain(\n  radix2(5),\n  alphabet('0123456789abcdefghjkmnpqrtuvwxyz'),\n  join('')\n)\nexport const base32crockford: BytesCoder = /* @__PURE__ */ chain(\n  radix2(5),\n  alphabet('0123456789ABCDEFGHJKMNPQRSTVWXYZ'),\n  join(''),\n  normalize((s: string) => s.toUpperCase().replace(/O/g, '0').replace(/[IL]/g, '1'))\n)\nexport const base64: BytesCoder = /* @__PURE__ */ chain(\n  radix2(6),\n  alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'),\n  padding(6),\n  join('')\n)\nexport const base64nopad: BytesCoder = /* @__PURE__ */ chain(\n  radix2(6),\n  alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'),\n  join('')\n)\nexport const base64url: BytesCoder = /* @__PURE__ */ chain(\n  radix2(6),\n  alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'),\n  padding(6),\n  join('')\n)\nexport const base64urlnopad: BytesCoder = /* @__PURE__ */ chain(\n  radix2(6),\n  alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'),\n  join('')\n)\n\n// base58 code\n// -----------\nconst genBase58 = (abc: string) => chain(radix(58), alphabet(abc), join(''))\n\nexport const base58: BytesCoder = /* @__PURE__ */ genBase58(\n  '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n)\nexport const base58flickr: BytesCoder = /* @__PURE__ */ genBase58(\n  '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n)\nexport const base58xrp: BytesCoder = /* @__PURE__ */ genBase58(\n  'rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz'\n)\n\n// xmr ver is done in 8-byte blocks (which equals 11 chars in decoding). Last (non-full) block padded with '1' to size in XMR_BLOCK_LEN.\n// Block encoding significantly reduces quadratic complexity of base58.\n\n// Data len (index) -> encoded block len\nconst XMR_BLOCK_LEN = [0, 2, 3, 5, 6, 7, 9, 10, 11]\nexport const base58xmr: BytesCoder = {\n  encode(data: Uint8Array) {\n    let res = ''\n    for (let i = 0; i < data.length; i += 8) {\n      const block = data.subarray(i, i + 8)\n      res += base58.encode(block).padStart(XMR_BLOCK_LEN[block.length]!, '1')\n    }\n    return res\n  },\n  decode(str: string) {\n    let res: number[] = []\n    for (let i = 0; i < str.length; i += 11) {\n      const slice = str.slice(i, i + 11)\n      const blockLen = XMR_BLOCK_LEN.indexOf(slice.length)\n      const block = base58.decode(slice)\n      for (let j = 0; j < block.length - blockLen; j++) {\n        if (block[j] !== 0) throw new Error('base58xmr: wrong padding')\n      }\n      res = res.concat(Array.from(block.slice(block.length - blockLen)))\n    }\n    return Uint8Array.from(res)\n  },\n}\n\nexport const createBase58check = (sha256: (data: Uint8Array) => Uint8Array): BytesCoder =>\n  chain(\n    checksum(4, (data) => sha256(sha256(data))),\n    base58\n  )\n// legacy export, bad name\nexport const base58check = createBase58check\n\n// Bech32 code\n// -----------\nexport interface Bech32Decoded<Prefix extends string = string> {\n  prefix: Prefix\n  words: number[]\n}\nexport interface Bech32DecodedWithArray<Prefix extends string = string> {\n  prefix: Prefix\n  words: number[]\n  bytes: Uint8Array\n}\n\nconst BECH_ALPHABET: Coder<number[], string> = /* @__PURE__ */ chain(\n  alphabet('qpzry9x8gf2tvdw0s3jn54khce6mua7l'),\n  join('')\n)\n\nconst POLYMOD_GENERATORS = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3]\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction bech32Polymod(pre: number): number {\n  const b = pre >> 25\n  let chk = (pre & 0x1ffffff) << 5\n  for (let i = 0; i < POLYMOD_GENERATORS.length; i++) {\n    if (((b >> i) & 1) === 1) chk ^= POLYMOD_GENERATORS[i]!\n  }\n  return chk\n}\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction bechChecksum(prefix: string, words: number[], encodingConst = 1): string {\n  const len = prefix.length\n  let chk = 1\n  for (let i = 0; i < len; i++) {\n    const c = prefix.charCodeAt(i)\n    if (c < 33 || c > 126) throw new Error(`Invalid prefix (${prefix})`)\n    chk = bech32Polymod(chk) ^ (c >> 5)\n  }\n  chk = bech32Polymod(chk)\n  for (let i = 0; i < len; i++) chk = bech32Polymod(chk) ^ (prefix.charCodeAt(i) & 0x1f)\n  for (let v of words) chk = bech32Polymod(chk) ^ v\n  for (let i = 0; i < 6; i++) chk = bech32Polymod(chk)\n  chk ^= encodingConst\n  return BECH_ALPHABET.encode(convertRadix2([chk % 2 ** 30], 30, 5, false))\n}\n\nexport interface Bech32 {\n  encode<Prefix extends string>(\n    prefix: Prefix,\n    words: number[] | Uint8Array,\n    limit?: number | false\n  ): `${Lowercase<Prefix>}1${string}`\n  decode<Prefix extends string>(\n    str: `${Prefix}1${string}`,\n    limit?: number | false\n  ): Bech32Decoded<Prefix>\n  encodeFromBytes(prefix: string, bytes: Uint8Array): string\n  decodeToBytes(str: string): Bech32DecodedWithArray\n  decodeUnsafe(str: string, limit?: number | false): void | Bech32Decoded<string>\n  fromWords(to: number[]): Uint8Array\n  fromWordsUnsafe(to: number[]): void | Uint8Array\n  toWords(from: Uint8Array): number[]\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction genBech32(encoding: 'bech32' | 'bech32m'): Bech32 {\n  const ENCODING_CONST = encoding === 'bech32' ? 1 : 0x2bc830a3\n  const _words = radix2(5)\n  const fromWords = _words.decode\n  const toWords = _words.encode\n  const fromWordsUnsafe = unsafeWrapper(fromWords)\n\n  function encode<Prefix extends string>(\n    prefix: Prefix,\n    words: number[] | Uint8Array,\n    limit: number | false = 90\n  ): `${Lowercase<Prefix>}1${string}` {\n    if (typeof prefix !== 'string')\n      throw new Error(`bech32.encode prefix should be string, not ${typeof prefix}`)\n    if (words instanceof Uint8Array) words = Array.from(words)\n    if (!Array.isArray(words) || (words.length && typeof words[0] !== 'number'))\n      throw new Error(`bech32.encode words should be array of numbers, not ${typeof words}`)\n    if (prefix.length === 0) throw new TypeError(`Invalid prefix length ${prefix.length}`)\n    const actualLength = prefix.length + 7 + words.length\n    if (limit !== false && actualLength > limit)\n      throw new TypeError(`Length ${actualLength} exceeds limit ${limit}`)\n    const lowered = prefix.toLowerCase()\n    const sum = bechChecksum(lowered, words, ENCODING_CONST)\n    return `${lowered}1${BECH_ALPHABET.encode(words)}${sum}` as `${Lowercase<Prefix>}1${string}`\n  }\n\n  function decode<Prefix extends string>(\n    str: `${Prefix}1${string}`,\n    limit?: number | false\n  ): Bech32Decoded<Prefix>\n  function decode(str: string, limit?: number | false): Bech32Decoded\n  function decode(str: string, limit: number | false = 90): Bech32Decoded {\n    if (typeof str !== 'string')\n      throw new Error(`bech32.decode input should be string, not ${typeof str}`)\n    if (str.length < 8 || (limit !== false && str.length > limit))\n      throw new TypeError(`Wrong string length: ${str.length} (${str}). Expected (8..${limit})`)\n    // don't allow mixed case\n    const lowered = str.toLowerCase()\n    if (str !== lowered && str !== str.toUpperCase())\n      throw new Error(`String must be lowercase or uppercase`)\n    const sepIndex = lowered.lastIndexOf('1')\n    if (sepIndex === 0 || sepIndex === -1)\n      throw new Error(`Letter \"1\" must be present between prefix and data only`)\n    const prefix = lowered.slice(0, sepIndex)\n    const data = lowered.slice(sepIndex + 1)\n    if (data.length < 6) throw new Error('Data must be at least 6 characters long')\n    const words = BECH_ALPHABET.decode(data).slice(0, -6)\n    const sum = bechChecksum(prefix, words, ENCODING_CONST)\n    if (!data.endsWith(sum)) throw new Error(`Invalid checksum in ${str}: expected \"${sum}\"`)\n    return { prefix, words }\n  }\n\n  const decodeUnsafe = unsafeWrapper(decode)\n\n  function decodeToBytes(str: string): Bech32DecodedWithArray {\n    const { prefix, words } = decode(str, false)\n    return { prefix, words, bytes: fromWords(words) }\n  }\n\n  function encodeFromBytes(prefix: string, bytes: Uint8Array) {\n    return encode(prefix, toWords(bytes))\n  }\n\n  return {\n    encode,\n    decode,\n    encodeFromBytes,\n    decodeToBytes,\n    decodeUnsafe,\n    fromWords,\n    fromWordsUnsafe,\n    toWords,\n  }\n}\n\nexport const bech32: Bech32 = /* @__PURE__ */ genBech32('bech32')\nexport const bech32m: Bech32 = /* @__PURE__ */ genBech32('bech32m')\n\nexport const utf8: BytesCoder = {\n  encode: (data) => Uint8ArrayToString(data),\n  decode: (str) => stringToUInt8Array(str),\n}\n\nexport const hex: BytesCoder = /* @__PURE__ */ chain(\n  radix2(4),\n  alphabet('0123456789abcdef'),\n  join(''),\n  normalize((s: string) => {\n    if (typeof s !== 'string' || s.length % 2)\n      throw new TypeError(`hex.decode: expected string, got ${typeof s} with length ${s.length}`)\n    return s.toLowerCase()\n  })\n)\n\n// prettier-ignore\nconst CODERS = {\n  utf8, hex, base16, base32, base64, base64url, base58, base58xmr\n}\ntype CoderType = keyof typeof CODERS\nconst coderTypeError =\n  'Invalid encoding type. Available types: utf8, hex, base16, base32, base64, base64url, base58, base58xmr'\n\nexport const bytesToString = (type: CoderType, bytes: Uint8Array): string => {\n  if (typeof type !== 'string' || !CODERS.hasOwnProperty(type)) throw new TypeError(coderTypeError)\n  if (!isBytes(bytes)) throw new TypeError('bytesToString() expects Uint8Array')\n  return CODERS[type].encode(bytes)\n}\nexport const str = bytesToString // as in python, but for bytes only\n\nexport const stringToBytes = (type: CoderType, str: string): Uint8Array => {\n  if (!CODERS.hasOwnProperty(type)) throw new TypeError(coderTypeError)\n  if (typeof str !== 'string') throw new TypeError('stringToBytes() expects string')\n  return CODERS[type].decode(str)\n}\nexport const bytes = stringToBytes;\n\n","/* eslint-disable node/prefer-global/buffer */\n/* eslint-disable no-control-regex */\n/* eslint-disable prefer-spread */\n\nimport { base64, base64nopad, base64urlnopad } from './basex-secure'\nimport type { BinInput } from './bin-types'\nimport { jsonStringifySafe } from './json'\n\n\n// From https://github.com/dmonad/lib0/blob/main/string.js#L44\n\nexport function _encodeUtf8Polyfill(str: string): Uint8Array {\n  const encodedString = unescape(encodeURIComponent(str))\n  const len = encodedString.length\n  const buf = new Uint8Array(len)\n  for (let i = 0; i < len; i++)\n    buf[i] = encodedString.codePointAt(i) || 0\n  return buf\n}\n\nexport function _decodeUtf8Polyfill(buf: Uint8Array<ArrayBufferLike>) {\n  let remainingLen = buf.length\n  let encodedString = ''\n  let bufPos = 0\n  while (remainingLen > 0) {\n    const nextLen = remainingLen < 10000 ? remainingLen : 10000\n    const bytes = buf.subarray(bufPos, bufPos + nextLen)\n    bufPos += nextLen\n    // Starting with ES5.1 we can supply a generic array-like object as arguments\n    // @ts-expect-error xxx\n    encodedString += String.fromCodePoint.apply(null, bytes)\n    remainingLen -= nextLen\n  }\n  return decodeURIComponent(escape(encodedString))\n}\n\nlet _textEncoder: (data: string) => Uint8Array\n\nexport function stringToUInt8Array(text: string): Uint8Array {\n  if (_textEncoder == null) {\n    _textEncoder = _encodeUtf8Polyfill\n    if (typeof TextEncoder !== 'undefined') {\n      const encoder = new TextEncoder()\n      _textEncoder = data => encoder.encode(data)\n    }\n  }\n  return _textEncoder(text.normalize('NFC'))\n}\n\nlet _textDecoder: (data: Uint8Array<ArrayBufferLike>) => string\n\nexport function Uint8ArrayToString(bin: Uint8Array): string {\n  if (_textDecoder == null) {\n    _textDecoder = _decodeUtf8Polyfill\n    if (typeof TextDecoder !== 'undefined') {\n      const decoder = new TextDecoder('utf-8', { ignoreBOM: true })\n      _textDecoder = data => decoder.decode(data)\n    }\n  }\n  return _textDecoder(bin).normalize('NFC')\n}\n\nexport function toArrayBuffer(bin: BinInput): ArrayBuffer {\n  const b = toUint8Array(bin)\n  if (b.buffer.byteLength === b.byteLength)\n    return b.buffer as ArrayBuffer\n  return b.buffer.slice(b.byteOffset, b.byteOffset + b.byteLength) as ArrayBuffer\n}\n\nexport function toUint8Array(data: BinInput): Uint8Array {\n  if (data instanceof ArrayBuffer)\n    return new Uint8Array(data)\n  if (typeof data === 'string')\n    return stringToUInt8Array(data)\n  if (data.length)\n    return new Uint8Array(data)\n  return data as Uint8Array\n}\n\n/**\n * Ensures a Uint8Array is backed by a real ArrayBuffer (not SharedArrayBuffer).\n * This is needed for Web Crypto API compatibility which requires BufferSource with ArrayBuffer.\n */\nexport function ensureUint8Array(data: Uint8Array): Uint8Array<ArrayBuffer> {\n  // If it's already a regular Uint8Array backed by ArrayBuffer, return as-is\n  // otherwise trick: const buffer = u.slice().buffer\n  if (data.buffer instanceof ArrayBuffer) {\n    return data as Uint8Array<ArrayBuffer>\n  }\n  // Otherwise, create a new copy backed by ArrayBuffer\n  return new Uint8Array(data) as Uint8Array<ArrayBuffer>\n}\n\nexport function joinToUint8Array(...args: BinInput[] | BinInput[][]) {\n  let length = 0\n  const bins = args.flat(1).map((d) => {\n    const b = toUint8Array(d as BinInput)\n    length += b.length\n    return b\n  })\n  const bin = new Uint8Array(length)\n  let cursor = 0\n  for (const b of bins) {\n    bin.set(b, cursor)\n    cursor += b.length\n  }\n  return bin\n}\n\nexport function toHex(bin: BinInput): string {\n  if (typeof Buffer !== 'undefined')\n    return Buffer.from(toUint8Array(bin)).toString('hex')\n  const h = '0123456789abcdef'\n  let s = ''\n  for (const v of [...toUint8Array(bin)])\n    s += h[v >> 4] + h[v & 15]\n  return s\n}\n\nexport function fromHex(hexString: string): Uint8Array {\n  return Uint8Array.from(\n    hexString.match(/.{1,2}/g)!.map(byte => Number.parseInt(byte, 16)),\n  )\n}\n\n// Learn about Base64 in browsers: https://web.dev/articles/base64-encoding\n\n/** Regular base64 */\nexport function toBase64(bin: BinInput, stripPadding = false): string {\n  const bytes = toUint8Array(bin)\n  let sb = ''\n  if (typeof Buffer !== 'undefined') {\n    sb = Buffer.from(bytes).toString('base64')\n    if (stripPadding)\n      return sb.replace(/\\=/g, '')\n    return sb\n  }\n  if (stripPadding) {\n    return base64nopad.encode(bytes)\n  }\n  return base64.encode(bytes)\n}\n\n/** Converts `+` -> `-` and `/` -> `_`. Always strips `=` */\nexport function toBase64Url(bin: BinInput): string {\n  const bytes = toUint8Array(bin)\n  if (typeof Buffer !== 'undefined')\n    return Buffer.from(bytes).toString('base64url').replace(/\\=/g, '')\n  return base64urlnopad.encode(bytes)\n}\n\n/** Also parses toBase64Url encoded strings. */\nexport function fromBase64(s: string): Uint8Array {\n  s = s.replace(/\\-/g, '+').replace(/\\_/g, '/')\n  if (typeof Buffer !== 'undefined') {\n    const buf = Buffer.from(s, 'base64')\n    return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength)\n  }\n  if (typeof atob !== 'undefined') {\n    const a = atob(s)\n    const bytes = new Uint8Array(a.length)\n    for (let i = 0; i < a.length; i++)\n      bytes[i] = a.charCodeAt(i)\n    return bytes\n  }\n  return base64.decode(s)\n}\n\n/** Also parses toBase64Url encoded strings. */\nexport function fromBase64String(s: string): string {\n  return Uint8ArrayToString(fromBase64(s))\n}\n\n/** Compare contents of binary arrays */\nexport function equalBinary(\n  a: ArrayBuffer | Uint8Array,\n  b: ArrayBuffer | Uint8Array,\n): boolean {\n  if (a.byteLength !== b.byteLength)\n    return false\n  const aa = toUint8Array(a)\n  const bb = toUint8Array(b)\n  for (let i = 0; i < aa.length; i++) {\n    if (aa[i] !== bb[i])\n      return false\n  }\n  return true\n}\n\nexport function jsonToUint8Array(json: any): Uint8Array | never {\n  return stringToUInt8Array(jsonStringifySafe(json))\n}\n\nexport function Uint8ArrayToJson<T = any>(data: Uint8Array): T | never {\n  return JSON.parse(Uint8ArrayToString(data))\n}\n\n// https://gist.github.com/igorgatis/d294fe714a4f523ac3a3\nexport function Uint8ArrayToHexDump(\n  buffer: Uint8Array | ArrayBuffer | string | Array<number>,\n  blockSize?: number,\n) {\n  if (typeof buffer === 'string') {\n    // log(\"buffer is string\")\n    // do nothing\n  }\n  else if (buffer instanceof ArrayBuffer && buffer.byteLength !== undefined) {\n    // log(\"buffer is ArrayBuffer\")\n    buffer = String.fromCharCode.apply(String, [].slice.call(new Uint8Array(buffer)))\n  }\n  else if (Array.isArray(buffer)) {\n    // log(\"buffer is Array\")\n    buffer = String.fromCharCode.apply(String, buffer)\n  }\n  else if (buffer.constructor === Uint8Array) {\n    // log(\"buffer is Uint8Array\")\n    buffer = String.fromCharCode.apply(String, [].slice.call(buffer))\n  }\n  else {\n    // log(\"Error: buffer is unknown...\")\n    return false\n  }\n\n  blockSize = blockSize || 16\n  const lines = []\n  const hex = '0123456789abcdef' // '0123456789ABCDEF'\n  for (let b = 0; b < buffer.length; b += blockSize) {\n    const block = buffer.slice(b, Math.min(b + blockSize, buffer.length))\n    const addr = (`0000${b.toString(16)}`).slice(-4)\n    let codes = block\n      .split('')\n      .map((ch: any) => {\n        const code = ch.charCodeAt(0)\n        return ` ${hex[(0xF0 & code) >> 4]}${hex[0x0F & code]}`\n      })\n      .join('')\n    codes += '   '.repeat(blockSize - block.length)\n    let chars = block.replace(/[\\x00-\\x1F\\x20\\x7F-\\xA0\\xAD]/g, '.')\n    chars += ' '.repeat(blockSize - block.length)\n    lines.push(`${addr} ${codes}  ${chars}`)\n  }\n  return lines.join('\\n')\n}\n"],"mappings":"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"}