{"version":3,"sources":["../src/utils/assertions.ts","../src/utils/array.ts","../src/utils/bigInt.ts","../src/utils/utxo.ts","../src/utils/object.ts","../src/utils/bytes.ts","../src/types/enums.ts","../src/models/collection.ts","../src/error.ts","../src/constants.ts"],"names":["min","max","tokenId","Network","AddressType"],"mappings":"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","file":"index.mjs","sourcesContent":["export type ErrorMessage = string | Error | (() => string);\n\n// biome-ignore lint/complexity/noBannedTypes: <explanation>\ntype Constructable = Function;\n\ntype JSPrimitive =\n  | \"string\"\n  | \"number\"\n  | \"bigint\"\n  | \"boolean\"\n  | \"symbol\"\n  | \"undefined\"\n  | \"object\"\n  | \"function\";\n\nexport function assert(condition: boolean, error: ErrorMessage): asserts condition {\n  if (condition) return;\n\n  let err: Error | undefined = undefined;\n  switch (typeof error) {\n    case \"string\":\n      err = new Error(error);\n      break;\n    case \"function\":\n      err = new Error(error());\n      break;\n    default:\n      err = error;\n  }\n\n  throw err;\n}\n\nexport function assertTypeOf<T>(obj: T, expected: JSPrimitive): asserts obj {\n  const type = typeof obj;\n\n  if (type !== expected) {\n    throw new Error(`Expected an object of type '${expected}', got '${type}'.`);\n  }\n}\n\nfunction getTypeName(value: unknown): string {\n  if (value === null) return \"null\";\n  const type = typeof value;\n\n  return type === \"object\" || type === \"function\"\n    ? Object.prototype.toString.call(value).slice(8, -1)\n    : type;\n}\n\nexport function assertInstanceOf<T>(obj: T, expected: Constructable): asserts obj {\n  const condition = obj instanceof expected;\n\n  if (!condition) {\n    throw new Error(`Expected an instance of '${expected.name}', got '${getTypeName(obj)}'.`);\n  }\n}\n\nexport function isEmpty<T>(target: T | null | undefined): target is undefined | null {\n  if (!target) return true;\n\n  return Array.isArray(target) ? target.length === 0 : Object.keys(target).length === 0;\n}\n\nexport function some<T>(target: T | null | undefined): target is T {\n  return !isEmpty(target);\n}\n\nexport function isTruthy<T>(value?: T): value is NonNullable<T> {\n  return !!value;\n}\n\nexport function isFalsy<T>(value?: T): value is undefined {\n  return !value;\n}\n\nexport function isUndefined(v: unknown): v is undefined {\n  return v === undefined || v === null || Number.isNaN(v);\n}\n\nexport function isDefined<T>(v: T | undefined): v is T {\n  return !isUndefined(v);\n}\n\nexport function hasKey(o: unknown, key: PropertyKey): boolean {\n  return Object.prototype.hasOwnProperty.call(o, key);\n}\n","import type { SortingDirection, SortingSelector } from \"../types\";\nimport { assert, isEmpty } from \"./assertions\";\n\ntype ObjectSelector<T> = (item: T) => T[keyof T];\n\n/**\n * Returns the first element of an array.\n * @param array\n * @throws an error if the array is empty.\n */\nexport function first(array: undefined): undefined;\nexport function first<T>(array: ArrayLike<T>): T;\nexport function first<T>(array: ArrayLike<T> | undefined): T | number | undefined {\n  if (!array) return undefined;\n  assert(array.length > 0, \"Empty array.\");\n\n  return array[0];\n}\n\n/**\n * Returns the last element of an array.\n * @param array\n * @throws an error if the array is empty.\n */\nexport function last(array: undefined): undefined;\nexport function last<T>(array: ArrayLike<T>): T;\nexport function last<T>(array: ArrayLike<T> | undefined): T | undefined {\n  if (!array) return undefined;\n  assert(array.length > 0, \"Empty array.\");\n\n  return at(array, -1);\n}\n\n/**\n * Returns the element at the specified index. Negative indices are counted from the end of the array.\n * @param array\n * @param index\n */\nexport function at(array: undefined, index: number): undefined;\nexport function at<T>(array: ArrayLike<T>, index: number): T;\nexport function at<T>(array: ArrayLike<T> | undefined, index: number): T | undefined {\n  const len = array?.length;\n  if (!len) return undefined;\n\n  if (index < 0) {\n    index += len;\n  }\n\n  return array[index];\n}\n\n/**\n * Check for duplicate elements using the equality operator\n */\nexport function hasDuplicates<T>(array: T[]): boolean {\n  return array.some((item, index) => {\n    return array.indexOf(item) !== index;\n  });\n}\n\n/**\n * Check for duplicate keys in complex elements\n */\nexport function hasDuplicatesBy<T>(array: T[], selector: ObjectSelector<T>): boolean {\n  return array.some((item, index) => {\n    return array.findIndex((x) => selector(x) === selector(item)) !== index;\n  });\n}\n\n/**\n * Turns an array into chunks of the specified size\n * @param array\n * @param size\n *\n * @example\n * ```\n * const array = [1, 2, 3, 4, 5];\n * const chunks = chunk(array, 2);\n * console.log(chunks);\n * // [[1, 2], [3, 4], [5]]\n * ```\n */\nexport function chunk<T>(array: T[], size: number): T[][] {\n  if (isEmpty(array)) return [];\n  if (array.length <= size) return [array];\n\n  const chunks: T[][] = [];\n  for (let i = 0; i < array.length; i += size) {\n    chunks.push(array.slice(i, i + size));\n  }\n\n  return chunks;\n}\n\n/**\n * Sorts an array of objects by the specified property\n * @param array\n * @param iteratee\n * @param order\n *\n * @example\n * ```\n * const array = [{ name: \"John\", age: 25 }, { name: \"Jane\", age: 30 }];\n * const sorted = orderBy(array, (item) => item.age, \"desc\");\n * console.log(sorted);\n * // [{ name: \"Jane\", age: 30 }, { name: \"John\", age: 25 }]\n * ```\n */\nexport function orderBy<T>(\n  array: T[],\n  iteratee: SortingSelector<T>,\n  order: SortingDirection = \"asc\"\n): T[] {\n  return [...array].sort((a: T, b: T) => {\n    if (iteratee(a) > iteratee(b)) return order === \"asc\" ? 1 : -1;\n    if (iteratee(a) < iteratee(b)) return order === \"asc\" ? -1 : 1;\n    return 0;\n  });\n}\n\n/**\n * Checks if arrays are equal\n * @param array1\n * @param array2\n *\n * @example\n * ```\n * const array1 = [1, 2, 3];\n * const array2 = [1, 2, 3];\n * const array3 = [1, 2, 4];\n * const array4 = [1, 2, 3, 4];\n * areEqual(array1, array2); // true\n * areEqual(array1, array3); // false\n * areEqual(array1, array4); // false\n * ```\n */\nexport function areEqual<T>(array1: ArrayLike<T>, array2: ArrayLike<T>): boolean {\n  if (array1 === array2) {\n    return true;\n  }\n\n  if (array1.length !== array2.length) {\n    return false;\n  }\n\n  for (let i = 0; i < array1.length; i++) {\n    if (array1[i] !== array2[i]) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Checks if arrays are equal by the specified property\n * @param array1\n * @param array2\n * @param selector\n *\n * @example\n * ```\n * const array1 = [{ name: \"John\", age: 25 }, { name: \"Jane\", age: 30 }];\n * const array2 = [{ name: \"John\", age: 25 }, { name: \"Jane\", age: 30 }];\n * const array3 = [{ name: \"John\", age: 25 }, { name: \"Jane\", age: 31 }];\n *\n * areEqualBy(array1, array2, (item) => item.age); // true\n * areEqualBy(array1, array3, (item) => item.age); // false\n * ```\n */\nexport function areEqualBy<T>(\n  array1: ArrayLike<T>,\n  array2: ArrayLike<T>,\n  selector: ObjectSelector<T>\n): boolean {\n  if (array1 === array2) {\n    return true;\n  }\n\n  if (array1.length !== array2.length) {\n    return false;\n  }\n\n  for (let i = 0; i < array1.length; i++) {\n    if (selector(array1[i]) !== selector(array2[i])) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Checks if the array starts with the specified target\n * @param array\n * @param target\n *\n * @example\n * ```\n * const array = [1, 2, 3, 4, 5];\n * const target1 = [1, 2];\n * const target2 = [1, 3];\n *\n * startsWith(array, target1); // true\n * startsWith(array, target2); // false\n * ```\n */\nexport function startsWith<T>(array: ArrayLike<T>, target: ArrayLike<T>, offset = 0): boolean {\n  if (array === target) return true;\n  if (target.length > array.length) return false;\n\n  for (let i = 0; i < target.length; i++) {\n    if (target[i] !== array[i + offset]) return false;\n  }\n\n  return true;\n}\n\n/**\n * Checks if the array ends with the specified target\n * @param array\n * @param target\n *\n * @example\n * ```\n * const array = [1, 2, 3, 4, 5];\n * const target1 = [4, 5];\n * const target2 = [3, 5];\n *\n * endsWith(array, target1); // true\n * endsWith(array, target2); // false\n * ```\n */\nexport function endsWith<T>(array: ArrayLike<T>, target: ArrayLike<T>): boolean {\n  if (array === target) return true;\n  if (target.length > array.length) return false;\n\n  const offset = array.length - target.length;\n  for (let i = target.length - 1; i >= 0; i--) {\n    if (target[i] !== array[i + offset]) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Makes an array unique by removing duplicate elements\n * @param array\n *\n * @example\n * ```\n * const array = [1, 2, 3, 3, 4, 5, 5];\n * const unique = uniq(array);\n * console.log(unique);\n * // [1, 2, 3, 4, 5]\n * ```\n */\nexport function uniq<T>(array: Array<T>): Array<T> {\n  if (isEmpty(array)) {\n    return array;\n  }\n\n  return Array.from(new Set(array));\n}\n\n/**\n * Makes an array unique by removing duplicate elements using the specified property\n * @param array\n * @param selector\n * @param selection\n *\n * @example\n * ```\n * const array = [{ name: \"John\", age: 25 }, { name: \"Jane\", age: 30 }, { name: \"John\", age: 30 }];\n * const unique = uniqBy(array, (item) => item.name);\n * console.log(unique);\n * // [{ name: \"John\", age: 25 }, { name: \"Jane\", age: 30 }]\n * ```\n */\nexport function uniqBy<T>(\n  array: Array<T>,\n  selector: ObjectSelector<T>,\n  selection: \"keep-first\" | \"keep-last\" = \"keep-first\"\n): Array<T> {\n  if (isEmpty(array)) {\n    return array;\n  }\n\n  return Array.from(\n    array\n      .reduce((map, e) => {\n        const key = selector(e);\n\n        if (selection === \"keep-first\" && map.has(key)) {\n          return map;\n        }\n\n        return map.set(key, e);\n      }, new Map())\n      .values()\n  );\n}\n\n/**\n * Returns the depth of an array\n * @param array\n *\n * @example\n * ```\n * const array = [1, 2, 3, [4, 5, [6, 7]]];\n * const depth = depthOf(array);\n * console.log(depth);\n * // 3\n */\nexport function depthOf(array: unknown | unknown[]): number {\n  return Array.isArray(array) ? 1 + Math.max(0, ...array.map(depthOf)) : 0;\n}\n","import type { Amount } from \"../types\";\nimport { first } from \"./array\";\nimport { isEmpty, isUndefined } from \"./assertions\";\n\ntype NumberLike = string | number | bigint | boolean;\n\nexport const _0n = BigInt(0);\nexport const _1n = BigInt(1);\nexport const _2n = BigInt(2);\nexport const _7n = BigInt(7);\nexport const _10n = BigInt(10);\nexport const _63n = BigInt(63);\nexport const _127n = BigInt(127);\nexport const _128n = BigInt(128);\n\n/**\n * Ensure that the given value is a bigint\n * @param number\n */\nexport function ensureBigInt(number: NumberLike): bigint {\n  return typeof number === \"bigint\" ? number : BigInt(number);\n}\n\ntype ParsingOptions = {\n  /**\n   * Number of decimals.\n   */\n  decimals?: number;\n\n  /**\n   * Thousand mark char.\n   * Default: `.`\n   */\n  decimalMark?: string;\n};\n\n/**\n * Parse a decimal string into a bigint with options\n * @param input\n * @param options\n *\n * @example\n * undecimalize(\"129.8379183\", { decimals: 9 }) // 129837918300n\n * undecimalize(\"1\", { decimals: 2 }) // 100n\n * undecimalize(\"1\", 2) // 100n\n */\nexport function undecimalize(input: string, options?: ParsingOptions | number): bigint {\n  if (!input) return _0n;\n\n  options = typeof options === \"number\" ? { decimals: options } : options;\n  if (isUndefined(options)) {\n    options = {};\n  }\n\n  options.decimals = options.decimals || 0;\n  options.decimalMark = options.decimalMark || \".\";\n\n  const fragments = input.split(options.decimalMark);\n  if (fragments.length > 2) {\n    throw new Error(\"Invalid numeric string.\");\n  }\n\n  let [integer, decimal] = fragments;\n  integer = removeLeadingZeros(integer);\n  const negative = integer.startsWith(\"-\") ? \"-\" : \"\";\n\n  if (!decimal) {\n    decimal = \"0\".repeat(options.decimals);\n  } else if (decimal.length < options.decimals) {\n    decimal = decimal.padEnd(options.decimals, \"0\");\n  }\n\n  return BigInt(negative + _stripNonDigits(integer + decimal));\n}\n\n/**\n * Strip all non-digits from a string\n * @param value\n */\nfunction _stripNonDigits(value: string): string {\n  return value.replace(/\\D/g, \"\");\n}\n\ntype FormattingOptions = {\n  /**\n   * Number of decimals.\n   */\n  decimals: number;\n\n  /**\n   * Thousand mark char.\n   */\n  thousandMark?: string;\n\n  /**\n   * Decimal mark char.\n   * Default: `.`\n   */\n  decimalMark?: string;\n};\n\n/**\n * Format a bigint into a decimal string with options\n * @param value\n * @param options\n *\n * @example\n * decimalize(129837918300n, { decimals: 9 }) // \"129.8379183\"\n * decimalize(100n, { decimals: 2 }) // \"1\"\n */\nexport function decimalize(value: Amount, options?: FormattingOptions | number): string {\n  value = ensureBigInt(value);\n  if (!options) {\n    return value.toString();\n  }\n\n  options = typeof options === \"number\" ? { decimals: options } : options;\n  options.decimals = options.decimals || 0;\n  options.decimalMark = options.decimalMark || \".\";\n\n  const pow = _10n ** BigInt(options.decimals);\n  const integer = value / pow;\n  const decimal = value - integer * pow;\n\n  return buildFormattedDecimal(integer.toString(10), decimal.toString(10), options);\n}\n\n/**\n * Calculates the percentage of a bigint value with a specified precision.\n *\n * @param value - The input value to calculate the percentage of\n * @param percentage - The percentage to calculate (e.g., 5n for 5%)\n * @param precision - The number of decimal places for the percentage (defaults to 2n)\n * @returns The calculated percentage of the input value\n *\n * @example\n * For 5% of 200 with 2 decimal places:\n * percent(200n, 5n) // returns 10n\n */\nexport function percent(value: bigint, percentage: bigint, precision = _2n): bigint {\n  return (value * percentage) / _10n ** precision;\n}\n\nfunction buildFormattedDecimal(\n  integer: string,\n  decimal: string,\n  options: FormattingOptions\n): string {\n  const int = addThousandMarks(integer, options.thousandMark);\n  const dec = stripTrailingZeros(decimal.padStart(options.decimals, \"0\"));\n  if (dec) return `${int}${options.decimalMark}${dec}`;\n  return int;\n}\n\nfunction addThousandMarks(value: string, mark?: string): string {\n  if (!mark) {\n    return value;\n  }\n\n  return value.replace(/\\B(?=(\\d{3})+(?!\\d))/g, mark);\n}\n\nfunction stripTrailingZeros(value: string): string {\n  if (!value.endsWith(\"0\")) {\n    return value;\n  }\n\n  return value.replace(/\\.?0+$/, \"\");\n}\n\nfunction removeLeadingZeros(value: string): string {\n  if (!value.startsWith(\"0\")) {\n    return value;\n  }\n\n  return value.replace(/^0+\\.?/, \"\");\n}\n\n/**\n * Sum a collection of numbers by a given iteratee\n * @param collection\n * @param iteratee\n * @param condition\n *\n * @example\n * ```\n * const values = [\n *  { key: 1, value: 100n },\n *  { key: 2, value: 200n },\n *  { key: 3, value: 300n },\n *  { key: 4, value: 400n },\n *  ];\n *\n *  sumBy(values, x => x.value) // 1000n\n *  sumBy(values, x => x.value, x => x.key < 0) // 0n\n *  sumBy(values, x => x.value, x => x.key % 2 === 0) // 600n\n */\nexport function sumBy<T>(\n  collection: readonly T[],\n  iteratee: (value: T) => bigint,\n  condition?: (value: T) => boolean\n): bigint {\n  let acc = _0n;\n  if (isEmpty(collection)) {\n    return acc;\n  }\n\n  for (const item of collection) {\n    if (isUndefined(condition) || condition(item)) {\n      acc += iteratee(item);\n    }\n  }\n\n  return acc;\n}\n\n/**\n * Get the minimum value from a collection of numbers\n * @param numbers\n */\nexport function min<T extends bigint | number>(...numbers: T[]): T {\n  let min = first(numbers);\n\n  for (const num of numbers) {\n    if (num < min) {\n      min = num;\n    }\n  }\n\n  return min;\n}\n\n/**\n * Get the maximum value from a collection of numbers\n * @param numbers\n */\nexport function max<T extends bigint | number>(...numbers: T[]): T {\n  let max = first(numbers);\n\n  for (const num of numbers) {\n    if (num > max) {\n      max = num;\n    }\n  }\n\n  return max;\n}\n","import type {\n  Amount,\n  Box,\n  BoxCandidate,\n  NonMandatoryRegisters,\n  TokenAmount,\n  TokenId\n} from \"../types\";\nimport { isDefined, isEmpty, isUndefined } from \"./assertions\";\nimport { ensureBigInt } from \"./bigInt\";\nimport { _0n } from \"./bigInt\";\n\nconst NANOERGS_TOKEN_ID = \"nanoErgs\";\n\n/**\n * Calculates the sum of all nanoErgs and tokens in the given boxes.\n * @param boxes\n *\n * @example\n * ```\n * const boxes = [\n *   { value: \"10\", assets: [{ tokenId: \"test\", amount: \"20\" }] },\n *   { value: 20n, assets: [{ tokenId: \"test\", amount: 30n }] }\n * ];\n *\n * const sum = utxoSum(boxes);\n * console.log(sum);\n * // { nanoErgs: 30n, tokens: [{ tokenId: \"test\", amount: 50n }] }\n * ```\n */\nexport function utxoSum(boxes: readonly BoxAmounts[]): BoxSummary;\nexport function utxoSum(boxes: readonly BoxAmounts[], tokenId: TokenId): bigint;\nexport function utxoSum(boxes: readonly BoxAmounts[], tokenId?: TokenId) {\n  const balances: { [tokenId: string]: bigint } = {};\n\n  for (const box of boxes) {\n    if (isUndefined(tokenId) || tokenId === NANOERGS_TOKEN_ID) {\n      balances[NANOERGS_TOKEN_ID] = (balances[NANOERGS_TOKEN_ID] || _0n) + ensureBigInt(box.value);\n    }\n\n    if (tokenId !== NANOERGS_TOKEN_ID) {\n      for (const token of box.assets) {\n        if (isDefined(tokenId) && tokenId !== token.tokenId) {\n          continue;\n        }\n\n        balances[token.tokenId] = (balances[token.tokenId] || _0n) + ensureBigInt(token.amount);\n      }\n    }\n  }\n\n  if (isDefined(tokenId)) {\n    return balances[tokenId] || _0n;\n  }\n\n  return {\n    nanoErgs: balances[NANOERGS_TOKEN_ID] || _0n,\n    tokens: Object.keys(balances)\n      .filter((x) => x !== NANOERGS_TOKEN_ID)\n      .map((tokenId) => ({ tokenId, amount: balances[tokenId] }))\n  };\n}\n\n/**\n * Calculates the difference between two utxos or utxo sets.\n * @param minuend\n * @param subtrahend\n *\n * @example\n * ```\n * const minuend = [{ nanoErgs: 30n, tokens: [{ tokenId: \"test\", amount: 50n }] }];\n * const subtrahend = [{ nanoErgs: 10n, tokens: [{ tokenId: \"test\", amount: 20n }] }];\n * const diff = utxoDiff(minuend, subtrahend);\n * console.log(diff);\n * // { nanoErgs: 20n, tokens: [{ tokenId: \"test\", amount: 30n }] }\n * ```\n */\nexport function utxoDiff(\n  minuend: BoxSummary | Box<Amount>[],\n  subtrahend: BoxSummary | Box<Amount>[],\n  ignoreSubtrahendLeftoverTokens = false\n): BoxSummary {\n  if (Array.isArray(minuend)) minuend = utxoSum(minuend);\n  if (Array.isArray(subtrahend)) subtrahend = utxoSum(subtrahend);\n\n  const tokens: TokenAmount<bigint>[] = [];\n  const nanoErgs = minuend.nanoErgs - subtrahend.nanoErgs;\n  const subtrahendTokens = new Map(subtrahend.tokens.map((t) => [t.tokenId, t.amount]));\n\n  for (const token of minuend.tokens) {\n    const subtrahendAmount = subtrahendTokens.get(token.tokenId) || _0n;\n    const balance = token.amount - (subtrahendAmount || _0n);\n\n    if (balance !== _0n) {\n      tokens.push({ tokenId: token.tokenId, amount: balance });\n    }\n\n    if (subtrahendAmount > _0n) {\n      subtrahendTokens.delete(token.tokenId);\n    }\n  }\n\n  if (!ignoreSubtrahendLeftoverTokens && subtrahendTokens.size > 0) {\n    for (const [tokenId, amount] of subtrahendTokens) {\n      tokens.push({ tokenId, amount: -amount });\n    }\n  }\n\n  return { nanoErgs, tokens };\n}\n\nconst MIN_NON_MANDATORY_REGISTER_INDEX = 4;\nconst MAX_NON_MANDATORY_REGISTER_INDEX = 9;\n\n/**\n * Checks if the given registers are densely packed.\n * @param registers\n *\n * @example\n * ```\n * const registers = {\n *   R4: \"deadbeef\",\n *   R6: \"cafe\",\n * };\n * const result = areRegistersDenselyPacked(registers);\n * console.log(result);\n * // false\n */\nexport function areRegistersDenselyPacked(registers: NonMandatoryRegisters): boolean {\n  let lastIndex = 0;\n  for (let i = MIN_NON_MANDATORY_REGISTER_INDEX; i <= MAX_NON_MANDATORY_REGISTER_INDEX; i++) {\n    const key = `R${i}` as keyof NonMandatoryRegisters;\n    if (registers[key]) {\n      if (i === MIN_NON_MANDATORY_REGISTER_INDEX) {\n        lastIndex = i;\n        continue;\n      }\n\n      if (i - lastIndex > 1) {\n        return false;\n      }\n\n      lastIndex = i;\n    }\n  }\n\n  return true;\n}\n\n/**\n * Filters the given utxos by the given filter parameters.\n * @param utxos\n * @param filterParams\n */\nexport function utxoFilter<T extends Amount>(utxos: Box<T>[], filterParams: UTxOFilterParams<T>) {\n  if (isEmpty(filterParams) || isEmpty(utxos)) {\n    return utxos;\n  }\n\n  const { by, max } = filterParams;\n  let filtered = utxos;\n\n  if (by) {\n    filtered = utxos.filter(by);\n    if (isEmpty(filtered)) {\n      return filtered;\n    }\n  }\n\n  if (!max) {\n    return filtered;\n  }\n\n  if (isDefined(max.aggregatedDistinctTokens)) {\n    const tokenIds = _getDistinctTokenIds(filtered, max.aggregatedDistinctTokens);\n    filtered = filtered.filter(\n      (utxo) => isEmpty(utxo.assets) || utxo.assets.every((token) => tokenIds.has(token.tokenId))\n    );\n  }\n\n  if (isDefined(max.count) && filtered.length > max.count) {\n    filtered = filtered.slice(0, max.count);\n  }\n\n  return filtered;\n}\n\nfunction _getDistinctTokenIds(utxos: Box[], max: number): Set<string> {\n  const tokenIds = new Set<string>();\n\n  for (let i = 0; i < utxos.length && tokenIds.size < max; i++) {\n    if (isEmpty(utxos[i].assets) || utxos[i].assets.length > max) {\n      continue;\n    }\n\n    for (const token of utxos[i].assets) {\n      tokenIds.add(token.tokenId);\n    }\n  }\n\n  return tokenIds;\n}\n\n/**\n * Parameters for filtering unspent transaction outputs (UTxOs).\n */\nexport type UTxOFilterParams<T extends Amount> = {\n  /**\n   * A function that returns a boolean indicating whether a given UTxO should be included in the filtered results.\n   */\n  by?: (utxo: Box<T>) => boolean;\n  /**\n   * An object specifying the maximum number of UTxOs and distinct tokens to include in the filtered results.\n   */\n  max?: {\n    /**\n     * The maximum number of UTxOs to include in the filtered results.\n     */\n    count?: number;\n    /**\n     * The maximum number of distinct tokens to include in the filtered results.\n     */\n    aggregatedDistinctTokens?: number;\n  };\n};\n\nexport type BoxSummary = {\n  nanoErgs: bigint;\n  tokens: TokenAmount<bigint>[];\n};\n\nexport type BoxAmounts = {\n  value: Amount;\n  assets: TokenAmount<Amount>[];\n};\n\n/**\n * Ensures that the value and asset amounts of a given box are represented as BigInts.\n * @returns A new box object with BigInt representation for the value and asset amounts.\n */\nexport function ensureUTxOBigInt(box: Box<Amount>): Box<bigint>;\nexport function ensureUTxOBigInt(candidate: BoxCandidate<Amount>): BoxCandidate<bigint>;\nexport function ensureUTxOBigInt(\n  box: Box<Amount> | BoxCandidate<Amount>\n): BoxCandidate<bigint> | Box<bigint> {\n  return {\n    ...box,\n    value: ensureBigInt(box.value),\n    assets: box.assets.map((token) => ({\n      tokenId: token.tokenId,\n      amount: ensureBigInt(token.amount)\n    }))\n  };\n}\n","import { isEmpty, isUndefined } from \"./assertions\";\n\n/**\n * Remove undefined values from an object\n * @param value\n *\n * @example\n * ```\n * const obj = { a: 1, b: undefined };\n * const result = clearUndefined(obj);\n * console.log(result); // { a: 1 }\n * ```\n */\nexport function clearUndefined(value: Record<string, unknown>) {\n  const result: Record<string, unknown> = {};\n  for (const key in value) {\n    const val = value[key];\n    if (!isUndefined(val)) {\n      result[key] = val;\n    }\n  }\n\n  return result;\n}\n\nexport type EnsureDefaultsOptions = { keepUndefinedKeys: boolean };\n\n/**\n * Ensure that the options object has all the default values\n * @param partial\n * @param defaults\n *\n * @example\n * ```\n * const options = { a: 1 };\n * const defaults = { a: 2, b: 3 };\n * const result = ensureDefaults(options, defaults);\n * console.log(result); // { a: 1, b: 3 }\n * ```\n */\nexport function ensureDefaults<T extends object, R extends object>(\n  partial: T | undefined,\n  defaults: R,\n  options?: EnsureDefaultsOptions\n): R & T {\n  if (isEmpty(partial)) return defaults as R & T;\n  if (options?.keepUndefinedKeys) return { ...defaults, ...partial };\n\n  const merged = { ...defaults, ...partial } as Record<string, unknown>;\n  for (const key in merged) {\n    merged[key] = partial[key as keyof T] ?? defaults[key as keyof R];\n  }\n\n  return merged as R & T;\n}\n","import { assertInstanceOf } from \".\";\n\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  const r = new Uint8Array(arrays.reduce((sum, a) => sum + a.length, 0));\n\n  let pad = 0;\n  for (const bytes of arrays) {\n    assertInstanceOf(bytes, Uint8Array);\n\n    r.set(bytes, pad);\n    pad += bytes.length;\n  }\n\n  return r;\n}\n\nexport function isHex(value?: string) {\n  if (!value || value.length % 2) return false;\n  return !Number.isNaN(Number(value.startsWith(\"0x\") ? value : `0x${value}`));\n}\n\n/**\n * Get hex string size in bytes\n * @param hex\n * @returns the byte size if the hex string\n */\nexport function byteSizeOf(hex: string): number {\n  return hex.length / 2;\n}\n","export type EnumConst<T extends object> = T[keyof T];\n\nexport enum Network {\n  Mainnet = 0x00,\n  Testnet = 0x10\n}\n\nexport enum AddressType {\n  P2PK = 1,\n  P2SH = 2,\n  P2S = 3,\n  ADH = 4\n}\n\nexport const ergoTreeHeaderFlags = {\n  sizeInclusion: 0x08,\n  constantSegregation: 0x10\n} as const;\n\nexport type ErgoTreeHeaderFlag = EnumConst<typeof ergoTreeHeaderFlags>;\n","import type { OneOrMore } from \"../types\";\nimport { isDefined } from \"../utils\";\n\nexport type CollectionAddOptions = { index?: number };\n\n/**\n * Collection abstract model\n *\n * @example\n * Define a new collection class with internal type `number` and external type `string`\n * ```\n * class TestCollection extends Collection<number, string> {\n *    protected _map(item: string | number): number {\n *      return Number(item);\n *    }\n *    // Some other methods\n *  }\n * ```\n *\n */\nexport abstract class Collection<InternalType, ExternalType> implements Iterable<InternalType> {\n  protected readonly _items: InternalType[];\n\n  constructor() {\n    this._items = [];\n  }\n\n  protected _isIndexOutOfBounds(index: number): boolean {\n    return index < 0 || index >= this._items.length;\n  }\n\n  [Symbol.iterator](): Iterator<InternalType> {\n    let counter = 0;\n\n    return {\n      next: () => {\n        return {\n          done: counter >= this.length,\n          value: this._items[counter++]\n        };\n      }\n    };\n  }\n\n  /**\n   * Number of items in the collection\n   */\n  public get length(): number {\n    return this._items.length;\n  }\n\n  /**\n   * True if the collection is empty\n   */\n  public get isEmpty(): boolean {\n    return this.length === 0;\n  }\n\n  /**\n   * Get item at index\n   * @param index\n   * @throws RangeError if index is out of bounds\n   */\n  public at(index: number): InternalType {\n    if (this._isIndexOutOfBounds(index)) {\n      throw new RangeError(`Index '${index}' is out of range.`);\n    }\n\n    return this._items[index];\n  }\n\n  /**\n   * Add item to the collection\n   * @param items\n   * @param options\n   * @returns The new length of the collection\n   */\n  public add(items: OneOrMore<ExternalType>, options?: CollectionAddOptions): number {\n    return this._addOneOrMore(items, options);\n  }\n\n  abstract remove(item: unknown): number;\n\n  /**\n   * Map external type to internal type\n   * @param item\n   * @protected\n   */\n  protected abstract _map(item: ExternalType | InternalType): InternalType;\n\n  protected _addOne(item: InternalType | ExternalType, options?: CollectionAddOptions): number {\n    if (isDefined(options) && isDefined(options.index)) {\n      if (options.index === this.length) {\n        this._items.push(this._map(item));\n        return this.length;\n      }\n\n      if (this._isIndexOutOfBounds(options.index)) {\n        throw new RangeError(`Index '${options.index}' is out of range.`);\n      }\n\n      this._items.splice(options.index, 0, this._map(item));\n      return this.length;\n    }\n\n    this._items.push(this._map(item));\n    return this._items.length;\n  }\n\n  protected _addOneOrMore(items: OneOrMore<ExternalType>, options?: CollectionAddOptions): number {\n    if (Array.isArray(items)) {\n      if (isDefined(options) && isDefined(options.index)) {\n        items = items.reverse();\n      }\n\n      for (const item of items) {\n        this._addOne(item, options);\n      }\n    } else {\n      this._addOne(items, options);\n    }\n\n    return this.length;\n  }\n\n  /**\n   * Get the collection as an array\n   */\n  public toArray(): InternalType[] {\n    return [...this._items];\n  }\n\n  public reduce<U>(\n    callbackFn: (\n      accumulator: U,\n      currentValue: InternalType,\n      currentIndex: number,\n      array: InternalType[]\n    ) => U,\n    initialValue: U\n  ): U {\n    return this._items.reduce(callbackFn, initialValue);\n  }\n}\n","export class FleetError extends Error {\n  constructor(message?: string, options?: ErrorOptions) {\n    super(message, options);\n\n    Object.setPrototypeOf(this, new.target.prototype);\n    this.name = new.target.name;\n  }\n}\n\nexport class NotSupportedError extends FleetError {}\n\nexport class BlockchainProviderError extends FleetError {}\n","export const FEE_CONTRACT =\n  \"1005040004000e36100204a00b08cd0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798ea02d192a39a8cc7a701730073011001020402d19683030193a38cc7b2a57300000193c2b2a57301007473027303830108cdeeac93b1a57304\";\nexport const RECOMMENDED_MIN_FEE_VALUE = BigInt(1100000);\n"]}