@vbyte/btc-dev 1.0.14 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/lib/taproot/cblock.js +1 -0
- package/dist/main.cjs +126 -4065
- package/dist/main.cjs.map +1 -1
- package/dist/module.mjs +125 -4063
- package/dist/module.mjs.map +1 -1
- package/dist/package.json +5 -9
- package/dist/schema/tx.d.ts +23 -23
- package/dist/schema/tx.js +4 -4
- package/dist/script.js +8 -8
- package/dist/script.js.map +1 -1
- package/dist/types/taproot.d.ts +1 -0
- package/package.json +5 -9
- package/src/index.ts +0 -1
- package/src/lib/taproot/cblock.ts +1 -0
- package/src/schema/tx.ts +8 -6
- package/src/types/taproot.ts +1 -0
- package/dist/lib/psbt/encoder.d.ts +0 -5
- package/dist/lib/psbt/encoder.js +0 -21
- package/dist/lib/psbt/index.d.ts +0 -4
- package/dist/lib/psbt/index.js +0 -4
- package/dist/lib/psbt/meta.d.ts +0 -3
- package/dist/lib/psbt/meta.js +0 -11
- package/dist/lib/psbt/util.d.ts +0 -5
- package/dist/lib/psbt/util.js +0 -44
- package/dist/lib/psbt/validate.d.ts +0 -2
- package/dist/lib/psbt/validate.js +0 -11
- package/src/lib/psbt/encoder.ts +0 -24
- package/src/lib/psbt/index.ts +0 -4
- package/src/lib/psbt/meta.ts +0 -15
- package/src/lib/psbt/util.ts +0 -62
- package/src/lib/psbt/validate.ts +0 -18
package/dist/script.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"script.js","sources":["../node_modules/@vbyte/buff/dist/util/validate.js","../node_modules/@vbyte/buff/dist/util/assert.js","../node_modules/@vbyte/buff/dist/lib/big.js","../node_modules/@vbyte/buff/dist/lib/num.js","../node_modules/@vbyte/buff/dist/lib/hex.js","../node_modules/@vbyte/buff/dist/lib/bytes.js","../node_modules/@vbyte/buff/dist/lib/str.js","../node_modules/@vbyte/buff/dist/class/buff.js","../node_modules/@vbyte/buff/dist/lib/bin.js","../node_modules/@vbyte/buff/dist/lib/rand.js","../node_modules/@vbyte/buff/dist/class/stream.js","../node_modules/@vbyte/micro-lib/dist/lib/util.js","../node_modules/@vbyte/micro-lib/dist/lib/test.js","../node_modules/@vbyte/micro-lib/dist/lib/assert.js","../node_modules/@noble/hashes/esm/crypto.js","../node_modules/@noble/hashes/esm/utils.js","../node_modules/@noble/hashes/esm/_md.js","../node_modules/@noble/hashes/esm/sha2.js","../node_modules/@noble/hashes/esm/hmac.js","../node_modules/@noble/curves/esm/utils.js","../node_modules/@noble/curves/esm/abstract/modular.js","../node_modules/@noble/curves/esm/abstract/curve.js","../node_modules/@noble/curves/esm/abstract/weierstrass.js","../node_modules/@noble/curves/esm/secp256k1.js","../node_modules/@noble/curves/esm/_shortw_utils.js","../node_modules/@vbyte/micro-lib/dist/lib/ecc.js","../node_modules/@noble/hashes/esm/legacy.js","../node_modules/@vbyte/micro-lib/dist/lib/hash.js","../node_modules/zod/v3/helpers/util.js","../node_modules/zod/v3/ZodError.js","../node_modules/zod/v3/locales/en.js","../node_modules/zod/v3/errors.js","../node_modules/zod/v3/helpers/parseUtil.js","../node_modules/zod/v3/helpers/errorUtil.js","../node_modules/zod/v3/types.js","../node_modules/@vbyte/micro-lib/dist/lib/schema.js","../node_modules/@scure/base/lib/esm/index.js","../node_modules/@vbyte/micro-lib/dist/lib/encode.js","../src/lib/address/encode.ts","../src/lib/address/util.ts","../src/lib/address/script.ts","../src/lib/address/p2pkh.ts","../src/lib/address/p2sh.ts","../src/lib/address/p2wpkh.ts","../src/lib/address/p2wsh.ts","../src/lib/address/p2tr.ts","../src/lib/address/index.ts","../src/lib/meta/locktime.ts","../src/lib/meta/ref.ts","../src/lib/script/words.ts","../src/lib/script/encode.ts","../src/lib/script/decode.ts","../src/lib/meta/scribe.ts","../src/lib/meta/sequence.ts","../node_modules/micro-packed/lib/esm/index.js","../node_modules/@scure/btc-signer/esm/utils.js","../node_modules/@scure/btc-signer/esm/script.js","../node_modules/@scure/btc-signer/esm/psbt.js","../node_modules/@scure/btc-signer/esm/payment.js","../node_modules/@scure/btc-signer/esm/transaction.js","../src/lib/psbt/encoder.ts","../src/lib/psbt/util.ts","../src/lib/script/index.ts","../src/lib/psbt/validate.ts","../src/lib/psbt/meta.ts","../src/lib/script/util.ts","../src/lib/sighash/util.ts","../src/const.ts","../src/schema/taproot.ts","../src/schema/tx.ts","../src/lib/tx/validate.ts","../src/lib/tx/encode.ts","../src/lib/tx/util.ts","../src/lib/tx/create.ts","../src/lib/tx/decode.ts","../src/lib/tx/parse.ts","../src/lib/tx/size.ts","../src/lib/sighash/segwit.ts","../src/lib/taproot/encode.ts","../src/lib/sighash/taproot.ts","../src/lib/signer/sign.ts","../src/lib/signer/verify.ts","../src/lib/taproot/tree.ts","../src/lib/witness/parse.ts","../src/lib/taproot/parse.ts","../src/lib/taproot/cblock.ts","../src/lib/witness/util.ts"],"sourcesContent":["export var Check;\n(function (Check) {\n function is_hex(input) {\n return (input.match(/[^a-fA-F0-9]/) === null &&\n input.length % 2 === 0);\n }\n Check.is_hex = is_hex;\n function is_bytes(input) {\n if (typeof input === 'string' && is_hex(input)) {\n return true;\n }\n else if (input instanceof Uint8Array) {\n return true;\n }\n else if (Array.isArray(input) &&\n input.every(e => typeof e === 'number')) {\n return true;\n }\n else {\n return false;\n }\n }\n Check.is_bytes = is_bytes;\n})(Check || (Check = {}));\n","import { Check } from '../util/validate.js';\nexport var Assert;\n(function (Assert) {\n function within_size(data, size) {\n if (data.length > size) {\n throw new TypeError(`Data is larger than array size: ${data.length} > ${size}`);\n }\n }\n Assert.within_size = within_size;\n function is_hex(hex) {\n if (hex.match(/[^a-fA-f0-9]/) !== null) {\n throw new TypeError('Invalid characters in hex string: ' + hex);\n }\n if (hex.length % 2 !== 0) {\n throw new Error(`Length of hex string is invalid: ${hex.length}`);\n }\n }\n Assert.is_hex = is_hex;\n function is_bytes(bytes) {\n if (!Check.is_bytes(bytes)) {\n throw new Error('Bytes contains invalid elements: ' + String(bytes));\n }\n }\n Assert.is_bytes = is_bytes;\n function is_json(str) {\n try {\n JSON.parse(str);\n }\n catch {\n throw new TypeError('JSON string is invalid!');\n }\n }\n Assert.is_json = is_json;\n function is_safe_int(num) {\n if (num > Number.MAX_SAFE_INTEGER) {\n throw new TypeError('Number exceeds safe bounds!');\n }\n }\n Assert.is_safe_int = is_safe_int;\n})(Assert || (Assert = {}));\n","const _0n = BigInt(0);\nconst _255n = BigInt(255);\nconst _256n = BigInt(256);\nexport function get_big_size(big) {\n if (big <= 0xffn)\n return 1;\n if (big <= 0xffffn)\n return 2;\n if (big <= 0xffffffffn)\n return 4;\n if (big <= 0xffffffffffffffffn)\n return 8;\n if (big <= 0xffffffffffffffffffffffffffffffffn)\n return 16;\n if (big <= 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn) {\n return 32;\n }\n throw new TypeError('Must specify a fixed buffer size for bigints greater than 32 bytes.');\n}\nexport function big_to_bytes(big, size, endian = 'be') {\n if (size === undefined)\n size = get_big_size(big);\n const use_le = (endian === 'le');\n const buffer = new ArrayBuffer(size);\n const dataView = new DataView(buffer);\n let offset = (use_le) ? 0 : size - 1;\n while (big > _0n) {\n const byte = big & _255n;\n const num = Number(byte);\n if (use_le) {\n dataView.setUint8(offset++, num);\n }\n else {\n dataView.setUint8(offset--, num);\n }\n big = (big - byte) / _256n;\n }\n return new Uint8Array(buffer);\n}\nexport function bytes_to_big(bytes) {\n let num = BigInt(0);\n for (let i = bytes.length - 1; i >= 0; i--) {\n num = (num * _256n) + BigInt(bytes[i]);\n }\n return BigInt(num);\n}\nexport function bigint_replacer(_, v) {\n return typeof v === 'bigint'\n ? `${v}n`\n : v;\n}\nexport function bigint_reviver(_, v) {\n return typeof v === 'string' && /^[0-9]+n$/.test(v)\n ? BigInt(v.slice(0, -1))\n : v;\n}\n","import { Assert } from '../util/assert.js';\nexport function get_num_size(num) {\n if (num <= 0xFF)\n return 1;\n if (num <= 0xFFFF)\n return 2;\n if (num <= 0xFFFFFFFF)\n return 4;\n throw new TypeError('Numbers larger than 4 bytes must specify a fixed size!');\n}\nexport function num_to_bytes(num, size, endian = 'be') {\n if (size === undefined)\n size = get_num_size(num);\n const use_le = (endian === 'le');\n const buffer = new ArrayBuffer(size);\n const dataView = new DataView(buffer);\n let offset = (use_le) ? 0 : size - 1;\n while (num > 0) {\n const byte = num & 255;\n if (use_le) {\n dataView.setUint8(offset++, num);\n }\n else {\n dataView.setUint8(offset--, num);\n }\n num = (num - byte) / 256;\n }\n return new Uint8Array(buffer);\n}\nexport function bytes_to_num(bytes) {\n let num = 0;\n for (let i = bytes.length - 1; i >= 0; i--) {\n num = (num * 256) + bytes[i];\n Assert.is_safe_int(num);\n }\n return num;\n}\n","import { Assert } from '../util/assert.js';\nexport function hex_to_bytes(hexstr, size, endian = 'be') {\n size = get_hex_size(hexstr, size);\n const use_be = (endian === 'be');\n const buffer = new ArrayBuffer(size);\n const dataView = new DataView(buffer);\n let offset = (use_be) ? 0 : size - 1;\n for (let i = 0; i < hexstr.length; i += 2) {\n const char = hexstr.substring(i, i + 2);\n const num = parseInt(char, 16);\n if (use_be) {\n dataView.setUint8(offset++, num);\n }\n else {\n dataView.setUint8(offset--, num);\n }\n }\n return new Uint8Array(buffer);\n}\nexport function bytes_to_hex(bytes) {\n let chars = '';\n for (let i = 0; i < bytes.length; i++) {\n chars += bytes[i].toString(16).padStart(2, '0');\n }\n return chars;\n}\nfunction get_hex_size(hexstr, size) {\n Assert.is_hex(hexstr);\n const len = hexstr.length / 2;\n if (size === undefined)\n size = len;\n if (len > size) {\n throw new TypeError(`Hex string is larger than array size: ${len} > ${size}`);\n }\n return size;\n}\n","import { Assert } from '../util/assert.js';\nimport { big_to_bytes } from './big.js';\nimport { num_to_bytes } from './num.js';\nimport { hex_to_bytes } from './hex.js';\nexport function buffer(bytes, size, endian) {\n if (bytes instanceof ArrayBuffer) {\n return new Uint8Array(bytes);\n }\n else if (bytes instanceof Uint8Array) {\n return create_bytes(bytes, size, endian);\n }\n else if (typeof bytes === 'string') {\n Assert.is_hex(bytes);\n return hex_to_bytes(bytes, size, endian);\n }\n else if (typeof bytes === 'bigint') {\n return big_to_bytes(bytes, size, endian);\n }\n else if (typeof bytes === 'number') {\n return num_to_bytes(bytes, size, endian);\n }\n throw new TypeError('Input type not supported:' + typeof bytes);\n}\nexport function create_bytes(data, size, endian = 'le') {\n if (size === undefined)\n size = data.length;\n Assert.within_size(data, size);\n const buffer = new Uint8Array(size).fill(0);\n const offset = (endian === 'be') ? 0 : size - data.length;\n buffer.set(data, offset);\n return buffer;\n}\nexport function join_bytes(arr) {\n let i, offset = 0;\n const size = arr.reduce((len, arr) => len + arr.length, 0);\n const buff = new Uint8Array(size);\n for (i = 0; i < arr.length; i++) {\n const a = arr[i];\n buff.set(a, offset);\n offset += a.length;\n }\n return buff;\n}\nexport function split_bytes(data_blob, chunk_size, total_size) {\n const len = data_blob.length, count = total_size / chunk_size;\n if (total_size % chunk_size !== 0) {\n throw new TypeError(`Invalid parameters: ${total_size} % ${chunk_size} !== 0`);\n }\n if (len !== total_size) {\n throw new TypeError(`Invalid data stream: ${len} !== ${total_size}`);\n }\n if (len % chunk_size !== 0) {\n throw new TypeError(`Invalid data stream: ${len} % ${chunk_size} !== 0`);\n }\n const chunks = new Array(count);\n for (let i = 0; i < count; i++) {\n const idx = i * chunk_size;\n chunks[i] = data_blob.subarray(idx, idx + chunk_size);\n }\n return chunks;\n}\n","const ec = new TextEncoder();\nconst dc = new TextDecoder();\nexport function str_to_bytes(str) {\n return ec.encode(str);\n}\nexport function bytes_to_str(bytes) {\n return dc.decode(bytes);\n}\n","import * as Lib from '../lib/index.js';\nimport { Assert, Check } from '../util/index.js';\nexport class Buff extends Uint8Array {\n static { this.num = (number, size, endian) => {\n return new Buff(number, size, endian);\n }; }\n static { this.big = (bigint, size, endian) => {\n return new Buff(bigint, size, endian);\n }; }\n static { this.bin = (data, size, endian) => {\n const uint = Lib.bin_to_bytes(data);\n return new Buff(uint, size, endian);\n }; }\n static { this.uint = (data, size, endian) => {\n return new Buff(data, size, endian);\n }; }\n static { this.str = (data, size, endian) => {\n const uint = Lib.str_to_bytes(data);\n return new Buff(uint, size, endian);\n }; }\n static { this.hex = (data, size, endian) => {\n Assert.is_hex(data);\n return new Buff(data, size, endian);\n }; }\n static { this.bytes = (bytes, size, endian) => {\n Assert.is_bytes(bytes);\n return new Buff(bytes, size, endian);\n }; }\n static { this.json = (data, replacer) => {\n replacer = replacer ?? Lib.bigint_replacer;\n const str = JSON.stringify(data, replacer);\n const uint = Lib.str_to_bytes(str);\n return new Buff(uint);\n }; }\n static { this.blob = (payload, chunk_size, total_size) => {\n const bytes = Lib.buffer(payload);\n const chunks = Lib.split_bytes(bytes, chunk_size, total_size);\n return chunks.map(e => new Buff(e));\n }; }\n static { this.is_equal = (a, b) => {\n return new Buff(a).hex === new Buff(b).hex;\n }; }\n static { this.is_bytes = Check.is_bytes; }\n static { this.is_hex = Check.is_hex; }\n static random(size = 32) {\n const uint = Lib.get_random_bytes(size);\n return new Buff(uint, size);\n }\n static now() {\n const stamp = Math.floor(Date.now() / 1000);\n return new Buff(stamp, 4);\n }\n constructor(data, size, endian) {\n if (data instanceof Buff && size === undefined) {\n return data;\n }\n const buffer = Lib.buffer(data, size, endian);\n super(buffer);\n }\n get arr() {\n return this.to_arr();\n }\n get big() {\n return this.to_big();\n }\n get bin() {\n return this.to_bin();\n }\n get hex() {\n return this.to_hex();\n }\n get num() {\n return this.to_num();\n }\n get str() {\n return this.to_str();\n }\n get uint() {\n return this.to_uint();\n }\n to_big(endian = 'be') {\n const bytes = (endian === 'be')\n ? this.uint.reverse()\n : this.uint;\n return Lib.bytes_to_big(bytes);\n }\n to_hex(endian = 'be') {\n const bytes = (endian === 'be')\n ? this.uint\n : this.uint.reverse();\n return Lib.bytes_to_hex(bytes);\n }\n to_json(reviver) {\n if (reviver === undefined) {\n reviver = Lib.bigint_reviver;\n }\n const str = Lib.bytes_to_str(this);\n return JSON.parse(str, reviver);\n }\n to_num(endian = 'be') {\n const bytes = (endian === 'be')\n ? this.uint.reverse()\n : this.uint;\n return Lib.bytes_to_num(bytes);\n }\n to_arr() { return [...this]; }\n to_bin() { return Lib.bytes_to_bin(this); }\n to_str() { return Lib.bytes_to_str(this); }\n to_uint() { return new Uint8Array(this); }\n append(data) {\n return Buff.join([this, new Buff(data)]);\n }\n equals(data) {\n return new Buff(data).hex === this.hex;\n }\n prepend(data) {\n return Buff.join([new Buff(data), this]);\n }\n prefix_varint(endian) {\n if (this.length === 0)\n throw new Error('buffer is empty');\n const varint = Buff.varint(this.length, endian);\n return this.prepend(varint);\n }\n reverse() {\n super.reverse();\n return this;\n }\n set(array, offset) {\n this.set(array, offset);\n }\n slice(start, end) {\n const arr = new Uint8Array(this).slice(start, end);\n return new Buff(arr);\n }\n subarray(begin, end) {\n const arr = new Uint8Array(this).subarray(begin, end);\n return new Buff(arr);\n }\n toJSON() {\n return this.hex;\n }\n toString() {\n return this.hex;\n }\n static from(data) {\n return new Buff(Uint8Array.from(data));\n }\n static of(...args) {\n return new Buff(Uint8Array.of(...args));\n }\n static join(arr) {\n const bytes = arr.map(e => new Buff(e));\n const joined = Lib.join_bytes(bytes);\n return new Buff(joined);\n }\n static sort(arr, size) {\n const hex = arr.map(e => new Buff(e, size).hex);\n hex.sort();\n return hex.map(e => Buff.hex(e, size));\n }\n static varint(num, endian) {\n if (num < 0xFD) {\n return Buff.num(num, 1);\n }\n else if (num < 0x10000) {\n return Buff.of(0xFD, ...Buff.num(num, 2, endian));\n }\n else if (num < 0x100000000) {\n return Buff.of(0xFE, ...Buff.num(num, 4, endian));\n }\n else if (BigInt(num) < 0x10000000000000000n) {\n return Buff.of(0xFF, ...Buff.num(num, 8, endian));\n }\n else {\n throw new Error(`Value is too large: ${num}`);\n }\n }\n}\n","export function bin_to_bytes(binary) {\n const bins = binary.split('').map(Number);\n if (bins.length % 8 !== 0) {\n throw new Error(`Binary array is invalid length: ${binary.length}`);\n }\n const bytes = new Uint8Array(bins.length / 8);\n for (let i = 0, ct = 0; i < bins.length; i += 8, ct++) {\n let byte = 0;\n for (let j = 0; j < 8; j++) {\n byte |= (bins[i + j] << (7 - j));\n }\n bytes[ct] = byte;\n }\n return bytes;\n}\nexport function bytes_to_bin(bytes) {\n const bin = new Array(bytes.length * 8);\n let count = 0;\n for (const num of bytes) {\n if (num > 255) {\n throw new Error(`Invalid byte value: ${num}. Byte values must be between 0 and 255.`);\n }\n for (let i = 7; i >= 0; i--, count++) {\n bin[count] = (num >> i) & 1;\n }\n }\n return bin.join('');\n}\n","export function get_random_bytes(length = 32) {\n if (crypto &&\n typeof crypto.getRandomValues === 'function') {\n return crypto.getRandomValues(new Uint8Array(length));\n }\n const pcrypto = crypto;\n if (pcrypto &&\n pcrypto.randomBytes !== undefined &&\n typeof pcrypto.randomBytes === 'function') {\n return pcrypto.randomBytes(length);\n }\n throw new Error('getRandomValues from crypto library is undefined');\n}\n","import { Buff } from '../class/buff.js';\nexport class Stream {\n constructor(data) {\n this.data = new Buff(data);\n this.size = this.data.length;\n }\n peek(size) {\n if (size > this.size) {\n throw new Error(`Size greater than stream: ${size} > ${this.size}`);\n }\n return new Buff(this.data.slice(0, size));\n }\n read(size) {\n const chunk = this.peek(size);\n this.data = this.data.slice(size);\n this.size = this.data.length;\n return chunk;\n }\n varint(endian) {\n const num = this.read(1).num;\n switch (true) {\n case (num >= 0 && num < 0xFD):\n return num;\n case (num === 0xFD):\n return this.read(2).to_num(endian);\n case (num === 0xFE):\n return this.read(4).to_num(endian);\n case (num === 0xFF):\n return this.read(8).to_num(endian);\n default:\n throw new Error(`Varint is out of range: ${num}`);\n }\n }\n}\n","export const now = () => Math.floor(Date.now() / 1000);\nexport const sleep = (ms = 1000) => new Promise(res => setTimeout(res, ms));\nexport function create_timeout(promise, timeout) {\n return new Promise(async (resolve, reject) => {\n const timer = setTimeout(() => reject('timeout'), timeout);\n const res = await promise;\n clearTimeout(timer);\n resolve(res);\n });\n}\nexport function sort_obj(obj) {\n if (obj instanceof Map || Array.isArray(obj) || typeof obj !== 'object') {\n return obj;\n }\n else {\n return Object.keys(obj)\n .sort()\n .filter(([_, value]) => value !== undefined)\n .reduce((sorted, key) => {\n sorted[key] = obj[key];\n return sorted;\n }, {});\n }\n}\nexport function parse_error(err) {\n if (err instanceof Error)\n return err.message;\n if (typeof err === 'string')\n return err;\n return String(err);\n}\n","import { Buff } from '@vbyte/buff';\nimport { sort_obj } from './util.js';\nexport var Test;\n(function (Test) {\n function exists(value) {\n if (typeof value === 'undefined' || value === null) {\n return false;\n }\n return true;\n }\n Test.exists = exists;\n function is_equal(a, b) {\n return a === b;\n }\n Test.is_equal = is_equal;\n function is_object(value) {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n }\n Test.is_object = is_object;\n function is_deep_equal(a, b) {\n if (is_object(a))\n a = sort_obj(a);\n if (is_object(b))\n b = sort_obj(b);\n return String(a) === String(b);\n }\n Test.is_deep_equal = is_deep_equal;\n function has_items(array) {\n return Array.isArray(array) && array.length > 0;\n }\n Test.has_items = has_items;\n function is_string(value) {\n return typeof value === 'string';\n }\n Test.is_string = is_string;\n function is_number(value) {\n return Number.isInteger(value) && !Number.isNaN(value);\n }\n Test.is_number = is_number;\n function is_bigint(value) {\n return typeof value === 'bigint';\n }\n Test.is_bigint = is_bigint;\n function is_uchar(value) {\n return is_number(value) && value >= 0 && value <= 0xFF;\n }\n Test.is_uchar = is_uchar;\n function is_ushort(value) {\n return is_number(value) && value >= 0 && value <= 0xFFFF;\n }\n Test.is_ushort = is_ushort;\n function is_uint(value) {\n return is_number(value) && value >= 0 && value <= 0xFFFFFFFF;\n }\n Test.is_uint = is_uint;\n function is_u8a(value) {\n return value instanceof Uint8Array;\n }\n Test.is_u8a = is_u8a;\n function is_bytes(value) {\n return Buff.is_bytes(value);\n }\n Test.is_bytes = is_bytes;\n function is_base58(value) {\n if (typeof value !== 'string')\n return false;\n return /^[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+$/.test(value);\n }\n Test.is_base58 = is_base58;\n function is_base64(value) {\n if (typeof value !== 'string')\n return false;\n return /^[a-zA-Z0-9+/]+={0,2}$/.test(value);\n }\n Test.is_base64 = is_base64;\n function is_b64url(value) {\n if (typeof value !== 'string')\n return false;\n return /^[a-zA-Z0-9\\-_]+={0,2}$/.test(value);\n }\n Test.is_b64url = is_b64url;\n function is_bech32(value) {\n if (typeof value !== 'string')\n return false;\n return /^[a-z]+1[023456789acdefghjklmnpqrstuvwxyz]+$/.test(value);\n }\n Test.is_bech32 = is_bech32;\n function is_hex(value) {\n if (!is_string(value))\n return false;\n return (value.match(/[^a-fA-F0-9]/) === null && value.length % 2 === 0);\n }\n Test.is_hex = is_hex;\n function is_hash(value) {\n return (is_string(value) && is_hex(value) && value.length === 64);\n }\n Test.is_hash = is_hash;\n})(Test || (Test = {}));\n","import { Buff } from '@vbyte/buff';\nimport { Test } from './test.js';\nexport var Assert;\n(function (Assert) {\n function ok(value, message) {\n if (value === false) {\n throw new Error(message ?? 'Assertion failed!');\n }\n }\n Assert.ok = ok;\n function exists(value, msg) {\n if (!Test.exists(value)) {\n throw new Error(msg ?? 'Value is null or undefined!');\n }\n }\n Assert.exists = exists;\n function is_empty(value, msg) {\n if (value !== null && value !== undefined) {\n throw new Error(msg ?? 'value is not null or undefined!');\n }\n }\n Assert.is_empty = is_empty;\n function is_instance(value, type, msg) {\n if (!(value instanceof type)) {\n throw new Error(msg ?? `value is not an instance of ${type.name}`);\n }\n }\n Assert.is_instance = is_instance;\n function is_equal(a, b, msg) {\n if (!Test.is_equal(a, b)) {\n throw new Error(msg ?? `values are not equal: ${String(a)} !== ${String(b)}`);\n }\n }\n Assert.is_equal = is_equal;\n function is_object(value, msg) {\n if (!Test.is_object(value)) {\n throw new Error(msg ?? `value is not an object: ${String(value)}`);\n }\n }\n Assert.is_object = is_object;\n function is_deep_equal(a, b, msg) {\n if (!Test.is_deep_equal(a, b)) {\n throw new Error(msg ?? `values are not deep equal: ${String(a)} !== ${String(b)}`);\n }\n }\n Assert.is_deep_equal = is_deep_equal;\n function is_number(value) {\n if (!Test.is_number(value)) {\n throw new TypeError(`invalid number: ${String(value)}`);\n }\n }\n Assert.is_number = is_number;\n function is_bigint(value) {\n if (!Test.is_bigint(value)) {\n throw new TypeError(`invalid bigint: ${String(value)}`);\n }\n }\n Assert.is_bigint = is_bigint;\n function is_hex(value) {\n if (!Test.is_hex(value)) {\n throw new TypeError(`invalid hex: ${String(value)}`);\n }\n }\n Assert.is_hex = is_hex;\n function is_uchar(value) {\n if (!Test.is_uchar(value)) {\n throw new TypeError(`invalid unsignedchar: ${String(value)}`);\n }\n }\n Assert.is_uchar = is_uchar;\n function is_ushort(value) {\n if (!Test.is_ushort(value)) {\n throw new TypeError(`invalid unsigned short: ${String(value)}`);\n }\n }\n Assert.is_ushort = is_ushort;\n function is_uint(value) {\n if (!Test.is_uint(value)) {\n throw new TypeError(`invalid unsigned int: ${String(value)}`);\n }\n }\n Assert.is_uint = is_uint;\n function is_u8a(value) {\n if (!Test.is_u8a(value)) {\n throw new TypeError(`invalid Uint8Array: ${String(value)}`);\n }\n }\n Assert.is_u8a = is_u8a;\n function is_hash(value, msg) {\n if (!Test.is_hash(value)) {\n throw new TypeError(msg ?? `invalid hash: ${String(value)}`);\n }\n }\n Assert.is_hash = is_hash;\n function is_bytes(value, msg) {\n if (!Test.is_bytes(value)) {\n throw new TypeError(msg ?? `invalid bytes: ${String(value)}`);\n }\n }\n Assert.is_bytes = is_bytes;\n function size(input, size, msg) {\n const bytes = Buff.bytes(input);\n if (bytes.length !== size) {\n throw new Error(msg ?? `invalid input size: ${bytes.length} !== ${size}`);\n }\n }\n Assert.size = size;\n function has_items(array, err_msg) {\n if (!Test.has_items(array)) {\n throw new Error(err_msg ?? 'array does not contain any items');\n }\n }\n Assert.has_items = has_items;\n function is_base58(value) {\n if (!Test.is_base58(value)) {\n throw new Error('invalid base58 string');\n }\n }\n Assert.is_base58 = is_base58;\n function is_base64(value) {\n if (!Test.is_base64(value)) {\n throw new Error('invalid base64 string');\n }\n }\n Assert.is_base64 = is_base64;\n function is_b64url(value) {\n if (!Test.is_b64url(value)) {\n throw new Error('invalid base64url string');\n }\n }\n Assert.is_b64url = is_b64url;\n function is_bech32(value) {\n if (!Test.is_bech32(value)) {\n throw new Error('invalid bech32 string');\n }\n }\n Assert.is_bech32 = is_bech32;\n})(Assert || (Assert = {}));\n","export const crypto = typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\n//# sourceMappingURL=crypto.js.map","/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nexport function isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n/** Asserts something is positive integer. */\nexport function anumber(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error('positive integer expected, got ' + n);\n}\n/** Asserts something is Uint8Array. */\nexport function abytes(b, ...lengths) {\n if (!isBytes(b))\n throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\n/** Asserts something is hash */\nexport function ahash(h) {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash should be wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n/** Asserts a hash instance has not been destroyed / finished */\nexport function aexists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\n/** Asserts output is properly-sized byte array */\nexport function aoutput(out, instance) {\n abytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('digestInto() expects output buffer of length at least ' + min);\n }\n}\n/** Cast u8 / u16 / u32 to u8. */\nexport function u8(arr) {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** Cast u8 / u16 / u32 to u32. */\nexport function u32(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nexport function clean(...arrays) {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n/** Create DataView of an array for easy byte-level manipulation. */\nexport function createView(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** The rotate right (circular right shift) operation for uint32 */\nexport function rotr(word, shift) {\n return (word << (32 - shift)) | (word >>> shift);\n}\n/** The rotate left (circular left shift) operation for uint32 */\nexport function rotl(word, shift) {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexport const isLE = /* @__PURE__ */ (() => new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n/** The byte swap operation for uint32 */\nexport function byteSwap(word) {\n return (((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff));\n}\n/** Conditionally byte swap if on a big-endian platform */\nexport const swap8IfBE = isLE\n ? (n) => n\n : (n) => byteSwap(n);\n/** @deprecated */\nexport const byteSwapIfBE = swap8IfBE;\n/** In place byte swap for Uint32Array */\nexport function byteSwap32(arr) {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\nexport const swap32IfBE = isLE\n ? (u) => u\n : byteSwap32;\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin = /* @__PURE__ */ (() => \n// @ts-ignore\ntypeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes) {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin)\n return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 };\nfunction asciiToBase16(ch) {\n if (ch >= asciis._0 && ch <= asciis._9)\n return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F)\n return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f)\n return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin)\n return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nexport const nextTick = async () => { };\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nexport async function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await nextTick();\n ts += diff;\n }\n}\n/**\n * Converts string to bytes using UTF8 encoding.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Converts bytes to string using UTF8 encoding.\n * @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'\n */\nexport function bytesToUtf8(bytes) {\n return new TextDecoder().decode(bytes);\n}\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nexport function kdfInputToBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/** Copies several Uint8Arrays into one. */\nexport function concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\nexport function checkOpts(defaults, opts) {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\n/** For runtime check if class implements interface */\nexport class Hash {\n}\n/** Wraps hash function, creating an interface on top of it */\nexport function createHasher(hashCons) {\n const hashC = (msg) => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\nexport function createOptHasher(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexport function createXOFer(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexport const wrapConstructor = createHasher;\nexport const wrapConstructorWithOpts = createOptHasher;\nexport const wrapXOFConstructorWithOpts = createXOFer;\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nexport function randomBytes(bytesLength = 32) {\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n // Legacy Node.js compatibility\n if (crypto && typeof crypto.randomBytes === 'function') {\n return Uint8Array.from(crypto.randomBytes(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n//# sourceMappingURL=utils.js.map","/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nimport { Hash, abytes, aexists, aoutput, clean, createView, toBytes } from \"./utils.js\";\n/** Polyfill for Safari 14. https://caniuse.com/mdn-javascript_builtins_dataview_setbiguint64 */\nexport function setBigUint64(view, byteOffset, value, isLE) {\n if (typeof view.setBigUint64 === 'function')\n return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number((value >> _32n) & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\n/** Choice: a ? b : c */\nexport function Chi(a, b, c) {\n return (a & b) ^ (~a & c);\n}\n/** Majority function, true if any two inputs is true. */\nexport function Maj(a, b, c) {\n return (a & b) ^ (a & c) ^ (b & c);\n}\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport class HashMD extends Hash {\n constructor(blockLen, outputLen, padOffset, isLE) {\n super();\n this.finished = false;\n this.length = 0;\n this.pos = 0;\n this.destroyed = false;\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data) {\n aexists(this);\n data = toBytes(data);\n abytes(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen)\n this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out) {\n aexists(this);\n aoutput(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n clean(this.buffer.subarray(pos));\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++)\n buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n if (len % 4)\n throw new Error('_sha2: outputLen should be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length)\n throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++)\n oview.setUint32(4 * i, state[i], isLE);\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to) {\n to || (to = new this.constructor());\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n if (length % blockLen)\n to.buffer.set(buffer);\n return to;\n }\n clone() {\n return this._cloneInto();\n }\n}\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n/** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */\nexport const SHA256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */\nexport const SHA224_IV = /* @__PURE__ */ Uint32Array.from([\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */\nexport const SHA384_IV = /* @__PURE__ */ Uint32Array.from([\n 0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */\nexport const SHA512_IV = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n//# sourceMappingURL=_md.js.map","/**\n * SHA2 hash function. A.k.a. sha256, sha384, sha512, sha512_224, sha512_256.\n * SHA256 is the fastest hash implementable in JS, even faster than Blake3.\n * Check out [RFC 4634](https://datatracker.ietf.org/doc/html/rfc4634) and\n * [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n */\nimport { Chi, HashMD, Maj, SHA224_IV, SHA256_IV, SHA384_IV, SHA512_IV } from \"./_md.js\";\nimport * as u64 from \"./_u64.js\";\nimport { clean, createHasher, rotr } from \"./utils.js\";\n/**\n * Round constants:\n * First 32 bits of fractional parts of the cube roots of the first 64 primes 2..311)\n */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n/** Reusable temporary buffer. \"W\" comes straight from spec. */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nexport class SHA256 extends HashMD {\n constructor(outputLen = 32) {\n super(64, outputLen, 8, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n this.A = SHA256_IV[0] | 0;\n this.B = SHA256_IV[1] | 0;\n this.C = SHA256_IV[2] | 0;\n this.D = SHA256_IV[3] | 0;\n this.E = SHA256_IV[4] | 0;\n this.F = SHA256_IV[5] | 0;\n this.G = SHA256_IV[6] | 0;\n this.H = SHA256_IV[7] | 0;\n }\n get() {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n set(A, B, C, D, E, F, G, H) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4)\n SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = (sigma0 + Maj(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n roundClean() {\n clean(SHA256_W);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n clean(this.buffer);\n }\n}\nexport class SHA224 extends SHA256 {\n constructor() {\n super(28);\n this.A = SHA224_IV[0] | 0;\n this.B = SHA224_IV[1] | 0;\n this.C = SHA224_IV[2] | 0;\n this.D = SHA224_IV[3] | 0;\n this.E = SHA224_IV[4] | 0;\n this.F = SHA224_IV[5] | 0;\n this.G = SHA224_IV[6] | 0;\n this.H = SHA224_IV[7] | 0;\n }\n}\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n// Round contants\n// First 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (() => u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (() => K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (() => K512[1])();\n// Reusable temporary buffers\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\nexport class SHA512 extends HashMD {\n constructor(outputLen = 64) {\n super(128, outputLen, 16, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = SHA512_IV[0] | 0;\n this.Al = SHA512_IV[1] | 0;\n this.Bh = SHA512_IV[2] | 0;\n this.Bl = SHA512_IV[3] | 0;\n this.Ch = SHA512_IV[4] | 0;\n this.Cl = SHA512_IV[5] | 0;\n this.Dh = SHA512_IV[6] | 0;\n this.Dl = SHA512_IV[7] | 0;\n this.Eh = SHA512_IV[8] | 0;\n this.El = SHA512_IV[9] | 0;\n this.Fh = SHA512_IV[10] | 0;\n this.Fl = SHA512_IV[11] | 0;\n this.Gh = SHA512_IV[12] | 0;\n this.Gl = SHA512_IV[13] | 0;\n this.Hh = SHA512_IV[14] | 0;\n this.Hl = SHA512_IV[15] | 0;\n }\n // prettier-ignore\n get() {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl) {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n roundClean() {\n clean(SHA512_W_H, SHA512_W_L);\n }\n destroy() {\n clean(this.buffer);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\nexport class SHA384 extends SHA512 {\n constructor() {\n super(48);\n this.Ah = SHA384_IV[0] | 0;\n this.Al = SHA384_IV[1] | 0;\n this.Bh = SHA384_IV[2] | 0;\n this.Bl = SHA384_IV[3] | 0;\n this.Ch = SHA384_IV[4] | 0;\n this.Cl = SHA384_IV[5] | 0;\n this.Dh = SHA384_IV[6] | 0;\n this.Dl = SHA384_IV[7] | 0;\n this.Eh = SHA384_IV[8] | 0;\n this.El = SHA384_IV[9] | 0;\n this.Fh = SHA384_IV[10] | 0;\n this.Fl = SHA384_IV[11] | 0;\n this.Gh = SHA384_IV[12] | 0;\n this.Gl = SHA384_IV[13] | 0;\n this.Hh = SHA384_IV[14] | 0;\n this.Hl = SHA384_IV[15] | 0;\n }\n}\n/**\n * Truncated SHA512/256 and SHA512/224.\n * SHA512_IV is XORed with 0xa5a5a5a5a5a5a5a5, then used as \"intermediary\" IV of SHA512/t.\n * Then t hashes string to produce result IV.\n * See `test/misc/sha2-gen-iv.js`.\n */\n/** SHA512/224 IV */\nconst T224_IV = /* @__PURE__ */ Uint32Array.from([\n 0x8c3d37c8, 0x19544da2, 0x73e19966, 0x89dcd4d6, 0x1dfab7ae, 0x32ff9c82, 0x679dd514, 0x582f9fcf,\n 0x0f6d2b69, 0x7bd44da8, 0x77e36f73, 0x04c48942, 0x3f9d85a8, 0x6a1d36c8, 0x1112e6ad, 0x91d692a1,\n]);\n/** SHA512/256 IV */\nconst T256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x22312194, 0xfc2bf72c, 0x9f555fa3, 0xc84c64c2, 0x2393b86b, 0x6f53b151, 0x96387719, 0x5940eabd,\n 0x96283ee2, 0xa88effe3, 0xbe5e1e25, 0x53863992, 0x2b0199fc, 0x2c85b8aa, 0x0eb72ddc, 0x81c52ca2,\n]);\nexport class SHA512_224 extends SHA512 {\n constructor() {\n super(28);\n this.Ah = T224_IV[0] | 0;\n this.Al = T224_IV[1] | 0;\n this.Bh = T224_IV[2] | 0;\n this.Bl = T224_IV[3] | 0;\n this.Ch = T224_IV[4] | 0;\n this.Cl = T224_IV[5] | 0;\n this.Dh = T224_IV[6] | 0;\n this.Dl = T224_IV[7] | 0;\n this.Eh = T224_IV[8] | 0;\n this.El = T224_IV[9] | 0;\n this.Fh = T224_IV[10] | 0;\n this.Fl = T224_IV[11] | 0;\n this.Gh = T224_IV[12] | 0;\n this.Gl = T224_IV[13] | 0;\n this.Hh = T224_IV[14] | 0;\n this.Hl = T224_IV[15] | 0;\n }\n}\nexport class SHA512_256 extends SHA512 {\n constructor() {\n super(32);\n this.Ah = T256_IV[0] | 0;\n this.Al = T256_IV[1] | 0;\n this.Bh = T256_IV[2] | 0;\n this.Bl = T256_IV[3] | 0;\n this.Ch = T256_IV[4] | 0;\n this.Cl = T256_IV[5] | 0;\n this.Dh = T256_IV[6] | 0;\n this.Dl = T256_IV[7] | 0;\n this.Eh = T256_IV[8] | 0;\n this.El = T256_IV[9] | 0;\n this.Fh = T256_IV[10] | 0;\n this.Fl = T256_IV[11] | 0;\n this.Gh = T256_IV[12] | 0;\n this.Gl = T256_IV[13] | 0;\n this.Hh = T256_IV[14] | 0;\n this.Hl = T256_IV[15] | 0;\n }\n}\n/**\n * SHA2-256 hash function from RFC 4634.\n *\n * It is the fastest JS hash, even faster than Blake3.\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n */\nexport const sha256 = /* @__PURE__ */ createHasher(() => new SHA256());\n/** SHA2-224 hash function from RFC 4634 */\nexport const sha224 = /* @__PURE__ */ createHasher(() => new SHA224());\n/** SHA2-512 hash function from RFC 4634. */\nexport const sha512 = /* @__PURE__ */ createHasher(() => new SHA512());\n/** SHA2-384 hash function from RFC 4634. */\nexport const sha384 = /* @__PURE__ */ createHasher(() => new SHA384());\n/**\n * SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_256 = /* @__PURE__ */ createHasher(() => new SHA512_256());\n/**\n * SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_224 = /* @__PURE__ */ createHasher(() => new SHA512_224());\n//# sourceMappingURL=sha2.js.map","/**\n * HMAC: RFC2104 message authentication code.\n * @module\n */\nimport { abytes, aexists, ahash, clean, Hash, toBytes } from \"./utils.js\";\nexport class HMAC extends Hash {\n constructor(hash, _key) {\n super();\n this.finished = false;\n this.destroyed = false;\n ahash(hash);\n const key = toBytes(_key);\n this.iHash = hash.create();\n if (typeof this.iHash.update !== 'function')\n throw new Error('Expected instance of class which extends utils.Hash');\n this.blockLen = this.iHash.blockLen;\n this.outputLen = this.iHash.outputLen;\n const blockLen = this.blockLen;\n const pad = new Uint8Array(blockLen);\n // blockLen can be bigger than outputLen\n pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 0x36;\n this.iHash.update(pad);\n // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone\n this.oHash = hash.create();\n // Undo internal XOR && apply outer XOR\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 0x36 ^ 0x5c;\n this.oHash.update(pad);\n clean(pad);\n }\n update(buf) {\n aexists(this);\n this.iHash.update(buf);\n return this;\n }\n digestInto(out) {\n aexists(this);\n abytes(out, this.outputLen);\n this.finished = true;\n this.iHash.digestInto(out);\n this.oHash.update(out);\n this.oHash.digestInto(out);\n this.destroy();\n }\n digest() {\n const out = new Uint8Array(this.oHash.outputLen);\n this.digestInto(out);\n return out;\n }\n _cloneInto(to) {\n // Create new instance without calling constructor since key already in state and we don't know it.\n to || (to = Object.create(Object.getPrototypeOf(this), {}));\n const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n to = to;\n to.finished = finished;\n to.destroyed = destroyed;\n to.blockLen = blockLen;\n to.outputLen = outputLen;\n to.oHash = oHash._cloneInto(to.oHash);\n to.iHash = iHash._cloneInto(to.iHash);\n return to;\n }\n clone() {\n return this._cloneInto();\n }\n destroy() {\n this.destroyed = true;\n this.oHash.destroy();\n this.iHash.destroy();\n }\n}\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - message key\n * @param message - message data\n * @example\n * import { hmac } from '@noble/hashes/hmac';\n * import { sha256 } from '@noble/hashes/sha2';\n * const mac1 = hmac(sha256, 'key', 'message');\n */\nexport const hmac = (hash, key, message) => new HMAC(hash, key).update(message).digest();\nhmac.create = (hash, key) => new HMAC(hash, key);\n//# sourceMappingURL=hmac.js.map","/**\n * Hex, bytes and number utilities.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { abytes as abytes_, bytesToHex as bytesToHex_, concatBytes as concatBytes_, hexToBytes as hexToBytes_, isBytes as isBytes_, } from '@noble/hashes/utils.js';\nexport { abytes, anumber, bytesToHex, bytesToUtf8, concatBytes, hexToBytes, isBytes, randomBytes, utf8ToBytes, } from '@noble/hashes/utils.js';\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nexport function abool(title, value) {\n if (typeof value !== 'boolean')\n throw new Error(title + ' boolean expected, got ' + value);\n}\n// Used in weierstrass, der\nexport function numberToHexUnpadded(num) {\n const hex = num.toString(16);\n return hex.length & 1 ? '0' + hex : hex;\n}\nexport function hexToNumber(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n return hex === '' ? _0n : BigInt('0x' + hex); // Big Endian\n}\n// BE: Big Endian, LE: Little Endian\nexport function bytesToNumberBE(bytes) {\n return hexToNumber(bytesToHex_(bytes));\n}\nexport function bytesToNumberLE(bytes) {\n abytes_(bytes);\n return hexToNumber(bytesToHex_(Uint8Array.from(bytes).reverse()));\n}\nexport function numberToBytesBE(n, len) {\n return hexToBytes_(n.toString(16).padStart(len * 2, '0'));\n}\nexport function numberToBytesLE(n, len) {\n return numberToBytesBE(n, len).reverse();\n}\n// Unpadded, rarely used\nexport function numberToVarBytesBE(n) {\n return hexToBytes_(numberToHexUnpadded(n));\n}\n/**\n * Takes hex string or Uint8Array, converts to Uint8Array.\n * Validates output length.\n * Will throw error for other types.\n * @param title descriptive title for an error e.g. 'private key'\n * @param hex hex string or Uint8Array\n * @param expectedLength optional, will compare to result array's length\n * @returns\n */\nexport function ensureBytes(title, hex, expectedLength) {\n let res;\n if (typeof hex === 'string') {\n try {\n res = hexToBytes_(hex);\n }\n catch (e) {\n throw new Error(title + ' must be hex string or Uint8Array, cause: ' + e);\n }\n }\n else if (isBytes_(hex)) {\n // Uint8Array.from() instead of hash.slice() because node.js Buffer\n // is instance of Uint8Array, and its slice() creates **mutable** copy\n res = Uint8Array.from(hex);\n }\n else {\n throw new Error(title + ' must be hex string or Uint8Array');\n }\n const len = res.length;\n if (typeof expectedLength === 'number' && len !== expectedLength)\n throw new Error(title + ' of length ' + expectedLength + ' expected, got ' + len);\n return res;\n}\n// Compares 2 u8a-s in kinda constant time\nexport function equalBytes(a, b) {\n if (a.length !== b.length)\n return false;\n let diff = 0;\n for (let i = 0; i < a.length; i++)\n diff |= a[i] ^ b[i];\n return diff === 0;\n}\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\n// export const utf8ToBytes: typeof utf8ToBytes_ = utf8ToBytes_;\n/**\n * Converts bytes to string using UTF8 encoding.\n * @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'\n */\n// export const bytesToUtf8: typeof bytesToUtf8_ = bytesToUtf8_;\n// Is positive bigint\nconst isPosBig = (n) => typeof n === 'bigint' && _0n <= n;\nexport function inRange(n, min, max) {\n return isPosBig(n) && isPosBig(min) && isPosBig(max) && min <= n && n < max;\n}\n/**\n * Asserts min <= n < max. NOTE: It's < max and not <= max.\n * @example\n * aInRange('x', x, 1n, 256n); // would assume x is in (1n..255n)\n */\nexport function aInRange(title, n, min, max) {\n // Why min <= n < max and not a (min < n < max) OR b (min <= n <= max)?\n // consider P=256n, min=0n, max=P\n // - a for min=0 would require -1: `inRange('x', x, -1n, P)`\n // - b would commonly require subtraction: `inRange('x', x, 0n, P - 1n)`\n // - our way is the cleanest: `inRange('x', x, 0n, P)\n if (!inRange(n, min, max))\n throw new Error('expected valid ' + title + ': ' + min + ' <= n < ' + max + ', got ' + n);\n}\n// Bit operations\n/**\n * Calculates amount of bits in a bigint.\n * Same as `n.toString(2).length`\n * TODO: merge with nLength in modular\n */\nexport function bitLen(n) {\n let len;\n for (len = 0; n > _0n; n >>= _1n, len += 1)\n ;\n return len;\n}\n/**\n * Gets single bit at position.\n * NOTE: first bit position is 0 (same as arrays)\n * Same as `!!+Array.from(n.toString(2)).reverse()[pos]`\n */\nexport function bitGet(n, pos) {\n return (n >> BigInt(pos)) & _1n;\n}\n/**\n * Sets single bit at position.\n */\nexport function bitSet(n, pos, value) {\n return n | ((value ? _1n : _0n) << BigInt(pos));\n}\n/**\n * Calculate mask for N bits. Not using ** operator with bigints because of old engines.\n * Same as BigInt(`0b${Array(i).fill('1').join('')}`)\n */\nexport const bitMask = (n) => (_1n << BigInt(n)) - _1n;\n/**\n * Minimal HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n * @returns function that will call DRBG until 2nd arg returns something meaningful\n * @example\n * const drbg = createHmacDRBG<Key>(32, 32, hmac);\n * drbg(seed, bytesToKey); // bytesToKey must return Key or undefined\n */\nexport function createHmacDrbg(hashLen, qByteLen, hmacFn) {\n if (typeof hashLen !== 'number' || hashLen < 2)\n throw new Error('hashLen must be a number');\n if (typeof qByteLen !== 'number' || qByteLen < 2)\n throw new Error('qByteLen must be a number');\n if (typeof hmacFn !== 'function')\n throw new Error('hmacFn must be a function');\n // Step B, Step C: set hashLen to 8*ceil(hlen/8)\n const u8n = (len) => new Uint8Array(len); // creates Uint8Array\n const u8of = (byte) => Uint8Array.of(byte); // another shortcut\n let v = u8n(hashLen); // Minimal non-full-spec HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n let k = u8n(hashLen); // Steps B and C of RFC6979 3.2: set hashLen, in our case always same\n let i = 0; // Iterations counter, will throw when over 1000\n const reset = () => {\n v.fill(1);\n k.fill(0);\n i = 0;\n };\n const h = (...b) => hmacFn(k, v, ...b); // hmac(k)(v, ...values)\n const reseed = (seed = u8n(0)) => {\n // HMAC-DRBG reseed() function. Steps D-G\n k = h(u8of(0x00), seed); // k = hmac(k || v || 0x00 || seed)\n v = h(); // v = hmac(k || v)\n if (seed.length === 0)\n return;\n k = h(u8of(0x01), seed); // k = hmac(k || v || 0x01 || seed)\n v = h(); // v = hmac(k || v)\n };\n const gen = () => {\n // HMAC-DRBG generate() function\n if (i++ >= 1000)\n throw new Error('drbg: tried 1000 values');\n let len = 0;\n const out = [];\n while (len < qByteLen) {\n v = h();\n const sl = v.slice();\n out.push(sl);\n len += v.length;\n }\n return concatBytes_(...out);\n };\n const genUntil = (seed, pred) => {\n reset();\n reseed(seed); // Steps D-G\n let res = undefined; // Step H: grind until k is in [1..n-1]\n while (!(res = pred(gen())))\n reseed();\n reset();\n return res;\n };\n return genUntil;\n}\n// Validating curves and fields\nconst validatorFns = {\n bigint: (val) => typeof val === 'bigint',\n function: (val) => typeof val === 'function',\n boolean: (val) => typeof val === 'boolean',\n string: (val) => typeof val === 'string',\n stringOrUint8Array: (val) => typeof val === 'string' || isBytes_(val),\n isSafeInteger: (val) => Number.isSafeInteger(val),\n array: (val) => Array.isArray(val),\n field: (val, object) => object.Fp.isValid(val),\n hash: (val) => typeof val === 'function' && Number.isSafeInteger(val.outputLen),\n};\n// type Record<K extends string | number | symbol, T> = { [P in K]: T; }\nexport function validateObject(object, validators, optValidators = {}) {\n const checkField = (fieldName, type, isOptional) => {\n const checkVal = validatorFns[type];\n if (typeof checkVal !== 'function')\n throw new Error('invalid validator function');\n const val = object[fieldName];\n if (isOptional && val === undefined)\n return;\n if (!checkVal(val, object)) {\n throw new Error('param ' + String(fieldName) + ' is invalid. Expected ' + type + ', got ' + val);\n }\n };\n for (const [fieldName, type] of Object.entries(validators))\n checkField(fieldName, type, false);\n for (const [fieldName, type] of Object.entries(optValidators))\n checkField(fieldName, type, true);\n return object;\n}\n// validate type tests\n// const o: { a: number; b: number; c: number } = { a: 1, b: 5, c: 6 };\n// const z0 = validateObject(o, { a: 'isSafeInteger' }, { c: 'bigint' }); // Ok!\n// // Should fail type-check\n// const z1 = validateObject(o, { a: 'tmp' }, { c: 'zz' });\n// const z2 = validateObject(o, { a: 'isSafeInteger' }, { c: 'zz' });\n// const z3 = validateObject(o, { test: 'boolean', z: 'bug' });\n// const z4 = validateObject(o, { a: 'boolean', z: 'bug' });\nexport function isHash(val) {\n return typeof val === 'function' && Number.isSafeInteger(val.outputLen);\n}\nexport function _validateObject(object, fields, optFields = {}) {\n if (!object || typeof object !== 'object')\n throw new Error('expected valid options object');\n function checkField(fieldName, expectedType, isOpt) {\n const val = object[fieldName];\n if (isOpt && val === undefined)\n return;\n const current = typeof val;\n if (current !== expectedType || val === null)\n throw new Error(`param \"${fieldName}\" is invalid: expected ${expectedType}, got ${current}`);\n }\n Object.entries(fields).forEach(([k, v]) => checkField(k, v, false));\n Object.entries(optFields).forEach(([k, v]) => checkField(k, v, true));\n}\n/**\n * throws not implemented error\n */\nexport const notImplemented = () => {\n throw new Error('not implemented');\n};\n/**\n * Memoizes (caches) computation result.\n * Uses WeakMap: the value is going auto-cleaned by GC after last reference is removed.\n */\nexport function memoized(fn) {\n const map = new WeakMap();\n return (arg, ...args) => {\n const val = map.get(arg);\n if (val !== undefined)\n return val;\n const computed = fn(arg, ...args);\n map.set(arg, computed);\n return computed;\n };\n}\n//# sourceMappingURL=utils.js.map","/**\n * Utils for modular division and fields.\n * Field over 11 is a finite (Galois) field is integer number operations `mod 11`.\n * There is no division: it is replaced by modular multiplicative inverse.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { _validateObject, anumber, bitMask, bytesToNumberBE, bytesToNumberLE, ensureBytes, numberToBytesBE, numberToBytesLE, } from \"../utils.js\";\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = /* @__PURE__ */ BigInt(2), _3n = /* @__PURE__ */ BigInt(3);\n// prettier-ignore\nconst _4n = /* @__PURE__ */ BigInt(4), _5n = /* @__PURE__ */ BigInt(5);\nconst _8n = /* @__PURE__ */ BigInt(8);\n// Calculates a modulo b\nexport function mod(a, b) {\n const result = a % b;\n return result >= _0n ? result : b + result;\n}\n/**\n * Efficiently raise num to power and do modular division.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n * @example\n * pow(2n, 6n, 11n) // 64n % 11n == 9n\n */\nexport function pow(num, power, modulo) {\n return FpPow(Field(modulo), num, power);\n}\n/** Does `x^(2^power)` mod p. `pow2(30, 4)` == `30^(2^4)` */\nexport function pow2(x, power, modulo) {\n let res = x;\n while (power-- > _0n) {\n res *= res;\n res %= modulo;\n }\n return res;\n}\n/**\n * Inverses number over modulo.\n * Implemented using [Euclidean GCD](https://brilliant.org/wiki/extended-euclidean-algorithm/).\n */\nexport function invert(number, modulo) {\n if (number === _0n)\n throw new Error('invert: expected non-zero number');\n if (modulo <= _0n)\n throw new Error('invert: expected positive modulus, got ' + modulo);\n // Fermat's little theorem \"CT-like\" version inv(n) = n^(m-2) mod m is 30x slower.\n let a = mod(number, modulo);\n let b = modulo;\n // prettier-ignore\n let x = _0n, y = _1n, u = _1n, v = _0n;\n while (a !== _0n) {\n // JIT applies optimization if those two lines follow each other\n const q = b / a;\n const r = b % a;\n const m = x - u * q;\n const n = y - v * q;\n // prettier-ignore\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n const gcd = b;\n if (gcd !== _1n)\n throw new Error('invert: does not exist');\n return mod(x, modulo);\n}\n// Not all roots are possible! Example which will throw:\n// const NUM =\n// n = 72057594037927816n;\n// Fp = Field(BigInt('0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab'));\nfunction sqrt3mod4(Fp, n) {\n const p1div4 = (Fp.ORDER + _1n) / _4n;\n const root = Fp.pow(n, p1div4);\n // Throw if root^2 != n\n if (!Fp.eql(Fp.sqr(root), n))\n throw new Error('Cannot find square root');\n return root;\n}\nfunction sqrt5mod8(Fp, n) {\n const p5div8 = (Fp.ORDER - _5n) / _8n;\n const n2 = Fp.mul(n, _2n);\n const v = Fp.pow(n2, p5div8);\n const nv = Fp.mul(n, v);\n const i = Fp.mul(Fp.mul(nv, _2n), v);\n const root = Fp.mul(nv, Fp.sub(i, Fp.ONE));\n if (!Fp.eql(Fp.sqr(root), n))\n throw new Error('Cannot find square root');\n return root;\n}\n// TODO: Commented-out for now. Provide test vectors.\n// Tonelli is too slow for extension fields Fp2.\n// That means we can't use sqrt (c1, c2...) even for initialization constants.\n// if (P % _16n === _9n) return sqrt9mod16;\n// // prettier-ignore\n// function sqrt9mod16<T>(Fp: IField<T>, n: T, p7div16?: bigint) {\n// if (p7div16 === undefined) p7div16 = (Fp.ORDER + BigInt(7)) / _16n;\n// const c1 = Fp.sqrt(Fp.neg(Fp.ONE)); // 1. c1 = sqrt(-1) in F, i.e., (c1^2) == -1 in F\n// const c2 = Fp.sqrt(c1); // 2. c2 = sqrt(c1) in F, i.e., (c2^2) == c1 in F\n// const c3 = Fp.sqrt(Fp.neg(c1)); // 3. c3 = sqrt(-c1) in F, i.e., (c3^2) == -c1 in F\n// const c4 = p7div16; // 4. c4 = (q + 7) / 16 # Integer arithmetic\n// let tv1 = Fp.pow(n, c4); // 1. tv1 = x^c4\n// let tv2 = Fp.mul(c1, tv1); // 2. tv2 = c1 * tv1\n// const tv3 = Fp.mul(c2, tv1); // 3. tv3 = c2 * tv1\n// let tv4 = Fp.mul(c3, tv1); // 4. tv4 = c3 * tv1\n// const e1 = Fp.eql(Fp.sqr(tv2), n); // 5. e1 = (tv2^2) == x\n// const e2 = Fp.eql(Fp.sqr(tv3), n); // 6. e2 = (tv3^2) == x\n// tv1 = Fp.cmov(tv1, tv2, e1); // 7. tv1 = CMOV(tv1, tv2, e1) # Select tv2 if (tv2^2) == x\n// tv2 = Fp.cmov(tv4, tv3, e2); // 8. tv2 = CMOV(tv4, tv3, e2) # Select tv3 if (tv3^2) == x\n// const e3 = Fp.eql(Fp.sqr(tv2), n); // 9. e3 = (tv2^2) == x\n// return Fp.cmov(tv1, tv2, e3); // 10. z = CMOV(tv1, tv2, e3) # Select the sqrt from tv1 and tv2\n// }\n/**\n * Tonelli-Shanks square root search algorithm.\n * 1. https://eprint.iacr.org/2012/685.pdf (page 12)\n * 2. Square Roots from 1; 24, 51, 10 to Dan Shanks\n * @param P field order\n * @returns function that takes field Fp (created from P) and number n\n */\nexport function tonelliShanks(P) {\n // Initialization (precomputation).\n // Caching initialization could boost perf by 7%.\n if (P < BigInt(3))\n throw new Error('sqrt is not defined for small field');\n // Factor P - 1 = Q * 2^S, where Q is odd\n let Q = P - _1n;\n let S = 0;\n while (Q % _2n === _0n) {\n Q /= _2n;\n S++;\n }\n // Find the first quadratic non-residue Z >= 2\n let Z = _2n;\n const _Fp = Field(P);\n while (FpLegendre(_Fp, Z) === 1) {\n // Basic primality test for P. After x iterations, chance of\n // not finding quadratic non-residue is 2^x, so 2^1000.\n if (Z++ > 1000)\n throw new Error('Cannot find square root: probably non-prime P');\n }\n // Fast-path; usually done before Z, but we do \"primality test\".\n if (S === 1)\n return sqrt3mod4;\n // Slow-path\n // TODO: test on Fp2 and others\n let cc = _Fp.pow(Z, Q); // c = z^Q\n const Q1div2 = (Q + _1n) / _2n;\n return function tonelliSlow(Fp, n) {\n if (Fp.is0(n))\n return n;\n // Check if n is a quadratic residue using Legendre symbol\n if (FpLegendre(Fp, n) !== 1)\n throw new Error('Cannot find square root');\n // Initialize variables for the main loop\n let M = S;\n let c = Fp.mul(Fp.ONE, cc); // c = z^Q, move cc from field _Fp into field Fp\n let t = Fp.pow(n, Q); // t = n^Q, first guess at the fudge factor\n let R = Fp.pow(n, Q1div2); // R = n^((Q+1)/2), first guess at the square root\n // Main loop\n // while t != 1\n while (!Fp.eql(t, Fp.ONE)) {\n if (Fp.is0(t))\n return Fp.ZERO; // if t=0 return R=0\n let i = 1;\n // Find the smallest i >= 1 such that t^(2^i) ≡ 1 (mod P)\n let t_tmp = Fp.sqr(t); // t^(2^1)\n while (!Fp.eql(t_tmp, Fp.ONE)) {\n i++;\n t_tmp = Fp.sqr(t_tmp); // t^(2^2)...\n if (i === M)\n throw new Error('Cannot find square root');\n }\n // Calculate the exponent for b: 2^(M - i - 1)\n const exponent = _1n << BigInt(M - i - 1); // bigint is important\n const b = Fp.pow(c, exponent); // b = 2^(M - i - 1)\n // Update variables\n M = i;\n c = Fp.sqr(b); // c = b^2\n t = Fp.mul(t, c); // t = (t * b^2)\n R = Fp.mul(R, b); // R = R*b\n }\n return R;\n };\n}\n/**\n * Square root for a finite field. Will try optimized versions first:\n *\n * 1. P ≡ 3 (mod 4)\n * 2. P ≡ 5 (mod 8)\n * 3. Tonelli-Shanks algorithm\n *\n * Different algorithms can give different roots, it is up to user to decide which one they want.\n * For example there is FpSqrtOdd/FpSqrtEven to choice root based on oddness (used for hash-to-curve).\n */\nexport function FpSqrt(P) {\n // P ≡ 3 (mod 4) => √n = n^((P+1)/4)\n if (P % _4n === _3n)\n return sqrt3mod4;\n // P ≡ 5 (mod 8) => Atkin algorithm, page 10 of https://eprint.iacr.org/2012/685.pdf\n if (P % _8n === _5n)\n return sqrt5mod8;\n // P ≡ 9 (mod 16) not implemented, see above\n // Tonelli-Shanks algorithm\n return tonelliShanks(P);\n}\n// Little-endian check for first LE bit (last BE bit);\nexport const isNegativeLE = (num, modulo) => (mod(num, modulo) & _1n) === _1n;\n// prettier-ignore\nconst FIELD_FIELDS = [\n 'create', 'isValid', 'is0', 'neg', 'inv', 'sqrt', 'sqr',\n 'eql', 'add', 'sub', 'mul', 'pow', 'div',\n 'addN', 'subN', 'mulN', 'sqrN'\n];\nexport function validateField(field) {\n const initial = {\n ORDER: 'bigint',\n MASK: 'bigint',\n BYTES: 'number',\n BITS: 'number',\n };\n const opts = FIELD_FIELDS.reduce((map, val) => {\n map[val] = 'function';\n return map;\n }, initial);\n _validateObject(field, opts);\n // const max = 16384;\n // if (field.BYTES < 1 || field.BYTES > max) throw new Error('invalid field');\n // if (field.BITS < 1 || field.BITS > 8 * max) throw new Error('invalid field');\n return field;\n}\n// Generic field functions\n/**\n * Same as `pow` but for Fp: non-constant-time.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n */\nexport function FpPow(Fp, num, power) {\n if (power < _0n)\n throw new Error('invalid exponent, negatives unsupported');\n if (power === _0n)\n return Fp.ONE;\n if (power === _1n)\n return num;\n let p = Fp.ONE;\n let d = num;\n while (power > _0n) {\n if (power & _1n)\n p = Fp.mul(p, d);\n d = Fp.sqr(d);\n power >>= _1n;\n }\n return p;\n}\n/**\n * Efficiently invert an array of Field elements.\n * Exception-free. Will return `undefined` for 0 elements.\n * @param passZero map 0 to 0 (instead of undefined)\n */\nexport function FpInvertBatch(Fp, nums, passZero = false) {\n const inverted = new Array(nums.length).fill(passZero ? Fp.ZERO : undefined);\n // Walk from first to last, multiply them by each other MOD p\n const multipliedAcc = nums.reduce((acc, num, i) => {\n if (Fp.is0(num))\n return acc;\n inverted[i] = acc;\n return Fp.mul(acc, num);\n }, Fp.ONE);\n // Invert last element\n const invertedAcc = Fp.inv(multipliedAcc);\n // Walk from last to first, multiply them by inverted each other MOD p\n nums.reduceRight((acc, num, i) => {\n if (Fp.is0(num))\n return acc;\n inverted[i] = Fp.mul(acc, inverted[i]);\n return Fp.mul(acc, num);\n }, invertedAcc);\n return inverted;\n}\n// TODO: remove\nexport function FpDiv(Fp, lhs, rhs) {\n return Fp.mul(lhs, typeof rhs === 'bigint' ? invert(rhs, Fp.ORDER) : Fp.inv(rhs));\n}\n/**\n * Legendre symbol.\n * Legendre constant is used to calculate Legendre symbol (a | p)\n * which denotes the value of a^((p-1)/2) (mod p).\n *\n * * (a | p) ≡ 1 if a is a square (mod p), quadratic residue\n * * (a | p) ≡ -1 if a is not a square (mod p), quadratic non residue\n * * (a | p) ≡ 0 if a ≡ 0 (mod p)\n */\nexport function FpLegendre(Fp, n) {\n // We can use 3rd argument as optional cache of this value\n // but seems unneeded for now. The operation is very fast.\n const p1mod2 = (Fp.ORDER - _1n) / _2n;\n const powered = Fp.pow(n, p1mod2);\n const yes = Fp.eql(powered, Fp.ONE);\n const zero = Fp.eql(powered, Fp.ZERO);\n const no = Fp.eql(powered, Fp.neg(Fp.ONE));\n if (!yes && !zero && !no)\n throw new Error('invalid Legendre symbol result');\n return yes ? 1 : zero ? 0 : -1;\n}\n// This function returns True whenever the value x is a square in the field F.\nexport function FpIsSquare(Fp, n) {\n const l = FpLegendre(Fp, n);\n return l === 1;\n}\n// CURVE.n lengths\nexport function nLength(n, nBitLength) {\n // Bit size, byte size of CURVE.n\n if (nBitLength !== undefined)\n anumber(nBitLength);\n const _nBitLength = nBitLength !== undefined ? nBitLength : n.toString(2).length;\n const nByteLength = Math.ceil(_nBitLength / 8);\n return { nBitLength: _nBitLength, nByteLength };\n}\n/**\n * Creates a finite field. Major performance optimizations:\n * * 1. Denormalized operations like mulN instead of mul.\n * * 2. Identical object shape: never add or remove keys.\n * * 3. `Object.freeze`.\n * Fragile: always run a benchmark on a change.\n * Security note: operations don't check 'isValid' for all elements for performance reasons,\n * it is caller responsibility to check this.\n * This is low-level code, please make sure you know what you're doing.\n *\n * Note about field properties:\n * * CHARACTERISTIC p = prime number, number of elements in main subgroup.\n * * ORDER q = similar to cofactor in curves, may be composite `q = p^m`.\n *\n * @param ORDER field order, probably prime, or could be composite\n * @param bitLen how many bits the field consumes\n * @param isLE (default: false) if encoding / decoding should be in little-endian\n * @param redef optional faster redefinitions of sqrt and other methods\n */\nexport function Field(ORDER, bitLenOrOpts, isLE = false, opts = {}) {\n if (ORDER <= _0n)\n throw new Error('invalid field: expected ORDER > 0, got ' + ORDER);\n let _nbitLength = undefined;\n let _sqrt = undefined;\n if (typeof bitLenOrOpts === 'object' && bitLenOrOpts != null) {\n if (opts.sqrt || isLE)\n throw new Error('cannot specify opts in two arguments');\n const _opts = bitLenOrOpts;\n if (_opts.BITS)\n _nbitLength = _opts.BITS;\n if (_opts.sqrt)\n _sqrt = _opts.sqrt;\n if (typeof _opts.isLE === 'boolean')\n isLE = _opts.isLE;\n }\n else {\n if (typeof bitLenOrOpts === 'number')\n _nbitLength = bitLenOrOpts;\n if (opts.sqrt)\n _sqrt = opts.sqrt;\n }\n const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, _nbitLength);\n if (BYTES > 2048)\n throw new Error('invalid field: expected ORDER of <= 2048 bytes');\n let sqrtP; // cached sqrtP\n const f = Object.freeze({\n ORDER,\n isLE,\n BITS,\n BYTES,\n MASK: bitMask(BITS),\n ZERO: _0n,\n ONE: _1n,\n create: (num) => mod(num, ORDER),\n isValid: (num) => {\n if (typeof num !== 'bigint')\n throw new Error('invalid field element: expected bigint, got ' + typeof num);\n return _0n <= num && num < ORDER; // 0 is valid element, but it's not invertible\n },\n is0: (num) => num === _0n,\n // is valid and invertible\n isValidNot0: (num) => !f.is0(num) && f.isValid(num),\n isOdd: (num) => (num & _1n) === _1n,\n neg: (num) => mod(-num, ORDER),\n eql: (lhs, rhs) => lhs === rhs,\n sqr: (num) => mod(num * num, ORDER),\n add: (lhs, rhs) => mod(lhs + rhs, ORDER),\n sub: (lhs, rhs) => mod(lhs - rhs, ORDER),\n mul: (lhs, rhs) => mod(lhs * rhs, ORDER),\n pow: (num, power) => FpPow(f, num, power),\n div: (lhs, rhs) => mod(lhs * invert(rhs, ORDER), ORDER),\n // Same as above, but doesn't normalize\n sqrN: (num) => num * num,\n addN: (lhs, rhs) => lhs + rhs,\n subN: (lhs, rhs) => lhs - rhs,\n mulN: (lhs, rhs) => lhs * rhs,\n inv: (num) => invert(num, ORDER),\n sqrt: _sqrt ||\n ((n) => {\n if (!sqrtP)\n sqrtP = FpSqrt(ORDER);\n return sqrtP(f, n);\n }),\n toBytes: (num) => (isLE ? numberToBytesLE(num, BYTES) : numberToBytesBE(num, BYTES)),\n fromBytes: (bytes) => {\n if (bytes.length !== BYTES)\n throw new Error('Field.fromBytes: expected ' + BYTES + ' bytes, got ' + bytes.length);\n return isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n },\n // TODO: we don't need it here, move out to separate fn\n invertBatch: (lst) => FpInvertBatch(f, lst),\n // We can't move this out because Fp6, Fp12 implement it\n // and it's unclear what to return in there.\n cmov: (a, b, c) => (c ? b : a),\n });\n return Object.freeze(f);\n}\nexport function FpSqrtOdd(Fp, elm) {\n if (!Fp.isOdd)\n throw new Error(\"Field doesn't have isOdd\");\n const root = Fp.sqrt(elm);\n return Fp.isOdd(root) ? root : Fp.neg(root);\n}\nexport function FpSqrtEven(Fp, elm) {\n if (!Fp.isOdd)\n throw new Error(\"Field doesn't have isOdd\");\n const root = Fp.sqrt(elm);\n return Fp.isOdd(root) ? Fp.neg(root) : root;\n}\n/**\n * \"Constant-time\" private key generation utility.\n * Same as mapKeyToField, but accepts less bytes (40 instead of 48 for 32-byte field).\n * Which makes it slightly more biased, less secure.\n * @deprecated use `mapKeyToField` instead\n */\nexport function hashToPrivateScalar(hash, groupOrder, isLE = false) {\n hash = ensureBytes('privateHash', hash);\n const hashLen = hash.length;\n const minLen = nLength(groupOrder).nByteLength + 8;\n if (minLen < 24 || hashLen < minLen || hashLen > 1024)\n throw new Error('hashToPrivateScalar: expected ' + minLen + '-1024 bytes of input, got ' + hashLen);\n const num = isLE ? bytesToNumberLE(hash) : bytesToNumberBE(hash);\n return mod(num, groupOrder - _1n) + _1n;\n}\n/**\n * Returns total number of bytes consumed by the field element.\n * For example, 32 bytes for usual 256-bit weierstrass curve.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of field\n */\nexport function getFieldBytesLength(fieldOrder) {\n if (typeof fieldOrder !== 'bigint')\n throw new Error('field order must be bigint');\n const bitLength = fieldOrder.toString(2).length;\n return Math.ceil(bitLength / 8);\n}\n/**\n * Returns minimal amount of bytes that can be safely reduced\n * by field order.\n * Should be 2^-128 for 128-bit curve such as P256.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of target hash\n */\nexport function getMinHashLength(fieldOrder) {\n const length = getFieldBytesLength(fieldOrder);\n return length + Math.ceil(length / 2);\n}\n/**\n * \"Constant-time\" private key generation utility.\n * Can take (n + n/2) or more bytes of uniform input e.g. from CSPRNG or KDF\n * and convert them into private scalar, with the modulo bias being negligible.\n * Needs at least 48 bytes of input for 32-byte private key.\n * https://research.kudelskisecurity.com/2020/07/28/the-definitive-guide-to-modulo-bias-and-how-to-avoid-it/\n * FIPS 186-5, A.2 https://csrc.nist.gov/publications/detail/fips/186/5/final\n * RFC 9380, https://www.rfc-editor.org/rfc/rfc9380#section-5\n * @param hash hash output from SHA3 or a similar function\n * @param groupOrder size of subgroup - (e.g. secp256k1.CURVE.n)\n * @param isLE interpret hash bytes as LE num\n * @returns valid private scalar\n */\nexport function mapHashToField(key, fieldOrder, isLE = false) {\n const len = key.length;\n const fieldLen = getFieldBytesLength(fieldOrder);\n const minLen = getMinHashLength(fieldOrder);\n // No small numbers: need to understand bias story. No huge numbers: easier to detect JS timings.\n if (len < 16 || len < minLen || len > 1024)\n throw new Error('expected ' + minLen + '-1024 bytes of input, got ' + len);\n const num = isLE ? bytesToNumberLE(key) : bytesToNumberBE(key);\n // `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0\n const reduced = mod(num, fieldOrder - _1n) + _1n;\n return isLE ? numberToBytesLE(reduced, fieldLen) : numberToBytesBE(reduced, fieldLen);\n}\n//# sourceMappingURL=modular.js.map","/**\n * Methods for elliptic curve multiplication by scalars.\n * Contains wNAF, pippenger\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { bitLen, bitMask, validateObject } from \"../utils.js\";\nimport { Field, FpInvertBatch, nLength, validateField } from \"./modular.js\";\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nexport function negateCt(condition, item) {\n const neg = item.negate();\n return condition ? neg : item;\n}\n/**\n * Takes a bunch of Projective Points but executes only one\n * inversion on all of them. Inversion is very slow operation,\n * so this improves performance massively.\n * Optimization: converts a list of projective points to a list of identical points with Z=1.\n */\nexport function normalizeZ(c, property, points) {\n const getz = property === 'pz' ? (p) => p.pz : (p) => p.ez;\n const toInv = FpInvertBatch(c.Fp, points.map(getz));\n // @ts-ignore\n const affined = points.map((p, i) => p.toAffine(toInv[i]));\n return affined.map(c.fromAffine);\n}\nfunction validateW(W, bits) {\n if (!Number.isSafeInteger(W) || W <= 0 || W > bits)\n throw new Error('invalid window size, expected [1..' + bits + '], got W=' + W);\n}\nfunction calcWOpts(W, scalarBits) {\n validateW(W, scalarBits);\n const windows = Math.ceil(scalarBits / W) + 1; // W=8 33. Not 32, because we skip zero\n const windowSize = 2 ** (W - 1); // W=8 128. Not 256, because we skip zero\n const maxNumber = 2 ** W; // W=8 256\n const mask = bitMask(W); // W=8 255 == mask 0b11111111\n const shiftBy = BigInt(W); // W=8 8\n return { windows, windowSize, mask, maxNumber, shiftBy };\n}\nfunction calcOffsets(n, window, wOpts) {\n const { windowSize, mask, maxNumber, shiftBy } = wOpts;\n let wbits = Number(n & mask); // extract W bits.\n let nextN = n >> shiftBy; // shift number by W bits.\n // What actually happens here:\n // const highestBit = Number(mask ^ (mask >> 1n));\n // let wbits2 = wbits - 1; // skip zero\n // if (wbits2 & highestBit) { wbits2 ^= Number(mask); // (~);\n // split if bits > max: +224 => 256-32\n if (wbits > windowSize) {\n // we skip zero, which means instead of `>= size-1`, we do `> size`\n wbits -= maxNumber; // -32, can be maxNumber - wbits, but then we need to set isNeg here.\n nextN += _1n; // +256 (carry)\n }\n const offsetStart = window * windowSize;\n const offset = offsetStart + Math.abs(wbits) - 1; // -1 because we skip zero\n const isZero = wbits === 0; // is current window slice a 0?\n const isNeg = wbits < 0; // is current window slice negative?\n const isNegF = window % 2 !== 0; // fake random statement for noise\n const offsetF = offsetStart; // fake offset for noise\n return { nextN, offset, isZero, isNeg, isNegF, offsetF };\n}\nfunction validateMSMPoints(points, c) {\n if (!Array.isArray(points))\n throw new Error('array expected');\n points.forEach((p, i) => {\n if (!(p instanceof c))\n throw new Error('invalid point at index ' + i);\n });\n}\nfunction validateMSMScalars(scalars, field) {\n if (!Array.isArray(scalars))\n throw new Error('array of scalars expected');\n scalars.forEach((s, i) => {\n if (!field.isValid(s))\n throw new Error('invalid scalar at index ' + i);\n });\n}\n// Since points in different groups cannot be equal (different object constructor),\n// we can have single place to store precomputes.\n// Allows to make points frozen / immutable.\nconst pointPrecomputes = new WeakMap();\nconst pointWindowSizes = new WeakMap();\nfunction getW(P) {\n return pointWindowSizes.get(P) || 1;\n}\nfunction assert0(n) {\n if (n !== _0n)\n throw new Error('invalid wNAF');\n}\n/**\n * Elliptic curve multiplication of Point by scalar. Fragile.\n * Scalars should always be less than curve order: this should be checked inside of a curve itself.\n * Creates precomputation tables for fast multiplication:\n * - private scalar is split by fixed size windows of W bits\n * - every window point is collected from window's table & added to accumulator\n * - since windows are different, same point inside tables won't be accessed more than once per calc\n * - each multiplication is 'Math.ceil(CURVE_ORDER / 𝑊) + 1' point additions (fixed for any scalar)\n * - +1 window is neccessary for wNAF\n * - wNAF reduces table size: 2x less memory + 2x faster generation, but 10% slower multiplication\n *\n * @todo Research returning 2d JS array of windows, instead of a single window.\n * This would allow windows to be in different memory locations\n */\nexport function wNAF(c, bits) {\n return {\n constTimeNegate: negateCt,\n hasPrecomputes(elm) {\n return getW(elm) !== 1;\n },\n // non-const time multiplication ladder\n unsafeLadder(elm, n, p = c.ZERO) {\n let d = elm;\n while (n > _0n) {\n if (n & _1n)\n p = p.add(d);\n d = d.double();\n n >>= _1n;\n }\n return p;\n },\n /**\n * Creates a wNAF precomputation window. Used for caching.\n * Default window size is set by `utils.precompute()` and is equal to 8.\n * Number of precomputed points depends on the curve size:\n * 2^(𝑊−1) * (Math.ceil(𝑛 / 𝑊) + 1), where:\n * - 𝑊 is the window size\n * - 𝑛 is the bitlength of the curve order.\n * For a 256-bit curve and window size 8, the number of precomputed points is 128 * 33 = 4224.\n * @param elm Point instance\n * @param W window size\n * @returns precomputed point tables flattened to a single array\n */\n precomputeWindow(elm, W) {\n const { windows, windowSize } = calcWOpts(W, bits);\n const points = [];\n let p = elm;\n let base = p;\n for (let window = 0; window < windows; window++) {\n base = p;\n points.push(base);\n // i=1, bc we skip 0\n for (let i = 1; i < windowSize; i++) {\n base = base.add(p);\n points.push(base);\n }\n p = base.double();\n }\n return points;\n },\n /**\n * Implements ec multiplication using precomputed tables and w-ary non-adjacent form.\n * @param W window size\n * @param precomputes precomputed tables\n * @param n scalar (we don't check here, but should be less than curve order)\n * @returns real and fake (for const-time) points\n */\n wNAF(W, precomputes, n) {\n // Smaller version:\n // https://github.com/paulmillr/noble-secp256k1/blob/47cb1669b6e506ad66b35fe7d76132ae97465da2/index.ts#L502-L541\n // TODO: check the scalar is less than group order?\n // wNAF behavior is undefined otherwise. But have to carefully remove\n // other checks before wNAF. ORDER == bits here.\n // Accumulators\n let p = c.ZERO;\n let f = c.BASE;\n // This code was first written with assumption that 'f' and 'p' will never be infinity point:\n // since each addition is multiplied by 2 ** W, it cannot cancel each other. However,\n // there is negate now: it is possible that negated element from low value\n // would be the same as high element, which will create carry into next window.\n // It's not obvious how this can fail, but still worth investigating later.\n const wo = calcWOpts(W, bits);\n for (let window = 0; window < wo.windows; window++) {\n // (n === _0n) is handled and not early-exited. isEven and offsetF are used for noise\n const { nextN, offset, isZero, isNeg, isNegF, offsetF } = calcOffsets(n, window, wo);\n n = nextN;\n if (isZero) {\n // bits are 0: add garbage to fake point\n // Important part for const-time getPublicKey: add random \"noise\" point to f.\n f = f.add(negateCt(isNegF, precomputes[offsetF]));\n }\n else {\n // bits are 1: add to result point\n p = p.add(negateCt(isNeg, precomputes[offset]));\n }\n }\n assert0(n);\n // Return both real and fake points: JIT won't eliminate f.\n // At this point there is a way to F be infinity-point even if p is not,\n // which makes it less const-time: around 1 bigint multiply.\n return { p, f };\n },\n /**\n * Implements ec unsafe (non const-time) multiplication using precomputed tables and w-ary non-adjacent form.\n * @param W window size\n * @param precomputes precomputed tables\n * @param n scalar (we don't check here, but should be less than curve order)\n * @param acc accumulator point to add result of multiplication\n * @returns point\n */\n wNAFUnsafe(W, precomputes, n, acc = c.ZERO) {\n const wo = calcWOpts(W, bits);\n for (let window = 0; window < wo.windows; window++) {\n if (n === _0n)\n break; // Early-exit, skip 0 value\n const { nextN, offset, isZero, isNeg } = calcOffsets(n, window, wo);\n n = nextN;\n if (isZero) {\n // Window bits are 0: skip processing.\n // Move to next window.\n continue;\n }\n else {\n const item = precomputes[offset];\n acc = acc.add(isNeg ? item.negate() : item); // Re-using acc allows to save adds in MSM\n }\n }\n assert0(n);\n return acc;\n },\n getPrecomputes(W, P, transform) {\n // Calculate precomputes on a first run, reuse them after\n let comp = pointPrecomputes.get(P);\n if (!comp) {\n comp = this.precomputeWindow(P, W);\n if (W !== 1) {\n // Doing transform outside of if brings 15% perf hit\n if (typeof transform === 'function')\n comp = transform(comp);\n pointPrecomputes.set(P, comp);\n }\n }\n return comp;\n },\n wNAFCached(P, n, transform) {\n const W = getW(P);\n return this.wNAF(W, this.getPrecomputes(W, P, transform), n);\n },\n wNAFCachedUnsafe(P, n, transform, prev) {\n const W = getW(P);\n if (W === 1)\n return this.unsafeLadder(P, n, prev); // For W=1 ladder is ~x2 faster\n return this.wNAFUnsafe(W, this.getPrecomputes(W, P, transform), n, prev);\n },\n // We calculate precomputes for elliptic curve point multiplication\n // using windowed method. This specifies window size and\n // stores precomputed values. Usually only base point would be precomputed.\n setWindowSize(P, W) {\n validateW(W, bits);\n pointWindowSizes.set(P, W);\n pointPrecomputes.delete(P);\n },\n };\n}\n/**\n * Endomorphism-specific multiplication for Koblitz curves.\n * Cost: 128 dbl, 0-256 adds.\n */\nexport function mulEndoUnsafe(c, point, k1, k2) {\n let acc = point;\n let p1 = c.ZERO;\n let p2 = c.ZERO;\n while (k1 > _0n || k2 > _0n) {\n if (k1 & _1n)\n p1 = p1.add(acc);\n if (k2 & _1n)\n p2 = p2.add(acc);\n acc = acc.double();\n k1 >>= _1n;\n k2 >>= _1n;\n }\n return { p1, p2 };\n}\n/**\n * Pippenger algorithm for multi-scalar multiplication (MSM, Pa + Qb + Rc + ...).\n * 30x faster vs naive addition on L=4096, 10x faster than precomputes.\n * For N=254bit, L=1, it does: 1024 ADD + 254 DBL. For L=5: 1536 ADD + 254 DBL.\n * Algorithmically constant-time (for same L), even when 1 point + scalar, or when scalar = 0.\n * @param c Curve Point constructor\n * @param fieldN field over CURVE.N - important that it's not over CURVE.P\n * @param points array of L curve points\n * @param scalars array of L scalars (aka private keys / bigints)\n */\nexport function pippenger(c, fieldN, points, scalars) {\n // If we split scalars by some window (let's say 8 bits), every chunk will only\n // take 256 buckets even if there are 4096 scalars, also re-uses double.\n // TODO:\n // - https://eprint.iacr.org/2024/750.pdf\n // - https://tches.iacr.org/index.php/TCHES/article/view/10287\n // 0 is accepted in scalars\n validateMSMPoints(points, c);\n validateMSMScalars(scalars, fieldN);\n const plength = points.length;\n const slength = scalars.length;\n if (plength !== slength)\n throw new Error('arrays of points and scalars must have equal length');\n // if (plength === 0) throw new Error('array must be of length >= 2');\n const zero = c.ZERO;\n const wbits = bitLen(BigInt(plength));\n let windowSize = 1; // bits\n if (wbits > 12)\n windowSize = wbits - 3;\n else if (wbits > 4)\n windowSize = wbits - 2;\n else if (wbits > 0)\n windowSize = 2;\n const MASK = bitMask(windowSize);\n const buckets = new Array(Number(MASK) + 1).fill(zero); // +1 for zero array\n const lastBits = Math.floor((fieldN.BITS - 1) / windowSize) * windowSize;\n let sum = zero;\n for (let i = lastBits; i >= 0; i -= windowSize) {\n buckets.fill(zero);\n for (let j = 0; j < slength; j++) {\n const scalar = scalars[j];\n const wbits = Number((scalar >> BigInt(i)) & MASK);\n buckets[wbits] = buckets[wbits].add(points[j]);\n }\n let resI = zero; // not using this will do small speed-up, but will lose ct\n // Skip first bucket, because it is zero\n for (let j = buckets.length - 1, sumI = zero; j > 0; j--) {\n sumI = sumI.add(buckets[j]);\n resI = resI.add(sumI);\n }\n sum = sum.add(resI);\n if (i !== 0)\n for (let j = 0; j < windowSize; j++)\n sum = sum.double();\n }\n return sum;\n}\n/**\n * Precomputed multi-scalar multiplication (MSM, Pa + Qb + Rc + ...).\n * @param c Curve Point constructor\n * @param fieldN field over CURVE.N - important that it's not over CURVE.P\n * @param points array of L curve points\n * @returns function which multiplies points with scaars\n */\nexport function precomputeMSMUnsafe(c, fieldN, points, windowSize) {\n /**\n * Performance Analysis of Window-based Precomputation\n *\n * Base Case (256-bit scalar, 8-bit window):\n * - Standard precomputation requires:\n * - 31 additions per scalar × 256 scalars = 7,936 ops\n * - Plus 255 summary additions = 8,191 total ops\n * Note: Summary additions can be optimized via accumulator\n *\n * Chunked Precomputation Analysis:\n * - Using 32 chunks requires:\n * - 255 additions per chunk\n * - 256 doublings\n * - Total: (255 × 32) + 256 = 8,416 ops\n *\n * Memory Usage Comparison:\n * Window Size | Standard Points | Chunked Points\n * ------------|-----------------|---------------\n * 4-bit | 520 | 15\n * 8-bit | 4,224 | 255\n * 10-bit | 13,824 | 1,023\n * 16-bit | 557,056 | 65,535\n *\n * Key Advantages:\n * 1. Enables larger window sizes due to reduced memory overhead\n * 2. More efficient for smaller scalar counts:\n * - 16 chunks: (16 × 255) + 256 = 4,336 ops\n * - ~2x faster than standard 8,191 ops\n *\n * Limitations:\n * - Not suitable for plain precomputes (requires 256 constant doublings)\n * - Performance degrades with larger scalar counts:\n * - Optimal for ~256 scalars\n * - Less efficient for 4096+ scalars (Pippenger preferred)\n */\n validateW(windowSize, fieldN.BITS);\n validateMSMPoints(points, c);\n const zero = c.ZERO;\n const tableSize = 2 ** windowSize - 1; // table size (without zero)\n const chunks = Math.ceil(fieldN.BITS / windowSize); // chunks of item\n const MASK = bitMask(windowSize);\n const tables = points.map((p) => {\n const res = [];\n for (let i = 0, acc = p; i < tableSize; i++) {\n res.push(acc);\n acc = acc.add(p);\n }\n return res;\n });\n return (scalars) => {\n validateMSMScalars(scalars, fieldN);\n if (scalars.length > points.length)\n throw new Error('array of scalars must be smaller than array of points');\n let res = zero;\n for (let i = 0; i < chunks; i++) {\n // No need to double if accumulator is still zero.\n if (res !== zero)\n for (let j = 0; j < windowSize; j++)\n res = res.double();\n const shiftBy = BigInt(chunks * windowSize - (i + 1) * windowSize);\n for (let j = 0; j < scalars.length; j++) {\n const n = scalars[j];\n const curr = Number((n >> shiftBy) & MASK);\n if (!curr)\n continue; // skip zero scalars chunks\n res = res.add(tables[j][curr - 1]);\n }\n }\n return res;\n };\n}\n// TODO: remove\n/** @deprecated */\nexport function validateBasic(curve) {\n validateField(curve.Fp);\n validateObject(curve, {\n n: 'bigint',\n h: 'bigint',\n Gx: 'field',\n Gy: 'field',\n }, {\n nBitLength: 'isSafeInteger',\n nByteLength: 'isSafeInteger',\n });\n // Set defaults\n return Object.freeze({\n ...nLength(curve.n, curve.nBitLength),\n ...curve,\n ...{ p: curve.Fp.ORDER },\n });\n}\nfunction createField(order, field) {\n if (field) {\n if (field.ORDER !== order)\n throw new Error('Field.ORDER must match order: Fp == p, Fn == n');\n validateField(field);\n return field;\n }\n else {\n return Field(order);\n }\n}\n/** Validates CURVE opts and creates fields */\nexport function _createCurveFields(type, CURVE, curveOpts = {}) {\n if (!CURVE || typeof CURVE !== 'object')\n throw new Error(`expected valid ${type} CURVE object`);\n for (const p of ['p', 'n', 'h']) {\n const val = CURVE[p];\n if (!(typeof val === 'bigint' && val > _0n))\n throw new Error(`CURVE.${p} must be positive bigint`);\n }\n const Fp = createField(CURVE.p, curveOpts.Fp);\n const Fn = createField(CURVE.n, curveOpts.Fn);\n const _b = type === 'weierstrass' ? 'b' : 'd';\n const params = ['Gx', 'Gy', 'a', _b];\n for (const p of params) {\n // @ts-ignore\n if (!Fp.isValid(CURVE[p]))\n throw new Error(`CURVE.${p} must be valid field element of CURVE.Fp`);\n }\n return { Fp, Fn };\n}\n//# sourceMappingURL=curve.js.map","/**\n * Short Weierstrass curve methods. The formula is: y² = x³ + ax + b.\n *\n * ### Design rationale for types\n *\n * * Interaction between classes from different curves should fail:\n * `k256.Point.BASE.add(p256.Point.BASE)`\n * * For this purpose we want to use `instanceof` operator, which is fast and works during runtime\n * * Different calls of `curve()` would return different classes -\n * `curve(params) !== curve(params)`: if somebody decided to monkey-patch their curve,\n * it won't affect others\n *\n * TypeScript can't infer types for classes created inside a function. Classes is one instance\n * of nominative types in TypeScript and interfaces only check for shape, so it's hard to create\n * unique type for every function call.\n *\n * We can use generic types via some param, like curve opts, but that would:\n * 1. Enable interaction between `curve(params)` and `curve(params)` (curves of same params)\n * which is hard to debug.\n * 2. Params can be generic and we can't enforce them to be constant value:\n * if somebody creates curve from non-constant params,\n * it would be allowed to interact with other curves with non-constant params\n *\n * @todo https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html#unique-symbol\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { hmac } from '@noble/hashes/hmac.js';\nimport { _validateObject, abool, abytes, aInRange, bitMask, bytesToHex, bytesToNumberBE, concatBytes, createHmacDrbg, ensureBytes, hexToBytes, inRange, isBytes, memoized, numberToHexUnpadded, randomBytes, } from \"../utils.js\";\nimport { _createCurveFields, mulEndoUnsafe, negateCt, normalizeZ, pippenger, wNAF, } from \"./curve.js\";\nimport { Field, FpInvertBatch, getMinHashLength, mapHashToField, validateField, } from \"./modular.js\";\nfunction validateSigVerOpts(opts) {\n if (opts.lowS !== undefined)\n abool('lowS', opts.lowS);\n if (opts.prehash !== undefined)\n abool('prehash', opts.prehash);\n}\nexport class DERErr extends Error {\n constructor(m = '') {\n super(m);\n }\n}\n/**\n * ASN.1 DER encoding utilities. ASN is very complex & fragile. Format:\n *\n * [0x30 (SEQUENCE), bytelength, 0x02 (INTEGER), intLength, R, 0x02 (INTEGER), intLength, S]\n *\n * Docs: https://letsencrypt.org/docs/a-warm-welcome-to-asn1-and-der/, https://luca.ntop.org/Teaching/Appunti/asn1.html\n */\nexport const DER = {\n // asn.1 DER encoding utils\n Err: DERErr,\n // Basic building block is TLV (Tag-Length-Value)\n _tlv: {\n encode: (tag, data) => {\n const { Err: E } = DER;\n if (tag < 0 || tag > 256)\n throw new E('tlv.encode: wrong tag');\n if (data.length & 1)\n throw new E('tlv.encode: unpadded data');\n const dataLen = data.length / 2;\n const len = numberToHexUnpadded(dataLen);\n if ((len.length / 2) & 128)\n throw new E('tlv.encode: long form length too big');\n // length of length with long form flag\n const lenLen = dataLen > 127 ? numberToHexUnpadded((len.length / 2) | 128) : '';\n const t = numberToHexUnpadded(tag);\n return t + lenLen + len + data;\n },\n // v - value, l - left bytes (unparsed)\n decode(tag, data) {\n const { Err: E } = DER;\n let pos = 0;\n if (tag < 0 || tag > 256)\n throw new E('tlv.encode: wrong tag');\n if (data.length < 2 || data[pos++] !== tag)\n throw new E('tlv.decode: wrong tlv');\n const first = data[pos++];\n const isLong = !!(first & 128); // First bit of first length byte is flag for short/long form\n let length = 0;\n if (!isLong)\n length = first;\n else {\n // Long form: [longFlag(1bit), lengthLength(7bit), length (BE)]\n const lenLen = first & 127;\n if (!lenLen)\n throw new E('tlv.decode(long): indefinite length not supported');\n if (lenLen > 4)\n throw new E('tlv.decode(long): byte length is too big'); // this will overflow u32 in js\n const lengthBytes = data.subarray(pos, pos + lenLen);\n if (lengthBytes.length !== lenLen)\n throw new E('tlv.decode: length bytes not complete');\n if (lengthBytes[0] === 0)\n throw new E('tlv.decode(long): zero leftmost byte');\n for (const b of lengthBytes)\n length = (length << 8) | b;\n pos += lenLen;\n if (length < 128)\n throw new E('tlv.decode(long): not minimal encoding');\n }\n const v = data.subarray(pos, pos + length);\n if (v.length !== length)\n throw new E('tlv.decode: wrong value length');\n return { v, l: data.subarray(pos + length) };\n },\n },\n // https://crypto.stackexchange.com/a/57734 Leftmost bit of first byte is 'negative' flag,\n // since we always use positive integers here. It must always be empty:\n // - add zero byte if exists\n // - if next byte doesn't have a flag, leading zero is not allowed (minimal encoding)\n _int: {\n encode(num) {\n const { Err: E } = DER;\n if (num < _0n)\n throw new E('integer: negative integers are not allowed');\n let hex = numberToHexUnpadded(num);\n // Pad with zero byte if negative flag is present\n if (Number.parseInt(hex[0], 16) & 0b1000)\n hex = '00' + hex;\n if (hex.length & 1)\n throw new E('unexpected DER parsing assertion: unpadded hex');\n return hex;\n },\n decode(data) {\n const { Err: E } = DER;\n if (data[0] & 128)\n throw new E('invalid signature integer: negative');\n if (data[0] === 0x00 && !(data[1] & 128))\n throw new E('invalid signature integer: unnecessary leading zero');\n return bytesToNumberBE(data);\n },\n },\n toSig(hex) {\n // parse DER signature\n const { Err: E, _int: int, _tlv: tlv } = DER;\n const data = ensureBytes('signature', hex);\n const { v: seqBytes, l: seqLeftBytes } = tlv.decode(0x30, data);\n if (seqLeftBytes.length)\n throw new E('invalid signature: left bytes after parsing');\n const { v: rBytes, l: rLeftBytes } = tlv.decode(0x02, seqBytes);\n const { v: sBytes, l: sLeftBytes } = tlv.decode(0x02, rLeftBytes);\n if (sLeftBytes.length)\n throw new E('invalid signature: left bytes after parsing');\n return { r: int.decode(rBytes), s: int.decode(sBytes) };\n },\n hexFromSig(sig) {\n const { _tlv: tlv, _int: int } = DER;\n const rs = tlv.encode(0x02, int.encode(sig.r));\n const ss = tlv.encode(0x02, int.encode(sig.s));\n const seq = rs + ss;\n return tlv.encode(0x30, seq);\n },\n};\n// Be friendly to bad ECMAScript parsers by not using bigint literals\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3), _4n = BigInt(4);\n// TODO: remove\nexport function _legacyHelperEquat(Fp, a, b) {\n /**\n * y² = x³ + ax + b: Short weierstrass curve formula. Takes x, returns y².\n * @returns y²\n */\n function weierstrassEquation(x) {\n const x2 = Fp.sqr(x); // x * x\n const x3 = Fp.mul(x2, x); // x² * x\n return Fp.add(Fp.add(x3, Fp.mul(x, a)), b); // x³ + a * x + b\n }\n return weierstrassEquation;\n}\nexport function _legacyHelperNormPriv(Fn, allowedPrivateKeyLengths, wrapPrivateKey) {\n const { BYTES: expected } = Fn;\n // Validates if priv key is valid and converts it to bigint.\n function normPrivateKeyToScalar(key) {\n let num;\n if (typeof key === 'bigint') {\n num = key;\n }\n else {\n let bytes = ensureBytes('private key', key);\n if (allowedPrivateKeyLengths) {\n if (!allowedPrivateKeyLengths.includes(bytes.length * 2))\n throw new Error('invalid private key');\n const padded = new Uint8Array(expected);\n padded.set(bytes, padded.length - bytes.length);\n bytes = padded;\n }\n try {\n num = Fn.fromBytes(bytes);\n }\n catch (error) {\n throw new Error(`invalid private key: expected ui8a of size ${expected}, got ${typeof key}`);\n }\n }\n if (wrapPrivateKey)\n num = Fn.create(num); // disabled by default, enabled for BLS\n if (!Fn.isValidNot0(num))\n throw new Error('invalid private key: out of range [1..N-1]');\n return num;\n }\n return normPrivateKeyToScalar;\n}\nexport function weierstrassN(CURVE, curveOpts = {}) {\n const { Fp, Fn } = _createCurveFields('weierstrass', CURVE, curveOpts);\n const { h: cofactor, n: CURVE_ORDER } = CURVE;\n _validateObject(curveOpts, {}, {\n allowInfinityPoint: 'boolean',\n clearCofactor: 'function',\n isTorsionFree: 'function',\n fromBytes: 'function',\n toBytes: 'function',\n endo: 'object',\n wrapPrivateKey: 'boolean',\n });\n const { endo } = curveOpts;\n if (endo) {\n // validateObject(endo, { beta: 'bigint', splitScalar: 'function' });\n if (!Fp.is0(CURVE.a) ||\n typeof endo.beta !== 'bigint' ||\n typeof endo.splitScalar !== 'function') {\n throw new Error('invalid endo: expected \"beta\": bigint and \"splitScalar\": function');\n }\n }\n function assertCompressionIsSupported() {\n if (!Fp.isOdd)\n throw new Error('compression is not supported: Field does not have .isOdd()');\n }\n // Implements IEEE P1363 point encoding\n function pointToBytes(_c, point, isCompressed) {\n const { x, y } = point.toAffine();\n const bx = Fp.toBytes(x);\n abool('isCompressed', isCompressed);\n if (isCompressed) {\n assertCompressionIsSupported();\n const hasEvenY = !Fp.isOdd(y);\n return concatBytes(pprefix(hasEvenY), bx);\n }\n else {\n return concatBytes(Uint8Array.of(0x04), bx, Fp.toBytes(y));\n }\n }\n function pointFromBytes(bytes) {\n abytes(bytes);\n const L = Fp.BYTES;\n const LC = L + 1; // length compressed, e.g. 33 for 32-byte field\n const LU = 2 * L + 1; // length uncompressed, e.g. 65 for 32-byte field\n const length = bytes.length;\n const head = bytes[0];\n const tail = bytes.subarray(1);\n // No actual validation is done here: use .assertValidity()\n if (length === LC && (head === 0x02 || head === 0x03)) {\n const x = Fp.fromBytes(tail);\n if (!Fp.isValid(x))\n throw new Error('bad point: is not on curve, wrong x');\n const y2 = weierstrassEquation(x); // y² = x³ + ax + b\n let y;\n try {\n y = Fp.sqrt(y2); // y = y² ^ (p+1)/4\n }\n catch (sqrtError) {\n const err = sqrtError instanceof Error ? ': ' + sqrtError.message : '';\n throw new Error('bad point: is not on curve, sqrt error' + err);\n }\n assertCompressionIsSupported();\n const isYOdd = Fp.isOdd(y); // (y & _1n) === _1n;\n const isHeadOdd = (head & 1) === 1; // ECDSA-specific\n if (isHeadOdd !== isYOdd)\n y = Fp.neg(y);\n return { x, y };\n }\n else if (length === LU && head === 0x04) {\n // TODO: more checks\n const x = Fp.fromBytes(tail.subarray(L * 0, L * 1));\n const y = Fp.fromBytes(tail.subarray(L * 1, L * 2));\n if (!isValidXY(x, y))\n throw new Error('bad point: is not on curve');\n return { x, y };\n }\n else {\n throw new Error(`bad point: got length ${length}, expected compressed=${LC} or uncompressed=${LU}`);\n }\n }\n const toBytes = curveOpts.toBytes || pointToBytes;\n const fromBytes = curveOpts.fromBytes || pointFromBytes;\n const weierstrassEquation = _legacyHelperEquat(Fp, CURVE.a, CURVE.b);\n // TODO: move top-level\n /** Checks whether equation holds for given x, y: y² == x³ + ax + b */\n function isValidXY(x, y) {\n const left = Fp.sqr(y); // y²\n const right = weierstrassEquation(x); // x³ + ax + b\n return Fp.eql(left, right);\n }\n // Validate whether the passed curve params are valid.\n // Test 1: equation y² = x³ + ax + b should work for generator point.\n if (!isValidXY(CURVE.Gx, CURVE.Gy))\n throw new Error('bad curve params: generator point');\n // Test 2: discriminant Δ part should be non-zero: 4a³ + 27b² != 0.\n // Guarantees curve is genus-1, smooth (non-singular).\n const _4a3 = Fp.mul(Fp.pow(CURVE.a, _3n), _4n);\n const _27b2 = Fp.mul(Fp.sqr(CURVE.b), BigInt(27));\n if (Fp.is0(Fp.add(_4a3, _27b2)))\n throw new Error('bad curve params: a or b');\n /** Asserts coordinate is valid: 0 <= n < Fp.ORDER. */\n function acoord(title, n, banZero = false) {\n if (!Fp.isValid(n) || (banZero && Fp.is0(n)))\n throw new Error(`bad point coordinate ${title}`);\n return n;\n }\n function aprjpoint(other) {\n if (!(other instanceof Point))\n throw new Error('ProjectivePoint expected');\n }\n // Memoized toAffine / validity check. They are heavy. Points are immutable.\n // Converts Projective point to affine (x, y) coordinates.\n // Can accept precomputed Z^-1 - for example, from invertBatch.\n // (X, Y, Z) ∋ (x=X/Z, y=Y/Z)\n const toAffineMemo = memoized((p, iz) => {\n const { px: x, py: y, pz: z } = p;\n // Fast-path for normalized points\n if (Fp.eql(z, Fp.ONE))\n return { x, y };\n const is0 = p.is0();\n // If invZ was 0, we return zero point. However we still want to execute\n // all operations, so we replace invZ with a random number, 1.\n if (iz == null)\n iz = is0 ? Fp.ONE : Fp.inv(z);\n const ax = Fp.mul(x, iz);\n const ay = Fp.mul(y, iz);\n const zz = Fp.mul(z, iz);\n if (is0)\n return { x: Fp.ZERO, y: Fp.ZERO };\n if (!Fp.eql(zz, Fp.ONE))\n throw new Error('invZ was invalid');\n return { x: ax, y: ay };\n });\n // NOTE: on exception this will crash 'cached' and no value will be set.\n // Otherwise true will be return\n const assertValidMemo = memoized((p) => {\n if (p.is0()) {\n // (0, 1, 0) aka ZERO is invalid in most contexts.\n // In BLS, ZERO can be serialized, so we allow it.\n // (0, 0, 0) is invalid representation of ZERO.\n if (curveOpts.allowInfinityPoint && !Fp.is0(p.py))\n return;\n throw new Error('bad point: ZERO');\n }\n // Some 3rd-party test vectors require different wording between here & `fromCompressedHex`\n const { x, y } = p.toAffine();\n if (!Fp.isValid(x) || !Fp.isValid(y))\n throw new Error('bad point: x or y not field elements');\n if (!isValidXY(x, y))\n throw new Error('bad point: equation left != right');\n if (!p.isTorsionFree())\n throw new Error('bad point: not in prime-order subgroup');\n return true;\n });\n function finishEndo(endoBeta, k1p, k2p, k1neg, k2neg) {\n k2p = new Point(Fp.mul(k2p.px, endoBeta), k2p.py, k2p.pz);\n k1p = negateCt(k1neg, k1p);\n k2p = negateCt(k2neg, k2p);\n return k1p.add(k2p);\n }\n /**\n * Projective Point works in 3d / projective (homogeneous) coordinates:(X, Y, Z) ∋ (x=X/Z, y=Y/Z).\n * Default Point works in 2d / affine coordinates: (x, y).\n * We're doing calculations in projective, because its operations don't require costly inversion.\n */\n class Point {\n /** Does NOT validate if the point is valid. Use `.assertValidity()`. */\n constructor(px, py, pz) {\n this.px = acoord('x', px);\n this.py = acoord('y', py, true);\n this.pz = acoord('z', pz);\n Object.freeze(this);\n }\n /** Does NOT validate if the point is valid. Use `.assertValidity()`. */\n static fromAffine(p) {\n const { x, y } = p || {};\n if (!p || !Fp.isValid(x) || !Fp.isValid(y))\n throw new Error('invalid affine point');\n if (p instanceof Point)\n throw new Error('projective point not allowed');\n // (0, 0) would've produced (0, 0, 1) - instead, we need (0, 1, 0)\n if (Fp.is0(x) && Fp.is0(y))\n return Point.ZERO;\n return new Point(x, y, Fp.ONE);\n }\n get x() {\n return this.toAffine().x;\n }\n get y() {\n return this.toAffine().y;\n }\n static normalizeZ(points) {\n return normalizeZ(Point, 'pz', points);\n }\n static fromBytes(bytes) {\n abytes(bytes);\n return Point.fromHex(bytes);\n }\n /** Converts hash string or Uint8Array to Point. */\n static fromHex(hex) {\n const P = Point.fromAffine(fromBytes(ensureBytes('pointHex', hex)));\n P.assertValidity();\n return P;\n }\n /** Multiplies generator point by privateKey. */\n static fromPrivateKey(privateKey) {\n const normPrivateKeyToScalar = _legacyHelperNormPriv(Fn, curveOpts.allowedPrivateKeyLengths, curveOpts.wrapPrivateKey);\n return Point.BASE.multiply(normPrivateKeyToScalar(privateKey));\n }\n /** Multiscalar Multiplication */\n static msm(points, scalars) {\n return pippenger(Point, Fn, points, scalars);\n }\n /**\n *\n * @param windowSize\n * @param isLazy true will defer table computation until the first multiplication\n * @returns\n */\n precompute(windowSize = 8, isLazy = true) {\n wnaf.setWindowSize(this, windowSize);\n if (!isLazy)\n this.multiply(_3n); // random number\n return this;\n }\n /** \"Private method\", don't use it directly */\n _setWindowSize(windowSize) {\n this.precompute(windowSize);\n }\n // TODO: return `this`\n /** A point on curve is valid if it conforms to equation. */\n assertValidity() {\n assertValidMemo(this);\n }\n hasEvenY() {\n const { y } = this.toAffine();\n if (!Fp.isOdd)\n throw new Error(\"Field doesn't support isOdd\");\n return !Fp.isOdd(y);\n }\n /** Compare one point to another. */\n equals(other) {\n aprjpoint(other);\n const { px: X1, py: Y1, pz: Z1 } = this;\n const { px: X2, py: Y2, pz: Z2 } = other;\n const U1 = Fp.eql(Fp.mul(X1, Z2), Fp.mul(X2, Z1));\n const U2 = Fp.eql(Fp.mul(Y1, Z2), Fp.mul(Y2, Z1));\n return U1 && U2;\n }\n /** Flips point to one corresponding to (x, -y) in Affine coordinates. */\n negate() {\n return new Point(this.px, Fp.neg(this.py), this.pz);\n }\n // Renes-Costello-Batina exception-free doubling formula.\n // There is 30% faster Jacobian formula, but it is not complete.\n // https://eprint.iacr.org/2015/1060, algorithm 3\n // Cost: 8M + 3S + 3*a + 2*b3 + 15add.\n double() {\n const { a, b } = CURVE;\n const b3 = Fp.mul(b, _3n);\n const { px: X1, py: Y1, pz: Z1 } = this;\n let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n let t0 = Fp.mul(X1, X1); // step 1\n let t1 = Fp.mul(Y1, Y1);\n let t2 = Fp.mul(Z1, Z1);\n let t3 = Fp.mul(X1, Y1);\n t3 = Fp.add(t3, t3); // step 5\n Z3 = Fp.mul(X1, Z1);\n Z3 = Fp.add(Z3, Z3);\n X3 = Fp.mul(a, Z3);\n Y3 = Fp.mul(b3, t2);\n Y3 = Fp.add(X3, Y3); // step 10\n X3 = Fp.sub(t1, Y3);\n Y3 = Fp.add(t1, Y3);\n Y3 = Fp.mul(X3, Y3);\n X3 = Fp.mul(t3, X3);\n Z3 = Fp.mul(b3, Z3); // step 15\n t2 = Fp.mul(a, t2);\n t3 = Fp.sub(t0, t2);\n t3 = Fp.mul(a, t3);\n t3 = Fp.add(t3, Z3);\n Z3 = Fp.add(t0, t0); // step 20\n t0 = Fp.add(Z3, t0);\n t0 = Fp.add(t0, t2);\n t0 = Fp.mul(t0, t3);\n Y3 = Fp.add(Y3, t0);\n t2 = Fp.mul(Y1, Z1); // step 25\n t2 = Fp.add(t2, t2);\n t0 = Fp.mul(t2, t3);\n X3 = Fp.sub(X3, t0);\n Z3 = Fp.mul(t2, t1);\n Z3 = Fp.add(Z3, Z3); // step 30\n Z3 = Fp.add(Z3, Z3);\n return new Point(X3, Y3, Z3);\n }\n // Renes-Costello-Batina exception-free addition formula.\n // There is 30% faster Jacobian formula, but it is not complete.\n // https://eprint.iacr.org/2015/1060, algorithm 1\n // Cost: 12M + 0S + 3*a + 3*b3 + 23add.\n add(other) {\n aprjpoint(other);\n const { px: X1, py: Y1, pz: Z1 } = this;\n const { px: X2, py: Y2, pz: Z2 } = other;\n let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n const a = CURVE.a;\n const b3 = Fp.mul(CURVE.b, _3n);\n let t0 = Fp.mul(X1, X2); // step 1\n let t1 = Fp.mul(Y1, Y2);\n let t2 = Fp.mul(Z1, Z2);\n let t3 = Fp.add(X1, Y1);\n let t4 = Fp.add(X2, Y2); // step 5\n t3 = Fp.mul(t3, t4);\n t4 = Fp.add(t0, t1);\n t3 = Fp.sub(t3, t4);\n t4 = Fp.add(X1, Z1);\n let t5 = Fp.add(X2, Z2); // step 10\n t4 = Fp.mul(t4, t5);\n t5 = Fp.add(t0, t2);\n t4 = Fp.sub(t4, t5);\n t5 = Fp.add(Y1, Z1);\n X3 = Fp.add(Y2, Z2); // step 15\n t5 = Fp.mul(t5, X3);\n X3 = Fp.add(t1, t2);\n t5 = Fp.sub(t5, X3);\n Z3 = Fp.mul(a, t4);\n X3 = Fp.mul(b3, t2); // step 20\n Z3 = Fp.add(X3, Z3);\n X3 = Fp.sub(t1, Z3);\n Z3 = Fp.add(t1, Z3);\n Y3 = Fp.mul(X3, Z3);\n t1 = Fp.add(t0, t0); // step 25\n t1 = Fp.add(t1, t0);\n t2 = Fp.mul(a, t2);\n t4 = Fp.mul(b3, t4);\n t1 = Fp.add(t1, t2);\n t2 = Fp.sub(t0, t2); // step 30\n t2 = Fp.mul(a, t2);\n t4 = Fp.add(t4, t2);\n t0 = Fp.mul(t1, t4);\n Y3 = Fp.add(Y3, t0);\n t0 = Fp.mul(t5, t4); // step 35\n X3 = Fp.mul(t3, X3);\n X3 = Fp.sub(X3, t0);\n t0 = Fp.mul(t3, t1);\n Z3 = Fp.mul(t5, Z3);\n Z3 = Fp.add(Z3, t0); // step 40\n return new Point(X3, Y3, Z3);\n }\n subtract(other) {\n return this.add(other.negate());\n }\n is0() {\n return this.equals(Point.ZERO);\n }\n /**\n * Constant time multiplication.\n * Uses wNAF method. Windowed method may be 10% faster,\n * but takes 2x longer to generate and consumes 2x memory.\n * Uses precomputes when available.\n * Uses endomorphism for Koblitz curves.\n * @param scalar by which the point would be multiplied\n * @returns New point\n */\n multiply(scalar) {\n const { endo } = curveOpts;\n if (!Fn.isValidNot0(scalar))\n throw new Error('invalid scalar: out of range'); // 0 is invalid\n let point, fake; // Fake point is used to const-time mult\n const mul = (n) => wnaf.wNAFCached(this, n, Point.normalizeZ);\n /** See docs for {@link EndomorphismOpts} */\n if (endo) {\n const { k1neg, k1, k2neg, k2 } = endo.splitScalar(scalar);\n const { p: k1p, f: k1f } = mul(k1);\n const { p: k2p, f: k2f } = mul(k2);\n fake = k1f.add(k2f);\n point = finishEndo(endo.beta, k1p, k2p, k1neg, k2neg);\n }\n else {\n const { p, f } = mul(scalar);\n point = p;\n fake = f;\n }\n // Normalize `z` for both points, but return only real one\n return Point.normalizeZ([point, fake])[0];\n }\n /**\n * Non-constant-time multiplication. Uses double-and-add algorithm.\n * It's faster, but should only be used when you don't care about\n * an exposed private key e.g. sig verification, which works over *public* keys.\n */\n multiplyUnsafe(sc) {\n const { endo } = curveOpts;\n const p = this;\n if (!Fn.isValid(sc))\n throw new Error('invalid scalar: out of range'); // 0 is valid\n if (sc === _0n || p.is0())\n return Point.ZERO;\n if (sc === _1n)\n return p; // fast-path\n if (wnaf.hasPrecomputes(this))\n return this.multiply(sc);\n if (endo) {\n const { k1neg, k1, k2neg, k2 } = endo.splitScalar(sc);\n // `wNAFCachedUnsafe` is 30% slower\n const { p1, p2 } = mulEndoUnsafe(Point, p, k1, k2);\n return finishEndo(endo.beta, p1, p2, k1neg, k2neg);\n }\n else {\n return wnaf.wNAFCachedUnsafe(p, sc);\n }\n }\n multiplyAndAddUnsafe(Q, a, b) {\n const sum = this.multiplyUnsafe(a).add(Q.multiplyUnsafe(b));\n return sum.is0() ? undefined : sum;\n }\n /**\n * Converts Projective point to affine (x, y) coordinates.\n * @param invertedZ Z^-1 (inverted zero) - optional, precomputation is useful for invertBatch\n */\n toAffine(invertedZ) {\n return toAffineMemo(this, invertedZ);\n }\n /**\n * Checks whether Point is free of torsion elements (is in prime subgroup).\n * Always torsion-free for cofactor=1 curves.\n */\n isTorsionFree() {\n const { isTorsionFree } = curveOpts;\n if (cofactor === _1n)\n return true;\n if (isTorsionFree)\n return isTorsionFree(Point, this);\n return wnaf.wNAFCachedUnsafe(this, CURVE_ORDER).is0();\n }\n clearCofactor() {\n const { clearCofactor } = curveOpts;\n if (cofactor === _1n)\n return this; // Fast-path\n if (clearCofactor)\n return clearCofactor(Point, this);\n return this.multiplyUnsafe(cofactor);\n }\n toBytes(isCompressed = true) {\n abool('isCompressed', isCompressed);\n this.assertValidity();\n return toBytes(Point, this, isCompressed);\n }\n /** @deprecated use `toBytes` */\n toRawBytes(isCompressed = true) {\n return this.toBytes(isCompressed);\n }\n toHex(isCompressed = true) {\n return bytesToHex(this.toBytes(isCompressed));\n }\n toString() {\n return `<Point ${this.is0() ? 'ZERO' : this.toHex()}>`;\n }\n }\n // base / generator point\n Point.BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);\n // zero / infinity / identity point\n Point.ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO); // 0, 1, 0\n // fields\n Point.Fp = Fp;\n Point.Fn = Fn;\n const bits = Fn.BITS;\n const wnaf = wNAF(Point, curveOpts.endo ? Math.ceil(bits / 2) : bits);\n return Point;\n}\n// _legacyWeierstrass\n/** @deprecated use `weierstrassN` */\nexport function weierstrassPoints(c) {\n const { CURVE, curveOpts } = _weierstrass_legacy_opts_to_new(c);\n const Point = weierstrassN(CURVE, curveOpts);\n return _weierstrass_new_output_to_legacy(c, Point);\n}\n// Points start with byte 0x02 when y is even; otherwise 0x03\nfunction pprefix(hasEvenY) {\n return Uint8Array.of(hasEvenY ? 0x02 : 0x03);\n}\nexport function ecdsa(Point, ecdsaOpts, curveOpts = {}) {\n _validateObject(ecdsaOpts, { hash: 'function' }, {\n hmac: 'function',\n lowS: 'boolean',\n randomBytes: 'function',\n bits2int: 'function',\n bits2int_modN: 'function',\n });\n const randomBytes_ = ecdsaOpts.randomBytes || randomBytes;\n const hmac_ = ecdsaOpts.hmac ||\n ((key, ...msgs) => hmac(ecdsaOpts.hash, key, concatBytes(...msgs)));\n const { Fp, Fn } = Point;\n const { ORDER: CURVE_ORDER, BITS: fnBits } = Fn;\n function isBiggerThanHalfOrder(number) {\n const HALF = CURVE_ORDER >> _1n;\n return number > HALF;\n }\n function normalizeS(s) {\n return isBiggerThanHalfOrder(s) ? Fn.neg(s) : s;\n }\n function aValidRS(title, num) {\n if (!Fn.isValidNot0(num))\n throw new Error(`invalid signature ${title}: out of range 1..CURVE.n`);\n }\n /**\n * ECDSA signature with its (r, s) properties. Supports DER & compact representations.\n */\n class Signature {\n constructor(r, s, recovery) {\n aValidRS('r', r); // r in [1..N-1]\n aValidRS('s', s); // s in [1..N-1]\n this.r = r;\n this.s = s;\n if (recovery != null)\n this.recovery = recovery;\n Object.freeze(this);\n }\n // pair (bytes of r, bytes of s)\n static fromCompact(hex) {\n const L = Fn.BYTES;\n const b = ensureBytes('compactSignature', hex, L * 2);\n return new Signature(Fn.fromBytes(b.subarray(0, L)), Fn.fromBytes(b.subarray(L, L * 2)));\n }\n // DER encoded ECDSA signature\n // https://bitcoin.stackexchange.com/questions/57644/what-are-the-parts-of-a-bitcoin-transaction-input-script\n static fromDER(hex) {\n const { r, s } = DER.toSig(ensureBytes('DER', hex));\n return new Signature(r, s);\n }\n /**\n * @todo remove\n * @deprecated\n */\n assertValidity() { }\n addRecoveryBit(recovery) {\n return new Signature(this.r, this.s, recovery);\n }\n // ProjPointType<bigint>\n recoverPublicKey(msgHash) {\n const FIELD_ORDER = Fp.ORDER;\n const { r, s, recovery: rec } = this;\n if (rec == null || ![0, 1, 2, 3].includes(rec))\n throw new Error('recovery id invalid');\n // ECDSA recovery is hard for cofactor > 1 curves.\n // In sign, `r = q.x mod n`, and here we recover q.x from r.\n // While recovering q.x >= n, we need to add r+n for cofactor=1 curves.\n // However, for cofactor>1, r+n may not get q.x:\n // r+n*i would need to be done instead where i is unknown.\n // To easily get i, we either need to:\n // a. increase amount of valid recid values (4, 5...); OR\n // b. prohibit non-prime-order signatures (recid > 1).\n const hasCofactor = CURVE_ORDER * _2n < FIELD_ORDER;\n if (hasCofactor && rec > 1)\n throw new Error('recovery id is ambiguous for h>1 curve');\n const radj = rec === 2 || rec === 3 ? r + CURVE_ORDER : r;\n if (!Fp.isValid(radj))\n throw new Error('recovery id 2 or 3 invalid');\n const x = Fp.toBytes(radj);\n const R = Point.fromHex(concatBytes(pprefix((rec & 1) === 0), x));\n const ir = Fn.inv(radj); // r^-1\n const h = bits2int_modN(ensureBytes('msgHash', msgHash)); // Truncate hash\n const u1 = Fn.create(-h * ir); // -hr^-1\n const u2 = Fn.create(s * ir); // sr^-1\n // (sr^-1)R-(hr^-1)G = -(hr^-1)G + (sr^-1). unsafe is fine: there is no private data.\n const Q = Point.BASE.multiplyUnsafe(u1).add(R.multiplyUnsafe(u2));\n if (Q.is0())\n throw new Error('point at infinify');\n Q.assertValidity();\n return Q;\n }\n // Signatures should be low-s, to prevent malleability.\n hasHighS() {\n return isBiggerThanHalfOrder(this.s);\n }\n normalizeS() {\n return this.hasHighS() ? new Signature(this.r, Fn.neg(this.s), this.recovery) : this;\n }\n toBytes(format) {\n if (format === 'compact')\n return concatBytes(Fn.toBytes(this.r), Fn.toBytes(this.s));\n if (format === 'der')\n return hexToBytes(DER.hexFromSig(this));\n throw new Error('invalid format');\n }\n // DER-encoded\n toDERRawBytes() {\n return this.toBytes('der');\n }\n toDERHex() {\n return bytesToHex(this.toBytes('der'));\n }\n // padded bytes of r, then padded bytes of s\n toCompactRawBytes() {\n return this.toBytes('compact');\n }\n toCompactHex() {\n return bytesToHex(this.toBytes('compact'));\n }\n }\n const normPrivateKeyToScalar = _legacyHelperNormPriv(Fn, curveOpts.allowedPrivateKeyLengths, curveOpts.wrapPrivateKey);\n const utils = {\n isValidPrivateKey(privateKey) {\n try {\n normPrivateKeyToScalar(privateKey);\n return true;\n }\n catch (error) {\n return false;\n }\n },\n normPrivateKeyToScalar: normPrivateKeyToScalar,\n /**\n * Produces cryptographically secure private key from random of size\n * (groupLen + ceil(groupLen / 2)) with modulo bias being negligible.\n */\n randomPrivateKey: () => {\n const n = CURVE_ORDER;\n return mapHashToField(randomBytes_(getMinHashLength(n)), n);\n },\n precompute(windowSize = 8, point = Point.BASE) {\n return point.precompute(windowSize, false);\n },\n };\n /**\n * Computes public key for a private key. Checks for validity of the private key.\n * @param privateKey private key\n * @param isCompressed whether to return compact (default), or full key\n * @returns Public key, full when isCompressed=false; short when isCompressed=true\n */\n function getPublicKey(privateKey, isCompressed = true) {\n return Point.fromPrivateKey(privateKey).toBytes(isCompressed);\n }\n /**\n * Quick and dirty check for item being public key. Does not validate hex, or being on-curve.\n */\n function isProbPub(item) {\n if (typeof item === 'bigint')\n return false;\n if (item instanceof Point)\n return true;\n const arr = ensureBytes('key', item);\n const length = arr.length;\n const L = Fp.BYTES;\n const LC = L + 1; // e.g. 33 for 32\n const LU = 2 * L + 1; // e.g. 65 for 32\n if (curveOpts.allowedPrivateKeyLengths || Fn.BYTES === LC) {\n return undefined;\n }\n else {\n return length === LC || length === LU;\n }\n }\n /**\n * ECDH (Elliptic Curve Diffie Hellman).\n * Computes shared public key from private key and public key.\n * Checks: 1) private key validity 2) shared key is on-curve.\n * Does NOT hash the result.\n * @param privateA private key\n * @param publicB different public key\n * @param isCompressed whether to return compact (default), or full key\n * @returns shared public key\n */\n function getSharedSecret(privateA, publicB, isCompressed = true) {\n if (isProbPub(privateA) === true)\n throw new Error('first arg must be private key');\n if (isProbPub(publicB) === false)\n throw new Error('second arg must be public key');\n const b = Point.fromHex(publicB); // check for being on-curve\n return b.multiply(normPrivateKeyToScalar(privateA)).toBytes(isCompressed);\n }\n // RFC6979: ensure ECDSA msg is X bytes and < N. RFC suggests optional truncating via bits2octets.\n // FIPS 186-4 4.6 suggests the leftmost min(nBitLen, outLen) bits, which matches bits2int.\n // bits2int can produce res>N, we can do mod(res, N) since the bitLen is the same.\n // int2octets can't be used; pads small msgs with 0: unacceptatble for trunc as per RFC vectors\n const bits2int = ecdsaOpts.bits2int ||\n function (bytes) {\n // Our custom check \"just in case\", for protection against DoS\n if (bytes.length > 8192)\n throw new Error('input is too large');\n // For curves with nBitLength % 8 !== 0: bits2octets(bits2octets(m)) !== bits2octets(m)\n // for some cases, since bytes.length * 8 is not actual bitLength.\n const num = bytesToNumberBE(bytes); // check for == u8 done here\n const delta = bytes.length * 8 - fnBits; // truncate to nBitLength leftmost bits\n return delta > 0 ? num >> BigInt(delta) : num;\n };\n const bits2int_modN = ecdsaOpts.bits2int_modN ||\n function (bytes) {\n return Fn.create(bits2int(bytes)); // can't use bytesToNumberBE here\n };\n // NOTE: pads output with zero as per spec\n const ORDER_MASK = bitMask(fnBits);\n /**\n * Converts to bytes. Checks if num in `[0..ORDER_MASK-1]` e.g.: `[0..2^256-1]`.\n */\n function int2octets(num) {\n // IMPORTANT: the check ensures working for case `Fn.BYTES != Fn.BITS * 8`\n aInRange('num < 2^' + fnBits, num, _0n, ORDER_MASK);\n return Fn.toBytes(num);\n }\n // Steps A, D of RFC6979 3.2\n // Creates RFC6979 seed; converts msg/privKey to numbers.\n // Used only in sign, not in verify.\n // NOTE: we cannot assume here that msgHash has same amount of bytes as curve order,\n // this will be invalid at least for P521. Also it can be bigger for P224 + SHA256\n function prepSig(msgHash, privateKey, opts = defaultSigOpts) {\n if (['recovered', 'canonical'].some((k) => k in opts))\n throw new Error('sign() legacy options not supported');\n const { hash } = ecdsaOpts;\n let { lowS, prehash, extraEntropy: ent } = opts; // generates low-s sigs by default\n if (lowS == null)\n lowS = true; // RFC6979 3.2: we skip step A, because we already provide hash\n msgHash = ensureBytes('msgHash', msgHash);\n validateSigVerOpts(opts);\n if (prehash)\n msgHash = ensureBytes('prehashed msgHash', hash(msgHash));\n // We can't later call bits2octets, since nested bits2int is broken for curves\n // with fnBits % 8 !== 0. Because of that, we unwrap it here as int2octets call.\n // const bits2octets = (bits) => int2octets(bits2int_modN(bits))\n const h1int = bits2int_modN(msgHash);\n const d = normPrivateKeyToScalar(privateKey); // validate private key, convert to bigint\n const seedArgs = [int2octets(d), int2octets(h1int)];\n // extraEntropy. RFC6979 3.6: additional k' (optional).\n if (ent != null && ent !== false) {\n // K = HMAC_K(V || 0x00 || int2octets(x) || bits2octets(h1) || k')\n const e = ent === true ? randomBytes_(Fp.BYTES) : ent; // generate random bytes OR pass as-is\n seedArgs.push(ensureBytes('extraEntropy', e)); // check for being bytes\n }\n const seed = concatBytes(...seedArgs); // Step D of RFC6979 3.2\n const m = h1int; // NOTE: no need to call bits2int second time here, it is inside truncateHash!\n // Converts signature params into point w r/s, checks result for validity.\n // Can use scalar blinding b^-1(bm + bdr) where b ∈ [1,q−1] according to\n // https://tches.iacr.org/index.php/TCHES/article/view/7337/6509. We've decided against it:\n // a) dependency on CSPRNG b) 15% slowdown c) doesn't really help since bigints are not CT\n function k2sig(kBytes) {\n // RFC 6979 Section 3.2, step 3: k = bits2int(T)\n // Important: all mod() calls here must be done over N\n const k = bits2int(kBytes); // Cannot use fields methods, since it is group element\n if (!Fn.isValidNot0(k))\n return; // Valid scalars (including k) must be in 1..N-1\n const ik = Fn.inv(k); // k^-1 mod n\n const q = Point.BASE.multiply(k).toAffine(); // q = Gk\n const r = Fn.create(q.x); // r = q.x mod n\n if (r === _0n)\n return;\n const s = Fn.create(ik * Fn.create(m + r * d)); // Not using blinding here, see comment above\n if (s === _0n)\n return;\n let recovery = (q.x === r ? 0 : 2) | Number(q.y & _1n); // recovery bit (2 or 3, when q.x > n)\n let normS = s;\n if (lowS && isBiggerThanHalfOrder(s)) {\n normS = normalizeS(s); // if lowS was passed, ensure s is always\n recovery ^= 1; // // in the bottom half of N\n }\n return new Signature(r, normS, recovery); // use normS, not s\n }\n return { seed, k2sig };\n }\n const defaultSigOpts = { lowS: ecdsaOpts.lowS, prehash: false };\n const defaultVerOpts = { lowS: ecdsaOpts.lowS, prehash: false };\n /**\n * Signs message hash with a private key.\n * ```\n * sign(m, d, k) where\n * (x, y) = G × k\n * r = x mod n\n * s = (m + dr)/k mod n\n * ```\n * @param msgHash NOT message. msg needs to be hashed to `msgHash`, or use `prehash`.\n * @param privKey private key\n * @param opts lowS for non-malleable sigs. extraEntropy for mixing randomness into k. prehash will hash first arg.\n * @returns signature with recovery param\n */\n function sign(msgHash, privKey, opts = defaultSigOpts) {\n const { seed, k2sig } = prepSig(msgHash, privKey, opts); // Steps A, D of RFC6979 3.2.\n const drbg = createHmacDrbg(ecdsaOpts.hash.outputLen, Fn.BYTES, hmac_);\n return drbg(seed, k2sig); // Steps B, C, D, E, F, G\n }\n // Enable precomputes. Slows down first publicKey computation by 20ms.\n Point.BASE.precompute(8);\n /**\n * Verifies a signature against message hash and public key.\n * Rejects lowS signatures by default: to override,\n * specify option `{lowS: false}`. Implements section 4.1.4 from https://www.secg.org/sec1-v2.pdf:\n *\n * ```\n * verify(r, s, h, P) where\n * U1 = hs^-1 mod n\n * U2 = rs^-1 mod n\n * R = U1⋅G - U2⋅P\n * mod(R.x, n) == r\n * ```\n */\n function verify(signature, msgHash, publicKey, opts = defaultVerOpts) {\n const sg = signature;\n msgHash = ensureBytes('msgHash', msgHash);\n publicKey = ensureBytes('publicKey', publicKey);\n // Verify opts\n validateSigVerOpts(opts);\n const { lowS, prehash, format } = opts;\n // TODO: remove\n if ('strict' in opts)\n throw new Error('options.strict was renamed to lowS');\n if (format !== undefined && !['compact', 'der', 'js'].includes(format))\n throw new Error('format must be \"compact\", \"der\" or \"js\"');\n const isHex = typeof sg === 'string' || isBytes(sg);\n const isObj = !isHex &&\n !format &&\n typeof sg === 'object' &&\n sg !== null &&\n typeof sg.r === 'bigint' &&\n typeof sg.s === 'bigint';\n if (!isHex && !isObj)\n throw new Error('invalid signature, expected Uint8Array, hex string or Signature instance');\n let _sig = undefined;\n let P;\n // deduce signature format\n try {\n // if (format === 'js') {\n // if (sg != null && !isBytes(sg)) _sig = new Signature(sg.r, sg.s);\n // } else if (format === 'compact') {\n // _sig = Signature.fromCompact(sg);\n // } else if (format === 'der') {\n // _sig = Signature.fromDER(sg);\n // } else {\n // throw new Error('invalid format');\n // }\n if (isObj) {\n if (format === undefined || format === 'js') {\n _sig = new Signature(sg.r, sg.s);\n }\n else {\n throw new Error('invalid format');\n }\n }\n if (isHex) {\n // TODO: remove this malleable check\n // Signature can be represented in 2 ways: compact (2*Fn.BYTES) & DER (variable-length).\n // Since DER can also be 2*Fn.BYTES bytes, we check for it first.\n try {\n if (format !== 'compact')\n _sig = Signature.fromDER(sg);\n }\n catch (derError) {\n if (!(derError instanceof DER.Err))\n throw derError;\n }\n if (!_sig && format !== 'der')\n _sig = Signature.fromCompact(sg);\n }\n P = Point.fromHex(publicKey);\n }\n catch (error) {\n return false;\n }\n if (!_sig)\n return false;\n if (lowS && _sig.hasHighS())\n return false;\n // todo: optional.hash => hash\n if (prehash)\n msgHash = ecdsaOpts.hash(msgHash);\n const { r, s } = _sig;\n const h = bits2int_modN(msgHash); // Cannot use fields methods, since it is group element\n const is = Fn.inv(s); // s^-1\n const u1 = Fn.create(h * is); // u1 = hs^-1 mod n\n const u2 = Fn.create(r * is); // u2 = rs^-1 mod n\n const R = Point.BASE.multiplyUnsafe(u1).add(P.multiplyUnsafe(u2));\n if (R.is0())\n return false;\n const v = Fn.create(R.x); // v = r.x mod n\n return v === r;\n }\n // TODO: clarify API for cloning .clone({hash: sha512}) ? .createWith({hash: sha512})?\n // const clone = (hash: CHash): ECDSA => ecdsa(Point, { ...ecdsaOpts, ...getHash(hash) }, curveOpts);\n return Object.freeze({\n getPublicKey,\n getSharedSecret,\n sign,\n verify,\n utils,\n Point,\n Signature,\n });\n}\nfunction _weierstrass_legacy_opts_to_new(c) {\n const CURVE = {\n a: c.a,\n b: c.b,\n p: c.Fp.ORDER,\n n: c.n,\n h: c.h,\n Gx: c.Gx,\n Gy: c.Gy,\n };\n const Fp = c.Fp;\n const Fn = Field(CURVE.n, c.nBitLength);\n const curveOpts = {\n Fp,\n Fn,\n allowedPrivateKeyLengths: c.allowedPrivateKeyLengths,\n allowInfinityPoint: c.allowInfinityPoint,\n endo: c.endo,\n wrapPrivateKey: c.wrapPrivateKey,\n isTorsionFree: c.isTorsionFree,\n clearCofactor: c.clearCofactor,\n fromBytes: c.fromBytes,\n toBytes: c.toBytes,\n };\n return { CURVE, curveOpts };\n}\nfunction _ecdsa_legacy_opts_to_new(c) {\n const { CURVE, curveOpts } = _weierstrass_legacy_opts_to_new(c);\n const ecdsaOpts = {\n hash: c.hash,\n hmac: c.hmac,\n randomBytes: c.randomBytes,\n lowS: c.lowS,\n bits2int: c.bits2int,\n bits2int_modN: c.bits2int_modN,\n };\n return { CURVE, curveOpts, ecdsaOpts };\n}\nfunction _weierstrass_new_output_to_legacy(c, Point) {\n const { Fp, Fn } = Point;\n // TODO: remove\n function isWithinCurveOrder(num) {\n return inRange(num, _1n, Fn.ORDER);\n }\n const weierstrassEquation = _legacyHelperEquat(Fp, c.a, c.b);\n const normPrivateKeyToScalar = _legacyHelperNormPriv(Fn, c.allowedPrivateKeyLengths, c.wrapPrivateKey);\n return Object.assign({}, {\n CURVE: c,\n Point: Point,\n ProjectivePoint: Point,\n normPrivateKeyToScalar,\n weierstrassEquation,\n isWithinCurveOrder,\n });\n}\nfunction _ecdsa_new_output_to_legacy(c, ecdsa) {\n return Object.assign({}, ecdsa, {\n ProjectivePoint: ecdsa.Point,\n CURVE: c,\n });\n}\n// _ecdsa_legacy\nexport function weierstrass(c) {\n const { CURVE, curveOpts, ecdsaOpts } = _ecdsa_legacy_opts_to_new(c);\n const Point = weierstrassN(CURVE, curveOpts);\n const signs = ecdsa(Point, ecdsaOpts, curveOpts);\n return _ecdsa_new_output_to_legacy(c, signs);\n}\n/**\n * Implementation of the Shallue and van de Woestijne method for any weierstrass curve.\n * TODO: check if there is a way to merge this with uvRatio in Edwards; move to modular.\n * b = True and y = sqrt(u / v) if (u / v) is square in F, and\n * b = False and y = sqrt(Z * (u / v)) otherwise.\n * @param Fp\n * @param Z\n * @returns\n */\nexport function SWUFpSqrtRatio(Fp, Z) {\n // Generic implementation\n const q = Fp.ORDER;\n let l = _0n;\n for (let o = q - _1n; o % _2n === _0n; o /= _2n)\n l += _1n;\n const c1 = l; // 1. c1, the largest integer such that 2^c1 divides q - 1.\n // We need 2n ** c1 and 2n ** (c1-1). We can't use **; but we can use <<.\n // 2n ** c1 == 2n << (c1-1)\n const _2n_pow_c1_1 = _2n << (c1 - _1n - _1n);\n const _2n_pow_c1 = _2n_pow_c1_1 * _2n;\n const c2 = (q - _1n) / _2n_pow_c1; // 2. c2 = (q - 1) / (2^c1) # Integer arithmetic\n const c3 = (c2 - _1n) / _2n; // 3. c3 = (c2 - 1) / 2 # Integer arithmetic\n const c4 = _2n_pow_c1 - _1n; // 4. c4 = 2^c1 - 1 # Integer arithmetic\n const c5 = _2n_pow_c1_1; // 5. c5 = 2^(c1 - 1) # Integer arithmetic\n const c6 = Fp.pow(Z, c2); // 6. c6 = Z^c2\n const c7 = Fp.pow(Z, (c2 + _1n) / _2n); // 7. c7 = Z^((c2 + 1) / 2)\n let sqrtRatio = (u, v) => {\n let tv1 = c6; // 1. tv1 = c6\n let tv2 = Fp.pow(v, c4); // 2. tv2 = v^c4\n let tv3 = Fp.sqr(tv2); // 3. tv3 = tv2^2\n tv3 = Fp.mul(tv3, v); // 4. tv3 = tv3 * v\n let tv5 = Fp.mul(u, tv3); // 5. tv5 = u * tv3\n tv5 = Fp.pow(tv5, c3); // 6. tv5 = tv5^c3\n tv5 = Fp.mul(tv5, tv2); // 7. tv5 = tv5 * tv2\n tv2 = Fp.mul(tv5, v); // 8. tv2 = tv5 * v\n tv3 = Fp.mul(tv5, u); // 9. tv3 = tv5 * u\n let tv4 = Fp.mul(tv3, tv2); // 10. tv4 = tv3 * tv2\n tv5 = Fp.pow(tv4, c5); // 11. tv5 = tv4^c5\n let isQR = Fp.eql(tv5, Fp.ONE); // 12. isQR = tv5 == 1\n tv2 = Fp.mul(tv3, c7); // 13. tv2 = tv3 * c7\n tv5 = Fp.mul(tv4, tv1); // 14. tv5 = tv4 * tv1\n tv3 = Fp.cmov(tv2, tv3, isQR); // 15. tv3 = CMOV(tv2, tv3, isQR)\n tv4 = Fp.cmov(tv5, tv4, isQR); // 16. tv4 = CMOV(tv5, tv4, isQR)\n // 17. for i in (c1, c1 - 1, ..., 2):\n for (let i = c1; i > _1n; i--) {\n let tv5 = i - _2n; // 18. tv5 = i - 2\n tv5 = _2n << (tv5 - _1n); // 19. tv5 = 2^tv5\n let tvv5 = Fp.pow(tv4, tv5); // 20. tv5 = tv4^tv5\n const e1 = Fp.eql(tvv5, Fp.ONE); // 21. e1 = tv5 == 1\n tv2 = Fp.mul(tv3, tv1); // 22. tv2 = tv3 * tv1\n tv1 = Fp.mul(tv1, tv1); // 23. tv1 = tv1 * tv1\n tvv5 = Fp.mul(tv4, tv1); // 24. tv5 = tv4 * tv1\n tv3 = Fp.cmov(tv2, tv3, e1); // 25. tv3 = CMOV(tv2, tv3, e1)\n tv4 = Fp.cmov(tvv5, tv4, e1); // 26. tv4 = CMOV(tv5, tv4, e1)\n }\n return { isValid: isQR, value: tv3 };\n };\n if (Fp.ORDER % _4n === _3n) {\n // sqrt_ratio_3mod4(u, v)\n const c1 = (Fp.ORDER - _3n) / _4n; // 1. c1 = (q - 3) / 4 # Integer arithmetic\n const c2 = Fp.sqrt(Fp.neg(Z)); // 2. c2 = sqrt(-Z)\n sqrtRatio = (u, v) => {\n let tv1 = Fp.sqr(v); // 1. tv1 = v^2\n const tv2 = Fp.mul(u, v); // 2. tv2 = u * v\n tv1 = Fp.mul(tv1, tv2); // 3. tv1 = tv1 * tv2\n let y1 = Fp.pow(tv1, c1); // 4. y1 = tv1^c1\n y1 = Fp.mul(y1, tv2); // 5. y1 = y1 * tv2\n const y2 = Fp.mul(y1, c2); // 6. y2 = y1 * c2\n const tv3 = Fp.mul(Fp.sqr(y1), v); // 7. tv3 = y1^2; 8. tv3 = tv3 * v\n const isQR = Fp.eql(tv3, u); // 9. isQR = tv3 == u\n let y = Fp.cmov(y2, y1, isQR); // 10. y = CMOV(y2, y1, isQR)\n return { isValid: isQR, value: y }; // 11. return (isQR, y) isQR ? y : y*c2\n };\n }\n // No curves uses that\n // if (Fp.ORDER % _8n === _5n) // sqrt_ratio_5mod8\n return sqrtRatio;\n}\n/**\n * Simplified Shallue-van de Woestijne-Ulas Method\n * https://www.rfc-editor.org/rfc/rfc9380#section-6.6.2\n */\nexport function mapToCurveSimpleSWU(Fp, opts) {\n validateField(Fp);\n const { A, B, Z } = opts;\n if (!Fp.isValid(A) || !Fp.isValid(B) || !Fp.isValid(Z))\n throw new Error('mapToCurveSimpleSWU: invalid opts');\n const sqrtRatio = SWUFpSqrtRatio(Fp, Z);\n if (!Fp.isOdd)\n throw new Error('Field does not have .isOdd()');\n // Input: u, an element of F.\n // Output: (x, y), a point on E.\n return (u) => {\n // prettier-ignore\n let tv1, tv2, tv3, tv4, tv5, tv6, x, y;\n tv1 = Fp.sqr(u); // 1. tv1 = u^2\n tv1 = Fp.mul(tv1, Z); // 2. tv1 = Z * tv1\n tv2 = Fp.sqr(tv1); // 3. tv2 = tv1^2\n tv2 = Fp.add(tv2, tv1); // 4. tv2 = tv2 + tv1\n tv3 = Fp.add(tv2, Fp.ONE); // 5. tv3 = tv2 + 1\n tv3 = Fp.mul(tv3, B); // 6. tv3 = B * tv3\n tv4 = Fp.cmov(Z, Fp.neg(tv2), !Fp.eql(tv2, Fp.ZERO)); // 7. tv4 = CMOV(Z, -tv2, tv2 != 0)\n tv4 = Fp.mul(tv4, A); // 8. tv4 = A * tv4\n tv2 = Fp.sqr(tv3); // 9. tv2 = tv3^2\n tv6 = Fp.sqr(tv4); // 10. tv6 = tv4^2\n tv5 = Fp.mul(tv6, A); // 11. tv5 = A * tv6\n tv2 = Fp.add(tv2, tv5); // 12. tv2 = tv2 + tv5\n tv2 = Fp.mul(tv2, tv3); // 13. tv2 = tv2 * tv3\n tv6 = Fp.mul(tv6, tv4); // 14. tv6 = tv6 * tv4\n tv5 = Fp.mul(tv6, B); // 15. tv5 = B * tv6\n tv2 = Fp.add(tv2, tv5); // 16. tv2 = tv2 + tv5\n x = Fp.mul(tv1, tv3); // 17. x = tv1 * tv3\n const { isValid, value } = sqrtRatio(tv2, tv6); // 18. (is_gx1_square, y1) = sqrt_ratio(tv2, tv6)\n y = Fp.mul(tv1, u); // 19. y = tv1 * u -> Z * u^3 * y1\n y = Fp.mul(y, value); // 20. y = y * y1\n x = Fp.cmov(x, tv3, isValid); // 21. x = CMOV(x, tv3, is_gx1_square)\n y = Fp.cmov(y, value, isValid); // 22. y = CMOV(y, y1, is_gx1_square)\n const e1 = Fp.isOdd(u) === Fp.isOdd(y); // 23. e1 = sgn0(u) == sgn0(y)\n y = Fp.cmov(Fp.neg(y), y, e1); // 24. y = CMOV(-y, y, e1)\n const tv4_inv = FpInvertBatch(Fp, [tv4], true)[0];\n x = Fp.mul(x, tv4_inv); // 25. x = x / tv4\n return { x, y };\n };\n}\n//# sourceMappingURL=weierstrass.js.map","/**\n * SECG secp256k1. See [pdf](https://www.secg.org/sec2-v2.pdf).\n *\n * Belongs to Koblitz curves: it has efficiently-computable GLV endomorphism ψ,\n * check out {@link EndomorphismOpts}. Seems to be rigid (not backdoored).\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha256 } from '@noble/hashes/sha2.js';\nimport { randomBytes } from '@noble/hashes/utils.js';\nimport { createCurve } from \"./_shortw_utils.js\";\nimport { createHasher, isogenyMap, } from \"./abstract/hash-to-curve.js\";\nimport { Field, mod, pow2 } from \"./abstract/modular.js\";\nimport { mapToCurveSimpleSWU, } from \"./abstract/weierstrass.js\";\nimport { aInRange, bytesToNumberBE, concatBytes, ensureBytes, inRange, numberToBytesBE, } from \"./utils.js\";\n// Seems like generator was produced from some seed:\n// `Point.BASE.multiply(Point.Fn.inv(2n, N)).toAffine().x`\n// // gives short x 0x3b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63n\nconst secp256k1_CURVE = {\n p: BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f'),\n n: BigInt('0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141'),\n h: BigInt(1),\n a: BigInt(0),\n b: BigInt(7),\n Gx: BigInt('0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798'),\n Gy: BigInt('0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8'),\n};\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst divNearest = (a, b) => (a + b / _2n) / b;\n/**\n * √n = n^((p+1)/4) for fields p = 3 mod 4. We unwrap the loop and multiply bit-by-bit.\n * (P+1n/4n).toString(2) would produce bits [223x 1, 0, 22x 1, 4x 0, 11, 00]\n */\nfunction sqrtMod(y) {\n const P = secp256k1_CURVE.p;\n // prettier-ignore\n const _3n = BigInt(3), _6n = BigInt(6), _11n = BigInt(11), _22n = BigInt(22);\n // prettier-ignore\n const _23n = BigInt(23), _44n = BigInt(44), _88n = BigInt(88);\n const b2 = (y * y * y) % P; // x^3, 11\n const b3 = (b2 * b2 * y) % P; // x^7\n const b6 = (pow2(b3, _3n, P) * b3) % P;\n const b9 = (pow2(b6, _3n, P) * b3) % P;\n const b11 = (pow2(b9, _2n, P) * b2) % P;\n const b22 = (pow2(b11, _11n, P) * b11) % P;\n const b44 = (pow2(b22, _22n, P) * b22) % P;\n const b88 = (pow2(b44, _44n, P) * b44) % P;\n const b176 = (pow2(b88, _88n, P) * b88) % P;\n const b220 = (pow2(b176, _44n, P) * b44) % P;\n const b223 = (pow2(b220, _3n, P) * b3) % P;\n const t1 = (pow2(b223, _23n, P) * b22) % P;\n const t2 = (pow2(t1, _6n, P) * b2) % P;\n const root = pow2(t2, _2n, P);\n if (!Fpk1.eql(Fpk1.sqr(root), y))\n throw new Error('Cannot find square root');\n return root;\n}\nconst Fpk1 = Field(secp256k1_CURVE.p, undefined, undefined, { sqrt: sqrtMod });\n/**\n * secp256k1 curve, ECDSA and ECDH methods.\n *\n * Field: `2n**256n - 2n**32n - 2n**9n - 2n**8n - 2n**7n - 2n**6n - 2n**4n - 1n`\n *\n * @example\n * ```js\n * import { secp256k1 } from '@noble/curves/secp256k1';\n * const priv = secp256k1.utils.randomPrivateKey();\n * const pub = secp256k1.getPublicKey(priv);\n * const msg = new Uint8Array(32).fill(1); // message hash (not message) in ecdsa\n * const sig = secp256k1.sign(msg, priv); // `{prehash: true}` option is available\n * const isValid = secp256k1.verify(sig, msg, pub) === true;\n * ```\n */\nexport const secp256k1 = createCurve({\n ...secp256k1_CURVE,\n Fp: Fpk1,\n lowS: true, // Allow only low-S signatures by default in sign() and verify()\n endo: {\n // Endomorphism, see above\n beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'),\n splitScalar: (k) => {\n const n = secp256k1_CURVE.n;\n const a1 = BigInt('0x3086d221a7d46bcde86c90e49284eb15');\n const b1 = -_1n * BigInt('0xe4437ed6010e88286f547fa90abfe4c3');\n const a2 = BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8');\n const b2 = a1;\n const POW_2_128 = BigInt('0x100000000000000000000000000000000'); // (2n**128n).toString(16)\n const c1 = divNearest(b2 * k, n);\n const c2 = divNearest(-b1 * k, n);\n let k1 = mod(k - c1 * a1 - c2 * a2, n);\n let k2 = mod(-c1 * b1 - c2 * b2, n);\n const k1neg = k1 > POW_2_128;\n const k2neg = k2 > POW_2_128;\n if (k1neg)\n k1 = n - k1;\n if (k2neg)\n k2 = n - k2;\n if (k1 > POW_2_128 || k2 > POW_2_128) {\n throw new Error('splitScalar: Endomorphism failed, k=' + k);\n }\n return { k1neg, k1, k2neg, k2 };\n },\n },\n}, sha256);\n// Schnorr signatures are superior to ECDSA from above. Below is Schnorr-specific BIP0340 code.\n// https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki\n/** An object mapping tags to their tagged hash prefix of [SHA256(tag) | SHA256(tag)] */\nconst TAGGED_HASH_PREFIXES = {};\nfunction taggedHash(tag, ...messages) {\n let tagP = TAGGED_HASH_PREFIXES[tag];\n if (tagP === undefined) {\n const tagH = sha256(Uint8Array.from(tag, (c) => c.charCodeAt(0)));\n tagP = concatBytes(tagH, tagH);\n TAGGED_HASH_PREFIXES[tag] = tagP;\n }\n return sha256(concatBytes(tagP, ...messages));\n}\n// ECDSA compact points are 33-byte. Schnorr is 32: we strip first byte 0x02 or 0x03\nconst pointToBytes = (point) => point.toBytes(true).slice(1);\nconst numTo32b = (n) => numberToBytesBE(n, 32);\nconst modP = (x) => mod(x, secp256k1_CURVE.p);\nconst modN = (x) => mod(x, secp256k1_CURVE.n);\nconst Point = /* @__PURE__ */ (() => secp256k1.Point)();\nconst hasEven = (y) => y % _2n === _0n;\n// Calculate point, scalar and bytes\nfunction schnorrGetExtPubKey(priv) {\n let d_ = secp256k1.utils.normPrivateKeyToScalar(priv); // same method executed in fromPrivateKey\n let p = Point.fromPrivateKey(d_); // P = d'⋅G; 0 < d' < n check is done inside\n const scalar = hasEven(p.y) ? d_ : modN(-d_);\n return { scalar: scalar, bytes: pointToBytes(p) };\n}\n/**\n * lift_x from BIP340. Convert 32-byte x coordinate to elliptic curve point.\n * @returns valid point checked for being on-curve\n */\nfunction lift_x(x) {\n aInRange('x', x, _1n, secp256k1_CURVE.p); // Fail if x ≥ p.\n const xx = modP(x * x);\n const c = modP(xx * x + BigInt(7)); // Let c = x³ + 7 mod p.\n let y = sqrtMod(c); // Let y = c^(p+1)/4 mod p.\n if (!hasEven(y))\n y = modP(-y); // Return the unique point P such that x(P) = x and\n const p = Point.fromAffine({ x, y }); // y(P) = y if y mod 2 = 0 or y(P) = p-y otherwise.\n p.assertValidity();\n return p;\n}\nconst num = bytesToNumberBE;\n/**\n * Create tagged hash, convert it to bigint, reduce modulo-n.\n */\nfunction challenge(...args) {\n return modN(num(taggedHash('BIP0340/challenge', ...args)));\n}\n/**\n * Schnorr public key is just `x` coordinate of Point as per BIP340.\n */\nfunction schnorrGetPublicKey(privateKey) {\n return schnorrGetExtPubKey(privateKey).bytes; // d'=int(sk). Fail if d'=0 or d'≥n. Ret bytes(d'⋅G)\n}\n/**\n * Creates Schnorr signature as per BIP340. Verifies itself before returning anything.\n * auxRand is optional and is not the sole source of k generation: bad CSPRNG won't be dangerous.\n */\nfunction schnorrSign(message, privateKey, auxRand = randomBytes(32)) {\n const m = ensureBytes('message', message);\n const { bytes: px, scalar: d } = schnorrGetExtPubKey(privateKey); // checks for isWithinCurveOrder\n const a = ensureBytes('auxRand', auxRand, 32); // Auxiliary random data a: a 32-byte array\n const t = numTo32b(d ^ num(taggedHash('BIP0340/aux', a))); // Let t be the byte-wise xor of bytes(d) and hash/aux(a)\n const rand = taggedHash('BIP0340/nonce', t, px, m); // Let rand = hash/nonce(t || bytes(P) || m)\n const k_ = modN(num(rand)); // Let k' = int(rand) mod n\n if (k_ === _0n)\n throw new Error('sign failed: k is zero'); // Fail if k' = 0.\n const { bytes: rx, scalar: k } = schnorrGetExtPubKey(k_); // Let R = k'⋅G.\n const e = challenge(rx, px, m); // Let e = int(hash/challenge(bytes(R) || bytes(P) || m)) mod n.\n const sig = new Uint8Array(64); // Let sig = bytes(R) || bytes((k + ed) mod n).\n sig.set(rx, 0);\n sig.set(numTo32b(modN(k + e * d)), 32);\n // If Verify(bytes(P), m, sig) (see below) returns failure, abort\n if (!schnorrVerify(sig, m, px))\n throw new Error('sign: Invalid signature produced');\n return sig;\n}\n/**\n * Verifies Schnorr signature.\n * Will swallow errors & return false except for initial type validation of arguments.\n */\nfunction schnorrVerify(signature, message, publicKey) {\n const sig = ensureBytes('signature', signature, 64);\n const m = ensureBytes('message', message);\n const pub = ensureBytes('publicKey', publicKey, 32);\n try {\n const P = lift_x(num(pub)); // P = lift_x(int(pk)); fail if that fails\n const r = num(sig.subarray(0, 32)); // Let r = int(sig[0:32]); fail if r ≥ p.\n if (!inRange(r, _1n, secp256k1_CURVE.p))\n return false;\n const s = num(sig.subarray(32, 64)); // Let s = int(sig[32:64]); fail if s ≥ n.\n if (!inRange(s, _1n, secp256k1_CURVE.n))\n return false;\n const e = challenge(numTo32b(r), pointToBytes(P), m); // int(challenge(bytes(r)||bytes(P)||m))%n\n // R = s⋅G - e⋅P, where -eP == (n-e)P\n const R = Point.BASE.multiplyUnsafe(s).add(P.multiplyUnsafe(modN(-e)));\n const { x, y } = R.toAffine();\n // Fail if is_infinite(R) / not has_even_y(R) / x(R) ≠ r.\n if (R.is0() || !hasEven(y) || x !== r)\n return false;\n return true;\n }\n catch (error) {\n return false;\n }\n}\n/**\n * Schnorr signatures over secp256k1.\n * https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki\n * @example\n * ```js\n * import { schnorr } from '@noble/curves/secp256k1';\n * const priv = schnorr.utils.randomPrivateKey();\n * const pub = schnorr.getPublicKey(priv);\n * const msg = new TextEncoder().encode('hello');\n * const sig = schnorr.sign(msg, priv);\n * const isValid = schnorr.verify(sig, msg, pub);\n * ```\n */\nexport const schnorr = /* @__PURE__ */ (() => ({\n getPublicKey: schnorrGetPublicKey,\n sign: schnorrSign,\n verify: schnorrVerify,\n utils: {\n randomPrivateKey: secp256k1.utils.randomPrivateKey,\n lift_x,\n pointToBytes,\n numberToBytesBE,\n bytesToNumberBE,\n taggedHash,\n mod,\n },\n}))();\nconst isoMap = /* @__PURE__ */ (() => isogenyMap(Fpk1, [\n // xNum\n [\n '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa8c7',\n '0x7d3d4c80bc321d5b9f315cea7fd44c5d595d2fc0bf63b92dfff1044f17c6581',\n '0x534c328d23f234e6e2a413deca25caece4506144037c40314ecbd0b53d9dd262',\n '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa88c',\n ],\n // xDen\n [\n '0xd35771193d94918a9ca34ccbb7b640dd86cd409542f8487d9fe6b745781eb49b',\n '0xedadc6f64383dc1df7c4b2d51b54225406d36b641f5e41bbc52a56612a8c6d14',\n '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n ],\n // yNum\n [\n '0x4bda12f684bda12f684bda12f684bda12f684bda12f684bda12f684b8e38e23c',\n '0xc75e0c32d5cb7c0fa9d0a54b12a0a6d5647ab046d686da6fdffc90fc201d71a3',\n '0x29a6194691f91a73715209ef6512e576722830a201be2018a765e85a9ecee931',\n '0x2f684bda12f684bda12f684bda12f684bda12f684bda12f684bda12f38e38d84',\n ],\n // yDen\n [\n '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffff93b',\n '0x7a06534bb8bdb49fd5e9e6632722c2989467c1bfc8e8d978dfb425d2685c2573',\n '0x6484aa716545ca2cf3a70c3fa8fe337e0a3d21162f0d6299a7bf8192bfd2a76f',\n '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n ],\n].map((i) => i.map((j) => BigInt(j)))))();\nconst mapSWU = /* @__PURE__ */ (() => mapToCurveSimpleSWU(Fpk1, {\n A: BigInt('0x3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533'),\n B: BigInt('1771'),\n Z: Fpk1.create(BigInt('-11')),\n}))();\n/** Hashing / encoding to secp256k1 points / field. RFC 9380 methods. */\nexport const secp256k1_hasher = /* @__PURE__ */ (() => createHasher(secp256k1.Point, (scalars) => {\n const { x, y } = mapSWU(Fpk1.create(scalars[0]));\n return isoMap(x, y);\n}, {\n DST: 'secp256k1_XMD:SHA-256_SSWU_RO_',\n encodeDST: 'secp256k1_XMD:SHA-256_SSWU_NU_',\n p: Fpk1.ORDER,\n m: 1,\n k: 128,\n expand: 'xmd',\n hash: sha256,\n}))();\nexport const hashToCurve = /* @__PURE__ */ (() => secp256k1_hasher.hashToCurve)();\nexport const encodeToCurve = /* @__PURE__ */ (() => secp256k1_hasher.encodeToCurve)();\n//# sourceMappingURL=secp256k1.js.map","/**\n * Utilities for short weierstrass curves, combined with noble-hashes.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { weierstrass } from \"./abstract/weierstrass.js\";\n/** connects noble-curves to noble-hashes */\nexport function getHash(hash) {\n return { hash };\n}\nexport function createCurve(curveDef, defHash) {\n const create = (hash) => weierstrass({ ...curveDef, hash: hash });\n return { ...create(defHash), create };\n}\n//# sourceMappingURL=_shortw_utils.js.map","import { Buff } from '@vbyte/buff';\nimport { Assert } from './assert.js';\nimport { secp256k1, schnorr } from '@noble/curves/secp256k1';\nimport { Field } from '@noble/curves/abstract/modular';\nconst _0n = BigInt(0);\nconst _2n = BigInt(2);\nconst _N = secp256k1.CURVE.n;\nconst FD = Field(_N, 32, true);\nconst GP = secp256k1.Point.BASE;\nexport function get_seckey(secret, even_y = false) {\n let sk = serialize_bytes(secret).big % _N;\n if (even_y) {\n const pt = GP.multiply(sk);\n return (pt.y % _2n === _0n)\n ? Buff.big(sk)\n : Buff.big(_N - sk);\n }\n else {\n return Buff.big(sk);\n }\n}\nexport function get_pubkey(seckey, format) {\n const sk = serialize_bytes(seckey).big;\n const pt = GP.multiply(sk);\n const pk = pt.toHex(true);\n return serialize_pubkey(pk, format);\n}\nexport function tweak_seckey(seckey, tweak, even_y = false) {\n const sk = get_seckey(seckey, even_y).big;\n const twk = serialize_bytes(tweak).big;\n const tweaked_sk = FD.add(sk, twk);\n const new_secret = Buff.big(tweaked_sk);\n return get_seckey(new_secret, false);\n}\nexport function tweak_pubkey(pubkey, tweak, format, even_y = false) {\n const twk_big = serialize_bytes(tweak).big;\n const pub_pt = lift_point(pubkey);\n const tweak_pt = GP.multiply(twk_big);\n let tweaked_pt = pub_pt.add(tweak_pt);\n if (even_y && !tweaked_pt.hasEvenY()) {\n tweaked_pt = tweaked_pt.negate();\n }\n const pk = tweaked_pt.toHex(true);\n return serialize_pubkey(pk, format);\n}\nexport function verify_seckey(seckey) {\n const sk = serialize_bytes(seckey);\n Assert.size(sk, 32, 'ecdsa secret keys must be 32 bytes long');\n Assert.ok(sk.big < _N, 'ecdsa secret keys must be less than the curve order');\n Assert.ok(sk.big > 0, 'ecdsa secret keys must be greater than zero');\n}\nexport function verify_pubkey(pubkey, format) {\n const pk = serialize_bytes(pubkey);\n if (format === 'bip340') {\n Assert.size(pk, 32, 'bip340 public keys must be 32 bytes long');\n }\n else if (format === 'ecdsa') {\n Assert.size(pk, 33, 'ecdsa public keys must be 33 bytes long');\n }\n else {\n throw new Error('invalid format: ' + format);\n }\n verify_point(pk);\n}\nexport function get_ecdsa_sig(seckey, message) {\n const msg = serialize_bytes(message);\n const sig = secp256k1.sign(msg, seckey).toDERRawBytes();\n return Buff.bytes(sig);\n}\nexport function get_bip340_sig(seckey, message) {\n const msg = serialize_bytes(message);\n const sig = schnorr.sign(msg, seckey);\n return serialize_bytes(sig);\n}\nexport function verify_ecdsa_sig(signature, message, pubkey) {\n const sig = serialize_bytes(signature);\n const msg = serialize_bytes(message);\n const pk = serialize_pubkey(pubkey, 'ecdsa');\n return secp256k1.verify(sig, msg, pk);\n}\nexport function verify_bip340_sig(signature, message, pubkey) {\n const sig = serialize_bytes(signature);\n const msg = serialize_bytes(message);\n const pk = serialize_pubkey(pubkey, 'bip340');\n return schnorr.verify(sig, msg, pk);\n}\nexport function verify_point(pubkey) {\n try {\n const pt = lift_point(pubkey);\n pt.assertValidity();\n }\n catch (err) {\n throw new Error('invalid secp256k1 point: ' + pubkey);\n }\n}\nexport function lift_point(pubkey) {\n try {\n const pk = serialize_pubkey(pubkey, 'ecdsa');\n return secp256k1.Point.fromHex(pk);\n }\n catch (err) {\n throw new Error('invalid pubkey: ' + pubkey);\n }\n}\nexport function serialize_pubkey(pubkey, format) {\n try {\n const pk = serialize_bytes(pubkey);\n if (pk.length === 33 && format === 'bip340') {\n return pk.slice(1);\n }\n else if (pk.length === 32 && format === 'ecdsa') {\n const prefix = Buff.num(0x02, 1);\n return Buff.join([prefix, pk]);\n }\n else {\n return pk;\n }\n }\n catch (err) {\n throw new Error('invalid pubkey: ' + String(pubkey));\n }\n}\nexport function get_pubkey_format(pubkey) {\n const pk = serialize_bytes(pubkey);\n if (pk.length === 33)\n return 'ecdsa';\n if (pk.length === 32)\n return 'bip340';\n throw new Error('invalid pubkey: ' + String(pubkey));\n}\nexport function serialize_bytes(bytes) {\n try {\n return Buff.bytes(bytes);\n }\n catch (err) {\n throw new Error('invalid bytes: ' + String(bytes));\n }\n}\n","/**\n\nSHA1 (RFC 3174), MD5 (RFC 1321) and RIPEMD160 (RFC 2286) legacy, weak hash functions.\nDon't use them in a new protocol. What \"weak\" means:\n\n- Collisions can be made with 2^18 effort in MD5, 2^60 in SHA1, 2^80 in RIPEMD160.\n- No practical pre-image attacks (only theoretical, 2^123.4)\n- HMAC seems kinda ok: https://datatracker.ietf.org/doc/html/rfc6151\n * @module\n */\nimport { Chi, HashMD, Maj } from \"./_md.js\";\nimport { clean, createHasher, rotl } from \"./utils.js\";\n/** Initial SHA1 state */\nconst SHA1_IV = /* @__PURE__ */ Uint32Array.from([\n 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0,\n]);\n// Reusable temporary buffer\nconst SHA1_W = /* @__PURE__ */ new Uint32Array(80);\n/** SHA1 legacy hash class. */\nexport class SHA1 extends HashMD {\n constructor() {\n super(64, 20, 8, false);\n this.A = SHA1_IV[0] | 0;\n this.B = SHA1_IV[1] | 0;\n this.C = SHA1_IV[2] | 0;\n this.D = SHA1_IV[3] | 0;\n this.E = SHA1_IV[4] | 0;\n }\n get() {\n const { A, B, C, D, E } = this;\n return [A, B, C, D, E];\n }\n set(A, B, C, D, E) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n }\n process(view, offset) {\n for (let i = 0; i < 16; i++, offset += 4)\n SHA1_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 80; i++)\n SHA1_W[i] = rotl(SHA1_W[i - 3] ^ SHA1_W[i - 8] ^ SHA1_W[i - 14] ^ SHA1_W[i - 16], 1);\n // Compression function main loop, 80 rounds\n let { A, B, C, D, E } = this;\n for (let i = 0; i < 80; i++) {\n let F, K;\n if (i < 20) {\n F = Chi(B, C, D);\n K = 0x5a827999;\n }\n else if (i < 40) {\n F = B ^ C ^ D;\n K = 0x6ed9eba1;\n }\n else if (i < 60) {\n F = Maj(B, C, D);\n K = 0x8f1bbcdc;\n }\n else {\n F = B ^ C ^ D;\n K = 0xca62c1d6;\n }\n const T = (rotl(A, 5) + F + E + K + SHA1_W[i]) | 0;\n E = D;\n D = C;\n C = rotl(B, 30);\n B = A;\n A = T;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n this.set(A, B, C, D, E);\n }\n roundClean() {\n clean(SHA1_W);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0);\n clean(this.buffer);\n }\n}\n/** SHA1 (RFC 3174) legacy hash function. It was cryptographically broken. */\nexport const sha1 = /* @__PURE__ */ createHasher(() => new SHA1());\n/** Per-round constants */\nconst p32 = /* @__PURE__ */ Math.pow(2, 32);\nconst K = /* @__PURE__ */ Array.from({ length: 64 }, (_, i) => Math.floor(p32 * Math.abs(Math.sin(i + 1))));\n/** md5 initial state: same as sha1, but 4 u32 instead of 5. */\nconst MD5_IV = /* @__PURE__ */ SHA1_IV.slice(0, 4);\n// Reusable temporary buffer\nconst MD5_W = /* @__PURE__ */ new Uint32Array(16);\n/** MD5 legacy hash class. */\nexport class MD5 extends HashMD {\n constructor() {\n super(64, 16, 8, true);\n this.A = MD5_IV[0] | 0;\n this.B = MD5_IV[1] | 0;\n this.C = MD5_IV[2] | 0;\n this.D = MD5_IV[3] | 0;\n }\n get() {\n const { A, B, C, D } = this;\n return [A, B, C, D];\n }\n set(A, B, C, D) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n }\n process(view, offset) {\n for (let i = 0; i < 16; i++, offset += 4)\n MD5_W[i] = view.getUint32(offset, true);\n // Compression function main loop, 64 rounds\n let { A, B, C, D } = this;\n for (let i = 0; i < 64; i++) {\n let F, g, s;\n if (i < 16) {\n F = Chi(B, C, D);\n g = i;\n s = [7, 12, 17, 22];\n }\n else if (i < 32) {\n F = Chi(D, B, C);\n g = (5 * i + 1) % 16;\n s = [5, 9, 14, 20];\n }\n else if (i < 48) {\n F = B ^ C ^ D;\n g = (3 * i + 5) % 16;\n s = [4, 11, 16, 23];\n }\n else {\n F = C ^ (B | ~D);\n g = (7 * i) % 16;\n s = [6, 10, 15, 21];\n }\n F = F + A + K[i] + MD5_W[g];\n A = D;\n D = C;\n C = B;\n B = B + rotl(F, s[i % 4]);\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n this.set(A, B, C, D);\n }\n roundClean() {\n clean(MD5_W);\n }\n destroy() {\n this.set(0, 0, 0, 0);\n clean(this.buffer);\n }\n}\n/**\n * MD5 (RFC 1321) legacy hash function. It was cryptographically broken.\n * MD5 architecture is similar to SHA1, with some differences:\n * - Reduced output length: 16 bytes (128 bit) instead of 20\n * - 64 rounds, instead of 80\n * - Little-endian: could be faster, but will require more code\n * - Non-linear index selection: huge speed-up for unroll\n * - Per round constants: more memory accesses, additional speed-up for unroll\n */\nexport const md5 = /* @__PURE__ */ createHasher(() => new MD5());\n// RIPEMD-160\nconst Rho160 = /* @__PURE__ */ Uint8Array.from([\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n]);\nconst Id160 = /* @__PURE__ */ (() => Uint8Array.from(new Array(16).fill(0).map((_, i) => i)))();\nconst Pi160 = /* @__PURE__ */ (() => Id160.map((i) => (9 * i + 5) % 16))();\nconst idxLR = /* @__PURE__ */ (() => {\n const L = [Id160];\n const R = [Pi160];\n const res = [L, R];\n for (let i = 0; i < 4; i++)\n for (let j of res)\n j.push(j[i].map((k) => Rho160[k]));\n return res;\n})();\nconst idxL = /* @__PURE__ */ (() => idxLR[0])();\nconst idxR = /* @__PURE__ */ (() => idxLR[1])();\n// const [idxL, idxR] = idxLR;\nconst shifts160 = /* @__PURE__ */ [\n [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8],\n [12, 13, 11, 15, 6, 9, 9, 7, 12, 15, 11, 13, 7, 8, 7, 7],\n [13, 15, 14, 11, 7, 7, 6, 8, 13, 14, 13, 12, 5, 5, 6, 9],\n [14, 11, 12, 14, 8, 6, 5, 5, 15, 12, 15, 14, 9, 9, 8, 6],\n [15, 12, 13, 13, 9, 5, 8, 6, 14, 11, 12, 11, 8, 6, 5, 5],\n].map((i) => Uint8Array.from(i));\nconst shiftsL160 = /* @__PURE__ */ idxL.map((idx, i) => idx.map((j) => shifts160[i][j]));\nconst shiftsR160 = /* @__PURE__ */ idxR.map((idx, i) => idx.map((j) => shifts160[i][j]));\nconst Kl160 = /* @__PURE__ */ Uint32Array.from([\n 0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e,\n]);\nconst Kr160 = /* @__PURE__ */ Uint32Array.from([\n 0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000,\n]);\n// It's called f() in spec.\nfunction ripemd_f(group, x, y, z) {\n if (group === 0)\n return x ^ y ^ z;\n if (group === 1)\n return (x & y) | (~x & z);\n if (group === 2)\n return (x | ~y) ^ z;\n if (group === 3)\n return (x & z) | (y & ~z);\n return x ^ (y | ~z);\n}\n// Reusable temporary buffer\nconst BUF_160 = /* @__PURE__ */ new Uint32Array(16);\nexport class RIPEMD160 extends HashMD {\n constructor() {\n super(64, 20, 8, true);\n this.h0 = 0x67452301 | 0;\n this.h1 = 0xefcdab89 | 0;\n this.h2 = 0x98badcfe | 0;\n this.h3 = 0x10325476 | 0;\n this.h4 = 0xc3d2e1f0 | 0;\n }\n get() {\n const { h0, h1, h2, h3, h4 } = this;\n return [h0, h1, h2, h3, h4];\n }\n set(h0, h1, h2, h3, h4) {\n this.h0 = h0 | 0;\n this.h1 = h1 | 0;\n this.h2 = h2 | 0;\n this.h3 = h3 | 0;\n this.h4 = h4 | 0;\n }\n process(view, offset) {\n for (let i = 0; i < 16; i++, offset += 4)\n BUF_160[i] = view.getUint32(offset, true);\n // prettier-ignore\n let al = this.h0 | 0, ar = al, bl = this.h1 | 0, br = bl, cl = this.h2 | 0, cr = cl, dl = this.h3 | 0, dr = dl, el = this.h4 | 0, er = el;\n // Instead of iterating 0 to 80, we split it into 5 groups\n // And use the groups in constants, functions, etc. Much simpler\n for (let group = 0; group < 5; group++) {\n const rGroup = 4 - group;\n const hbl = Kl160[group], hbr = Kr160[group]; // prettier-ignore\n const rl = idxL[group], rr = idxR[group]; // prettier-ignore\n const sl = shiftsL160[group], sr = shiftsR160[group]; // prettier-ignore\n for (let i = 0; i < 16; i++) {\n const tl = (rotl(al + ripemd_f(group, bl, cl, dl) + BUF_160[rl[i]] + hbl, sl[i]) + el) | 0;\n al = el, el = dl, dl = rotl(cl, 10) | 0, cl = bl, bl = tl; // prettier-ignore\n }\n // 2 loops are 10% faster\n for (let i = 0; i < 16; i++) {\n const tr = (rotl(ar + ripemd_f(rGroup, br, cr, dr) + BUF_160[rr[i]] + hbr, sr[i]) + er) | 0;\n ar = er, er = dr, dr = rotl(cr, 10) | 0, cr = br, br = tr; // prettier-ignore\n }\n }\n // Add the compressed chunk to the current hash value\n this.set((this.h1 + cl + dr) | 0, (this.h2 + dl + er) | 0, (this.h3 + el + ar) | 0, (this.h4 + al + br) | 0, (this.h0 + bl + cr) | 0);\n }\n roundClean() {\n clean(BUF_160);\n }\n destroy() {\n this.destroyed = true;\n clean(this.buffer);\n this.set(0, 0, 0, 0, 0);\n }\n}\n/**\n * RIPEMD-160 - a legacy hash function from 1990s.\n * * https://homes.esat.kuleuven.be/~bosselae/ripemd160.html\n * * https://homes.esat.kuleuven.be/~bosselae/ripemd160/pdf/AB-9601/AB-9601.pdf\n */\nexport const ripemd160 = /* @__PURE__ */ createHasher(() => new RIPEMD160());\n//# sourceMappingURL=legacy.js.map","import { Buff } from '@vbyte/buff';\nimport { hmac as noble_hmac } from '@noble/hashes/hmac';\nimport { pbkdf2 as noble_pbkdf2 } from '@noble/hashes/pbkdf2';\nimport { ripemd160 as noble_r160 } from '@noble/hashes/legacy';\nimport { sha256 as noble_s256, sha512 as noble_s512 } from '@noble/hashes/sha2';\nexport function hash160(...input) {\n const buffer = Buff.join(input);\n const digest = noble_r160(noble_s256(buffer));\n return new Buff(digest);\n}\nexport function sha256(...input) {\n const buffer = Buff.join(input);\n const digest = noble_s256(buffer);\n return new Buff(digest);\n}\nexport function hash256(...input) {\n const buffer = Buff.join(input);\n const digest = noble_s256(noble_s256(buffer));\n return new Buff(digest);\n}\nexport function hashtag(tag) {\n const hash = sha256(Buff.str(tag));\n return Buff.join([hash, hash]);\n}\nexport function hash340(tag, ...input) {\n const htag = hashtag(tag);\n const data = input.map(e => new Buff(e));\n const pimg = Buff.join([htag, ...data]);\n return sha256(pimg);\n}\nexport function hmac256(key, ...input) {\n const mask = new Buff(key);\n const buffer = Buff.join(input);\n const digest = noble_hmac(noble_s256, mask, buffer);\n return new Buff(digest);\n}\nexport function hmac512(key, ...input) {\n const mask = new Buff(key);\n const buffer = Buff.join(input);\n const digest = noble_hmac(noble_s512, mask, buffer);\n return new Buff(digest);\n}\nexport function pkdf256(secret, salt, options) {\n const { c = 1, dk_len = 32 } = options ?? {};\n const sec_u8 = new Buff(secret);\n const salt_u8 = new Buff(salt);\n const digest = noble_pbkdf2(noble_s256, sec_u8, salt_u8, { c, dkLen: dk_len });\n return new Buff(digest);\n}\nexport function pkdf512(secret, salt, options) {\n const { c = 1, dk_len = 32 } = options ?? {};\n const sec_u8 = new Buff(secret);\n const salt_u8 = new Buff(salt);\n const digest = noble_pbkdf2(noble_s512, sec_u8, salt_u8, { c, dkLen: dk_len });\n return new Buff(digest);\n}\n","export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n","import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n","import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\nexport default errorMap;\n","import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n overrideErrorMap = map;\n}\nexport function getErrorMap() {\n return overrideErrorMap;\n}\n","import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexport const INVALID = Object.freeze({\n status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n","export var errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n","import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nexport class ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nexport class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nexport class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nexport class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nexport class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nexport class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nexport class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nexport class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nexport class ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nexport class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nexport class ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nexport class ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexport class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nexport class ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nexport class ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexport class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nexport class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nexport class ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nexport class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nexport class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!isValid(base))\n return INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nexport class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nexport class ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nexport class ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nexport class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexport class ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexport class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n","import { z } from 'zod';\nexport const big = z.bigint();\nexport const bool = z.boolean();\nexport const date = z.date();\nexport const num = z.number().min(Number.MIN_SAFE_INTEGER).max(Number.MAX_SAFE_INTEGER);\nexport const int = num.int();\nexport const u8a = z.instanceof(Uint8Array);\nexport const str = z.string();\nexport const stamp = int.min(500_000_000);\nexport const any = z.any();\nexport const zod = z;\nexport const char = int.min(0).max(0xFF);\nexport const short = int.min(0).max(0xFFFF);\nexport const uint = int.min(0).max(0xFFFFFFFF);\nexport const float = z.number().refine((e) => String(e).includes('.'));\nexport const float2 = float.refine((e) => {\n const parts = String(e).split('.').at(1);\n return parts !== undefined && parts.length <= 2;\n});\nexport const hex = z.string()\n .regex(/^[0-9a-fA-F]*$/)\n .refine(e => e.length % 2 === 0);\nexport const literal = z.union([\n z.string(), z.number(), z.boolean(), z.null()\n]);\nexport const json = z.lazy(() => z.union([literal, z.array(json), z.record(json)]));\nexport const u8a20 = u8a.refine((e) => e.length === 20);\nexport const u8a32 = u8a.refine((e) => e.length === 32);\nexport const u8a33 = u8a.refine((e) => e.length === 33);\nexport const u8a64 = u8a.refine((e) => e.length === 64);\nexport const hex20 = hex.refine((e) => e.length === 40);\nexport const hex32 = hex.refine((e) => e.length === 64);\nexport const hex33 = hex.refine((e) => e.length === 66);\nexport const hex64 = hex.refine((e) => e.length === 128);\nexport const bytes = z.union([hex, u8a]);\nexport const byte32 = z.union([hex32, u8a32]);\nexport const byte33 = z.union([hex33, u8a33]);\nexport const byte64 = z.union([hex64, u8a64]);\nexport const base58 = z.string().regex(/^[1-9A-HJ-NP-Za-km-z]+$/);\nexport const base64 = z.string().regex(/^[a-zA-Z0-9+/]+={0,2}$/);\nexport const base64url = z.string().regex(/^[a-zA-Z0-9\\-_]+={0,2}$/);\nexport const bech32 = z.string().regex(/^[a-z]+1[023456789acdefghjklmnpqrstuvwxyz]+$/);\n","/*! scure-base - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nfunction isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n/** Asserts something is Uint8Array. */\nfunction abytes(b, ...lengths) {\n if (!isBytes(b))\n throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\nfunction isArrayOf(isString, arr) {\n if (!Array.isArray(arr))\n return false;\n if (arr.length === 0)\n return true;\n if (isString) {\n return arr.every((item) => typeof item === 'string');\n }\n else {\n return arr.every((item) => Number.isSafeInteger(item));\n }\n}\n// no abytes: seems to have 10% slowdown. Why?!\nfunction afn(input) {\n if (typeof input !== 'function')\n throw new Error('function expected');\n return true;\n}\nfunction astr(label, input) {\n if (typeof input !== 'string')\n throw new Error(`${label}: string expected`);\n return true;\n}\nfunction anumber(n) {\n if (!Number.isSafeInteger(n))\n throw new Error(`invalid integer: ${n}`);\n}\nfunction aArr(input) {\n if (!Array.isArray(input))\n throw new Error('array expected');\n}\nfunction astrArr(label, input) {\n if (!isArrayOf(true, input))\n throw new Error(`${label}: array of strings expected`);\n}\nfunction anumArr(label, input) {\n if (!isArrayOf(false, input))\n throw new Error(`${label}: array of numbers expected`);\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction chain(...args) {\n const id = (a) => a;\n // Wrap call in closure so JIT can inline calls\n const wrap = (a, b) => (c) => 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/**\n * Encodes integer radix representation to array of strings using alphabet and back.\n * Could also be array of strings.\n * @__NO_SIDE_EFFECTS__\n */\nfunction alphabet(letters) {\n // mapping 1 to \"b\"\n const lettersA = typeof letters === 'string' ? letters.split('') : letters;\n const len = lettersA.length;\n astrArr('alphabet', lettersA);\n // mapping \"b\" to 1\n const indexes = new Map(lettersA.map((l, i) => [l, i]));\n return {\n encode: (digits) => {\n aArr(digits);\n return digits.map((i) => {\n if (!Number.isSafeInteger(i) || i < 0 || i >= len)\n throw new Error(`alphabet.encode: digit index outside alphabet \"${i}\". Allowed: ${letters}`);\n return lettersA[i];\n });\n },\n decode: (input) => {\n aArr(input);\n return input.map((letter) => {\n astr('alphabet.decode', letter);\n const i = indexes.get(letter);\n if (i === undefined)\n throw new Error(`Unknown letter: \"${letter}\". Allowed: ${letters}`);\n return i;\n });\n },\n };\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction join(separator = '') {\n astr('join', separator);\n return {\n encode: (from) => {\n astrArr('join.decode', from);\n return from.join(separator);\n },\n decode: (to) => {\n astr('join.decode', to);\n return to.split(separator);\n },\n };\n}\n/**\n * Pad strings array so it has integer number of bits\n * @__NO_SIDE_EFFECTS__\n */\nfunction padding(bits, chr = '=') {\n anumber(bits);\n astr('padding', chr);\n return {\n encode(data) {\n astrArr('padding.encode', data);\n while ((data.length * bits) % 8)\n data.push(chr);\n return data;\n },\n decode(input) {\n astrArr('padding.decode', input);\n let end = input.length;\n if ((end * bits) % 8)\n throw new Error('padding: invalid, string should have whole number of bytes');\n for (; end > 0 && input[end - 1] === chr; end--) {\n const last = end - 1;\n const byte = last * bits;\n if (byte % 8 === 0)\n throw new Error('padding: invalid, string has too much padding');\n }\n return input.slice(0, end);\n },\n };\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction normalize(fn) {\n afn(fn);\n return { encode: (from) => from, decode: (to) => fn(to) };\n}\n/**\n * Slow: O(n^2) time complexity\n */\nfunction convertRadix(data, from, to) {\n // base 1 is impossible\n if (from < 2)\n throw new Error(`convertRadix: invalid from=${from}, base cannot be less than 2`);\n if (to < 2)\n throw new Error(`convertRadix: invalid to=${to}, base cannot be less than 2`);\n aArr(data);\n if (!data.length)\n return [];\n let pos = 0;\n const res = [];\n const digits = Array.from(data, (d) => {\n anumber(d);\n if (d < 0 || d >= from)\n throw new Error(`invalid integer: ${d}`);\n return d;\n });\n const dlen = digits.length;\n while (true) {\n let carry = 0;\n let done = true;\n for (let i = pos; i < dlen; i++) {\n const digit = digits[i];\n const fromCarry = from * carry;\n const digitBase = fromCarry + digit;\n if (!Number.isSafeInteger(digitBase) ||\n fromCarry / from !== carry ||\n digitBase - digit !== fromCarry) {\n throw new Error('convertRadix: carry overflow');\n }\n const div = digitBase / to;\n carry = digitBase % to;\n const rounded = Math.floor(div);\n digits[i] = rounded;\n if (!Number.isSafeInteger(rounded) || rounded * to + carry !== digitBase)\n throw new Error('convertRadix: carry overflow');\n if (!done)\n continue;\n else if (!rounded)\n pos = i;\n else\n done = false;\n }\n res.push(carry);\n if (done)\n break;\n }\n for (let i = 0; i < data.length - 1 && data[i] === 0; i++)\n res.push(0);\n return res.reverse();\n}\nconst gcd = (a, b) => (b === 0 ? a : gcd(b, a % b));\nconst radix2carry = /* @__NO_SIDE_EFFECTS__ */ (from, to) => from + (to - gcd(from, to));\nconst powers = /* @__PURE__ */ (() => {\n let res = [];\n for (let i = 0; i < 40; i++)\n res.push(2 ** i);\n return res;\n})();\n/**\n * Implemented with numbers, because BigInt is 5x slower\n */\nfunction convertRadix2(data, from, to, padding) {\n aArr(data);\n if (from <= 0 || from > 32)\n throw new Error(`convertRadix2: wrong from=${from}`);\n if (to <= 0 || to > 32)\n throw new Error(`convertRadix2: wrong to=${to}`);\n if (radix2carry(from, to) > 32) {\n throw new Error(`convertRadix2: carry overflow from=${from} to=${to} carryBits=${radix2carry(from, to)}`);\n }\n let carry = 0;\n let pos = 0; // bitwise position in current element\n const max = powers[from];\n const mask = powers[to] - 1;\n const res = [];\n for (const n of data) {\n anumber(n);\n if (n >= max)\n throw new Error(`convertRadix2: invalid data word=${n} from=${from}`);\n carry = (carry << from) | n;\n if (pos + from > 32)\n throw new Error(`convertRadix2: carry overflow pos=${pos} from=${from}`);\n pos += from;\n for (; pos >= to; pos -= to)\n res.push(((carry >> (pos - to)) & mask) >>> 0);\n const pow = powers[pos];\n if (pow === undefined)\n throw new Error('invalid carry');\n carry &= pow - 1; // clean carry, otherwise it will cause overflow\n }\n carry = (carry << (to - pos)) & mask;\n if (!padding && pos >= from)\n throw new Error('Excess padding');\n if (!padding && carry > 0)\n throw new Error(`Non-zero padding: ${carry}`);\n if (padding && pos > 0)\n res.push(carry >>> 0);\n return res;\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction radix(num) {\n anumber(num);\n const _256 = 2 ** 8;\n return {\n encode: (bytes) => {\n if (!isBytes(bytes))\n throw new Error('radix.encode input should be Uint8Array');\n return convertRadix(Array.from(bytes), _256, num);\n },\n decode: (digits) => {\n anumArr('radix.decode', digits);\n return Uint8Array.from(convertRadix(digits, num, _256));\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, revPadding = false) {\n anumber(bits);\n if (bits <= 0 || bits > 32)\n 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) => {\n if (!isBytes(bytes))\n throw new Error('radix2.encode input should be Uint8Array');\n return convertRadix2(Array.from(bytes), 8, bits, !revPadding);\n },\n decode: (digits) => {\n anumArr('radix2.decode', digits);\n return Uint8Array.from(convertRadix2(digits, bits, 8, revPadding));\n },\n };\n}\nfunction unsafeWrapper(fn) {\n afn(fn);\n return function (...args) {\n try {\n return fn.apply(null, args);\n }\n catch (e) { }\n };\n}\nfunction checksum(len, fn) {\n anumber(len);\n afn(fn);\n return {\n encode(data) {\n if (!isBytes(data))\n throw new Error('checksum.encode: input should be Uint8Array');\n const sum = fn(data).slice(0, len);\n const res = new Uint8Array(data.length + len);\n res.set(data);\n res.set(sum, data.length);\n return res;\n },\n decode(data) {\n if (!isBytes(data))\n throw new Error('checksum.decode: input should be Uint8Array');\n const payload = data.slice(0, -len);\n const oldChecksum = data.slice(-len);\n const newChecksum = fn(payload).slice(0, len);\n for (let i = 0; i < len; i++)\n if (newChecksum[i] !== oldChecksum[i])\n throw new Error('Invalid checksum');\n return payload;\n },\n };\n}\n// prettier-ignore\nexport const utils = {\n alphabet, chain, checksum, convertRadix, convertRadix2, radix, radix2, join, padding,\n};\n// RFC 4648 aka RFC 3548\n// ---------------------\n/**\n * base16 encoding from RFC 4648.\n * @example\n * ```js\n * base16.encode(Uint8Array.from([0x12, 0xab]));\n * // => '12AB'\n * ```\n */\nexport const base16 = chain(radix2(4), alphabet('0123456789ABCDEF'), join(''));\n/**\n * base32 encoding from RFC 4648. Has padding.\n * Use `base32nopad` for unpadded version.\n * Also check out `base32hex`, `base32hexnopad`, `base32crockford`.\n * @example\n * ```js\n * base32.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'CKVQ===='\n * base32.decode('CKVQ====');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32 = chain(radix2(5), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'), padding(5), join(''));\n/**\n * base32 encoding from RFC 4648. No padding.\n * Use `base32` for padded version.\n * Also check out `base32hex`, `base32hexnopad`, `base32crockford`.\n * @example\n * ```js\n * base32nopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'CKVQ'\n * base32nopad.decode('CKVQ');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32nopad = chain(radix2(5), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'), join(''));\n/**\n * base32 encoding from RFC 4648. Padded. Compared to ordinary `base32`, slightly different alphabet.\n * Use `base32hexnopad` for unpadded version.\n * @example\n * ```js\n * base32hex.encode(Uint8Array.from([0x12, 0xab]));\n * // => '2ALG===='\n * base32hex.decode('2ALG====');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32hex = chain(radix2(5), alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'), padding(5), join(''));\n/**\n * base32 encoding from RFC 4648. No padding. Compared to ordinary `base32`, slightly different alphabet.\n * Use `base32hex` for padded version.\n * @example\n * ```js\n * base32hexnopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => '2ALG'\n * base32hexnopad.decode('2ALG');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32hexnopad = chain(radix2(5), alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'), join(''));\n/**\n * base32 encoding from RFC 4648. Doug Crockford's version.\n * https://www.crockford.com/base32.html\n * @example\n * ```js\n * base32crockford.encode(Uint8Array.from([0x12, 0xab]));\n * // => '2ANG'\n * base32crockford.decode('2ANG');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32crockford = chain(radix2(5), alphabet('0123456789ABCDEFGHJKMNPQRSTVWXYZ'), join(''), normalize((s) => s.toUpperCase().replace(/O/g, '0').replace(/[IL]/g, '1')));\n// Built-in base64 conversion https://caniuse.com/mdn-javascript_builtins_uint8array_frombase64\n// prettier-ignore\nconst hasBase64Builtin = /* @__PURE__ */ (() => typeof Uint8Array.from([]).toBase64 === 'function' &&\n typeof Uint8Array.fromBase64 === 'function')();\nconst decodeBase64Builtin = (s, isUrl) => {\n astr('base64', s);\n const re = isUrl ? /^[A-Za-z0-9=_-]+$/ : /^[A-Za-z0-9=+/]+$/;\n const alphabet = isUrl ? 'base64url' : 'base64';\n if (s.length > 0 && !re.test(s))\n throw new Error('invalid base64');\n return Uint8Array.fromBase64(s, { alphabet, lastChunkHandling: 'strict' });\n};\n/**\n * base64 from RFC 4648. Padded.\n * Use `base64nopad` for unpadded version.\n * Also check out `base64url`, `base64urlnopad`.\n * Falls back to built-in function, when available.\n * @example\n * ```js\n * base64.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs='\n * base64.decode('Eqs=');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\n// prettier-ignore\nexport const base64 = hasBase64Builtin ? {\n encode(b) { abytes(b); return b.toBase64(); },\n decode(s) { return decodeBase64Builtin(s, false); },\n} : chain(radix2(6), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'), padding(6), join(''));\n/**\n * base64 from RFC 4648. No padding.\n * Use `base64` for padded version.\n * @example\n * ```js\n * base64nopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs'\n * base64nopad.decode('Eqs');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base64nopad = chain(radix2(6), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'), join(''));\n/**\n * base64 from RFC 4648, using URL-safe alphabet. Padded.\n * Use `base64urlnopad` for unpadded version.\n * Falls back to built-in function, when available.\n * @example\n * ```js\n * base64url.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs='\n * base64url.decode('Eqs=');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\n// prettier-ignore\nexport const base64url = hasBase64Builtin ? {\n encode(b) { abytes(b); return b.toBase64({ alphabet: 'base64url' }); },\n decode(s) { return decodeBase64Builtin(s, true); },\n} : chain(radix2(6), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'), padding(6), join(''));\n/**\n * base64 from RFC 4648, using URL-safe alphabet. No padding.\n * Use `base64url` for padded version.\n * @example\n * ```js\n * base64urlnopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs'\n * base64urlnopad.decode('Eqs');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base64urlnopad = chain(radix2(6), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'), join(''));\n// base58 code\n// -----------\nconst genBase58 = /* @__NO_SIDE_EFFECTS__ */ (abc) => chain(radix(58), alphabet(abc), join(''));\n/**\n * base58: base64 without ambigous characters +, /, 0, O, I, l.\n * Quadratic (O(n^2)) - so, can't be used on large inputs.\n * @example\n * ```js\n * base58.decode('01abcdef');\n * // => '3UhJW'\n * ```\n */\nexport const base58 = genBase58('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz');\n/**\n * base58: flickr version. Check out `base58`.\n */\nexport const base58flickr = genBase58('123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ');\n/**\n * base58: XRP version. Check out `base58`.\n */\nexport const base58xrp = genBase58('rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz');\n// Data len (index) -> encoded block len\nconst XMR_BLOCK_LEN = [0, 2, 3, 5, 6, 7, 9, 10, 11];\n/**\n * base58: XMR version. Check out `base58`.\n * 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 */\nexport const base58xmr = {\n encode(data) {\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) {\n let res = [];\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)\n 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/**\n * Method, which creates base58check encoder.\n * Requires function, calculating sha256.\n */\nexport const createBase58check = (sha256) => chain(checksum(4, (data) => sha256(sha256(data))), base58);\n/**\n * Use `createBase58check` instead.\n * @deprecated\n */\nexport const base58check = createBase58check;\nconst BECH_ALPHABET = chain(alphabet('qpzry9x8gf2tvdw0s3jn54khce6mua7l'), join(''));\nconst POLYMOD_GENERATORS = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3];\nfunction bech32Polymod(pre) {\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)\n chk ^= POLYMOD_GENERATORS[i];\n }\n return chk;\n}\nfunction bechChecksum(prefix, words, encodingConst = 1) {\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)\n 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++)\n chk = bech32Polymod(chk) ^ (prefix.charCodeAt(i) & 0x1f);\n for (let v of words)\n chk = bech32Polymod(chk) ^ v;\n for (let i = 0; i < 6; i++)\n chk = bech32Polymod(chk);\n chk ^= encodingConst;\n return BECH_ALPHABET.encode(convertRadix2([chk % powers[30]], 30, 5, false));\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction genBech32(encoding) {\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 function encode(prefix, words, limit = 90) {\n astr('bech32.encode prefix', prefix);\n if (isBytes(words))\n words = Array.from(words);\n anumArr('bech32.encode', words);\n const plen = prefix.length;\n if (plen === 0)\n throw new TypeError(`Invalid prefix length ${plen}`);\n const actualLength = plen + 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}`;\n }\n function decode(str, limit = 90) {\n astr('bech32.decode input', str);\n const slen = str.length;\n if (slen < 8 || (limit !== false && slen > limit))\n throw new TypeError(`invalid string length: ${slen} (${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)\n 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))\n throw new Error(`Invalid checksum in ${str}: expected \"${sum}\"`);\n return { prefix, words };\n }\n const decodeUnsafe = unsafeWrapper(decode);\n function decodeToBytes(str) {\n const { prefix, words } = decode(str, false);\n return { prefix, words, bytes: fromWords(words) };\n }\n function encodeFromBytes(prefix, bytes) {\n return encode(prefix, toWords(bytes));\n }\n return {\n encode,\n decode,\n encodeFromBytes,\n decodeToBytes,\n decodeUnsafe,\n fromWords,\n fromWordsUnsafe,\n toWords,\n };\n}\n/**\n * bech32 from BIP 173. Operates on words.\n * For high-level, check out scure-btc-signer:\n * https://github.com/paulmillr/scure-btc-signer.\n */\nexport const bech32 = genBech32('bech32');\n/**\n * bech32m from BIP 350. Operates on words.\n * It was to mitigate `bech32` weaknesses.\n * For high-level, check out scure-btc-signer:\n * https://github.com/paulmillr/scure-btc-signer.\n */\nexport const bech32m = genBech32('bech32m');\n/**\n * UTF-8-to-byte decoder. Uses built-in TextDecoder / TextEncoder.\n * @example\n * ```js\n * const b = utf8.decode(\"hey\"); // => new Uint8Array([ 104, 101, 121 ])\n * const str = utf8.encode(b); // \"hey\"\n * ```\n */\nexport const utf8 = {\n encode: (data) => new TextDecoder().decode(data),\n decode: (str) => new TextEncoder().encode(str),\n};\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\n// prettier-ignore\nconst hasHexBuiltin = /* @__PURE__ */ (() => typeof Uint8Array.from([]).toHex === 'function' &&\n typeof Uint8Array.fromHex === 'function')();\n// prettier-ignore\nconst hexBuiltin = {\n encode(data) { abytes(data); return data.toHex(); },\n decode(s) { astr('hex', s); return Uint8Array.fromHex(s); },\n};\n/**\n * hex string decoder. Uses built-in function, when available.\n * @example\n * ```js\n * const b = hex.decode(\"0102ff\"); // => new Uint8Array([ 1, 2, 255 ])\n * const str = hex.encode(b); // \"0102ff\"\n * ```\n */\nexport const hex = hasHexBuiltin\n ? hexBuiltin\n : chain(radix2(4), alphabet('0123456789abcdef'), join(''), normalize((s) => {\n if (typeof s !== 'string' || s.length % 2 !== 0)\n throw new TypeError(`hex.decode: expected string, got ${typeof s} with length ${s.length}`);\n return s.toLowerCase();\n }));\n// prettier-ignore\nconst CODERS = {\n utf8, hex, base16, base32, base64, base64url, base58, base58xmr\n};\nconst coderTypeError = 'Invalid encoding type. Available types: utf8, hex, base16, base32, base64, base64url, base58, base58xmr';\n/** @deprecated */\nexport const bytesToString = (type, bytes) => {\n if (typeof type !== 'string' || !CODERS.hasOwnProperty(type))\n throw new TypeError(coderTypeError);\n if (!isBytes(bytes))\n throw new TypeError('bytesToString() expects Uint8Array');\n return CODERS[type].encode(bytes);\n};\n/** @deprecated */\nexport const str = bytesToString; // as in python, but for bytes only\n/** @deprecated */\nexport const stringToBytes = (type, str) => {\n if (!CODERS.hasOwnProperty(type))\n throw new TypeError(coderTypeError);\n if (typeof str !== 'string')\n throw new TypeError('stringToBytes() expects string');\n return CODERS[type].decode(str);\n};\n/** @deprecated */\nexport const bytes = stringToBytes;\n//# sourceMappingURL=index.js.map","import { sha256 } from '@noble/hashes/sha2';\nimport { Assert } from './assert.js';\nimport { createBase58check, base64, base64urlnopad, bech32, bech32m } from '@scure/base';\nexport var B58chk;\n(function (B58chk) {\n B58chk.encode = (data) => {\n Assert.is_u8a(data);\n return createBase58check(sha256).encode(data);\n };\n B58chk.decode = (data) => {\n Assert.is_base58(data);\n return createBase58check(sha256).decode(data);\n };\n})(B58chk || (B58chk = {}));\nexport var Base64;\n(function (Base64) {\n Base64.encode = (data) => {\n Assert.is_u8a(data);\n return base64.encode(data);\n };\n Base64.decode = (data) => {\n Assert.is_base64(data);\n return base64.decode(data);\n };\n})(Base64 || (Base64 = {}));\nexport var B64url;\n(function (B64url) {\n B64url.encode = (data) => {\n Assert.is_u8a(data);\n return base64urlnopad.encode(data);\n };\n B64url.decode = (data) => {\n Assert.is_b64url(data);\n return base64urlnopad.decode(data);\n };\n})(B64url || (B64url = {}));\nexport var Bech32;\n(function (Bech32) {\n Bech32.to_words = bech32.toWords;\n Bech32.to_bytes = bech32.fromWords;\n Bech32.encode = (prefix, words, limit = false) => {\n assert_prefix(prefix);\n assert_words(words);\n return bech32.encode(prefix, words, limit);\n };\n Bech32.decode = (data, limit = false) => {\n Assert.is_bech32(data);\n return bech32.decode(data, limit);\n };\n})(Bech32 || (Bech32 = {}));\nexport var Bech32m;\n(function (Bech32m) {\n Bech32m.to_words = bech32m.toWords;\n Bech32m.to_bytes = bech32m.fromWords;\n Bech32m.encode = (prefix, words, limit = false) => {\n assert_prefix(prefix);\n assert_words(words);\n return bech32m.encode(prefix, words, limit);\n };\n Bech32m.decode = (data, limit = false) => {\n Assert.is_bech32(data);\n return bech32m.decode(data, limit);\n };\n})(Bech32m || (Bech32m = {}));\nfunction assert_prefix(value) {\n if (typeof value !== 'string' || value.length === 0) {\n throw new Error(`invalid prefix: ${String(value)}`);\n }\n}\nfunction assert_words(value) {\n if (!(Array.isArray(value) &&\n value.every(word => typeof word === 'number'))) {\n throw new Error(`invalid words: ${String(value)}`);\n }\n}\n","import { Buff } from '@vbyte/buff'\n\nimport { Assert, B58chk, Bech32, Bech32m } from '@vbyte/micro-lib'\n\nimport type {\n AddressFormat,\n DecodedAddress,\n} from '@/types/address.js'\n\nconst ENCODING_REGEX = {\n base58 : /^[13mn2][a-km-zA-HJ-NP-Z1-9]{25,34}$/,\n bech32 : /^(bc|tb|bcrt)1q[ac-hj-np-z02-9]{6,87}$/,\n bech32m : /^(bc|tb|bcrt)1p[ac-hj-np-z02-9]{6,87}$/\n}\n\nconst VERSION = {\n bech32 : 0,\n bech32m : 1\n}\n\n/**\n * Decode an address.\n * \n * @param address - The address to decode.\n * @returns The decoded address.\n */\nexport function decode_address (address : string) : DecodedAddress {\n // Get the address format.\n const format = get_address_format(address)\n // If the format is not found, throw an error.\n if (format === null) throw new Error('unrecognized address format: ' + format)\n // Decode the address based on the format.\n if (format === 'base58') return base58_decode(address)\n if (format === 'bech32') return bech32_decode(address)\n if (format === 'bech32m') return bech32m_decode(address)\n // If we didn't find a matching decoder, throw.\n throw new Error('unable to find a matching address configuration')\n}\n\n/**\n * Encode an address.\n * \n * @param address - The address to encode.\n * @returns The encoded address as a string, or null if the address is not\n * recognized.\n */\nexport function encode_address (\n config : DecodedAddress\n) : string {\n // Encode the address based on the format.\n if (config.format === 'base58') return base58_encode(config)\n if (config.format === 'bech32') return bech32_encode(config)\n if (config.format === 'bech32m') return bech32m_encode(config)\n // If the format is not recognized, throw an error.\n throw new Error('unrecognized encoding format: ' + config.format)\n}\n\n/**\n * Get the encoding type for a given address.\n * \n * @param address - The address to get the encoding type for.\n * @returns The encoding type, or null if the address is not recognized.\n */\nfunction get_address_format (address : string) : AddressFormat | null {\n // For each encoding type, check if the address matches the regex.\n for (const [ format, regex ] of Object.entries(ENCODING_REGEX)) {\n // If the address matches the regex, return the format.\n if (regex.test(address)) return format as AddressFormat\n // If the address does not match the regex, continue to the next encoding type.\n }\n // If no encoding type matches the address, return null.\n return null\n}\n\n/**\n * Encode data as a base58 string.\n * \n * @param config - The encoder configuration.\n * @returns The encoded base58 string.\n */\nfunction base58_encode (config : DecodedAddress) : string {\n // Assert the format is correct.\n Assert.ok(config.format === 'base58', 'encoding mismatch')\n // Assert the version is specified.\n Assert.exists(config.version, 'must specify a version')\n // Convert the data into bytes with a version prefix.\n const bytes = Buff.join([ config.version, config.data ])\n // Encode the data as a base58 string.\n return B58chk.encode(bytes)\n}\n\n/**\n * Decode data as a base58 string.\n * \n * @param encoded - The base58 string to decode.\n * @returns The decoded data.\n */\nfunction base58_decode (encoded : string) : DecodedAddress {\n // Decode the encoded data.\n const bytes = B58chk.decode(encoded)\n // Get the data from the decoded bytes.\n const data = bytes.slice(1)\n // Get the version from the decoded bytes.\n const version = bytes[0]\n // Return the decoded address.\n return { data, format: 'base58', version }\n}\n\n/**\n * Encode data as a bech32 string.\n * \n * @param config - The encoder configuration.\n * @returns The encoded bech32 string.\n */\nfunction bech32_encode (config : DecodedAddress) : string {\n // Assert the format is correct.\n Assert.ok(config.format === 'bech32', 'encoding mismatch')\n // Assert the prefix is specified.\n Assert.exists(config.prefix, 'prefix is required')\n // Convert the data into bytes.\n const bytes = Buff.bytes(config.data)\n // Convert the bytes into words.\n const words = Bech32.to_words(bytes)\n // Encode the data as a bech32 string.\n return Bech32.encode(config.prefix, [ VERSION.bech32, ...words ])\n}\n\n/**\n * Decode data as a bech32 string.\n * \n * @param encoded - The bech32 string to decode.\n * @returns The decoded data.\n */\nfunction bech32_decode (encoded : string) : DecodedAddress {\n // Decode the encoded data.\n const { prefix, words } = Bech32.decode(encoded)\n // Get the version and rest of the words.\n const [ version, ...rest ] = words\n // Assert the version is correct.\n Assert.ok(version === VERSION.bech32, 'bech32 version mismatch')\n // Convert the rest of the words into bytes.\n const data = Bech32.to_bytes(rest)\n // Return the decoded address.\n return { data, format: 'bech32', prefix, version }\n}\n\n/**\n * Encode data as a bech32 string.\n * \n * @param config - The encoder configuration.\n * @returns The encoded bech32 string.\n */\nfunction bech32m_encode (config : DecodedAddress) : string {\n // Assert the format is correct.\n Assert.ok(config.format === 'bech32m', 'encoding mismatch')\n // Assert the prefix is specified.\n Assert.exists(config.prefix, 'prefix is required')\n // Convert the data into bytes.\n const bytes = Buff.bytes(config.data)\n // Convert the bytes into words.\n const words = Bech32m.to_words(bytes)\n // Encode the data as a bech32m string.\n return Bech32m.encode(config.prefix, [ VERSION.bech32m, ...words ])\n}\n\n/**\n * Decode data as a bech32 string.\n * \n * @param encoded - The bech32 string to decode.\n * @returns The decoded data.\n */\nfunction bech32m_decode (encoded : string) : DecodedAddress {\n // Decode the encoded data.\n const { prefix, words } = Bech32m.decode(encoded)\n // Get the version and rest of the words.\n const [ version, ...rest ] = words\n // Assert the version is correct.\n Assert.ok(version === VERSION.bech32m, 'bech32m version mismatch')\n // Convert the rest of the words into bytes.\n const data = Bech32m.to_bytes(rest)\n // Return the decoded address.\n return { data, format: 'bech32m', prefix, version }\n}\n","import { Buff } from '@vbyte/buff'\nimport { decode_address } from './encode.js'\nimport { get_address_script } from './script.js'\n\nimport type {\n AddressConfig,\n AddressConfigEntry,\n AddressType,\n ChainNetwork,\n AddressContext,\n AddressData\n} from '@/types/index.js'\n\nconst CONFIG_TABLE : AddressConfigEntry[] = [\n [ '1', 'p2pkh', 'main', 20, 'base58', 0x00 ],\n [ '3', 'p2sh', 'main', 20, 'base58', 0x05 ],\n [ 'm', 'p2pkh', 'testnet', 20, 'base58', 0x6F ],\n [ 'n', 'p2pkh', 'testnet', 20, 'base58', 0x6F ],\n [ '2', 'p2sh', 'testnet', 20, 'base58', 0xC4 ],\n [ 'm', 'p2pkh', 'regtest', 20, 'base58', 0x6F ],\n [ 'n', 'p2pkh', 'regtest', 20, 'base58', 0x6F ],\n [ '2', 'p2sh', 'regtest', 20, 'base58', 0xC4 ],\n [ 'bc', 'p2w-pkh', 'main', 20, 'bech32', 0 ],\n [ 'tb', 'p2w-pkh', 'testnet', 20, 'bech32', 0 ],\n [ 'bcrt', 'p2w-pkh', 'regtest', 20, 'bech32', 0 ],\n [ 'bc', 'p2w-sh', 'main', 32, 'bech32', 0 ],\n [ 'tb', 'p2w-sh', 'testnet', 32, 'bech32', 0 ],\n [ 'bcrt', 'p2w-sh', 'regtest', 32, 'bech32', 0 ],\n [ 'bc', 'p2tr', 'main', 32, 'bech32m', 1 ],\n [ 'tb', 'p2tr', 'testnet', 32, 'bech32m', 1 ],\n [ 'bcrt', 'p2tr', 'regtest', 32, 'bech32m', 1 ]\n]\n\n/**\n * Lookup an address configuration by its type and network.\n * \n * @param address_network - The network of the address.\n * @param address_type - The type of the address.\n * @returns The address information, or null if the address is not recognized.\n */\nexport function get_address_config (\n address_network : ChainNetwork,\n address_type : AddressType\n) : AddressConfig | null {\n // For each configuration in the table,\n for (const [ prefix, type, network, size, format, version ] of CONFIG_TABLE) {\n // Check if the address matches the configuration\n if (type === address_type && network === address_network) {\n // Return the address configuration.\n return { type, prefix, network, size, format, version }\n }\n }\n // If no configuration matches the address, return null.\n return null\n}\n\n/**\n * Get the address context.\n * \n * @param address - The address to get the context for.\n * @returns The address context.\n */\nexport function get_address_ctx (address : string) : AddressContext {\n // Decode the address.\n const dec = decode_address(address)\n // For each configuration in the table,\n for (const [ prefix, type, network, size, format, version ] of CONFIG_TABLE) {\n\n // Check if the address matches the configuration\n if (format !== dec.format) continue\n if (size !== dec.data.length) continue\n if (version !== dec.version) continue\n\n if (dec.prefix) {\n if (prefix !== dec.prefix) continue\n } else {\n if (!address.startsWith(prefix)) continue\n }\n\n // Convert the decoded data into a hex string.\n const hex = Buff.uint(dec.data).hex\n // Return the address configuration and data.\n return { data: dec.data, hex, type, prefix, network, size, format, version }\n }\n // Otherwise, throw an error\n throw new Error('address configuration is invalid')\n}\n\n/**\n * Parse an address into its data and script.\n * \n * @param address - The address to parse.\n * @returns The address data and script.\n */\nexport function parse_address (address : string) : AddressData {\n // Get the address context.\n const ctx = get_address_ctx(address)\n // Get the address script.\n const script = get_address_script(ctx.hex, ctx.type)\n // Return the address data.\n return { ...ctx, ...script }\n}\n","import type { AddressType } from '@/types/index.js'\n\n/**\n * Get the address script.\n * \n * @param script_key - The script key.\n * @param script_type - The script type.\n * @returns The address script.\n */\nexport function get_address_script (\n script_key : string,\n script_type : AddressType\n) {\n switch (script_type) {\n case 'p2pkh':\n return get_p2pkh_script(script_key)\n case 'p2sh':\n return get_p2sh_script(script_key)\n case 'p2w-pkh':\n return get_p2w_pkh_script(script_key)\n case 'p2w-sh':\n return get_p2w_sh_script(script_key)\n case 'p2tr':\n return get_p2tr_script(script_key)\n default:\n throw new Error('unrecognized script type: ' + script_type)\n }\n}\n\nfunction get_p2pkh_script (script_key : string) {\n return {\n script_hex : '76a914' + script_key + '88ac',\n script_asm : [ 'OP_DUP', 'OP_HASH160', script_key, 'OP_EQUALVERIFY', 'OP_CHECKSIG' ]\n }\n}\n\nfunction get_p2sh_script (script_key : string) {\n return {\n script_hex : 'a914' + script_key + '87',\n script_asm : [ 'OP_HASH160', script_key, 'OP_EQUAL' ]\n }\n}\n\nfunction get_p2w_pkh_script (script_key : string) {\n return {\n script_hex : '0014' + script_key,\n script_asm : [ 'OP_0', script_key ]\n }\n}\n\nfunction get_p2w_sh_script (script_key : string) {\n return {\n script_hex : '0020' + script_key,\n script_asm : [ 'OP_0', script_key ]\n }\n}\n\nfunction get_p2tr_script (script_key : string) {\n return {\n script_hex : '5120' + script_key,\n script_asm : [ 'OP_1', script_key ]\n }\n}\n","import { Buff } from '@vbyte/buff'\nimport { Assert } from '@vbyte/micro-lib'\nimport { hash160 } from '@vbyte/micro-lib/hash'\nimport { encode_address } from './encode.js'\n\nimport {\n get_address_config,\n parse_address\n} from './util.js'\n\nimport type {\n AddressData,\n ChainNetwork\n} from '@/types/index.js'\n\nconst ADDR_TYPE = 'p2pkh'\n\nexport namespace P2PKH {\n export const create = create_p2pkh_address\n export const encode = encode_p2pkh_address\n export const decode = decode_p2pkh_address\n}\n\nfunction create_p2pkh_address (\n script : string | Uint8Array,\n network : ChainNetwork = 'main',\n) : string {\n // Convert the script into bytes.\n const bytes = Buff.bytes(script)\n // Convert the bytes into a hash.\n const hash = hash160(bytes)\n // Encode the hash as an address.\n return encode_p2pkh_address(hash, network)\n}\n\nfunction encode_p2pkh_address (\n pk_hash : string | Uint8Array,\n network : ChainNetwork = 'main',\n) : string {\n // Convert the public key hash into bytes.\n const bytes = Buff.bytes(pk_hash)\n // Get the address configuration.\n const config = get_address_config(network, ADDR_TYPE)\n // Assert the configuration exists.\n Assert.exists(config, `unrecognized address config: ${ADDR_TYPE} on ${network}` )\n // Assert the payload size is correct.\n Assert.size(bytes, config.size, `invalid payload size: ${bytes.length} !== ${config.size}` )\n // Encode the address.\n return encode_address({\n data : bytes,\n format : 'base58',\n version : config.version\n })\n}\n\nfunction decode_p2pkh_address (\n address : string\n) : AddressData {\n // Parse the address.\n const parsed = parse_address(address)\n // Assert the address type is correct.\n Assert.ok(parsed.type === 'p2pkh', `address type mismatch: ${parsed.type} !== ${ADDR_TYPE}`)\n // Return the parsed address.\n return parsed\n}\n","import { Buff } from '@vbyte/buff'\nimport { Assert } from '@vbyte/micro-lib'\nimport { hash160 } from '@vbyte/micro-lib/hash'\nimport { encode_address } from './encode.js'\n\nimport {\n get_address_config,\n parse_address\n} from './util.js'\n\nimport type {\n ChainNetwork,\n AddressData\n} from '@/types/index.js'\n\nconst ADDR_TYPE = 'p2sh'\n\nexport namespace P2SH {\n export const create = create_p2sh_address\n export const encode = encode_p2sh_address\n export const decode = decode_p2sh_address\n}\n\nfunction create_p2sh_address (\n script : string | Uint8Array,\n network : ChainNetwork = 'main',\n) : string {\n // Convert the script into bytes.\n const bytes = Buff.bytes(script)\n // Convert the bytes into a hash.\n const hash = hash160(bytes)\n // Encode the address.\n return encode_p2sh_address(hash, network)\n}\n\nfunction encode_p2sh_address (\n script_hash : string | Uint8Array,\n network : ChainNetwork = 'main',\n) : string {\n // Convert the script hash into bytes.\n const bytes = Buff.bytes(script_hash)\n // Get the address configuration.\n const config = get_address_config(network, ADDR_TYPE)\n // Assert the configuration exists.\n Assert.exists(config, `unrecognized address config: ${ADDR_TYPE} on ${network}` )\n // Assert the payload size is correct.\n Assert.size(bytes, config.size, `invalid payload size: ${bytes.length} !== ${config.size}` )\n // Encode the address.\n return encode_address({\n data : bytes,\n format : 'base58',\n version : config.version\n })\n}\n\nfunction decode_p2sh_address (\n address : string\n) : AddressData {\n // Parse the address.\n const parsed = parse_address(address)\n // Assert the address type is correct.\n Assert.ok(parsed.type === 'p2sh', `address type mismatch: ${parsed.type} !== ${ADDR_TYPE}`)\n // Return the parsed address.\n return parsed\n}\n","import { Buff } from '@vbyte/buff'\nimport { Assert } from '@vbyte/micro-lib'\nimport { hash160 } from '@vbyte/micro-lib/hash'\nimport { encode_address } from './encode.js'\n\nimport {\n get_address_config,\n parse_address\n} from './util.js'\n\nimport type {\n AddressData,\n ChainNetwork\n} from '@/types/index.js'\n\nconst ADDR_TYPE = 'p2w-pkh'\n\nexport namespace P2WPKH {\n export const create = create_p2wpkh_address\n export const encode = encode_p2wpkh_address\n export const decode = decode_p2wpkh_address\n}\n\nfunction create_p2wpkh_address (\n pubkey : string | Uint8Array,\n network : ChainNetwork = 'main',\n) : string {\n // Convert the public key into bytes.\n const bytes = Buff.bytes(pubkey)\n // Assert the payload size is correct.\n Assert.size(bytes, 33, `invalid payload size: ${bytes.length} !== 33` )\n // Convert the bytes into a hash.\n const hash = hash160(bytes)\n // Encode the address.\n return encode_p2wpkh_address(hash, network)\n}\n\nfunction encode_p2wpkh_address (\n pk_hash : string | Uint8Array,\n network : ChainNetwork = 'main',\n) : string {\n // Convert the public key hash into bytes.\n const bytes = Buff.bytes(pk_hash)\n // Get the address configuration.\n const config = get_address_config(network, ADDR_TYPE)\n // Assert the configuration exists.\n Assert.exists(config, `unrecognized address config: ${ADDR_TYPE} on ${network}` )\n // Assert the payload size is correct.\n Assert.size(bytes, config.size, `invalid payload size: ${bytes.length} !== ${config.size}` )\n // Encode the address.\n return encode_address({\n data : bytes,\n format : 'bech32',\n prefix : config.prefix\n })\n}\n\nfunction decode_p2wpkh_address (\n address : string\n) : AddressData {\n // Parse the address.\n const parsed = parse_address(address)\n // Assert the address type is correct.\n Assert.ok(parsed.type === 'p2w-pkh', `address type mismatch: ${parsed.type} !== ${ADDR_TYPE}`)\n // Return the parsed address.\n return parsed\n}\n","import { Buff } from '@vbyte/buff'\nimport { Assert } from '@vbyte/micro-lib'\nimport { sha256 } from '@vbyte/micro-lib/hash'\nimport { encode_address } from './encode.js'\n\nimport {\n get_address_config,\n parse_address\n} from './util.js'\n\nimport type {\n ChainNetwork,\n AddressData\n} from '@/types/index.js'\n\nconst ADDR_TYPE = 'p2w-sh'\n\nexport namespace P2WSH {\n export const create = create_p2wsh_address\n export const encode = encode_p2wsh_address\n export const decode = decode_p2wsh_address\n}\n\nfunction create_p2wsh_address (\n script : string | Uint8Array,\n network : ChainNetwork = 'main',\n) : string {\n // Convert the script into bytes.\n const bytes = Buff.bytes(script)\n // Convert the bytes into a hash.\n const hash = sha256(bytes)\n // Encode the address.\n return encode_p2wsh_address(hash, network)\n}\n\nfunction encode_p2wsh_address (\n script_hash : string | Uint8Array,\n network : ChainNetwork = 'main',\n) : string {\n // Convert the script hash into bytes.\n const bytes = Buff.bytes(script_hash)\n // Get the address configuration.\n const config = get_address_config(network, ADDR_TYPE)\n // Assert the configuration exists.\n Assert.exists(config, `unrecognized address config: ${ADDR_TYPE} on ${network}` )\n // Assert the payload size is correct.\n Assert.size(bytes, config.size, `invalid payload size: ${bytes.length} !== ${config.size}` )\n // Encode the address.\n return encode_address({\n data : bytes,\n format : 'bech32',\n prefix : config.prefix\n })\n}\n\nfunction decode_p2wsh_address (\n address : string\n) : AddressData {\n // Parse the address.\n const parsed = parse_address(address)\n // Assert the address type is correct.\n Assert.ok(parsed.type === 'p2w-sh', `address type mismatch: ${parsed.type} !== ${ADDR_TYPE}`)\n // Return the parsed address.\n return parsed\n}\n","import { Buff } from '@vbyte/buff'\nimport { Assert } from '@vbyte/micro-lib'\nimport { encode_address } from './encode.js'\n\nimport {\n get_address_config,\n parse_address\n} from './util.js'\n\nimport type {\n ChainNetwork,\n AddressData\n} from '@/types/index.js'\n\nconst ADDR_TYPE = 'p2tr'\n\nexport namespace P2TR {\n export const encode = encode_p2tr_address\n export const decode = decode_p2tr_address\n}\n\nfunction encode_p2tr_address (\n pubkey : string | Uint8Array,\n network : ChainNetwork = 'main'\n) : string {\n // Convert the public key into bytes.\n const bytes = Buff.bytes(pubkey)\n // Get the address configuration.\n const config = get_address_config(network, ADDR_TYPE)\n // Assert the configuration exists.\n Assert.exists(config, `unrecognized address config: ${ADDR_TYPE} on ${network}` )\n // Assert the payload size is correct.\n Assert.size(bytes, config.size, `invalid payload size: ${bytes.length} !== ${config.size}` )\n // Encode the address.\n return encode_address({\n data : bytes,\n format : 'bech32m',\n prefix : config.prefix\n })\n}\n\nfunction decode_p2tr_address (\n address : string\n) : AddressData {\n // Parse the address.\n const parsed = parse_address(address)\n // Assert the address type is correct.\n Assert.ok(parsed.type === 'p2tr', `address type mismatch: ${parsed.type} !== ${ADDR_TYPE}`)\n // Return the parsed address.\n return parsed\n}\n","import { P2PKH as P2PKH_TOOL } from './p2pkh.js'\nimport { P2SH as P2SH_TOOL } from './p2sh.js'\nimport { P2WPKH as P2WPKH_TOOL } from './p2wpkh.js'\nimport { P2WSH as P2WSH_TOOL } from './p2wsh.js'\nimport { P2TR as P2TR_TOOL } from './p2tr.js'\n\nimport { parse_address } from './util.js'\n\nexport { P2PKH } from './p2pkh.js'\nexport { P2SH } from './p2sh.js'\nexport { P2WPKH } from './p2wpkh.js'\nexport { P2WSH } from './p2wsh.js'\nexport { P2TR } from './p2tr.js'\n\nexport { parse_address } from './util.js'\n\nexport namespace AddressTool {\n export const P2PKH = P2PKH_TOOL\n export const P2SH = P2SH_TOOL\n export const P2WPKH = P2WPKH_TOOL\n export const P2WSH = P2WSH_TOOL\n export const P2TR = P2TR_TOOL\n export const parse = parse_address\n}\n","import { Assert } from '@vbyte/micro-lib'\n\nimport type { LocktimeData } from '@/types/index.js'\n\n// The threshold between block height and timestamp.\nconst LOCKTIME_THRESHOLD = 500000000\n\nexport namespace LocktimeUtil {\n export const encode = encode_locktime\n export const decode = decode_locktime\n}\n\n/**\n * Encodes a LockTimeData object into a string representation.\n * According to BIP-65, the value is simply the numeric value as a string.\n */\nexport function encode_locktime (\n locktime : LocktimeData\n) : number {\n switch (locktime.type) {\n case 'timelock':\n Assert.ok(locktime.stamp >= LOCKTIME_THRESHOLD, 'Invalid timestamp')\n return locktime.stamp\n case 'heightlock':\n Assert.ok(locktime.height > 0, 'height must be greater than 0')\n Assert.ok(locktime.height < LOCKTIME_THRESHOLD, 'invalid block height')\n return locktime.height\n default:\n throw new Error('Invalid locktime type')\n }\n}\n\n/**\n * Parses a string or number into a LockTimeData object.\n * According to BIP-65, values below LOCKTIME_THRESHOLD are interpreted as block heights,\n * while values at or above this threshold are interpreted as timestamps.\n */\nexport function decode_locktime (\n locktime : number\n) : LocktimeData | null {\n // Check if the value is valid (non-negative)\n if (isNaN(locktime) || locktime <= 0) {\n return null\n }\n // Return the appropriate locktime type.\n if (locktime < LOCKTIME_THRESHOLD) {\n return {\n type : 'heightlock',\n height : locktime\n }\n } else {\n return {\n type : 'timelock',\n stamp : locktime\n }\n }\n}","export namespace RefEncoder {\n export const outpoint = {\n encode : encode_outpoint,\n decode : decode_outpoint,\n verify : verify_outpoint, \n assert : assert_outpoint,\n }\n export const record_id = {\n encode : encode_inscription_id,\n decode : decode_inscription_id,\n verify : verify_inscription_id,\n assert : assert_inscription_id,\n }\n export const rune_id = {\n encode : encode_rune_id,\n decode : decode_rune_id,\n verify : verify_rune_id,\n assert : assert_rune_id,\n }\n}\n\nfunction encode_inscription_id (\n txid : string,\n order : number = 0\n) : string {\n return `${txid}i${order}`\n}\n\nfunction decode_inscription_id (\n inscription_id : string\n) : { txid : string, order : number } {\n assert_inscription_id(inscription_id)\n const [ txid, order ] = inscription_id.split('i')\n return { txid, order : parseInt(order) }\n}\n\nfunction verify_inscription_id (\n inscription_id : string\n) : boolean {\n return inscription_id.match(/^[a-f0-9]{64}i\\d+$/) !== null\n}\n\nfunction assert_inscription_id (\n inscription_id : string\n) : void {\n if (!verify_inscription_id(inscription_id)) {\n throw new Error(`invalid inscription id: ${inscription_id}`)\n }\n}\n\nfunction encode_rune_id (\n block_height : number,\n block_index : number\n) : string {\n return `${block_height}:${block_index}`\n}\n\nfunction decode_rune_id (\n rune_id : string\n) : { block_height : number, block_index : number } {\n assert_rune_id(rune_id)\n const [ block_height, block_index ] = rune_id.split(':')\n return { block_height : parseInt(block_height), block_index : parseInt(block_index) }\n}\n\nfunction verify_rune_id (\n rune_id : string\n) : boolean {\n return rune_id.match(/^\\d+:\\d+$/) !== null\n}\n\nfunction assert_rune_id (\n rune_id : string\n) : void {\n if (!verify_rune_id(rune_id)) {\n throw new Error(`invalid rune id: ${rune_id}`)\n }\n}\n\nfunction encode_outpoint (\n txid : string,\n vout : number\n) : string {\n return `${txid}:${vout}`\n}\n\nfunction decode_outpoint (\n outpoint : string\n) : { txid : string, vout : number } {\n assert_outpoint(outpoint)\n const [ txid, vout ] = outpoint.split(':')\n return { txid, vout : parseInt(vout) }\n}\n\nfunction verify_outpoint (\n outpoint : string\n) : boolean {\n return outpoint.match(/^[a-f0-9]{64}:[0-9]+$/) !== null\n}\n\nfunction assert_outpoint (\n outpoint : string\n) : void {\n if (!verify_outpoint(outpoint)) {\n throw new Error(`invalid outpoint: ${outpoint}`)\n }\n}\n","export const OPCODE_MAP = {\n OP_0 : 0,\n OP_PUSHDATA1 : 76,\n OP_PUSHDATA2 : 77,\n OP_PUSHDATA4 : 78,\n OP_1NEGATE : 79,\n OP_SUCCESS80 : 80,\n OP_1 : 81,\n OP_2 : 82,\n OP_3 : 83,\n OP_4 : 84,\n OP_5 : 85,\n OP_6 : 86,\n OP_7 : 87,\n OP_8 : 88,\n OP_9 : 89,\n OP_10 : 90,\n OP_11 : 91,\n OP_12 : 92,\n OP_13 : 93,\n OP_14 : 94,\n OP_15 : 95,\n OP_16 : 96,\n OP_NOP : 97,\n OP_SUCCESS98 : 98,\n OP_IF : 99,\n OP_NOTIF : 100,\n OP_ELSE : 103,\n OP_ENDIF : 104,\n OP_VERIFY : 105,\n OP_RETURN : 106,\n OP_TOALTSTACK : 107,\n OP_FROMALTSTACK : 108,\n OP_2DROP : 109,\n OP_2DUP : 110,\n OP_3DUP : 111,\n OP_2OVER : 112,\n OP_2ROT : 113,\n OP_2SWAP : 114,\n OP_IFDUP : 115,\n OP_DEPTH : 116,\n OP_DROP : 117,\n OP_DUP : 118,\n OP_NIP : 119,\n OP_OVER : 120,\n OP_PICK : 121,\n OP_ROLL : 122,\n OP_ROT : 123,\n OP_SWAP : 124,\n OP_TUCK : 125,\n OP_SUCCESS126 : 126,\n OP_SUCCESS127 : 127,\n OP_SUCCESS128 : 128,\n OP_SUCCESS129 : 129,\n OP_SIZE : 130,\n OP_SUCCESS131 : 131,\n OP_SUCCESS132 : 132,\n OP_SUCCESS133 : 133,\n OP_SUCCESS134 : 134,\n OP_EQUAL : 135,\n OP_EQUALVERIFY : 136,\n OP_SUCCESS137 : 137,\n OP_SUCCESS138 : 138,\n OP_1ADD : 139,\n OP_1SUB : 140,\n OP_SUCCESS141 : 141,\n OP_SUCCESS142 : 142,\n OP_NEGATE : 143,\n OP_ABS : 144,\n OP_NOT : 145,\n OP_0NOTEQUAL : 146,\n OP_ADD : 147,\n OP_SUB : 148,\n OP_SUCCESS149 : 149,\n OP_SUCCESS150 : 150,\n OP_SUCCESS151 : 151,\n OP_SUCCESS152 : 152,\n OP_SUCCESS153 : 153,\n OP_BOOLAND : 154,\n OP_BOOLOR : 155,\n OP_NUMEQUAL : 156,\n OP_NUMEQUALVERIFY : 157,\n OP_NUMNOTEQUAL : 158,\n OP_LESSTHAN : 159,\n OP_GREATERTHAN : 160,\n OP_LESSTHANOREQUAL : 161,\n OP_GREATERTHANOREQUAL : 162,\n OP_MIN : 163,\n OP_MAX : 164,\n OP_WITHIN : 165,\n OP_RIPEMD160 : 166,\n OP_SHA1 : 167,\n OP_SHA256 : 168,\n OP_HASH160 : 169,\n OP_HASH256 : 170,\n OP_CODESEPARATOR : 171,\n OP_CHECKSIG : 172,\n OP_CHECKSIGVERIFY : 173,\n OP_CHECKMULTISIG : 174,\n OP_CHECKMULTISIGVERIFY : 175,\n OP_NOP1 : 176,\n OP_CHECKLOCKTIMEVERIFY : 177,\n OP_CHECKSEQUENCEVERIFY : 178,\n OP_NOP4 : 179,\n OP_NOP5 : 180,\n OP_NOP6 : 181,\n OP_NOP7 : 182,\n OP_NOP8 : 183,\n OP_NOP9 : 184,\n OP_NOP10 : 185,\n OP_CHECKSIGADD : 186\n}\n\n/** \n * Get the sting-representation of an opcode\n * based on its number value.\n */\nexport function get_op_code (num : number) : string {\n if (num > 186 && num < 255) {\n return 'OP_SUCCESS' + String(num)\n }\n for (const [ k, v ] of Object.entries(OPCODE_MAP)) {\n if (v === num) return k\n }\n throw new Error('OPCODE not found:' + String(num))\n}\n\n/** \n * Get the number-representation of an opcode\n * based on its asm string value.\n */\nexport function get_asm_code (string : string) : number {\n for (const [ k, v ] of Object.entries(OPCODE_MAP)) {\n if (k === string) return Number(v)\n }\n throw new Error('OPCODE not found:' + string)\n}\n\n/** \n * Get the type of word based on its number value.\n */\nexport function get_op_type (word : number) : string {\n switch (true) {\n case (word === 0):\n return 'opcode'\n case (word >= 1 && word <= 75):\n return 'varint'\n case (word === 76):\n return 'pushdata1'\n case (word === 77):\n return 'pushdata2'\n case (word === 78):\n return 'pushdata4'\n case (word <= 254):\n return 'opcode'\n default:\n throw new Error(`Invalid word range: ${word}`)\n }\n}\n\n/** \n * Check if the provided value is a valid script opcode.\n */\nexport function is_valid_op (word : number) : boolean {\n const MIN_RANGE = 75\n const MAX_RANGE = 254\n\n const DISABLED_OPCODES : number[] = []\n\n switch (true) {\n case (typeof (word) !== 'number'):\n return false\n case (word === 0):\n return true\n case (DISABLED_OPCODES.includes(word)):\n return false\n case (MIN_RANGE < word && word < MAX_RANGE):\n return true\n default:\n return false\n }\n}\n","import { Buff, Stream } from '@vbyte/buff'\nimport { get_asm_code, } from './words.js'\n\n// The maximum size of a word in bytes.\nconst MAX_WORD_SIZE = 520\n\n/**\n * Encode script asm instructions into a hex string.\n */\nexport function encode_script (\n words : (string | number | Uint8Array)[],\n varint = false\n) : string {\n if (words.length === 0) return '00'\n\n const bytes = []\n\n for (const word of words) {\n\n bytes.push(encode_script_word(word))\n }\n\n const buffer = Buff.join(bytes)\n\n return (varint)\n ? buffer.prepend(Buff.varint(buffer.length, 'le')).hex\n : buffer.hex\n}\n\n\n/** Check if the word is a valid opcode,\n * and return its integer value.\n */\nexport function encode_script_word (word : string | number | Uint8Array) : Uint8Array {\n let buff : Buff\n\n // If word is a string:\n if (typeof (word) === 'string') {\n // If word is an opcode:\n if (word.startsWith('OP_')) {\n // Get the opcode number value.\n const asm_code = get_asm_code(word)\n // Return the opcode as a single byte.\n return Buff.num(asm_code, 1)\n // If word is valid hex:\n } else if (Buff.is_hex(word)) {\n // Encode as hex.\n buff = Buff.hex(word)\n } else {\n // Encode as UTF8 string.\n buff = Buff.str(word)\n }\n // If word is a number:\n } else if (typeof (word) === 'number') {\n // Encode the number value.\n buff = Buff.num(word)\n // If word is a Uint8Array:\n } else if (word instanceof Uint8Array) {\n // Encode as bytes.\n buff = new Buff(word)\n } else {\n // If word is not a string, number, or Uint8Array, throw an error.\n throw new Error('invalid word type:' + typeof (word))\n }\n\n // Format and return the word based on its size.\n if (buff.length === 1 && buff[0] <= 16) {\n // Number values 0-16 must be treated as opcodes.\n if (buff[0] !== 0) buff[0] += 0x50\n } else if (buff.length > MAX_WORD_SIZE) {\n // Number values larger than max size must be split into chunks.\n let words : Buff[]\n // Split bytes into chunks, based on max word size.\n words = split_script_word(buff)\n // Prefix a varint length byte for each chunk.\n words = words.map(e => prefix_word_size(e))\n // Concatenate the chunks\n buff = Buff.join(words)\n } else {\n // Else, return the word with a varint prefix.\n buff = prefix_word_size(buff)\n }\n // Return the final result.\n return buff\n}\n\n/**\n * Split a word into smaller chunks.\n */\nexport function split_script_word (\n word : Uint8Array\n) : Buff[] {\n const words = []\n const buff = new Stream(word)\n while (buff.size > MAX_WORD_SIZE) {\n // Push a word chunk to the array.\n words.push(buff.read(MAX_WORD_SIZE))\n }\n // Push the remainder to the array.\n words.push(buff.read(buff.size))\n return words\n}\n\n/**\n * Prefix a word with its size, encoded as a varint.\n */\nexport function prefix_word_size (\n word : Uint8Array\n) : Buff {\n const varint = get_size_varint(word.length)\n return Buff.join([ varint, word ])\n}\n\n/**\n * Return a varint that encodes a size value.\n */\nexport function get_size_varint (size : number) : Buff {\n const OP_PUSHDATA1 = Buff.num(0x4c, 1)\n const OP_PUSHDATA2 = Buff.num(0x4d, 1)\n switch (true) {\n case (size <= 0x4b):\n return Buff.num(size)\n case (size > 0x4b && size < 0x100):\n return Buff.join([ OP_PUSHDATA1, Buff.num(size, 1, 'le') ])\n case (size >= 0x100 && size <= MAX_WORD_SIZE):\n return Buff.join([ OP_PUSHDATA2, Buff.num(size, 2, 'le') ])\n default:\n throw new Error('Invalid word size:' + size.toString())\n }\n}\n","import { Stream } from '@vbyte/buff'\n\nimport {\n get_op_code,\n get_op_type,\n is_valid_op\n} from './words.js'\n\n/**\n * Decode a bitcoin script into asm instructions.\n */\nexport function decode_script (\n script : string | Uint8Array\n) : string[] {\n const stream = new Stream(script)\n\n const stack : string[] = []\n const stack_size = stream.size\n\n let word : number\n let word_type : string\n let word_size : number\n\n let count = 0\n\n while (count < stack_size) {\n word = stream.read(1).num\n word_type = get_op_type(word)\n count++\n switch (word_type) {\n case 'varint':\n stack.push(stream.read(word).hex)\n count += word\n break\n case 'pushdata1':\n word_size = stream.read(1).reverse().num\n stack.push(stream.read(word_size).hex)\n count += word_size + 1\n break\n case 'pushdata2':\n word_size = stream.read(2).reverse().num\n stack.push(stream.read(word_size).hex)\n count += word_size + 2\n break\n case 'pushdata4':\n word_size = stream.read(4).reverse().num\n stack.push(stream.read(word_size).hex)\n count += word_size + 4\n break\n case 'opcode':\n if (!is_valid_op(word)) {\n throw new Error(`Invalid OPCODE: ${word}`)\n }\n stack.push(get_op_code(word))\n break\n default:\n throw new Error(`Word type undefined: ${word}`)\n }\n }\n return stack\n}\n\n/**\n * Check if a script is valid.\n */\nexport function is_valid_script (\n script : string | Uint8Array\n) : boolean {\n try {\n const stack = decode_script(script)\n return stack.length > 0\n } catch {\n return false\n }\n}\n","import { Buff, Stream } from '@vbyte/buff'\nimport { Assert } from '@vbyte/micro-lib'\nimport { encode_script } from '@/lib/script/encode.js'\nimport { decode_script } from '@/lib/script/decode.js'\n\nimport type { InscriptionData } from '@/types/index.js'\n\nconst _0n = BigInt(0)\nconst _1n = BigInt(1)\nconst _26n = BigInt(26)\n\nexport namespace ScribeEncoder {\n export const encode = encode_inscription\n export const decode = decode_inscription\n}\n\nexport function decode_inscription (\n script : string\n) : InscriptionData[] {\n const envelopes = parse_envelopes(script)\n return envelopes.map(parse_record)\n}\n\nexport function encode_inscription (data : InscriptionData[]) : string {\n return data.map(create_envelope).join('')\n}\n\nfunction create_envelope (data : InscriptionData) : string {\n let asm : string[] = [ 'OP_0', 'OP_IF', '6f7264' ]\n\n if (typeof data.delegate === 'string') {\n const id = encode_id(data.delegate)\n asm.push('OP_11', id)\n }\n\n if (typeof data.ref === 'string') {\n asm.push('OP_WITHIN', data.ref)\n }\n\n if (typeof data.parent === 'string') {\n const id = encode_id(data.parent)\n asm.push('OP_3', id)\n }\n\n if (typeof data.opcode === 'number') {\n const code = encode_pointer(data.opcode)\n asm.push('OP_NOP', code)\n }\n\n if (typeof data.pointer === 'number') {\n const ptr = encode_pointer(data.pointer)\n asm.push('OP_2', ptr)\n }\n\n if (typeof data.rune === 'string') {\n const label = encode_rune_label(data.rune)\n asm.push('OP_13', label)\n }\n\n if (typeof data.mimetype === 'string') {\n const label = encode_label(data.mimetype)\n asm.push('OP_1', label)\n }\n\n if (typeof data.content === 'string') {\n const chunks = encode_content(data.content)\n asm.push('OP_0', ...chunks)\n }\n\n asm.push('OP_ENDIF')\n\n return encode_script(asm)\n}\n\nfunction parse_envelopes (\n script : string\n) : string[][] {\n\n const words = decode_script(script)\n const start_idx = words.findIndex(e => e === 'OP_0')\n\n Assert.ok(start_idx !== -1, 'inscription envelope not found')\n\n const envelopes = []\n\n for (let idx = start_idx; idx < words.length; idx++) {\n Assert.ok(words[idx + 1] === 'OP_IF', 'OP_IF missing from envelope')\n Assert.ok(words[idx + 2] === '6f7264', 'magic bytes missing from envelope')\n\n const stop_idx = words.findIndex(e => e === 'OP_ENDIF')\n Assert.ok(stop_idx !== -1, 'inscription envelope missing END_IF statement')\n\n const env = words.slice(idx + 3, stop_idx)\n envelopes.push(env)\n idx += stop_idx\n }\n\n return envelopes\n}\n\nfunction parse_record (envelope : string[]) {\n const record : InscriptionData = {}\n\n for (let i = 0; i < envelope.length; i++) {\n switch (envelope[i]) {\n case 'OP_1':\n record.mimetype = decode_label(envelope[i+1])\n i += 1\n break\n case 'OP_2':\n record.pointer = decode_pointer(envelope[i+1])\n i += 1\n break\n case 'OP_3':\n record.parent = decode_id(envelope[i+1])\n i += 1\n break\n case 'OP_11':\n record.delegate = decode_id(envelope[i+1])\n i += 1\n break\n case 'OP_13':\n record.rune = decode_rune_label(envelope[i+1])\n i += 1\n break\n case 'OP_WITHIN':\n record.ref = envelope[i+1]\n i += 1\n break;\n case 'OP_NOP':\n record.opcode = decode_pointer(envelope[i+1])\n i += 1\n break;\n case 'OP_0':\n record.content = decode_content(envelope.slice(i+1))\n return record\n }\n }\n return record\n}\n\nfunction encode_id (\n identifier : string\n) : string {\n Assert.ok(identifier.includes('i'), 'identifier must include an index')\n const parts = identifier.split('i')\n const bytes = Buff.hex(parts[0])\n const idx = Number(parts[1])\n const txid = bytes.reverse().hex\n return (idx !== 0) ? txid + Buff.num(idx).hex : txid\n}\n\nfunction decode_id (\n hexstr : string\n) : string {\n const bytes = Buff.hex(hexstr)\n const idx = bytes.at(-1) ?? 0\n const txid = bytes.slice(0, -1).reverse().hex\n return txid + 'i' + String(idx)\n}\n\nfunction encode_pointer (\n pointer : number\n) : string {\n return Buff.num(pointer).reverse().hex\n}\n\nfunction decode_pointer (\n hexstr : string\n) : number {\n return Buff.hex(hexstr).reverse().num\n}\n\nfunction encode_label (\n label : string\n) : string {\n return Buff.str(label).hex\n}\n\nfunction decode_label (\n hexstr : string\n) : string {\n return Buff.hex(hexstr).str\n}\n\nfunction encode_content (\n content : string\n) : string[] {\n const bytes = Buff.is_hex(content)\n ? Buff.hex(content)\n : Buff.str(content)\n const stream = new Stream(bytes)\n const chunks : string[]= []\n while (stream.size > 0) {\n if (stream.size > 520) {\n const chunk = stream.read(520)\n chunks.push(chunk.hex)\n } else {\n const chunk = stream.read(stream.size)\n chunks.push(chunk.hex)\n }\n }\n return chunks\n}\n\nfunction decode_content (\n hexstrs : string[],\n type : 'hex' | 'utf8' = 'hex'\n) : string {\n const data = Buff.join(hexstrs)\n return (type === 'hex')\n ? data.hex\n : data.str\n}\n\nfunction encode_rune_label (label : string) : string {\n const str = label.toUpperCase()\n let big = _0n\n for (const char of str) {\n if (char >= 'A' && char <= 'Z') {\n big = big * _26n + BigInt(char.charCodeAt(0) - ('A'.charCodeAt(0) - 1))\n } else { continue }\n }\n big = big - _1n\n return Buff.big(big).reverse().hex\n}\n\nfunction decode_rune_label (hex: string): string {\n // Convert hex to BigInt, with byte order reversed\n let big = Buff.hex(hex).reverse().big\n // Add 1 as per the encoding algorithm\n big = big + _1n\n // Initialize result string\n let result = ''\n // Convert the BigInt back to a string of alphabet characters\n while (big > _0n) {\n // Get remainder after division by 26\n const mod = big % _26n\n // Convert remainder to character (0 maps to 'Z', 1 to 'A', 2 to 'B', etc.)\n if (mod === _0n) {\n result = 'Z' + result\n big = big / _26n - _1n // Adjust for special case of 'Z'\n } else {\n // Map 1 to 'A', 2 to 'B', etc.\n const charCode = Number(mod) + 'A'.charCodeAt(0) - 1\n result = String.fromCharCode(charCode) + result\n big = big / _26n\n }\n }\n return result\n}\n","/**\n * Bitcoin Transaction Sequence Field Manipulation\n * \n * This module provides functionality for encoding and decoding the sequence field in Bitcoin transactions.\n * The sequence field is a 32-bit integer that can be used for various purposes:\n * \n * 1. Relative timelocks (BIP-68).\n * 2. Custom protocol data.\n * \n * The implementation follows BIP-68 for timelock functionality, and extends it with a custom protocol\n * that allows additional metadata to be encoded in the sequence field (to be used by on-chain indexers).\n */\n\nimport type { SequenceConfig, SequenceData } from '@/types/index.js'\n\n/* ===== [ Constants ] ===================================================== */\n\nconst TIMELOCK_DISABLE = 0x80000000 // Bit 31: When set, disables relative timelock per BIP-68.\nconst TIMELOCK_TYPE = 0x00400000 // Bit 22: When set, indicates timestamp-based lock; when clear, indicates block-height-based lock.\nconst TIMELOCK_VALUE_MASK = 0x0000FFFF // Bits 0-15: Mask for extracting timelock value (16 bits).\nconst TIMELOCK_VALUE_MAX = 0xFFFF // Maximum value for timelock (2^16 - 1).\nconst TIMELOCK_GRANULARITY = 512 // Seconds per timestamp unit (BIP-68 specification).\n\n/* ===== [ API ] ============================================================ */\n\nexport namespace SequenceUtil {\n export const encode = encode_sequence\n export const decode = decode_sequence\n}\n\n/* ===== [ Encoder ] ======================================================== */\n\n/**\n * Encodes a SequenceData object into a 32-bit integer sequence value\n * \n * @param data - The sequence data to encode\n * @returns A 32-bit integer representing the encoded sequence\n * @throws Error if the input data is invalid or exceeds maximum values\n */\nexport function encode_sequence (data : SequenceConfig): number {\n // If the timelock is based on a block height,\n if (data.mode === 'height') {\n // Validate the height value.\n const height = parse_height(data.height)\n // For heightlock, only encode the height value (TIMELOCK_TYPE bit remains clear)\n return (height & TIMELOCK_VALUE_MASK) >>> 0\n }\n // If the timelock is based on a timestamp,\n if (data.mode === 'stamp') {\n // Convert timestamp to 512-second granularity units as per BIP-68.\n const stamp = parse_stamp(data.stamp)\n // Set the TIMELOCK_TYPE bit and encode the timestamp value.\n return (TIMELOCK_TYPE | (stamp & TIMELOCK_VALUE_MASK)) >>> 0\n }\n // Throw an error if the mode is unrecognized.\n throw new Error('invalid timelock mode: ' + data.mode)\n}\n\n/* ===== [ Decoder ] ========================================================= */\n\n/**\n * Decodes a 32-bit sequence value into a SequenceData object\n * \n * @param sequence - The 32-bit sequence value to decode\n * @returns A SequenceData object or null if the sequence doesn't represent special data\n * @throws Error if the sequence value is invalid or exceeds maximum values\n */\nexport function decode_sequence (sequence: number | string) : SequenceData | null {\n // Parse and validate the sequence value.\n const seq = parse_sequence(sequence)\n // If the sequence is disabled, return null.\n if (seq & TIMELOCK_DISABLE) return null\n // Extract the value.\n const value = seq & TIMELOCK_VALUE_MASK\n // Check for timestamp-based lock (TIMELOCK_TYPE bit is set).\n if (seq & TIMELOCK_TYPE) {\n // Convert granularity units back to seconds for timestamp.\n const stamp = value * TIMELOCK_GRANULARITY\n // Validate the timestamp value.\n if (stamp > 0xFFFFFFFF) {\n throw new Error('Decoded timestamp exceeds 32-bit limit')\n }\n // Return the decoded timelock.\n return { mode: 'stamp', stamp }\n } else {\n // Validate the height value.\n if (value > TIMELOCK_VALUE_MAX) {\n throw new Error('Decoded height exceeds maximum')\n }\n // Return the decoded heightlock.\n return { mode: 'height', height: value }\n }\n}\n\n/* ===== [ Helpers ] ========================================================= */\n\n/**\n * Parses a sequence value into a number.\n * \n * @param sequence - The sequence value to parse.\n * @returns The parsed sequence value.\n * @throws Error if the sequence value is invalid.\n */\nfunction parse_sequence (sequence: number | string): number {\n const seq = (typeof sequence === 'string')\n ? parseInt(sequence, 16)\n : sequence\n if (!Number.isInteger(seq) || seq < 0 || seq > 0xFFFFFFFF) {\n throw new Error(`invalid sequence value: ${seq}`)\n }\n return seq\n}\n\n/**\n * Parses a timestamp value into a 512-second granularity units.\n * \n * @param stamp - The timestamp value to parse.\n * @returns The parsed timestamp value.\n * @throws Error if the timestamp value is invalid.\n */\nfunction parse_stamp (stamp? : number) : number {\n if (stamp === undefined || !Number.isInteger(stamp)) {\n throw new Error(`timestamp must be a number`)\n }\n // Convert timestamp to 512-second granularity units as per BIP-68.\n const ts = Math.floor(stamp / TIMELOCK_GRANULARITY)\n // Validate the timestamp value.\n if (!Number.isInteger(ts) || ts < 0 || ts > TIMELOCK_VALUE_MAX) {\n throw new Error(`timelock value must be an integer between 0 and ${TIMELOCK_VALUE_MAX} (in 512-second increments)`)\n }\n return ts\n}\n\n/**\n * Parses a height value into a number.\n * \n * @param height - The height value to parse.\n * @returns The parsed height value.\n * @throws Error if the height value is invalid.\n */\nfunction parse_height (height? : number) : number {\n if (height === undefined || !Number.isInteger(height) || height < 0 || height > TIMELOCK_VALUE_MAX) {\n throw new Error(`Heightlock value must be an integer between 0 and ${TIMELOCK_VALUE_MAX}`)\n }\n return height\n}\n","import { hex as baseHex, utf8 } from '@scure/base';\n/**\n * Define complex binary structures using composable primitives.\n * Main ideas:\n * - Encode / decode can be chained, same as in `scure-base`\n * - A complex structure can be created from an array and struct of primitive types\n * - Strings / bytes are arrays with specific optimizations: we can just read bytes directly\n * without creating plain array first and reading each byte separately.\n * - Types are inferred from definition\n * @module\n * @example\n * import * as P from 'micro-packed';\n * const s = P.struct({\n * field1: P.U32BE, // 32-bit unsigned big-endian integer\n * field2: P.string(P.U8), // String with U8 length prefix\n * field3: P.bytes(32), // 32 bytes\n * field4: P.array(P.U16BE, P.struct({ // Array of structs with U16BE length\n * subField1: P.U64BE, // 64-bit unsigned big-endian integer\n * subField2: P.string(10) // 10-byte string\n * }))\n * });\n */\n// TODO: remove dependency on scure-base & inline?\n/*\nExports can be groupped like this:\n\n- Primitive types: P.bytes, P.string, P.hex, P.constant, P.pointer\n- Complex types: P.array, P.struct, P.tuple, P.map, P.tag, P.mappedTag\n- Padding, prefix, magic: P.padLeft, P.padRight, P.prefix, P.magic, P.magicBytes\n- Flags: P.flag, P.flagged, P.optional\n- Wrappers: P.apply, P.wrap, P.lazy\n- Bit fiddling: P.bits, P.bitset\n- utils: P.validate, coders.decimal\n- Debugger\n*/\n/** Shortcut to zero-length (empty) byte array */\nexport const EMPTY = /* @__PURE__ */ new Uint8Array();\n/** Shortcut to one-element (element is 0) byte array */\nexport const NULL = /* @__PURE__ */ new Uint8Array([0]);\n/** Checks if two Uint8Arrays are equal. Not constant-time. */\nfunction equalBytes(a, b) {\n if (a.length !== b.length)\n return false;\n for (let i = 0; i < a.length; i++)\n if (a[i] !== b[i])\n return false;\n return true;\n}\n/** Checks if the given value is a Uint8Array. */\nfunction isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n/**\n * Concatenates multiple Uint8Arrays.\n * Engines limit functions to 65K+ arguments.\n * @param arrays Array of Uint8Array elements\n * @returns Concatenated Uint8Array\n */\nfunction concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n if (!isBytes(a))\n throw new Error('Uint8Array expected');\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\n/**\n * Creates DataView from Uint8Array\n * @param arr - bytes\n * @returns DataView\n */\nconst createView = (arr) => new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n/**\n * Checks if the provided value is a plain object, not created from any class or special constructor.\n * Array, Uint8Array and others are not plain objects.\n * @param obj - The value to be checked.\n */\nfunction isPlainObject(obj) {\n return Object.prototype.toString.call(obj) === '[object Object]';\n}\nfunction isNum(num) {\n return Number.isSafeInteger(num);\n}\nexport const utils = {\n equalBytes,\n isBytes,\n isCoder,\n checkBounds,\n concatBytes,\n createView,\n isPlainObject,\n};\n// NOTE: we can't have terminator separate function, since it won't know about boundaries\n// E.g. array of U16LE ([1,2,3]) would be [1, 0, 2, 0, 3, 0]\n// But terminator will find array at index '1', which happens to be inside of an element itself\n/**\n * Can be:\n * - Dynamic (CoderType)\n * - Fixed (number)\n * - Terminated (usually zero): Uint8Array with terminator\n * - Field path to field with length (string)\n * - Infinity (null) - decodes until end of buffer\n * Used in:\n * - bytes (string, prefix is implementation of bytes)\n * - array\n */\nconst lengthCoder = (len) => {\n if (len !== null && typeof len !== 'string' && !isCoder(len) && !isBytes(len) && !isNum(len)) {\n throw new Error(`lengthCoder: expected null | number | Uint8Array | CoderType, got ${len} (${typeof len})`);\n }\n return {\n encodeStream(w, value) {\n if (len === null)\n return;\n if (isCoder(len))\n return len.encodeStream(w, value);\n let byteLen;\n if (typeof len === 'number')\n byteLen = len;\n else if (typeof len === 'string')\n byteLen = Path.resolve(w.stack, len);\n if (typeof byteLen === 'bigint')\n byteLen = Number(byteLen);\n if (byteLen === undefined || byteLen !== value)\n throw w.err(`Wrong length: ${byteLen} len=${len} exp=${value} (${typeof value})`);\n },\n decodeStream(r) {\n let byteLen;\n if (isCoder(len))\n byteLen = Number(len.decodeStream(r));\n else if (typeof len === 'number')\n byteLen = len;\n else if (typeof len === 'string')\n byteLen = Path.resolve(r.stack, len);\n if (typeof byteLen === 'bigint')\n byteLen = Number(byteLen);\n if (typeof byteLen !== 'number')\n throw r.err(`Wrong length: ${byteLen}`);\n return byteLen;\n },\n };\n};\n/**\n * Small bitset structure to store position of ranges that have been read.\n * Can be more efficient when internal trees are utilized at the cost of complexity.\n * Needs `O(N/8)` memory for parsing.\n * Purpose: if there are pointers in parsed structure,\n * they can cause read of two distinct ranges:\n * [0-32, 64-128], which means 'pos' is not enough to handle them\n */\nconst Bitset = {\n BITS: 32,\n FULL_MASK: -1 >>> 0, // 1<<32 will overflow\n len: (len) => Math.ceil(len / 32),\n create: (len) => new Uint32Array(Bitset.len(len)),\n clean: (bs) => bs.fill(0),\n debug: (bs) => Array.from(bs).map((i) => (i >>> 0).toString(2).padStart(32, '0')),\n checkLen: (bs, len) => {\n if (Bitset.len(len) === bs.length)\n return;\n throw new Error(`wrong length=${bs.length}. Expected: ${Bitset.len(len)}`);\n },\n chunkLen: (bsLen, pos, len) => {\n if (pos < 0)\n throw new Error(`wrong pos=${pos}`);\n if (pos + len > bsLen)\n throw new Error(`wrong range=${pos}/${len} of ${bsLen}`);\n },\n set: (bs, chunk, value, allowRewrite = true) => {\n if (!allowRewrite && (bs[chunk] & value) !== 0)\n return false;\n bs[chunk] |= value;\n return true;\n },\n pos: (pos, i) => ({\n chunk: Math.floor((pos + i) / 32),\n mask: 1 << (32 - ((pos + i) % 32) - 1),\n }),\n indices: (bs, len, invert = false) => {\n Bitset.checkLen(bs, len);\n const { FULL_MASK, BITS } = Bitset;\n const left = BITS - (len % BITS);\n const lastMask = left ? (FULL_MASK >>> left) << left : FULL_MASK;\n const res = [];\n for (let i = 0; i < bs.length; i++) {\n let c = bs[i];\n if (invert)\n c = ~c; // allows to gen unset elements\n // apply mask to last element, so we won't iterate non-existent items\n if (i === bs.length - 1)\n c &= lastMask;\n if (c === 0)\n continue; // fast-path\n for (let j = 0; j < BITS; j++) {\n const m = 1 << (BITS - j - 1);\n if (c & m)\n res.push(i * BITS + j);\n }\n }\n return res;\n },\n range: (arr) => {\n const res = [];\n let cur;\n for (const i of arr) {\n if (cur === undefined || i !== cur.pos + cur.length)\n res.push((cur = { pos: i, length: 1 }));\n else\n cur.length += 1;\n }\n return res;\n },\n rangeDebug: (bs, len, invert = false) => `[${Bitset.range(Bitset.indices(bs, len, invert))\n .map((i) => `(${i.pos}/${i.length})`)\n .join(', ')}]`,\n setRange: (bs, bsLen, pos, len, allowRewrite = true) => {\n Bitset.chunkLen(bsLen, pos, len);\n const { FULL_MASK, BITS } = Bitset;\n // Try to set range with maximum efficiency:\n // - first chunk is always '0000[1111]' (only right ones)\n // - middle chunks are set to '[1111 1111]' (all ones)\n // - last chunk is always '[1111]0000' (only left ones)\n // - max operations: (N/32) + 2 (first and last)\n const first = pos % BITS ? Math.floor(pos / BITS) : undefined;\n const lastPos = pos + len;\n const last = lastPos % BITS ? Math.floor(lastPos / BITS) : undefined;\n // special case, whole range inside single chunk\n if (first !== undefined && first === last)\n return Bitset.set(bs, first, (FULL_MASK >>> (BITS - len)) << (BITS - len - pos), allowRewrite);\n if (first !== undefined) {\n if (!Bitset.set(bs, first, FULL_MASK >>> pos % BITS, allowRewrite))\n return false; // first chunk\n }\n // middle chunks\n const start = first !== undefined ? first + 1 : pos / BITS;\n const end = last !== undefined ? last : lastPos / BITS;\n for (let i = start; i < end; i++)\n if (!Bitset.set(bs, i, FULL_MASK, allowRewrite))\n return false;\n if (last !== undefined && first !== last)\n if (!Bitset.set(bs, last, FULL_MASK << (BITS - (lastPos % BITS)), allowRewrite))\n return false; // last chunk\n return true;\n },\n};\nconst Path = {\n /**\n * Internal method for handling stack of paths (debug, errors, dynamic fields via path)\n * This is looks ugly (callback), but allows us to force stack cleaning by construction (.pop always after function).\n * Also, this makes impossible:\n * - pushing field when stack is empty\n * - pushing field inside of field (real bug)\n * NOTE: we don't want to do '.pop' on error!\n */\n pushObj: (stack, obj, objFn) => {\n const last = { obj };\n stack.push(last);\n objFn((field, fieldFn) => {\n last.field = field;\n fieldFn();\n last.field = undefined;\n });\n stack.pop();\n },\n path: (stack) => {\n const res = [];\n for (const i of stack)\n if (i.field !== undefined)\n res.push(i.field);\n return res.join('/');\n },\n err: (name, stack, msg) => {\n const err = new Error(`${name}(${Path.path(stack)}): ${typeof msg === 'string' ? msg : msg.message}`);\n if (msg instanceof Error && msg.stack)\n err.stack = msg.stack;\n return err;\n },\n resolve: (stack, path) => {\n const parts = path.split('/');\n const objPath = stack.map((i) => i.obj);\n let i = 0;\n for (; i < parts.length; i++) {\n if (parts[i] === '..')\n objPath.pop();\n else\n break;\n }\n let cur = objPath.pop();\n for (; i < parts.length; i++) {\n if (!cur || cur[parts[i]] === undefined)\n return undefined;\n cur = cur[parts[i]];\n }\n return cur;\n },\n};\n/**\n * Internal structure. Reader class for reading from a byte array.\n * `stack` is internal: for debugger and logging\n * @class Reader\n */\nclass _Reader {\n constructor(data, opts = {}, stack = [], parent = undefined, parentOffset = 0) {\n this.pos = 0;\n this.bitBuf = 0;\n this.bitPos = 0;\n this.data = data;\n this.opts = opts;\n this.stack = stack;\n this.parent = parent;\n this.parentOffset = parentOffset;\n this.view = createView(data);\n }\n /** Internal method for pointers. */\n _enablePointers() {\n if (this.parent)\n return this.parent._enablePointers();\n if (this.bs)\n return;\n this.bs = Bitset.create(this.data.length);\n Bitset.setRange(this.bs, this.data.length, 0, this.pos, this.opts.allowMultipleReads);\n }\n markBytesBS(pos, len) {\n if (this.parent)\n return this.parent.markBytesBS(this.parentOffset + pos, len);\n if (!len)\n return true;\n if (!this.bs)\n return true;\n return Bitset.setRange(this.bs, this.data.length, pos, len, false);\n }\n markBytes(len) {\n const pos = this.pos;\n this.pos += len;\n const res = this.markBytesBS(pos, len);\n if (!this.opts.allowMultipleReads && !res)\n throw this.err(`multiple read pos=${this.pos} len=${len}`);\n return res;\n }\n pushObj(obj, objFn) {\n return Path.pushObj(this.stack, obj, objFn);\n }\n readView(n, fn) {\n if (!Number.isFinite(n))\n throw this.err(`readView: wrong length=${n}`);\n if (this.pos + n > this.data.length)\n throw this.err('readView: Unexpected end of buffer');\n const res = fn(this.view, this.pos);\n this.markBytes(n);\n return res;\n }\n // read bytes by absolute offset\n absBytes(n) {\n if (n > this.data.length)\n throw new Error('Unexpected end of buffer');\n return this.data.subarray(n);\n }\n finish() {\n if (this.opts.allowUnreadBytes)\n return;\n if (this.bitPos) {\n throw this.err(`${this.bitPos} bits left after unpack: ${baseHex.encode(this.data.slice(this.pos))}`);\n }\n if (this.bs && !this.parent) {\n const notRead = Bitset.indices(this.bs, this.data.length, true);\n if (notRead.length) {\n const formatted = Bitset.range(notRead)\n .map(({ pos, length }) => `(${pos}/${length})[${baseHex.encode(this.data.subarray(pos, pos + length))}]`)\n .join(', ');\n throw this.err(`unread byte ranges: ${formatted} (total=${this.data.length})`);\n }\n else\n return; // all bytes read, everything is ok\n }\n // Default: no pointers enabled\n if (!this.isEnd()) {\n throw this.err(`${this.leftBytes} bytes ${this.bitPos} bits left after unpack: ${baseHex.encode(this.data.slice(this.pos))}`);\n }\n }\n // User methods\n err(msg) {\n return Path.err('Reader', this.stack, msg);\n }\n offsetReader(n) {\n if (n > this.data.length)\n throw this.err('offsetReader: Unexpected end of buffer');\n return new _Reader(this.absBytes(n), this.opts, this.stack, this, n);\n }\n bytes(n, peek = false) {\n if (this.bitPos)\n throw this.err('readBytes: bitPos not empty');\n if (!Number.isFinite(n))\n throw this.err(`readBytes: wrong length=${n}`);\n if (this.pos + n > this.data.length)\n throw this.err('readBytes: Unexpected end of buffer');\n const slice = this.data.subarray(this.pos, this.pos + n);\n if (!peek)\n this.markBytes(n);\n return slice;\n }\n byte(peek = false) {\n if (this.bitPos)\n throw this.err('readByte: bitPos not empty');\n if (this.pos + 1 > this.data.length)\n throw this.err('readBytes: Unexpected end of buffer');\n const data = this.data[this.pos];\n if (!peek)\n this.markBytes(1);\n return data;\n }\n get leftBytes() {\n return this.data.length - this.pos;\n }\n get totalBytes() {\n return this.data.length;\n }\n isEnd() {\n return this.pos >= this.data.length && !this.bitPos;\n }\n // bits are read in BE mode (left to right): (0b1000_0000).readBits(1) == 1\n bits(bits) {\n if (bits > 32)\n throw this.err('BitReader: cannot read more than 32 bits in single call');\n let out = 0;\n while (bits) {\n if (!this.bitPos) {\n this.bitBuf = this.byte();\n this.bitPos = 8;\n }\n const take = Math.min(bits, this.bitPos);\n this.bitPos -= take;\n out = (out << take) | ((this.bitBuf >> this.bitPos) & (2 ** take - 1));\n this.bitBuf &= 2 ** this.bitPos - 1;\n bits -= take;\n }\n // Fix signed integers\n return out >>> 0;\n }\n find(needle, pos = this.pos) {\n if (!isBytes(needle))\n throw this.err(`find: needle is not bytes! ${needle}`);\n if (this.bitPos)\n throw this.err('findByte: bitPos not empty');\n if (!needle.length)\n throw this.err(`find: needle is empty`);\n // indexOf should be faster than full equalBytes check\n for (let idx = pos; (idx = this.data.indexOf(needle[0], idx)) !== -1; idx++) {\n if (idx === -1)\n return;\n const leftBytes = this.data.length - idx;\n if (leftBytes < needle.length)\n return;\n if (equalBytes(needle, this.data.subarray(idx, idx + needle.length)))\n return idx;\n }\n return;\n }\n}\n/**\n * Internal structure. Writer class for writing to a byte array.\n * The `stack` argument of constructor is internal, for debugging and logs.\n * @class Writer\n */\nclass _Writer {\n constructor(stack = []) {\n this.pos = 0;\n // We could have a single buffer here and re-alloc it with\n // x1.5-2 size each time it full, but it will be slower:\n // basic/encode bench: 395ns -> 560ns\n this.buffers = [];\n this.ptrs = [];\n this.bitBuf = 0;\n this.bitPos = 0;\n this.viewBuf = new Uint8Array(8);\n this.finished = false;\n this.stack = stack;\n this.view = createView(this.viewBuf);\n }\n pushObj(obj, objFn) {\n return Path.pushObj(this.stack, obj, objFn);\n }\n writeView(len, fn) {\n if (this.finished)\n throw this.err('buffer: finished');\n if (!isNum(len) || len > 8)\n throw new Error(`wrong writeView length=${len}`);\n fn(this.view);\n this.bytes(this.viewBuf.slice(0, len));\n this.viewBuf.fill(0);\n }\n // User methods\n err(msg) {\n if (this.finished)\n throw this.err('buffer: finished');\n return Path.err('Reader', this.stack, msg);\n }\n bytes(b) {\n if (this.finished)\n throw this.err('buffer: finished');\n if (this.bitPos)\n throw this.err('writeBytes: ends with non-empty bit buffer');\n this.buffers.push(b);\n this.pos += b.length;\n }\n byte(b) {\n if (this.finished)\n throw this.err('buffer: finished');\n if (this.bitPos)\n throw this.err('writeByte: ends with non-empty bit buffer');\n this.buffers.push(new Uint8Array([b]));\n this.pos++;\n }\n finish(clean = true) {\n if (this.finished)\n throw this.err('buffer: finished');\n if (this.bitPos)\n throw this.err('buffer: ends with non-empty bit buffer');\n // Can't use concatBytes, because it limits amount of arguments (65K).\n const buffers = this.buffers.concat(this.ptrs.map((i) => i.buffer));\n const sum = buffers.map((b) => b.length).reduce((a, b) => a + b, 0);\n const buf = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < buffers.length; i++) {\n const a = buffers[i];\n buf.set(a, pad);\n pad += a.length;\n }\n for (let pos = this.pos, i = 0; i < this.ptrs.length; i++) {\n const ptr = this.ptrs[i];\n buf.set(ptr.ptr.encode(pos), ptr.pos);\n pos += ptr.buffer.length;\n }\n // Cleanup\n if (clean) {\n // We cannot cleanup buffers here, since it can be static user provided buffer.\n // Only '.byte' and '.bits' create buffer which we can safely clean.\n // for (const b of this.buffers) b.fill(0);\n this.buffers = [];\n for (const p of this.ptrs)\n p.buffer.fill(0);\n this.ptrs = [];\n this.finished = true;\n this.bitBuf = 0;\n }\n return buf;\n }\n bits(value, bits) {\n if (bits > 32)\n throw this.err('writeBits: cannot write more than 32 bits in single call');\n if (value >= 2 ** bits)\n throw this.err(`writeBits: value (${value}) >= 2**bits (${bits})`);\n while (bits) {\n const take = Math.min(bits, 8 - this.bitPos);\n this.bitBuf = (this.bitBuf << take) | (value >> (bits - take));\n this.bitPos += take;\n bits -= take;\n value &= 2 ** bits - 1;\n if (this.bitPos === 8) {\n this.bitPos = 0;\n this.buffers.push(new Uint8Array([this.bitBuf]));\n this.pos++;\n }\n }\n }\n}\n// Immutable LE<->BE\nconst swapEndianness = (b) => Uint8Array.from(b).reverse();\n/** Internal function for checking bit bounds of bigint in signed/unsinged form */\nfunction checkBounds(value, bits, signed) {\n if (signed) {\n // [-(2**(32-1)), 2**(32-1)-1]\n const signBit = 2n ** (bits - 1n);\n if (value < -signBit || value >= signBit)\n throw new Error(`value out of signed bounds. Expected ${-signBit} <= ${value} < ${signBit}`);\n }\n else {\n // [0, 2**32-1]\n if (0n > value || value >= 2n ** bits)\n throw new Error(`value out of unsigned bounds. Expected 0 <= ${value} < ${2n ** bits}`);\n }\n}\nfunction _wrap(inner) {\n return {\n // NOTE: we cannot export validate here, since it is likely mistake.\n encodeStream: inner.encodeStream,\n decodeStream: inner.decodeStream,\n size: inner.size,\n encode: (value) => {\n const w = new _Writer();\n inner.encodeStream(w, value);\n return w.finish();\n },\n decode: (data, opts = {}) => {\n const r = new _Reader(data, opts);\n const res = inner.decodeStream(r);\n r.finish();\n return res;\n },\n };\n}\n/**\n * Validates a value before encoding and after decoding using a provided function.\n * @param inner - The inner CoderType.\n * @param fn - The validation function.\n * @returns CoderType which check value with validation function.\n * @example\n * const val = (n: number) => {\n * if (n > 10) throw new Error(`${n} > 10`);\n * return n;\n * };\n *\n * const RangedInt = P.validate(P.U32LE, val); // Will check if value is <= 10 during encoding and decoding\n */\nexport function validate(inner, fn) {\n if (!isCoder(inner))\n throw new Error(`validate: invalid inner value ${inner}`);\n if (typeof fn !== 'function')\n throw new Error('validate: fn should be function');\n return _wrap({\n size: inner.size,\n encodeStream: (w, value) => {\n let res;\n try {\n res = fn(value);\n }\n catch (e) {\n throw w.err(e);\n }\n inner.encodeStream(w, res);\n },\n decodeStream: (r) => {\n const res = inner.decodeStream(r);\n try {\n return fn(res);\n }\n catch (e) {\n throw r.err(e);\n }\n },\n });\n}\n/**\n * Wraps a stream encoder into a generic encoder and optionally validation function\n * @param {inner} inner BytesCoderStream & { validate?: Validate<T> }.\n * @returns The wrapped CoderType.\n * @example\n * const U8 = P.wrap({\n * encodeStream: (w: Writer, value: number) => w.byte(value),\n * decodeStream: (r: Reader): number => r.byte()\n * });\n * const checkedU8 = P.wrap({\n * encodeStream: (w: Writer, value: number) => w.byte(value),\n * decodeStream: (r: Reader): number => r.byte()\n * validate: (n: number) => {\n * if (n > 10) throw new Error(`${n} > 10`);\n * return n;\n * }\n * });\n */\nexport const wrap = (inner) => {\n const res = _wrap(inner);\n return inner.validate ? validate(res, inner.validate) : res;\n};\nconst isBaseCoder = (elm) => isPlainObject(elm) && typeof elm.decode === 'function' && typeof elm.encode === 'function';\n/**\n * Checks if the given value is a CoderType.\n * @param elm - The value to check.\n * @returns True if the value is a CoderType, false otherwise.\n */\nexport function isCoder(elm) {\n return (isPlainObject(elm) &&\n isBaseCoder(elm) &&\n typeof elm.encodeStream === 'function' &&\n typeof elm.decodeStream === 'function' &&\n (elm.size === undefined || isNum(elm.size)));\n}\n// Coders (like in @scure/base) for common operations\n/**\n * Base coder for working with dictionaries (records, objects, key-value map)\n * Dictionary is dynamic type like: `[key: string, value: any][]`\n * @returns base coder that encodes/decodes between arrays of key-value tuples and dictionaries.\n * @example\n * const dict: P.CoderType<Record<string, number>> = P.apply(\n * P.array(P.U16BE, P.tuple([P.cstring, P.U32LE] as const)),\n * P.coders.dict()\n * );\n */\nfunction dict() {\n return {\n encode: (from) => {\n if (!Array.isArray(from))\n throw new Error('array expected');\n const to = {};\n for (const item of from) {\n if (!Array.isArray(item) || item.length !== 2)\n throw new Error(`array of two elements expected`);\n const name = item[0];\n const value = item[1];\n if (to[name] !== undefined)\n throw new Error(`key(${name}) appears twice in struct`);\n to[name] = value;\n }\n return to;\n },\n decode: (to) => {\n if (!isPlainObject(to))\n throw new Error(`expected plain object, got ${to}`);\n return Object.entries(to);\n },\n };\n}\n/**\n * Safely converts bigint to number.\n * Sometimes pointers / tags use u64 or other big numbers which cannot be represented by number,\n * but we still can use them since real value will be smaller than u32\n */\nconst numberBigint = {\n encode: (from) => {\n if (typeof from !== 'bigint')\n throw new Error(`expected bigint, got ${typeof from}`);\n if (from > BigInt(Number.MAX_SAFE_INTEGER))\n throw new Error(`element bigger than MAX_SAFE_INTEGER=${from}`);\n return Number(from);\n },\n decode: (to) => {\n if (!isNum(to))\n throw new Error('element is not a safe integer');\n return BigInt(to);\n },\n};\n/**\n * Base coder for working with TypeScript enums.\n * @param e - TypeScript enum.\n * @returns base coder that encodes/decodes between numbers and enum keys.\n * @example\n * enum Color { Red, Green, Blue }\n * const colorCoder = P.coders.tsEnum(Color);\n * colorCoder.encode(Color.Red); // 'Red'\n * colorCoder.decode('Green'); // 1\n */\nfunction tsEnum(e) {\n if (!isPlainObject(e))\n throw new Error('plain object expected');\n return {\n encode: (from) => {\n if (!isNum(from) || !(from in e))\n throw new Error(`wrong value ${from}`);\n return e[from];\n },\n decode: (to) => {\n if (typeof to !== 'string')\n throw new Error(`wrong value ${typeof to}`);\n return e[to];\n },\n };\n}\n/**\n * Base coder for working with decimal numbers.\n * @param precision - Number of decimal places.\n * @param round - Round fraction part if bigger than precision (throws error by default)\n * @returns base coder that encodes/decodes between bigints and decimal strings.\n * @example\n * const decimal8 = P.coders.decimal(8);\n * decimal8.encode(630880845n); // '6.30880845'\n * decimal8.decode('6.30880845'); // 630880845n\n */\nfunction decimal(precision, round = false) {\n if (!isNum(precision))\n throw new Error(`decimal/precision: wrong value ${precision}`);\n if (typeof round !== 'boolean')\n throw new Error(`decimal/round: expected boolean, got ${typeof round}`);\n const decimalMask = 10n ** BigInt(precision);\n return {\n encode: (from) => {\n if (typeof from !== 'bigint')\n throw new Error(`expected bigint, got ${typeof from}`);\n let s = (from < 0n ? -from : from).toString(10);\n let sep = s.length - precision;\n if (sep < 0) {\n s = s.padStart(s.length - sep, '0');\n sep = 0;\n }\n let i = s.length - 1;\n for (; i >= sep && s[i] === '0'; i--)\n ;\n let int = s.slice(0, sep);\n let frac = s.slice(sep, i + 1);\n if (!int)\n int = '0';\n if (from < 0n)\n int = '-' + int;\n if (!frac)\n return int;\n return `${int}.${frac}`;\n },\n decode: (to) => {\n if (typeof to !== 'string')\n throw new Error(`expected string, got ${typeof to}`);\n if (to === '-0')\n throw new Error(`negative zero is not allowed`);\n let neg = false;\n if (to.startsWith('-')) {\n neg = true;\n to = to.slice(1);\n }\n if (!/^(0|[1-9]\\d*)(\\.\\d+)?$/.test(to))\n throw new Error(`wrong string value=${to}`);\n let sep = to.indexOf('.');\n sep = sep === -1 ? to.length : sep;\n // split by separator and strip trailing zeros from fraction. always returns [string, string] (.split doesn't).\n const intS = to.slice(0, sep);\n const fracS = to.slice(sep + 1).replace(/0+$/, '');\n const int = BigInt(intS) * decimalMask;\n if (!round && fracS.length > precision) {\n throw new Error(`fractional part cannot be represented with this precision (num=${to}, prec=${precision})`);\n }\n const fracLen = Math.min(fracS.length, precision);\n const frac = BigInt(fracS.slice(0, fracLen)) * 10n ** BigInt(precision - fracLen);\n const value = int + frac;\n return neg ? -value : value;\n },\n };\n}\n/**\n * Combines multiple coders into a single coder, allowing conditional encoding/decoding based on input.\n * Acts as a parser combinator, splitting complex conditional coders into smaller parts.\n *\n * `encode = [Ae, Be]; decode = [Ad, Bd]`\n * ->\n * `match([{encode: Ae, decode: Ad}, {encode: Be; decode: Bd}])`\n *\n * @param lst - Array of coders to match.\n * @returns Combined coder for conditional encoding/decoding.\n */\nfunction match(lst) {\n if (!Array.isArray(lst))\n throw new Error(`expected array, got ${typeof lst}`);\n for (const i of lst)\n if (!isBaseCoder(i))\n throw new Error(`wrong base coder ${i}`);\n return {\n encode: (from) => {\n for (const c of lst) {\n const elm = c.encode(from);\n if (elm !== undefined)\n return elm;\n }\n throw new Error(`match/encode: cannot find match in ${from}`);\n },\n decode: (to) => {\n for (const c of lst) {\n const elm = c.decode(to);\n if (elm !== undefined)\n return elm;\n }\n throw new Error(`match/decode: cannot find match in ${to}`);\n },\n };\n}\n/** Reverses direction of coder */\nconst reverse = (coder) => {\n if (!isBaseCoder(coder))\n throw new Error('BaseCoder expected');\n return { encode: coder.decode, decode: coder.encode };\n};\nexport const coders = { dict, numberBigint, tsEnum, decimal, match, reverse };\n/**\n * CoderType for parsing individual bits.\n * NOTE: Structure should parse whole amount of bytes before it can start parsing byte-level elements.\n * @param len - Number of bits to parse.\n * @returns CoderType representing the parsed bits.\n * @example\n * const s = P.struct({ magic: P.bits(1), version: P.bits(1), tag: P.bits(4), len: P.bits(2) });\n */\nexport const bits = (len) => {\n if (!isNum(len))\n throw new Error(`bits: wrong length ${len} (${typeof len})`);\n return wrap({\n encodeStream: (w, value) => w.bits(value, len),\n decodeStream: (r) => r.bits(len),\n validate: (value) => {\n if (!isNum(value))\n throw new Error(`bits: wrong value ${value}`);\n return value;\n },\n });\n};\n/**\n * CoderType for working with bigint values.\n * Unsized bigint values should be wrapped in a container (e.g., bytes or string).\n *\n * `0n = new Uint8Array([])`\n *\n * `1n = new Uint8Array([1n])`\n *\n * Please open issue, if you need different behavior for zero.\n *\n * @param size - Size of the bigint in bytes.\n * @param le - Whether to use little-endian byte order.\n * @param signed - Whether the bigint is signed.\n * @param sized - Whether the bigint should have a fixed size.\n * @returns CoderType representing the bigint value.\n * @example\n * const U512BE = P.bigint(64, false, true, true); // Define a CoderType for a 512-bit unsigned big-endian integer\n */\nexport const bigint = (size, le = false, signed = false, sized = true) => {\n if (!isNum(size))\n throw new Error(`bigint/size: wrong value ${size}`);\n if (typeof le !== 'boolean')\n throw new Error(`bigint/le: expected boolean, got ${typeof le}`);\n if (typeof signed !== 'boolean')\n throw new Error(`bigint/signed: expected boolean, got ${typeof signed}`);\n if (typeof sized !== 'boolean')\n throw new Error(`bigint/sized: expected boolean, got ${typeof sized}`);\n const bLen = BigInt(size);\n const signBit = 2n ** (8n * bLen - 1n);\n return wrap({\n size: sized ? size : undefined,\n encodeStream: (w, value) => {\n if (signed && value < 0)\n value = value | signBit;\n const b = [];\n for (let i = 0; i < size; i++) {\n b.push(Number(value & 255n));\n value >>= 8n;\n }\n let res = new Uint8Array(b).reverse();\n if (!sized) {\n let pos = 0;\n for (pos = 0; pos < res.length; pos++)\n if (res[pos] !== 0)\n break;\n res = res.subarray(pos); // remove leading zeros\n }\n w.bytes(le ? res.reverse() : res);\n },\n decodeStream: (r) => {\n // TODO: for le we can read until first zero?\n const value = r.bytes(sized ? size : Math.min(size, r.leftBytes));\n const b = le ? value : swapEndianness(value);\n let res = 0n;\n for (let i = 0; i < b.length; i++)\n res |= BigInt(b[i]) << (8n * BigInt(i));\n if (signed && res & signBit)\n res = (res ^ signBit) - signBit;\n return res;\n },\n validate: (value) => {\n if (typeof value !== 'bigint')\n throw new Error(`bigint: invalid value: ${value}`);\n checkBounds(value, 8n * bLen, !!signed);\n return value;\n },\n });\n};\n/** Unsigned 256-bit little-endian integer CoderType. */\nexport const U256LE = /* @__PURE__ */ bigint(32, true);\n/** Unsigned 256-bit big-endian integer CoderType. */\nexport const U256BE = /* @__PURE__ */ bigint(32, false);\n/** Signed 256-bit little-endian integer CoderType. */\nexport const I256LE = /* @__PURE__ */ bigint(32, true, true);\n/** Signed 256-bit big-endian integer CoderType. */\nexport const I256BE = /* @__PURE__ */ bigint(32, false, true);\n/** Unsigned 128-bit little-endian integer CoderType. */\nexport const U128LE = /* @__PURE__ */ bigint(16, true);\n/** Unsigned 128-bit big-endian integer CoderType. */\nexport const U128BE = /* @__PURE__ */ bigint(16, false);\n/** Signed 128-bit little-endian integer CoderType. */\nexport const I128LE = /* @__PURE__ */ bigint(16, true, true);\n/** Signed 128-bit big-endian integer CoderType. */\nexport const I128BE = /* @__PURE__ */ bigint(16, false, true);\n/** Unsigned 64-bit little-endian integer CoderType. */\nexport const U64LE = /* @__PURE__ */ bigint(8, true);\n/** Unsigned 64-bit big-endian integer CoderType. */\nexport const U64BE = /* @__PURE__ */ bigint(8, false);\n/** Signed 64-bit little-endian integer CoderType. */\nexport const I64LE = /* @__PURE__ */ bigint(8, true, true);\n/** Signed 64-bit big-endian integer CoderType. */\nexport const I64BE = /* @__PURE__ */ bigint(8, false, true);\n/**\n * CoderType for working with numbber values (up to 6 bytes/48 bits).\n * Unsized int values should be wrapped in a container (e.g., bytes or string).\n *\n * `0 = new Uint8Array([])`\n *\n * `1 = new Uint8Array([1n])`\n *\n * Please open issue, if you need different behavior for zero.\n *\n * @param size - Size of the number in bytes.\n * @param le - Whether to use little-endian byte order.\n * @param signed - Whether the number is signed.\n * @param sized - Whether the number should have a fixed size.\n * @returns CoderType representing the number value.\n * @example\n * const uint64BE = P.bigint(8, false, true); // Define a CoderType for a 64-bit unsigned big-endian integer\n */\nexport const int = (size, le = false, signed = false, sized = true) => {\n if (!isNum(size))\n throw new Error(`int/size: wrong value ${size}`);\n if (typeof le !== 'boolean')\n throw new Error(`int/le: expected boolean, got ${typeof le}`);\n if (typeof signed !== 'boolean')\n throw new Error(`int/signed: expected boolean, got ${typeof signed}`);\n if (typeof sized !== 'boolean')\n throw new Error(`int/sized: expected boolean, got ${typeof sized}`);\n if (size > 6)\n throw new Error('int supports size up to 6 bytes (48 bits): use bigints instead');\n return apply(bigint(size, le, signed, sized), coders.numberBigint);\n};\nconst view = (len, opts) => wrap({\n size: len,\n encodeStream: (w, value) => w.writeView(len, (view) => opts.write(view, value)),\n decodeStream: (r) => r.readView(len, opts.read),\n validate: (value) => {\n if (typeof value !== 'number')\n throw new Error(`viewCoder: expected number, got ${typeof value}`);\n if (opts.validate)\n opts.validate(value);\n return value;\n },\n});\nconst intView = (len, signed, opts) => {\n const bits = len * 8;\n const signBit = 2 ** (bits - 1);\n // Inlined checkBounds for integer\n const validateSigned = (value) => {\n if (!isNum(value))\n throw new Error(`sintView: value is not safe integer: ${value}`);\n if (value < -signBit || value >= signBit) {\n throw new Error(`sintView: value out of bounds. Expected ${-signBit} <= ${value} < ${signBit}`);\n }\n };\n const maxVal = 2 ** bits;\n const validateUnsigned = (value) => {\n if (!isNum(value))\n throw new Error(`uintView: value is not safe integer: ${value}`);\n if (0 > value || value >= maxVal) {\n throw new Error(`uintView: value out of bounds. Expected 0 <= ${value} < ${maxVal}`);\n }\n };\n return view(len, {\n write: opts.write,\n read: opts.read,\n validate: signed ? validateSigned : validateUnsigned,\n });\n};\n/** Unsigned 32-bit little-endian integer CoderType. */\nexport const U32LE = /* @__PURE__ */ intView(4, false, {\n read: (view, pos) => view.getUint32(pos, true),\n write: (view, value) => view.setUint32(0, value, true),\n});\n/** Unsigned 32-bit big-endian integer CoderType. */\nexport const U32BE = /* @__PURE__ */ intView(4, false, {\n read: (view, pos) => view.getUint32(pos, false),\n write: (view, value) => view.setUint32(0, value, false),\n});\n/** Signed 32-bit little-endian integer CoderType. */\nexport const I32LE = /* @__PURE__ */ intView(4, true, {\n read: (view, pos) => view.getInt32(pos, true),\n write: (view, value) => view.setInt32(0, value, true),\n});\n/** Signed 32-bit big-endian integer CoderType. */\nexport const I32BE = /* @__PURE__ */ intView(4, true, {\n read: (view, pos) => view.getInt32(pos, false),\n write: (view, value) => view.setInt32(0, value, false),\n});\n/** Unsigned 16-bit little-endian integer CoderType. */\nexport const U16LE = /* @__PURE__ */ intView(2, false, {\n read: (view, pos) => view.getUint16(pos, true),\n write: (view, value) => view.setUint16(0, value, true),\n});\n/** Unsigned 16-bit big-endian integer CoderType. */\nexport const U16BE = /* @__PURE__ */ intView(2, false, {\n read: (view, pos) => view.getUint16(pos, false),\n write: (view, value) => view.setUint16(0, value, false),\n});\n/** Signed 16-bit little-endian integer CoderType. */\nexport const I16LE = /* @__PURE__ */ intView(2, true, {\n read: (view, pos) => view.getInt16(pos, true),\n write: (view, value) => view.setInt16(0, value, true),\n});\n/** Signed 16-bit big-endian integer CoderType. */\nexport const I16BE = /* @__PURE__ */ intView(2, true, {\n read: (view, pos) => view.getInt16(pos, false),\n write: (view, value) => view.setInt16(0, value, false),\n});\n/** Unsigned 8-bit integer CoderType. */\nexport const U8 = /* @__PURE__ */ intView(1, false, {\n read: (view, pos) => view.getUint8(pos),\n write: (view, value) => view.setUint8(0, value),\n});\n/** Signed 8-bit integer CoderType. */\nexport const I8 = /* @__PURE__ */ intView(1, true, {\n read: (view, pos) => view.getInt8(pos),\n write: (view, value) => view.setInt8(0, value),\n});\n// Floats\nconst f32 = (le) => view(4, {\n read: (view, pos) => view.getFloat32(pos, le),\n write: (view, value) => view.setFloat32(0, value, le),\n validate: (value) => {\n if (Math.fround(value) !== value && !Number.isNaN(value))\n throw new Error(`f32: wrong value=${value}`);\n },\n});\nconst f64 = (le) => view(8, {\n read: (view, pos) => view.getFloat64(pos, le),\n write: (view, value) => view.setFloat64(0, value, le),\n});\n/** 32-bit big-endian floating point CoderType (\"binary32\", IEEE 754-2008). */\nexport const F32BE = /* @__PURE__ */ f32(false);\n/** 32-bit little-endian floating point CoderType (\"binary32\", IEEE 754-2008). */\nexport const F32LE = /* @__PURE__ */ f32(true);\n/** A 64-bit big-endian floating point type (\"binary64\", IEEE 754-2008). Any JS number can be encoded. */\nexport const F64BE = /* @__PURE__ */ f64(false);\n/** A 64-bit little-endian floating point type (\"binary64\", IEEE 754-2008). Any JS number can be encoded. */\nexport const F64LE = /* @__PURE__ */ f64(true);\n/** Boolean CoderType. */\nexport const bool = /* @__PURE__ */ wrap({\n size: 1,\n encodeStream: (w, value) => w.byte(value ? 1 : 0),\n decodeStream: (r) => {\n const value = r.byte();\n if (value !== 0 && value !== 1)\n throw r.err(`bool: invalid value ${value}`);\n return value === 1;\n },\n validate: (value) => {\n if (typeof value !== 'boolean')\n throw new Error(`bool: invalid value ${value}`);\n return value;\n },\n});\n/**\n * Bytes CoderType with a specified length and endianness.\n * The bytes can have:\n * - Dynamic size (prefixed with a length CoderType like U16BE)\n * - Fixed size (specified by a number)\n * - Unknown size (null, will parse until end of buffer)\n * - Zero-terminated (terminator can be any Uint8Array)\n * @param len - CoderType, number, Uint8Array (terminator) or null\n * @param le - Whether to use little-endian byte order.\n * @returns CoderType representing the bytes.\n * @example\n * // Dynamic size bytes (prefixed with P.U16BE number of bytes length)\n * const dynamicBytes = P.bytes(P.U16BE, false);\n * const fixedBytes = P.bytes(32, false); // Fixed size bytes\n * const unknownBytes = P.bytes(null, false); // Unknown size bytes, will parse until end of buffer\n * const zeroTerminatedBytes = P.bytes(new Uint8Array([0]), false); // Zero-terminated bytes\n */\nconst createBytes = (len, le = false) => {\n if (typeof le !== 'boolean')\n throw new Error(`bytes/le: expected boolean, got ${typeof le}`);\n const _length = lengthCoder(len);\n const _isb = isBytes(len);\n return wrap({\n size: typeof len === 'number' ? len : undefined,\n encodeStream: (w, value) => {\n if (!_isb)\n _length.encodeStream(w, value.length);\n w.bytes(le ? swapEndianness(value) : value);\n if (_isb)\n w.bytes(len);\n },\n decodeStream: (r) => {\n let bytes;\n if (_isb) {\n const tPos = r.find(len);\n if (!tPos)\n throw r.err(`bytes: cannot find terminator`);\n bytes = r.bytes(tPos - r.pos);\n r.bytes(len.length);\n }\n else {\n bytes = r.bytes(len === null ? r.leftBytes : _length.decodeStream(r));\n }\n return le ? swapEndianness(bytes) : bytes;\n },\n validate: (value) => {\n if (!isBytes(value))\n throw new Error(`bytes: invalid value ${value}`);\n return value;\n },\n });\n};\nexport { createBytes as bytes, createHex as hex };\n/**\n * Prefix-encoded value using a length prefix and an inner CoderType.\n * The prefix can have:\n * - Dynamic size (prefixed with a length CoderType like U16BE)\n * - Fixed size (specified by a number)\n * - Unknown size (null, will parse until end of buffer)\n * - Zero-terminated (terminator can be any Uint8Array)\n * @param len - Length CoderType (dynamic size), number (fixed size), Uint8Array (for terminator), or null (will parse until end of buffer)\n * @param inner - CoderType for the actual value to be prefix-encoded.\n * @returns CoderType representing the prefix-encoded value.\n * @example\n * const dynamicPrefix = P.prefix(P.U16BE, P.bytes(null)); // Dynamic size prefix (prefixed with P.U16BE number of bytes length)\n * const fixedPrefix = P.prefix(10, P.bytes(null)); // Fixed size prefix (always 10 bytes)\n */\nexport function prefix(len, inner) {\n if (!isCoder(inner))\n throw new Error(`prefix: invalid inner value ${inner}`);\n return apply(createBytes(len), reverse(inner));\n}\n/**\n * String CoderType with a specified length and endianness.\n * The string can be:\n * - Dynamic size (prefixed with a length CoderType like U16BE)\n * - Fixed size (specified by a number)\n * - Unknown size (null, will parse until end of buffer)\n * - Zero-terminated (terminator can be any Uint8Array)\n * @param len - Length CoderType (dynamic size), number (fixed size), Uint8Array (for terminator), or null (will parse until end of buffer)\n * @param le - Whether to use little-endian byte order.\n * @returns CoderType representing the string.\n * @example\n * const dynamicString = P.string(P.U16BE, false); // Dynamic size string (prefixed with P.U16BE number of string length)\n * const fixedString = P.string(10, false); // Fixed size string\n * const unknownString = P.string(null, false); // Unknown size string, will parse until end of buffer\n * const nullTerminatedString = P.cstring; // NUL-terminated string\n * const _cstring = P.string(new Uint8Array([0])); // Same thing\n */\nexport const string = (len, le = false) => validate(apply(createBytes(len, le), utf8), (value) => {\n // TextEncoder/TextDecoder will fail on non-string, but we create more readable errors earlier\n if (typeof value !== 'string')\n throw new Error(`expected string, got ${typeof value}`);\n return value;\n});\n/** NUL-terminated string CoderType. */\nexport const cstring = /* @__PURE__ */ string(NULL);\n/**\n * Hexadecimal string CoderType with a specified length, endianness, and optional 0x prefix.\n * @param len - Length CoderType (dynamic size), number (fixed size), Uint8Array (for terminator), or null (will parse until end of buffer)\n * @param le - Whether to use little-endian byte order.\n * @param withZero - Whether to include the 0x prefix.\n * @returns CoderType representing the hexadecimal string.\n * @example\n * const dynamicHex = P.hex(P.U16BE, {isLE: false, with0x: true}); // Hex string with 0x prefix and U16BE length\n * const fixedHex = P.hex(32, {isLE: false, with0x: false}); // Fixed-length 32-byte hex string without 0x prefix\n */\nconst createHex = (len, options = { isLE: false, with0x: false }) => {\n let inner = apply(createBytes(len, options.isLE), baseHex);\n const prefix = options.with0x;\n if (typeof prefix !== 'boolean')\n throw new Error(`hex/with0x: expected boolean, got ${typeof prefix}`);\n if (prefix) {\n inner = apply(inner, {\n encode: (value) => `0x${value}`,\n decode: (value) => {\n if (!value.startsWith('0x'))\n throw new Error('hex(with0x=true).encode input should start with 0x');\n return value.slice(2);\n },\n });\n }\n return inner;\n};\n/**\n * Applies a base coder to a CoderType.\n * @param inner - The inner CoderType.\n * @param b - The base coder to apply.\n * @returns CoderType representing the transformed value.\n * @example\n * import { hex } from '@scure/base';\n * const hex = P.apply(P.bytes(32), hex); // will decode bytes into a hex string\n */\nexport function apply(inner, base) {\n if (!isCoder(inner))\n throw new Error(`apply: invalid inner value ${inner}`);\n if (!isBaseCoder(base))\n throw new Error(`apply: invalid base value ${inner}`);\n return wrap({\n size: inner.size,\n encodeStream: (w, value) => {\n let innerValue;\n try {\n innerValue = base.decode(value);\n }\n catch (e) {\n throw w.err('' + e);\n }\n return inner.encodeStream(w, innerValue);\n },\n decodeStream: (r) => {\n const innerValue = inner.decodeStream(r);\n try {\n return base.encode(innerValue);\n }\n catch (e) {\n throw r.err('' + e);\n }\n },\n });\n}\n/**\n * Lazy CoderType that is evaluated at runtime.\n * @param fn - A function that returns the CoderType.\n * @returns CoderType representing the lazy value.\n * @example\n * type Tree = { name: string; children: Tree[] };\n * const tree = P.struct({\n * name: P.cstring,\n * children: P.array(\n * P.U16BE,\n * P.lazy((): P.CoderType<Tree> => tree)\n * ),\n * });\n */\nexport function lazy(fn) {\n if (typeof fn !== 'function')\n throw new Error(`lazy: expected function, got ${typeof fn}`);\n return wrap({\n encodeStream: (w, value) => fn().encodeStream(w, value),\n decodeStream: (r) => fn().decodeStream(r),\n });\n}\n/**\n * Flag CoderType that encodes/decodes a boolean value based on the presence of a marker.\n * @param flagValue - Marker value.\n * @param xor - Whether to invert the flag behavior.\n * @returns CoderType representing the flag value.\n * @example\n * const flag = P.flag(new Uint8Array([0x01, 0x02])); // Encodes true as u8a([0x01, 0x02]), false as u8a([])\n * const flagXor = P.flag(new Uint8Array([0x01, 0x02]), true); // Encodes true as u8a([]), false as u8a([0x01, 0x02])\n * // Conditional encoding with flagged\n * const s = P.struct({ f: P.flag(new Uint8Array([0x0, 0x1])), f2: P.flagged('f', P.U32BE) });\n */\nexport const flag = (flagValue, xor = false) => {\n if (!isBytes(flagValue))\n throw new Error(`flag/flagValue: expected Uint8Array, got ${typeof flagValue}`);\n if (typeof xor !== 'boolean')\n throw new Error(`flag/xor: expected boolean, got ${typeof xor}`);\n return wrap({\n size: flagValue.length,\n encodeStream: (w, value) => {\n if (!!value !== xor)\n w.bytes(flagValue);\n },\n decodeStream: (r) => {\n let hasFlag = r.leftBytes >= flagValue.length;\n if (hasFlag) {\n hasFlag = equalBytes(r.bytes(flagValue.length, true), flagValue);\n // Found flag, advance cursor position\n if (hasFlag)\n r.bytes(flagValue.length);\n }\n return hasFlag !== xor; // hasFlag ^ xor\n },\n validate: (value) => {\n if (value !== undefined && typeof value !== 'boolean')\n throw new Error(`flag: expected boolean value or undefined, got ${typeof value}`);\n return value;\n },\n });\n};\n/**\n * Conditional CoderType that encodes/decodes a value only if a flag is present.\n * @param path - Path to the flag value or a CoderType for the flag.\n * @param inner - Inner CoderType for the value.\n * @param def - Optional default value to use if the flag is not present.\n * @returns CoderType representing the conditional value.\n * @example\n * const s = P.struct({\n * f: P.flag(new Uint8Array([0x0, 0x1])),\n * f2: P.flagged('f', P.U32BE)\n * });\n *\n * @example\n * const s2 = P.struct({\n * f: P.flag(new Uint8Array([0x0, 0x1])),\n * f2: P.flagged('f', P.U32BE, 123)\n * });\n */\nexport function flagged(path, inner, def) {\n if (!isCoder(inner))\n throw new Error(`flagged: invalid inner value ${inner}`);\n if (typeof path !== 'string' && !isCoder(inner))\n throw new Error(`flagged: wrong path=${path}`);\n return wrap({\n encodeStream: (w, value) => {\n if (typeof path === 'string') {\n if (Path.resolve(w.stack, path))\n inner.encodeStream(w, value);\n else if (def)\n inner.encodeStream(w, def);\n }\n else {\n path.encodeStream(w, !!value);\n if (!!value)\n inner.encodeStream(w, value);\n else if (def)\n inner.encodeStream(w, def);\n }\n },\n decodeStream: (r) => {\n let hasFlag = false;\n if (typeof path === 'string')\n hasFlag = !!Path.resolve(r.stack, path);\n else\n hasFlag = path.decodeStream(r);\n // If there is a flag -- decode and return value\n if (hasFlag)\n return inner.decodeStream(r);\n else if (def)\n inner.decodeStream(r);\n return;\n },\n });\n}\n/**\n * Optional CoderType that encodes/decodes a value based on a flag.\n * @param flag - CoderType for the flag value.\n * @param inner - Inner CoderType for the value.\n * @param def - Optional default value to use if the flag is not present.\n * @returns CoderType representing the optional value.\n * @example\n * // Will decode into P.U32BE only if flag present\n * const optional = P.optional(P.flag(new Uint8Array([0x0, 0x1])), P.U32BE);\n *\n * @example\n * // If no flag present, will decode into default value\n * const optionalWithDefault = P.optional(P.flag(new Uint8Array([0x0, 0x1])), P.U32BE, 123);\n */\nexport function optional(flag, inner, def) {\n if (!isCoder(flag) || !isCoder(inner))\n throw new Error(`optional: invalid flag or inner value flag=${flag} inner=${inner}`);\n return wrap({\n size: def !== undefined && flag.size && inner.size ? flag.size + inner.size : undefined,\n encodeStream: (w, value) => {\n flag.encodeStream(w, !!value);\n if (value)\n inner.encodeStream(w, value);\n else if (def !== undefined)\n inner.encodeStream(w, def);\n },\n decodeStream: (r) => {\n if (flag.decodeStream(r))\n return inner.decodeStream(r);\n else if (def !== undefined)\n inner.decodeStream(r);\n return;\n },\n });\n}\n/**\n * Magic value CoderType that encodes/decodes a constant value.\n * This can be used to check for a specific magic value or sequence of bytes at the beginning of a data structure.\n * @param inner - Inner CoderType for the value.\n * @param constant - Constant value.\n * @param check - Whether to check the decoded value against the constant.\n * @returns CoderType representing the magic value.\n * @example\n * // Always encodes constant as bytes using inner CoderType, throws if encoded value is not present\n * const magicU8 = P.magic(P.U8, 0x42);\n */\nexport function magic(inner, constant, check = true) {\n if (!isCoder(inner))\n throw new Error(`magic: invalid inner value ${inner}`);\n if (typeof check !== 'boolean')\n throw new Error(`magic: expected boolean, got ${typeof check}`);\n return wrap({\n size: inner.size,\n encodeStream: (w, _value) => inner.encodeStream(w, constant),\n decodeStream: (r) => {\n const value = inner.decodeStream(r);\n if ((check && typeof value !== 'object' && value !== constant) ||\n (isBytes(constant) && !equalBytes(constant, value))) {\n throw r.err(`magic: invalid value: ${value} !== ${constant}`);\n }\n return;\n },\n validate: (value) => {\n if (value !== undefined)\n throw new Error(`magic: wrong value=${typeof value}`);\n return value;\n },\n });\n}\n/**\n * Magic bytes CoderType that encodes/decodes a constant byte array or string.\n * @param constant - Constant byte array or string.\n * @returns CoderType representing the magic bytes.\n * @example\n * // Always encodes undefined into byte representation of string 'MAGIC'\n * const magicBytes = P.magicBytes('MAGIC');\n */\nexport const magicBytes = (constant) => {\n const c = typeof constant === 'string' ? utf8.decode(constant) : constant;\n return magic(createBytes(c.length), c);\n};\n/**\n * Creates a CoderType for a constant value. The function enforces this value during encoding,\n * ensuring it matches the provided constant. During decoding, it always returns the constant value.\n * The actual value is not written to or read from any byte stream; it's used only for validation.\n *\n * @param c - Constant value.\n * @returns CoderType representing the constant value.\n * @example\n * // Always return 123 on decode, throws on encoding anything other than 123\n * const constantU8 = P.constant(123);\n */\nexport function constant(c) {\n return wrap({\n encodeStream: (_w, value) => {\n if (value !== c)\n throw new Error(`constant: invalid value ${value} (exp: ${c})`);\n },\n decodeStream: (_r) => c,\n });\n}\nfunction sizeof(fields) {\n let size = 0;\n for (const f of fields) {\n if (f.size === undefined)\n return;\n if (!isNum(f.size))\n throw new Error(`sizeof: wrong element size=${size}`);\n size += f.size;\n }\n return size;\n}\n/**\n * Structure of composable primitives (C/Rust struct)\n * @param fields - Object mapping field names to CoderTypes.\n * @returns CoderType representing the structure.\n * @example\n * // Define a structure with a 32-bit big-endian unsigned integer, a string, and a nested structure\n * const myStruct = P.struct({\n * id: P.U32BE,\n * name: P.string(P.U8),\n * nested: P.struct({\n * flag: P.bool,\n * value: P.I16LE\n * })\n * });\n */\nexport function struct(fields) {\n if (!isPlainObject(fields))\n throw new Error(`struct: expected plain object, got ${fields}`);\n for (const name in fields) {\n if (!isCoder(fields[name]))\n throw new Error(`struct: field ${name} is not CoderType`);\n }\n return wrap({\n size: sizeof(Object.values(fields)),\n encodeStream: (w, value) => {\n w.pushObj(value, (fieldFn) => {\n for (const name in fields)\n fieldFn(name, () => fields[name].encodeStream(w, value[name]));\n });\n },\n decodeStream: (r) => {\n const res = {};\n r.pushObj(res, (fieldFn) => {\n for (const name in fields)\n fieldFn(name, () => (res[name] = fields[name].decodeStream(r)));\n });\n return res;\n },\n validate: (value) => {\n if (typeof value !== 'object' || value === null)\n throw new Error(`struct: invalid value ${value}`);\n return value;\n },\n });\n}\n/**\n * Tuple (unnamed structure) of CoderTypes. Same as struct but with unnamed fields.\n * @param fields - Array of CoderTypes.\n * @returns CoderType representing the tuple.\n * @example\n * const myTuple = P.tuple([P.U8, P.U16LE, P.string(P.U8)]);\n */\nexport function tuple(fields) {\n if (!Array.isArray(fields))\n throw new Error(`Packed.Tuple: got ${typeof fields} instead of array`);\n for (let i = 0; i < fields.length; i++) {\n if (!isCoder(fields[i]))\n throw new Error(`tuple: field ${i} is not CoderType`);\n }\n return wrap({\n size: sizeof(fields),\n encodeStream: (w, value) => {\n // TODO: fix types\n if (!Array.isArray(value))\n throw w.err(`tuple: invalid value ${value}`);\n w.pushObj(value, (fieldFn) => {\n for (let i = 0; i < fields.length; i++)\n fieldFn(`${i}`, () => fields[i].encodeStream(w, value[i]));\n });\n },\n decodeStream: (r) => {\n const res = [];\n r.pushObj(res, (fieldFn) => {\n for (let i = 0; i < fields.length; i++)\n fieldFn(`${i}`, () => res.push(fields[i].decodeStream(r)));\n });\n return res;\n },\n validate: (value) => {\n if (!Array.isArray(value))\n throw new Error(`tuple: invalid value ${value}`);\n if (value.length !== fields.length)\n throw new Error(`tuple: wrong length=${value.length}, expected ${fields.length}`);\n return value;\n },\n });\n}\n/**\n * Array of items (inner type) with a specified length.\n * @param len - Length CoderType (dynamic size), number (fixed size), Uint8Array (for terminator), or null (will parse until end of buffer)\n * @param inner - CoderType for encoding/decoding each array item.\n * @returns CoderType representing the array.\n * @example\n * const a1 = P.array(P.U16BE, child); // Dynamic size array (prefixed with P.U16BE number of array length)\n * const a2 = P.array(4, child); // Fixed size array\n * const a3 = P.array(null, child); // Unknown size array, will parse until end of buffer\n * const a4 = P.array(new Uint8Array([0]), child); // zero-terminated array (NOTE: terminator can be any buffer)\n */\nexport function array(len, inner) {\n if (!isCoder(inner))\n throw new Error(`array: invalid inner value ${inner}`);\n // By construction length is inside array (otherwise there will be various incorrect stack states)\n // But forcing users always write '..' seems like bad idea. Also, breaking change.\n const _length = lengthCoder(typeof len === 'string' ? `../${len}` : len);\n return wrap({\n size: typeof len === 'number' && inner.size ? len * inner.size : undefined,\n encodeStream: (w, value) => {\n const _w = w;\n _w.pushObj(value, (fieldFn) => {\n if (!isBytes(len))\n _length.encodeStream(w, value.length);\n for (let i = 0; i < value.length; i++) {\n fieldFn(`${i}`, () => {\n const elm = value[i];\n const startPos = w.pos;\n inner.encodeStream(w, elm);\n if (isBytes(len)) {\n // Terminator is bigger than elm size, so skip\n if (len.length > _w.pos - startPos)\n return;\n const data = _w.finish(false).subarray(startPos, _w.pos);\n // There is still possible case when multiple elements create terminator,\n // but it is hard to catch here, will be very slow\n if (equalBytes(data.subarray(0, len.length), len))\n throw _w.err(`array: inner element encoding same as separator. elm=${elm} data=${data}`);\n }\n });\n }\n });\n if (isBytes(len))\n w.bytes(len);\n },\n decodeStream: (r) => {\n const res = [];\n r.pushObj(res, (fieldFn) => {\n if (len === null) {\n for (let i = 0; !r.isEnd(); i++) {\n fieldFn(`${i}`, () => res.push(inner.decodeStream(r)));\n if (inner.size && r.leftBytes < inner.size)\n break;\n }\n }\n else if (isBytes(len)) {\n for (let i = 0;; i++) {\n if (equalBytes(r.bytes(len.length, true), len)) {\n // Advance cursor position if terminator found\n r.bytes(len.length);\n break;\n }\n fieldFn(`${i}`, () => res.push(inner.decodeStream(r)));\n }\n }\n else {\n let length;\n fieldFn('arrayLen', () => (length = _length.decodeStream(r)));\n for (let i = 0; i < length; i++)\n fieldFn(`${i}`, () => res.push(inner.decodeStream(r)));\n }\n });\n return res;\n },\n validate: (value) => {\n if (!Array.isArray(value))\n throw new Error(`array: invalid value ${value}`);\n return value;\n },\n });\n}\n/**\n * Mapping between encoded values and string representations.\n * @param inner - CoderType for encoded values.\n * @param variants - Object mapping string representations to encoded values.\n * @returns CoderType representing the mapping.\n * @example\n * // Map between numbers and strings\n * const numberMap = P.map(P.U8, {\n * 'one': 1,\n * 'two': 2,\n * 'three': 3\n * });\n *\n * // Map between byte arrays and strings\n * const byteMap = P.map(P.bytes(2, false), {\n * 'ab': Uint8Array.from([0x61, 0x62]),\n * 'cd': Uint8Array.from([0x63, 0x64])\n * });\n */\nexport function map(inner, variants) {\n if (!isCoder(inner))\n throw new Error(`map: invalid inner value ${inner}`);\n if (!isPlainObject(variants))\n throw new Error(`map: variants should be plain object`);\n const variantNames = new Map();\n for (const k in variants)\n variantNames.set(variants[k], k);\n return wrap({\n size: inner.size,\n encodeStream: (w, value) => inner.encodeStream(w, variants[value]),\n decodeStream: (r) => {\n const variant = inner.decodeStream(r);\n const name = variantNames.get(variant);\n if (name === undefined)\n throw r.err(`Enum: unknown value: ${variant} ${Array.from(variantNames.keys())}`);\n return name;\n },\n validate: (value) => {\n if (typeof value !== 'string')\n throw new Error(`map: invalid value ${value}`);\n if (!(value in variants))\n throw new Error(`Map: unknown variant: ${value}`);\n return value;\n },\n });\n}\n/**\n * Tagged union of CoderTypes, where the tag value determines which CoderType to use.\n * The decoded value will have the structure `{ TAG: number, data: ... }`.\n * @param tag - CoderType for the tag value.\n * @param variants - Object mapping tag values to CoderTypes.\n * @returns CoderType representing the tagged union.\n * @example\n * // Tagged union of array, string, and number\n * // Depending on the value of the first byte, it will be decoded as an array, string, or number.\n * const taggedUnion = P.tag(P.U8, {\n * 0x01: P.array(P.U16LE, P.U8),\n * 0x02: P.string(P.U8),\n * 0x03: P.U32BE\n * });\n *\n * const encoded = taggedUnion.encode({ TAG: 0x01, data: 'hello' }); // Encodes the string 'hello' with tag 0x01\n * const decoded = taggedUnion.decode(encoded); // Decodes the encoded value back to { TAG: 0x01, data: 'hello' }\n */\nexport function tag(tag, variants) {\n if (!isCoder(tag))\n throw new Error(`tag: invalid tag value ${tag}`);\n if (!isPlainObject(variants))\n throw new Error(`tag: variants should be plain object`);\n for (const name in variants) {\n if (!isCoder(variants[name]))\n throw new Error(`tag: variant ${name} is not CoderType`);\n }\n return wrap({\n size: tag.size,\n encodeStream: (w, value) => {\n const { TAG, data } = value;\n const dataType = variants[TAG];\n tag.encodeStream(w, TAG);\n dataType.encodeStream(w, data);\n },\n decodeStream: (r) => {\n const TAG = tag.decodeStream(r);\n const dataType = variants[TAG];\n if (!dataType)\n throw r.err(`Tag: invalid tag ${TAG}`);\n return { TAG, data: dataType.decodeStream(r) };\n },\n validate: (value) => {\n const { TAG } = value;\n const dataType = variants[TAG];\n if (!dataType)\n throw new Error(`Tag: invalid tag ${TAG.toString()}`);\n return value;\n },\n });\n}\n/**\n * Mapping between encoded values, string representations, and CoderTypes using a tag CoderType.\n * @param tagCoder - CoderType for the tag value.\n * @param variants - Object mapping string representations to [tag value, CoderType] pairs.\n * * @returns CoderType representing the mapping.\n * @example\n * const cborValue: P.CoderType<CborValue> = P.mappedTag(P.bits(3), {\n * uint: [0, cborUint], // An unsigned integer in the range 0..264-1 inclusive.\n * negint: [1, cborNegint], // A negative integer in the range -264..-1 inclusive\n * bytes: [2, P.lazy(() => cborLength(P.bytes, cborValue))], // A byte string.\n * string: [3, P.lazy(() => cborLength(P.string, cborValue))], // A text string (utf8)\n * array: [4, cborArrLength(P.lazy(() => cborValue))], // An array of data items\n * map: [5, P.lazy(() => cborArrLength(P.tuple([cborValue, cborValue])))], // A map of pairs of data items\n * tag: [6, P.tuple([cborUint, P.lazy(() => cborValue)] as const)], // A tagged data item (\"tag\") whose tag number\n * simple: [7, cborSimple], // Floating-point numbers and simple values, as well as the \"break\" stop code\n * });\n */\nexport function mappedTag(tagCoder, variants) {\n if (!isCoder(tagCoder))\n throw new Error(`mappedTag: invalid tag value ${tag}`);\n if (!isPlainObject(variants))\n throw new Error(`mappedTag: variants should be plain object`);\n const mapValue = {};\n const tagValue = {};\n for (const key in variants) {\n const v = variants[key];\n mapValue[key] = v[0];\n tagValue[key] = v[1];\n }\n return tag(map(tagCoder, mapValue), tagValue);\n}\n/**\n * Bitset of boolean values with optional padding.\n * @param names - An array of string names for the bitset values.\n * @param pad - Whether to pad the bitset to a multiple of 8 bits.\n * @returns CoderType representing the bitset.\n * @template Names\n * @example\n * const myBitset = P.bitset(['flag1', 'flag2', 'flag3', 'flag4'], true);\n */\nexport function bitset(names, pad = false) {\n if (typeof pad !== 'boolean')\n throw new Error(`bitset/pad: expected boolean, got ${typeof pad}`);\n if (!Array.isArray(names))\n throw new Error('bitset/names: expected array');\n for (const name of names) {\n if (typeof name !== 'string')\n throw new Error('bitset/names: expected array of strings');\n }\n return wrap({\n encodeStream: (w, value) => {\n for (let i = 0; i < names.length; i++)\n w.bits(+value[names[i]], 1);\n if (pad && names.length % 8)\n w.bits(0, 8 - (names.length % 8));\n },\n decodeStream: (r) => {\n const out = {};\n for (let i = 0; i < names.length; i++)\n out[names[i]] = !!r.bits(1);\n if (pad && names.length % 8)\n r.bits(8 - (names.length % 8));\n return out;\n },\n validate: (value) => {\n if (!isPlainObject(value))\n throw new Error(`bitset: invalid value ${value}`);\n for (const v of Object.values(value)) {\n if (typeof v !== 'boolean')\n throw new Error('expected boolean');\n }\n return value;\n },\n });\n}\n/** Padding function which always returns zero */\nexport const ZeroPad = (_) => 0;\nfunction padLength(blockSize, len) {\n if (len % blockSize === 0)\n return 0;\n return blockSize - (len % blockSize);\n}\n/**\n * Pads a CoderType with a specified block size and padding function on the left side.\n * @param blockSize - Block size for padding (positive safe integer).\n * @param inner - Inner CoderType to pad.\n * @param padFn - Padding function to use. If not provided, zero padding is used.\n * @returns CoderType representing the padded value.\n * @example\n * // Pad a U32BE with a block size of 4 and zero padding\n * const paddedU32BE = P.padLeft(4, P.U32BE);\n *\n * // Pad a string with a block size of 16 and custom padding\n * const paddedString = P.padLeft(16, P.string(P.U8), (i) => i + 1);\n */\nexport function padLeft(blockSize, inner, padFn) {\n if (!isNum(blockSize) || blockSize <= 0)\n throw new Error(`padLeft: wrong blockSize=${blockSize}`);\n if (!isCoder(inner))\n throw new Error(`padLeft: invalid inner value ${inner}`);\n if (padFn !== undefined && typeof padFn !== 'function')\n throw new Error(`padLeft: wrong padFn=${typeof padFn}`);\n const _padFn = padFn || ZeroPad;\n if (!inner.size)\n throw new Error('padLeft cannot have dynamic size');\n return wrap({\n size: inner.size + padLength(blockSize, inner.size),\n encodeStream: (w, value) => {\n const padBytes = padLength(blockSize, inner.size);\n for (let i = 0; i < padBytes; i++)\n w.byte(_padFn(i));\n inner.encodeStream(w, value);\n },\n decodeStream: (r) => {\n r.bytes(padLength(blockSize, inner.size));\n return inner.decodeStream(r);\n },\n });\n}\n/**\n * Pads a CoderType with a specified block size and padding function on the right side.\n * @param blockSize - Block size for padding (positive safe integer).\n * @param inner - Inner CoderType to pad.\n * @param padFn - Padding function to use. If not provided, zero padding is used.\n * @returns CoderType representing the padded value.\n * @example\n * // Pad a U16BE with a block size of 2 and zero padding\n * const paddedU16BE = P.padRight(2, P.U16BE);\n *\n * // Pad a bytes with a block size of 8 and custom padding\n * const paddedBytes = P.padRight(8, P.bytes(null), (i) => i + 1);\n */\nexport function padRight(blockSize, inner, padFn) {\n if (!isCoder(inner))\n throw new Error(`padRight: invalid inner value ${inner}`);\n if (!isNum(blockSize) || blockSize <= 0)\n throw new Error(`padLeft: wrong blockSize=${blockSize}`);\n if (padFn !== undefined && typeof padFn !== 'function')\n throw new Error(`padRight: wrong padFn=${typeof padFn}`);\n const _padFn = padFn || ZeroPad;\n return wrap({\n size: inner.size ? inner.size + padLength(blockSize, inner.size) : undefined,\n encodeStream: (w, value) => {\n const _w = w;\n const pos = _w.pos;\n inner.encodeStream(w, value);\n const padBytes = padLength(blockSize, _w.pos - pos);\n for (let i = 0; i < padBytes; i++)\n w.byte(_padFn(i));\n },\n decodeStream: (r) => {\n const start = r.pos;\n const res = inner.decodeStream(r);\n r.bytes(padLength(blockSize, r.pos - start));\n return res;\n },\n });\n}\n1;\n/**\n * Pointer to a value using a pointer CoderType and an inner CoderType.\n * Pointers are scoped, and the next pointer in the dereference chain is offset by the previous one.\n * By default (if no 'allowMultipleReads' in ReaderOpts is set) is safe, since\n * same region of memory cannot be read multiple times.\n * @param ptr - CoderType for the pointer value.\n * @param inner - CoderType for encoding/decoding the pointed value.\n * @param sized - Whether the pointer should have a fixed size.\n * @returns CoderType representing the pointer to the value.\n * @example\n * const pointerToU8 = P.pointer(P.U16BE, P.U8); // Pointer to a single U8 value\n */\nexport function pointer(ptr, inner, sized = false) {\n if (!isCoder(ptr))\n throw new Error(`pointer: invalid ptr value ${ptr}`);\n if (!isCoder(inner))\n throw new Error(`pointer: invalid inner value ${inner}`);\n if (typeof sized !== 'boolean')\n throw new Error(`pointer/sized: expected boolean, got ${typeof sized}`);\n if (!ptr.size)\n throw new Error('unsized pointer');\n return wrap({\n size: sized ? ptr.size : undefined,\n encodeStream: (w, value) => {\n const _w = w;\n const start = _w.pos;\n ptr.encodeStream(w, 0);\n _w.ptrs.push({ pos: start, ptr, buffer: inner.encode(value) });\n },\n decodeStream: (r) => {\n const ptrVal = ptr.decodeStream(r);\n r._enablePointers();\n return inner.decodeStream(r.offsetReader(ptrVal));\n },\n });\n}\n// Internal methods for test purposes only\nexport const _TEST = { _bitset: Bitset, _Reader, _Writer, Path };\n//# sourceMappingURL=index.js.map","import { schnorr, secp256k1 as secp } from '@noble/curves/secp256k1.js';\nimport { ripemd160 } from '@noble/hashes/legacy.js';\nimport { sha256 } from '@noble/hashes/sha2.js';\nimport { utils as packedUtils, U32LE } from 'micro-packed';\nconst Point = secp.ProjectivePoint;\nconst CURVE_ORDER = secp.CURVE.n;\nconst isBytes = packedUtils.isBytes;\nconst concatBytes = packedUtils.concatBytes;\nconst equalBytes = packedUtils.equalBytes;\nexport { concatBytes, equalBytes, isBytes, sha256 };\nexport const hash160 = (msg) => ripemd160(sha256(msg));\nexport const sha256x2 = (...msgs) => sha256(sha256(concatBytes(...msgs)));\nexport const randomPrivateKeyBytes = schnorr.utils.randomPrivateKey;\nexport const pubSchnorr = schnorr.getPublicKey;\nexport const pubECDSA = secp.getPublicKey;\n// low-r signature grinding. Used to reduce tx size by 1 byte.\n// noble/secp256k1 does not support the feature: it is not used outside of BTC.\n// We implement it manually, because in BTC it's common.\n// Not best way, but closest to bitcoin implementation (easier to check)\nconst hasLowR = (sig) => sig.r < CURVE_ORDER / 2n;\nexport function signECDSA(hash, privateKey, lowR = false) {\n let sig = secp.sign(hash, privateKey);\n if (lowR && !hasLowR(sig)) {\n const extraEntropy = new Uint8Array(32);\n let counter = 0;\n while (!hasLowR(sig)) {\n extraEntropy.set(U32LE.encode(counter++));\n sig = secp.sign(hash, privateKey, { extraEntropy });\n if (counter > 4294967295)\n throw new Error('lowR counter overflow: report the error');\n }\n }\n return sig.toDERRawBytes();\n}\nexport const signSchnorr = schnorr.sign;\nexport const tagSchnorr = schnorr.utils.taggedHash;\nexport var PubT;\n(function (PubT) {\n PubT[PubT[\"ecdsa\"] = 0] = \"ecdsa\";\n PubT[PubT[\"schnorr\"] = 1] = \"schnorr\";\n})(PubT || (PubT = {}));\nexport function validatePubkey(pub, type) {\n const len = pub.length;\n if (type === PubT.ecdsa) {\n if (len === 32)\n throw new Error('Expected non-Schnorr key');\n Point.fromHex(pub); // does assertValidity\n return pub;\n }\n else if (type === PubT.schnorr) {\n if (len !== 32)\n throw new Error('Expected 32-byte Schnorr key');\n schnorr.utils.lift_x(schnorr.utils.bytesToNumberBE(pub));\n return pub;\n }\n else {\n throw new Error('Unknown key type');\n }\n}\nexport function tapTweak(a, b) {\n const u = schnorr.utils;\n const t = u.taggedHash('TapTweak', a, b);\n const tn = u.bytesToNumberBE(t);\n if (tn >= CURVE_ORDER)\n throw new Error('tweak higher than curve order');\n return tn;\n}\nexport function taprootTweakPrivKey(privKey, merkleRoot = Uint8Array.of()) {\n const u = schnorr.utils;\n const seckey0 = u.bytesToNumberBE(privKey); // seckey0 = int_from_bytes(seckey0)\n const P = Point.fromPrivateKey(seckey0); // P = point_mul(G, seckey0)\n // seckey = seckey0 if has_even_y(P) else SECP256K1_ORDER - seckey0\n const seckey = P.hasEvenY() ? seckey0 : u.mod(-seckey0, CURVE_ORDER);\n const xP = u.pointToBytes(P);\n // t = int_from_bytes(tagged_hash(\"TapTweak\", bytes_from_int(x(P)) + h)); >= SECP256K1_ORDER check\n const t = tapTweak(xP, merkleRoot);\n // bytes_from_int((seckey + t) % SECP256K1_ORDER)\n return u.numberToBytesBE(u.mod(seckey + t, CURVE_ORDER), 32);\n}\nexport function taprootTweakPubkey(pubKey, h) {\n const u = schnorr.utils;\n const t = tapTweak(pubKey, h); // t = int_from_bytes(tagged_hash(\"TapTweak\", pubkey + h))\n const P = u.lift_x(u.bytesToNumberBE(pubKey)); // P = lift_x(int_from_bytes(pubkey))\n const Q = P.add(Point.fromPrivateKey(t)); // Q = point_add(P, point_mul(G, t))\n const parity = Q.hasEvenY() ? 0 : 1; // 0 if has_even_y(Q) else 1\n return [u.pointToBytes(Q), parity]; // bytes_from_int(x(Q))\n}\n// Another stupid decision, where lack of standard affects security.\n// Multisig needs to be generated with some key.\n// We are using approach from BIP 341/bitcoinjs-lib: SHA256(uncompressedDER(SECP256K1_GENERATOR_POINT))\n// It is possible to switch SECP256K1_GENERATOR_POINT with some random point;\n// but it's too complex to prove.\n// Also used by bitcoin-core and bitcoinjs-lib\nexport const TAPROOT_UNSPENDABLE_KEY = sha256(Point.BASE.toRawBytes(false));\nexport const NETWORK = {\n bech32: 'bc',\n pubKeyHash: 0x00,\n scriptHash: 0x05,\n wif: 0x80,\n};\nexport const TEST_NETWORK = {\n bech32: 'tb',\n pubKeyHash: 0x6f,\n scriptHash: 0xc4,\n wif: 0xef,\n};\n// Exported for tests, internal method\nexport function compareBytes(a, b) {\n if (!isBytes(a) || !isBytes(b))\n throw new Error(`cmp: wrong type a=${typeof a} b=${typeof b}`);\n // -1 -> a<b, 0 -> a==b, 1 -> a>b\n const len = Math.min(a.length, b.length);\n for (let i = 0; i < len; i++)\n if (a[i] != b[i])\n return Math.sign(a[i] - b[i]);\n return Math.sign(a.length - b.length);\n}\n//# sourceMappingURL=utils.js.map","import * as P from 'micro-packed';\nimport { isBytes } from \"./utils.js\";\nexport const MAX_SCRIPT_BYTE_LENGTH = 520;\n// prettier-ignore\nexport var OP;\n(function (OP) {\n OP[OP[\"OP_0\"] = 0] = \"OP_0\";\n OP[OP[\"PUSHDATA1\"] = 76] = \"PUSHDATA1\";\n OP[OP[\"PUSHDATA2\"] = 77] = \"PUSHDATA2\";\n OP[OP[\"PUSHDATA4\"] = 78] = \"PUSHDATA4\";\n OP[OP[\"1NEGATE\"] = 79] = \"1NEGATE\";\n OP[OP[\"RESERVED\"] = 80] = \"RESERVED\";\n OP[OP[\"OP_1\"] = 81] = \"OP_1\";\n OP[OP[\"OP_2\"] = 82] = \"OP_2\";\n OP[OP[\"OP_3\"] = 83] = \"OP_3\";\n OP[OP[\"OP_4\"] = 84] = \"OP_4\";\n OP[OP[\"OP_5\"] = 85] = \"OP_5\";\n OP[OP[\"OP_6\"] = 86] = \"OP_6\";\n OP[OP[\"OP_7\"] = 87] = \"OP_7\";\n OP[OP[\"OP_8\"] = 88] = \"OP_8\";\n OP[OP[\"OP_9\"] = 89] = \"OP_9\";\n OP[OP[\"OP_10\"] = 90] = \"OP_10\";\n OP[OP[\"OP_11\"] = 91] = \"OP_11\";\n OP[OP[\"OP_12\"] = 92] = \"OP_12\";\n OP[OP[\"OP_13\"] = 93] = \"OP_13\";\n OP[OP[\"OP_14\"] = 94] = \"OP_14\";\n OP[OP[\"OP_15\"] = 95] = \"OP_15\";\n OP[OP[\"OP_16\"] = 96] = \"OP_16\";\n // Control\n OP[OP[\"NOP\"] = 97] = \"NOP\";\n OP[OP[\"VER\"] = 98] = \"VER\";\n OP[OP[\"IF\"] = 99] = \"IF\";\n OP[OP[\"NOTIF\"] = 100] = \"NOTIF\";\n OP[OP[\"VERIF\"] = 101] = \"VERIF\";\n OP[OP[\"VERNOTIF\"] = 102] = \"VERNOTIF\";\n OP[OP[\"ELSE\"] = 103] = \"ELSE\";\n OP[OP[\"ENDIF\"] = 104] = \"ENDIF\";\n OP[OP[\"VERIFY\"] = 105] = \"VERIFY\";\n OP[OP[\"RETURN\"] = 106] = \"RETURN\";\n // Stack\n OP[OP[\"TOALTSTACK\"] = 107] = \"TOALTSTACK\";\n OP[OP[\"FROMALTSTACK\"] = 108] = \"FROMALTSTACK\";\n OP[OP[\"2DROP\"] = 109] = \"2DROP\";\n OP[OP[\"2DUP\"] = 110] = \"2DUP\";\n OP[OP[\"3DUP\"] = 111] = \"3DUP\";\n OP[OP[\"2OVER\"] = 112] = \"2OVER\";\n OP[OP[\"2ROT\"] = 113] = \"2ROT\";\n OP[OP[\"2SWAP\"] = 114] = \"2SWAP\";\n OP[OP[\"IFDUP\"] = 115] = \"IFDUP\";\n OP[OP[\"DEPTH\"] = 116] = \"DEPTH\";\n OP[OP[\"DROP\"] = 117] = \"DROP\";\n OP[OP[\"DUP\"] = 118] = \"DUP\";\n OP[OP[\"NIP\"] = 119] = \"NIP\";\n OP[OP[\"OVER\"] = 120] = \"OVER\";\n OP[OP[\"PICK\"] = 121] = \"PICK\";\n OP[OP[\"ROLL\"] = 122] = \"ROLL\";\n OP[OP[\"ROT\"] = 123] = \"ROT\";\n OP[OP[\"SWAP\"] = 124] = \"SWAP\";\n OP[OP[\"TUCK\"] = 125] = \"TUCK\";\n // Splice\n OP[OP[\"CAT\"] = 126] = \"CAT\";\n OP[OP[\"SUBSTR\"] = 127] = \"SUBSTR\";\n OP[OP[\"LEFT\"] = 128] = \"LEFT\";\n OP[OP[\"RIGHT\"] = 129] = \"RIGHT\";\n OP[OP[\"SIZE\"] = 130] = \"SIZE\";\n // Boolean logic\n OP[OP[\"INVERT\"] = 131] = \"INVERT\";\n OP[OP[\"AND\"] = 132] = \"AND\";\n OP[OP[\"OR\"] = 133] = \"OR\";\n OP[OP[\"XOR\"] = 134] = \"XOR\";\n OP[OP[\"EQUAL\"] = 135] = \"EQUAL\";\n OP[OP[\"EQUALVERIFY\"] = 136] = \"EQUALVERIFY\";\n OP[OP[\"RESERVED1\"] = 137] = \"RESERVED1\";\n OP[OP[\"RESERVED2\"] = 138] = \"RESERVED2\";\n // Numbers\n OP[OP[\"1ADD\"] = 139] = \"1ADD\";\n OP[OP[\"1SUB\"] = 140] = \"1SUB\";\n OP[OP[\"2MUL\"] = 141] = \"2MUL\";\n OP[OP[\"2DIV\"] = 142] = \"2DIV\";\n OP[OP[\"NEGATE\"] = 143] = \"NEGATE\";\n OP[OP[\"ABS\"] = 144] = \"ABS\";\n OP[OP[\"NOT\"] = 145] = \"NOT\";\n OP[OP[\"0NOTEQUAL\"] = 146] = \"0NOTEQUAL\";\n OP[OP[\"ADD\"] = 147] = \"ADD\";\n OP[OP[\"SUB\"] = 148] = \"SUB\";\n OP[OP[\"MUL\"] = 149] = \"MUL\";\n OP[OP[\"DIV\"] = 150] = \"DIV\";\n OP[OP[\"MOD\"] = 151] = \"MOD\";\n OP[OP[\"LSHIFT\"] = 152] = \"LSHIFT\";\n OP[OP[\"RSHIFT\"] = 153] = \"RSHIFT\";\n OP[OP[\"BOOLAND\"] = 154] = \"BOOLAND\";\n OP[OP[\"BOOLOR\"] = 155] = \"BOOLOR\";\n OP[OP[\"NUMEQUAL\"] = 156] = \"NUMEQUAL\";\n OP[OP[\"NUMEQUALVERIFY\"] = 157] = \"NUMEQUALVERIFY\";\n OP[OP[\"NUMNOTEQUAL\"] = 158] = \"NUMNOTEQUAL\";\n OP[OP[\"LESSTHAN\"] = 159] = \"LESSTHAN\";\n OP[OP[\"GREATERTHAN\"] = 160] = \"GREATERTHAN\";\n OP[OP[\"LESSTHANOREQUAL\"] = 161] = \"LESSTHANOREQUAL\";\n OP[OP[\"GREATERTHANOREQUAL\"] = 162] = \"GREATERTHANOREQUAL\";\n OP[OP[\"MIN\"] = 163] = \"MIN\";\n OP[OP[\"MAX\"] = 164] = \"MAX\";\n OP[OP[\"WITHIN\"] = 165] = \"WITHIN\";\n // Crypto\n OP[OP[\"RIPEMD160\"] = 166] = \"RIPEMD160\";\n OP[OP[\"SHA1\"] = 167] = \"SHA1\";\n OP[OP[\"SHA256\"] = 168] = \"SHA256\";\n OP[OP[\"HASH160\"] = 169] = \"HASH160\";\n OP[OP[\"HASH256\"] = 170] = \"HASH256\";\n OP[OP[\"CODESEPARATOR\"] = 171] = \"CODESEPARATOR\";\n OP[OP[\"CHECKSIG\"] = 172] = \"CHECKSIG\";\n OP[OP[\"CHECKSIGVERIFY\"] = 173] = \"CHECKSIGVERIFY\";\n OP[OP[\"CHECKMULTISIG\"] = 174] = \"CHECKMULTISIG\";\n OP[OP[\"CHECKMULTISIGVERIFY\"] = 175] = \"CHECKMULTISIGVERIFY\";\n // Expansion\n OP[OP[\"NOP1\"] = 176] = \"NOP1\";\n OP[OP[\"CHECKLOCKTIMEVERIFY\"] = 177] = \"CHECKLOCKTIMEVERIFY\";\n OP[OP[\"CHECKSEQUENCEVERIFY\"] = 178] = \"CHECKSEQUENCEVERIFY\";\n OP[OP[\"NOP4\"] = 179] = \"NOP4\";\n OP[OP[\"NOP5\"] = 180] = \"NOP5\";\n OP[OP[\"NOP6\"] = 181] = \"NOP6\";\n OP[OP[\"NOP7\"] = 182] = \"NOP7\";\n OP[OP[\"NOP8\"] = 183] = \"NOP8\";\n OP[OP[\"NOP9\"] = 184] = \"NOP9\";\n OP[OP[\"NOP10\"] = 185] = \"NOP10\";\n // BIP 342\n OP[OP[\"CHECKSIGADD\"] = 186] = \"CHECKSIGADD\";\n // Invalid\n OP[OP[\"INVALID\"] = 255] = \"INVALID\";\n})(OP || (OP = {}));\n// We can encode almost any number as ScriptNum, however, parsing will be a problem\n// since we can't know if buffer is a number or something else.\nexport function ScriptNum(bytesLimit = 6, forceMinimal = false) {\n return P.wrap({\n encodeStream: (w, value) => {\n if (value === 0n)\n return;\n const neg = value < 0;\n const val = BigInt(value);\n const nums = [];\n for (let abs = neg ? -val : val; abs; abs >>= 8n)\n nums.push(Number(abs & 0xffn));\n if (nums[nums.length - 1] >= 0x80)\n nums.push(neg ? 0x80 : 0);\n else if (neg)\n nums[nums.length - 1] |= 0x80;\n w.bytes(new Uint8Array(nums));\n },\n decodeStream: (r) => {\n const len = r.leftBytes;\n if (len > bytesLimit)\n throw new Error(`ScriptNum: number (${len}) bigger than limit=${bytesLimit}`);\n if (len === 0)\n return 0n;\n if (forceMinimal) {\n const data = r.bytes(len, true);\n // MSB is zero (without sign bit) -> not minimally encoded\n if ((data[data.length - 1] & 0x7f) === 0) {\n // exception\n if (len <= 1 || (data[data.length - 2] & 0x80) === 0)\n throw new Error('Non-minimally encoded ScriptNum');\n }\n }\n let last = 0;\n let res = 0n;\n for (let i = 0; i < len; ++i) {\n last = r.byte();\n res |= BigInt(last) << (8n * BigInt(i));\n }\n if (last >= 0x80) {\n res &= (2n ** BigInt(len * 8) - 1n) >> 1n;\n res = -res;\n }\n return res;\n },\n });\n}\nexport function OpToNum(op, bytesLimit = 4, forceMinimal = true) {\n if (typeof op === 'number')\n return op;\n if (isBytes(op)) {\n try {\n const val = ScriptNum(bytesLimit, forceMinimal).decode(op);\n if (val > Number.MAX_SAFE_INTEGER)\n return;\n return Number(val);\n }\n catch (e) {\n return;\n }\n }\n return;\n}\n// Converts script bytes to parsed script\n// 5221030000000000000000000000000000000000000000000000000000000000000001210300000000000000000000000000000000000000000000000000000000000000022103000000000000000000000000000000000000000000000000000000000000000353ae\n// =>\n// OP_2\n// 030000000000000000000000000000000000000000000000000000000000000001\n// 030000000000000000000000000000000000000000000000000000000000000002\n// 030000000000000000000000000000000000000000000000000000000000000003\n// OP_3\n// CHECKMULTISIG\nexport const Script = P.wrap({\n encodeStream: (w, value) => {\n for (let o of value) {\n if (typeof o === 'string') {\n if (OP[o] === undefined)\n throw new Error(`Unknown opcode=${o}`);\n w.byte(OP[o]);\n continue;\n }\n else if (typeof o === 'number') {\n if (o === 0x00) {\n w.byte(0x00);\n continue;\n }\n else if (1 <= o && o <= 16) {\n w.byte(OP.OP_1 - 1 + o);\n continue;\n }\n }\n // Encode big numbers\n if (typeof o === 'number')\n o = ScriptNum().encode(BigInt(o));\n if (!isBytes(o))\n throw new Error(`Wrong Script OP=${o} (${typeof o})`);\n // Bytes\n const len = o.length;\n if (len < OP.PUSHDATA1)\n w.byte(len);\n else if (len <= 0xff) {\n w.byte(OP.PUSHDATA1);\n w.byte(len);\n }\n else if (len <= 0xffff) {\n w.byte(OP.PUSHDATA2);\n w.bytes(P.U16LE.encode(len));\n }\n else {\n w.byte(OP.PUSHDATA4);\n w.bytes(P.U32LE.encode(len));\n }\n w.bytes(o);\n }\n },\n decodeStream: (r) => {\n const out = [];\n while (!r.isEnd()) {\n const cur = r.byte();\n // if 0 < cur < 78\n if (OP.OP_0 < cur && cur <= OP.PUSHDATA4) {\n let len;\n if (cur < OP.PUSHDATA1)\n len = cur;\n else if (cur === OP.PUSHDATA1)\n len = P.U8.decodeStream(r);\n else if (cur === OP.PUSHDATA2)\n len = P.U16LE.decodeStream(r);\n else if (cur === OP.PUSHDATA4)\n len = P.U32LE.decodeStream(r);\n else\n throw new Error('Should be not possible');\n out.push(r.bytes(len));\n }\n else if (cur === 0x00) {\n out.push(0);\n }\n else if (OP.OP_1 <= cur && cur <= OP.OP_16) {\n out.push(cur - (OP.OP_1 - 1));\n }\n else {\n const op = OP[cur];\n if (op === undefined)\n throw new Error(`Unknown opcode=${cur.toString(16)}`);\n out.push(op);\n }\n }\n return out;\n },\n});\n// BTC specific variable length integer encoding\n// https://en.bitcoin.it/wiki/Protocol_documentation#Variable_length_integer\nconst CSLimits = {\n 0xfd: [0xfd, 2, 253n, 65535n],\n 0xfe: [0xfe, 4, 65536n, 4294967295n],\n 0xff: [0xff, 8, 4294967296n, 18446744073709551615n],\n};\nexport const CompactSize = P.wrap({\n encodeStream: (w, value) => {\n if (typeof value === 'number')\n value = BigInt(value);\n if (0n <= value && value <= 252n)\n return w.byte(Number(value));\n for (const [flag, bytes, start, stop] of Object.values(CSLimits)) {\n if (start > value || value > stop)\n continue;\n w.byte(flag);\n for (let i = 0; i < bytes; i++)\n w.byte(Number((value >> (8n * BigInt(i))) & 0xffn));\n return;\n }\n throw w.err(`VarInt too big: ${value}`);\n },\n decodeStream: (r) => {\n const b0 = r.byte();\n if (b0 <= 0xfc)\n return BigInt(b0);\n const [_, bytes, start] = CSLimits[b0];\n let num = 0n;\n for (let i = 0; i < bytes; i++)\n num |= BigInt(r.byte()) << (8n * BigInt(i));\n if (num < start)\n throw r.err(`Wrong CompactSize(${8 * bytes})`);\n return num;\n },\n});\n// Same thing, but in number instead of bigint. Checks for safe integer inside\nexport const CompactSizeLen = P.apply(CompactSize, P.coders.numberBigint);\n// ui8a of size <CompactSize>\nexport const VarBytes = P.bytes(CompactSize);\n// SegWit v0 stack of witness buffers\nexport const RawWitness = P.array(CompactSizeLen, VarBytes);\n// Array of size <CompactSize>\nexport const BTCArray = (t) => P.array(CompactSize, t);\nexport const RawInput = P.struct({\n txid: P.bytes(32, true), // hash(prev_tx),\n index: P.U32LE, // output number of previous tx\n finalScriptSig: VarBytes, // btc merges input and output script, executes it. If ok = tx passes\n sequence: P.U32LE, // ?\n});\nexport const RawOutput = P.struct({ amount: P.U64LE, script: VarBytes });\n// https://en.bitcoin.it/wiki/Protocol_documentation#tx\nconst _RawTx = P.struct({\n version: P.I32LE,\n segwitFlag: P.flag(new Uint8Array([0x00, 0x01])),\n inputs: BTCArray(RawInput),\n outputs: BTCArray(RawOutput),\n witnesses: P.flagged('segwitFlag', P.array('inputs/length', RawWitness)),\n // < 500000000\tBlock number at which this transaction is unlocked\n // >= 500000000\tUNIX timestamp at which this transaction is unlocked\n // Handled as part of PSBTv2\n lockTime: P.U32LE,\n});\nfunction validateRawTx(tx) {\n if (tx.segwitFlag && tx.witnesses && !tx.witnesses.length)\n throw new Error('Segwit flag with empty witnesses array');\n return tx;\n}\nexport const RawTx = P.validate(_RawTx, validateRawTx);\n// Pre-SegWit serialization format (for PSBTv0)\nexport const RawOldTx = P.struct({\n version: P.I32LE,\n inputs: BTCArray(RawInput),\n outputs: BTCArray(RawOutput),\n lockTime: P.U32LE,\n});\n//# sourceMappingURL=script.js.map","import { hex } from '@scure/base';\nimport * as P from 'micro-packed';\nimport { CompactSize, CompactSizeLen, RawOldTx, RawOutput, RawTx, RawWitness, VarBytes, } from \"./script.js\";\nimport { compareBytes, equalBytes, PubT, validatePubkey } from \"./utils.js\";\n// PSBT BIP174, BIP370, BIP371\n// Can be 33 or 64 bytes\nconst PubKeyECDSA = P.validate(P.bytes(null), (pub) => validatePubkey(pub, PubT.ecdsa));\nconst PubKeySchnorr = P.validate(P.bytes(32), (pub) => validatePubkey(pub, PubT.schnorr));\nconst SignatureSchnorr = P.validate(P.bytes(null), (sig) => {\n if (sig.length !== 64 && sig.length !== 65)\n throw new Error('Schnorr signature should be 64 or 65 bytes long');\n return sig;\n});\nconst BIP32Der = P.struct({\n fingerprint: P.U32BE,\n path: P.array(null, P.U32LE),\n});\nconst TaprootBIP32Der = P.struct({\n hashes: P.array(CompactSizeLen, P.bytes(32)),\n der: BIP32Der,\n});\n// The 78 byte serialized extended public key as defined by BIP 32.\nconst GlobalXPUB = P.bytes(78);\nconst tapScriptSigKey = P.struct({ pubKey: PubKeySchnorr, leafHash: P.bytes(32) });\n// Complex structure for PSBT fields\n// <control byte with leaf version and parity bit> <internal key p> <C> <E> <AB>\nconst _TaprootControlBlock = P.struct({\n version: P.U8, // With parity :(\n internalKey: P.bytes(32),\n merklePath: P.array(null, P.bytes(32)),\n});\nexport const TaprootControlBlock = P.validate(_TaprootControlBlock, (cb) => {\n if (cb.merklePath.length > 128)\n throw new Error('TaprootControlBlock: merklePath should be of length 0..128 (inclusive)');\n return cb;\n});\n// {<8-bit uint depth> <8-bit uint leaf version> <compact size uint scriptlen> <bytes script>}*\nconst tapTree = P.array(null, P.struct({\n depth: P.U8,\n version: P.U8,\n script: VarBytes,\n}));\nconst BytesInf = P.bytes(null); // Bytes will conflict with Bytes type\nconst Bytes20 = P.bytes(20);\nconst Bytes32 = P.bytes(32);\n// versionsRequiringExclusing = !versionsAllowsInclusion (as set)\n// {name: [tag, keyCoder, valueCoder, versionsRequiringInclusion, versionsRequiringExclusing, versionsAllowsInclusion, silentIgnore]}\n// SilentIgnore: we use some v2 fields for v1 representation too, so we just clean them before serialize\n// Tables from BIP-0174 (https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki)\n// prettier-ignore\nexport const PSBTGlobal = {\n unsignedTx: [0x00, false, RawOldTx, [0], [0], false],\n xpub: [0x01, GlobalXPUB, BIP32Der, [], [0, 2], false],\n txVersion: [0x02, false, P.U32LE, [2], [2], false],\n fallbackLocktime: [0x03, false, P.U32LE, [], [2], false],\n inputCount: [0x04, false, CompactSizeLen, [2], [2], false],\n outputCount: [0x05, false, CompactSizeLen, [2], [2], false],\n txModifiable: [0x06, false, P.U8, [], [2], false], // TODO: bitfield\n version: [0xfb, false, P.U32LE, [], [0, 2], false],\n proprietary: [0xfc, BytesInf, BytesInf, [], [0, 2], false],\n};\n// prettier-ignore\nexport const PSBTInput = {\n nonWitnessUtxo: [0x00, false, RawTx, [], [0, 2], false],\n witnessUtxo: [0x01, false, RawOutput, [], [0, 2], false],\n partialSig: [0x02, PubKeyECDSA, BytesInf, [], [0, 2], false],\n sighashType: [0x03, false, P.U32LE, [], [0, 2], false],\n redeemScript: [0x04, false, BytesInf, [], [0, 2], false],\n witnessScript: [0x05, false, BytesInf, [], [0, 2], false],\n bip32Derivation: [0x06, PubKeyECDSA, BIP32Der, [], [0, 2], false],\n finalScriptSig: [0x07, false, BytesInf, [], [0, 2], false],\n finalScriptWitness: [0x08, false, RawWitness, [], [0, 2], false],\n porCommitment: [0x09, false, BytesInf, [], [0, 2], false],\n ripemd160: [0x0a, Bytes20, BytesInf, [], [0, 2], false],\n sha256: [0x0b, Bytes32, BytesInf, [], [0, 2], false],\n hash160: [0x0c, Bytes20, BytesInf, [], [0, 2], false],\n hash256: [0x0d, Bytes32, BytesInf, [], [0, 2], false],\n txid: [0x0e, false, Bytes32, [2], [2], true],\n index: [0x0f, false, P.U32LE, [2], [2], true],\n sequence: [0x10, false, P.U32LE, [], [2], true],\n requiredTimeLocktime: [0x11, false, P.U32LE, [], [2], false],\n requiredHeightLocktime: [0x12, false, P.U32LE, [], [2], false],\n tapKeySig: [0x13, false, SignatureSchnorr, [], [0, 2], false],\n tapScriptSig: [0x14, tapScriptSigKey, SignatureSchnorr, [], [0, 2], false],\n tapLeafScript: [0x15, TaprootControlBlock, BytesInf, [], [0, 2], false],\n tapBip32Derivation: [0x16, Bytes32, TaprootBIP32Der, [], [0, 2], false],\n tapInternalKey: [0x17, false, PubKeySchnorr, [], [0, 2], false],\n tapMerkleRoot: [0x18, false, Bytes32, [], [0, 2], false],\n proprietary: [0xfc, BytesInf, BytesInf, [], [0, 2], false],\n};\n// All other keys removed when finalizing\nexport const PSBTInputFinalKeys = [\n 'txid',\n 'sequence',\n 'index',\n 'witnessUtxo',\n 'nonWitnessUtxo',\n 'finalScriptSig',\n 'finalScriptWitness',\n 'unknown',\n];\n// Can be modified even on signed input\nexport const PSBTInputUnsignedKeys = [\n 'partialSig',\n 'finalScriptSig',\n 'finalScriptWitness',\n 'tapKeySig',\n 'tapScriptSig',\n];\n// prettier-ignore\nexport const PSBTOutput = {\n redeemScript: [0x00, false, BytesInf, [], [0, 2], false],\n witnessScript: [0x01, false, BytesInf, [], [0, 2], false],\n bip32Derivation: [0x02, PubKeyECDSA, BIP32Der, [], [0, 2], false],\n amount: [0x03, false, P.I64LE, [2], [2], true],\n script: [0x04, false, BytesInf, [2], [2], true],\n tapInternalKey: [0x05, false, PubKeySchnorr, [], [0, 2], false],\n tapTree: [0x06, false, tapTree, [], [0, 2], false],\n tapBip32Derivation: [0x07, PubKeySchnorr, TaprootBIP32Der, [], [0, 2], false],\n proprietary: [0xfc, BytesInf, BytesInf, [], [0, 2], false],\n};\n// Can be modified even on signed input\nexport const PSBTOutputUnsignedKeys = [];\nconst PSBTKeyPair = P.array(P.NULL, P.struct({\n // <key> := <keylen> <keytype> <keydata> WHERE keylen = len(keytype)+len(keydata)\n key: P.prefix(CompactSizeLen, P.struct({ type: CompactSizeLen, key: P.bytes(null) })),\n // <value> := <valuelen> <valuedata>\n value: P.bytes(CompactSizeLen),\n}));\nfunction PSBTKeyInfo(info) {\n const [type, kc, vc, reqInc, allowInc, silentIgnore] = info;\n return { type, kc, vc, reqInc, allowInc, silentIgnore };\n}\nconst PSBTUnknownKey = P.struct({ type: CompactSizeLen, key: P.bytes(null) });\n// Key cannot be 'unknown', value coder cannot be array for elements with empty key\nfunction PSBTKeyMap(psbtEnum) {\n // -> Record<type, [keyName, ...coders]>\n const byType = {};\n for (const k in psbtEnum) {\n const [num, kc, vc] = psbtEnum[k];\n byType[num] = [k, kc, vc];\n }\n return P.wrap({\n encodeStream: (w, value) => {\n let out = [];\n // Because we use order of psbtEnum, keymap is sorted here\n for (const name in psbtEnum) {\n const val = value[name];\n if (val === undefined)\n continue;\n const [type, kc, vc] = psbtEnum[name];\n if (!kc) {\n out.push({ key: { type, key: P.EMPTY }, value: vc.encode(val) });\n }\n else {\n // Low level interface, returns keys as is (with duplicates). Useful for debug\n const kv = val.map(([k, v]) => [\n kc.encode(k),\n vc.encode(v),\n ]);\n // sort by keys\n kv.sort((a, b) => compareBytes(a[0], b[0]));\n for (const [key, value] of kv)\n out.push({ key: { key, type }, value });\n }\n }\n if (value.unknown) {\n value.unknown.sort((a, b) => compareBytes(a[0].key, b[0].key));\n for (const [k, v] of value.unknown)\n out.push({ key: k, value: v });\n }\n PSBTKeyPair.encodeStream(w, out);\n },\n decodeStream: (r) => {\n const raw = PSBTKeyPair.decodeStream(r);\n const out = {};\n const noKey = {};\n for (const elm of raw) {\n let name = 'unknown';\n let key = elm.key.key;\n let value = elm.value;\n if (byType[elm.key.type]) {\n const [_name, kc, vc] = byType[elm.key.type];\n name = _name;\n if (!kc && key.length) {\n throw new Error(`PSBT: Non-empty key for ${name} (key=${hex.encode(key)} value=${hex.encode(value)}`);\n }\n key = kc ? kc.decode(key) : undefined;\n value = vc.decode(value);\n if (!kc) {\n if (out[name])\n throw new Error(`PSBT: Same keys: ${name} (key=${key} value=${value})`);\n out[name] = value;\n noKey[name] = true;\n continue;\n }\n }\n else {\n // For unknown: add key type inside key\n key = { type: elm.key.type, key: elm.key.key };\n }\n // Only keyed elements at this point\n if (noKey[name])\n throw new Error(`PSBT: Key type with empty key and no key=${name} val=${value}`);\n if (!out[name])\n out[name] = [];\n out[name].push([key, value]);\n }\n return out;\n },\n });\n}\nexport const PSBTInputCoder = P.validate(PSBTKeyMap(PSBTInput), (i) => {\n if (i.finalScriptWitness && !i.finalScriptWitness.length)\n throw new Error('validateInput: empty finalScriptWitness');\n //if (i.finalScriptSig && !i.finalScriptSig.length) throw new Error('validateInput: empty finalScriptSig');\n if (i.partialSig && !i.partialSig.length)\n throw new Error('Empty partialSig');\n if (i.partialSig)\n for (const [k] of i.partialSig)\n validatePubkey(k, PubT.ecdsa);\n if (i.bip32Derivation)\n for (const [k] of i.bip32Derivation)\n validatePubkey(k, PubT.ecdsa);\n // Locktime = unsigned little endian integer greater than or equal to 500000000 representing\n if (i.requiredTimeLocktime !== undefined && i.requiredTimeLocktime < 500000000)\n throw new Error(`validateInput: wrong timeLocktime=${i.requiredTimeLocktime}`);\n // unsigned little endian integer greater than 0 and less than 500000000\n if (i.requiredHeightLocktime !== undefined &&\n (i.requiredHeightLocktime <= 0 || i.requiredHeightLocktime >= 500000000))\n throw new Error(`validateInput: wrong heighLocktime=${i.requiredHeightLocktime}`);\n if (i.tapLeafScript) {\n // tap leaf version appears here twice: in control block and at the end of script\n for (const [k, v] of i.tapLeafScript) {\n if ((k.version & 254) !== v[v.length - 1])\n throw new Error('validateInput: tapLeafScript version mimatch');\n if (v[v.length - 1] & 1)\n throw new Error('validateInput: tapLeafScript version has parity bit!');\n }\n }\n return i;\n});\nexport const PSBTOutputCoder = P.validate(PSBTKeyMap(PSBTOutput), (o) => {\n if (o.bip32Derivation)\n for (const [k] of o.bip32Derivation)\n validatePubkey(k, PubT.ecdsa);\n return o;\n});\nconst PSBTGlobalCoder = P.validate(PSBTKeyMap(PSBTGlobal), (g) => {\n const version = g.version || 0;\n if (version === 0) {\n if (!g.unsignedTx)\n throw new Error('PSBTv0: missing unsignedTx');\n for (const inp of g.unsignedTx.inputs)\n if (inp.finalScriptSig && inp.finalScriptSig.length)\n throw new Error('PSBTv0: input scriptSig found in unsignedTx');\n }\n return g;\n});\nexport const _RawPSBTV0 = P.struct({\n magic: P.magic(P.string(new Uint8Array([0xff])), 'psbt'),\n global: PSBTGlobalCoder,\n inputs: P.array('global/unsignedTx/inputs/length', PSBTInputCoder),\n outputs: P.array(null, PSBTOutputCoder),\n});\nexport const _RawPSBTV2 = P.struct({\n magic: P.magic(P.string(new Uint8Array([0xff])), 'psbt'),\n global: PSBTGlobalCoder,\n inputs: P.array('global/inputCount', PSBTInputCoder),\n outputs: P.array('global/outputCount', PSBTOutputCoder),\n});\nexport const _DebugPSBT = P.struct({\n magic: P.magic(P.string(new Uint8Array([0xff])), 'psbt'),\n items: P.array(null, P.apply(P.array(P.NULL, P.tuple([P.hex(CompactSizeLen), P.bytes(CompactSize)])), P.coders.dict())),\n});\nfunction validatePSBTFields(version, info, lst) {\n for (const k in lst) {\n if (k === 'unknown')\n continue;\n if (!info[k])\n continue;\n const { allowInc } = PSBTKeyInfo(info[k]);\n if (!allowInc.includes(version))\n throw new Error(`PSBTv${version}: field ${k} is not allowed`);\n }\n for (const k in info) {\n const { reqInc } = PSBTKeyInfo(info[k]);\n if (reqInc.includes(version) && lst[k] === undefined)\n throw new Error(`PSBTv${version}: missing required field ${k}`);\n }\n}\nexport function cleanPSBTFields(version, info, lst) {\n const out = {};\n for (const _k in lst) {\n const k = _k;\n if (k !== 'unknown') {\n if (!info[k])\n continue;\n const { allowInc, silentIgnore } = PSBTKeyInfo(info[k]);\n if (!allowInc.includes(version)) {\n if (silentIgnore)\n continue;\n throw new Error(`Failed to serialize in PSBTv${version}: ${k} but versions allows inclusion=${allowInc}`);\n }\n }\n out[k] = lst[k];\n }\n return out;\n}\nfunction validatePSBT(tx) {\n const version = (tx && tx.global && tx.global.version) || 0;\n validatePSBTFields(version, PSBTGlobal, tx.global);\n for (const i of tx.inputs)\n validatePSBTFields(version, PSBTInput, i);\n for (const o of tx.outputs)\n validatePSBTFields(version, PSBTOutput, o);\n // We allow only one empty element at the end of map (compat with bitcoinjs-lib bug)\n const inputCount = !version ? tx.global.unsignedTx.inputs.length : tx.global.inputCount;\n if (tx.inputs.length < inputCount)\n throw new Error('Not enough inputs');\n const inputsLeft = tx.inputs.slice(inputCount);\n if (inputsLeft.length > 1 || (inputsLeft.length && Object.keys(inputsLeft[0]).length))\n throw new Error(`Unexpected inputs left in tx=${inputsLeft}`);\n // Same for inputs\n const outputCount = !version ? tx.global.unsignedTx.outputs.length : tx.global.outputCount;\n if (tx.outputs.length < outputCount)\n throw new Error('Not outputs inputs');\n const outputsLeft = tx.outputs.slice(outputCount);\n if (outputsLeft.length > 1 || (outputsLeft.length && Object.keys(outputsLeft[0]).length))\n throw new Error(`Unexpected outputs left in tx=${outputsLeft}`);\n return tx;\n}\nexport function mergeKeyMap(psbtEnum, val, cur, allowedFields, allowUnknown) {\n const res = { ...cur, ...val };\n // All arguments can be provided as hex\n for (const k in psbtEnum) {\n const key = k;\n const [_, kC, vC] = psbtEnum[key];\n const cannotChange = allowedFields && !allowedFields.includes(k);\n if (val[k] === undefined && k in val) {\n if (cannotChange)\n throw new Error(`Cannot remove signed field=${k}`);\n delete res[k];\n }\n else if (kC) {\n const oldKV = (cur && cur[k] ? cur[k] : []);\n let newKV = val[key];\n if (newKV) {\n if (!Array.isArray(newKV))\n throw new Error(`keyMap(${k}): KV pairs should be [k, v][]`);\n // Decode hex in k-v\n newKV = newKV.map((val) => {\n if (val.length !== 2)\n throw new Error(`keyMap(${k}): KV pairs should be [k, v][]`);\n return [\n typeof val[0] === 'string' ? kC.decode(hex.decode(val[0])) : val[0],\n typeof val[1] === 'string' ? vC.decode(hex.decode(val[1])) : val[1],\n ];\n });\n const map = {};\n const add = (kStr, k, v) => {\n if (map[kStr] === undefined) {\n map[kStr] = [k, v];\n return;\n }\n const oldVal = hex.encode(vC.encode(map[kStr][1]));\n const newVal = hex.encode(vC.encode(v));\n if (oldVal !== newVal)\n throw new Error(`keyMap(${key}): same key=${kStr} oldVal=${oldVal} newVal=${newVal}`);\n };\n for (const [k, v] of oldKV) {\n const kStr = hex.encode(kC.encode(k));\n add(kStr, k, v);\n }\n for (const [k, v] of newKV) {\n const kStr = hex.encode(kC.encode(k));\n // undefined removes previous value\n if (v === undefined) {\n if (cannotChange)\n throw new Error(`Cannot remove signed field=${key}/${k}`);\n delete map[kStr];\n }\n else\n add(kStr, k, v);\n }\n res[key] = Object.values(map);\n }\n }\n else if (typeof res[k] === 'string') {\n res[k] = vC.decode(hex.decode(res[k]));\n }\n else if (cannotChange && k in val && cur && cur[k] !== undefined) {\n if (!equalBytes(vC.encode(val[k]), vC.encode(cur[k])))\n throw new Error(`Cannot change signed field=${k}`);\n }\n }\n // Remove unknown keys except the \"unknown\" array if allowUnknown is true\n for (const k in res) {\n if (!psbtEnum[k]) {\n if (allowUnknown && k === 'unknown')\n continue;\n delete res[k];\n }\n }\n return res;\n}\nexport const RawPSBTV0 = P.validate(_RawPSBTV0, validatePSBT);\nexport const RawPSBTV2 = P.validate(_RawPSBTV2, validatePSBT);\n//# sourceMappingURL=psbt.js.map","import { bech32, bech32m, createBase58check, hex } from '@scure/base';\nimport * as P from 'micro-packed';\nimport { TaprootControlBlock } from \"./psbt.js\";\nimport { OpToNum, Script, VarBytes } from \"./script.js\";\nimport * as u from \"./utils.js\";\nimport { NETWORK } from \"./utils.js\";\nconst OutP2A = {\n encode(from) {\n if (from.length !== 2 || from[0] !== 1 || !u.isBytes(from[1]) || hex.encode(from[1]) !== '4e73')\n return;\n return { type: 'p2a', script: Script.encode(from) };\n },\n decode: (to) => {\n if (to.type !== 'p2a')\n return;\n return [1, hex.decode('4e73')];\n },\n};\nfunction isValidPubkey(pub, type) {\n try {\n u.validatePubkey(pub, type);\n return true;\n }\n catch (e) {\n return false;\n }\n}\nconst OutPK = {\n encode(from) {\n if (from.length !== 2 ||\n !u.isBytes(from[0]) ||\n !isValidPubkey(from[0], u.PubT.ecdsa) ||\n from[1] !== 'CHECKSIG')\n return;\n return { type: 'pk', pubkey: from[0] };\n },\n decode: (to) => (to.type === 'pk' ? [to.pubkey, 'CHECKSIG'] : undefined),\n};\nconst OutPKH = {\n encode(from) {\n if (from.length !== 5 || from[0] !== 'DUP' || from[1] !== 'HASH160' || !u.isBytes(from[2]))\n return;\n if (from[3] !== 'EQUALVERIFY' || from[4] !== 'CHECKSIG')\n return;\n return { type: 'pkh', hash: from[2] };\n },\n decode: (to) => to.type === 'pkh' ? ['DUP', 'HASH160', to.hash, 'EQUALVERIFY', 'CHECKSIG'] : undefined,\n};\nconst OutSH = {\n encode(from) {\n if (from.length !== 3 || from[0] !== 'HASH160' || !u.isBytes(from[1]) || from[2] !== 'EQUAL')\n return;\n return { type: 'sh', hash: from[1] };\n },\n decode: (to) => to.type === 'sh' ? ['HASH160', to.hash, 'EQUAL'] : undefined,\n};\nconst OutWSH = {\n encode(from) {\n if (from.length !== 2 || from[0] !== 0 || !u.isBytes(from[1]))\n return;\n if (from[1].length !== 32)\n return;\n return { type: 'wsh', hash: from[1] };\n },\n decode: (to) => (to.type === 'wsh' ? [0, to.hash] : undefined),\n};\nconst OutWPKH = {\n encode(from) {\n if (from.length !== 2 || from[0] !== 0 || !u.isBytes(from[1]))\n return;\n if (from[1].length !== 20)\n return;\n return { type: 'wpkh', hash: from[1] };\n },\n decode: (to) => (to.type === 'wpkh' ? [0, to.hash] : undefined),\n};\nconst OutMS = {\n encode(from) {\n const last = from.length - 1;\n if (from[last] !== 'CHECKMULTISIG')\n return;\n const m = from[0];\n const n = from[last - 1];\n if (typeof m !== 'number' || typeof n !== 'number')\n return;\n const pubkeys = from.slice(1, -2);\n if (n !== pubkeys.length)\n return;\n for (const pub of pubkeys)\n if (!u.isBytes(pub))\n return;\n return { type: 'ms', m, pubkeys: pubkeys }; // we don't need n, since it is the same as pubkeys\n },\n // checkmultisig(n, ..pubkeys, m)\n decode: (to) => to.type === 'ms' ? [to.m, ...to.pubkeys, to.pubkeys.length, 'CHECKMULTISIG'] : undefined,\n};\nconst OutTR = {\n encode(from) {\n if (from.length !== 2 || from[0] !== 1 || !u.isBytes(from[1]))\n return;\n return { type: 'tr', pubkey: from[1] };\n },\n decode: (to) => (to.type === 'tr' ? [1, to.pubkey] : undefined),\n};\nconst OutTRNS = {\n encode(from) {\n const last = from.length - 1;\n if (from[last] !== 'CHECKSIG')\n return;\n const pubkeys = [];\n // On error return, since it can be different script\n for (let i = 0; i < last; i++) {\n const elm = from[i];\n if (i & 1) {\n if (elm !== 'CHECKSIGVERIFY' || i === last - 1)\n return;\n continue;\n }\n if (!u.isBytes(elm))\n return;\n pubkeys.push(elm);\n }\n return { type: 'tr_ns', pubkeys };\n },\n decode: (to) => {\n if (to.type !== 'tr_ns')\n return;\n const out = [];\n for (let i = 0; i < to.pubkeys.length - 1; i++)\n out.push(to.pubkeys[i], 'CHECKSIGVERIFY');\n out.push(to.pubkeys[to.pubkeys.length - 1], 'CHECKSIG');\n return out;\n },\n};\nconst OutTRMS = {\n encode(from) {\n const last = from.length - 1;\n if (from[last] !== 'NUMEQUAL' || from[1] !== 'CHECKSIG')\n return;\n const pubkeys = [];\n const m = OpToNum(from[last - 1]);\n if (typeof m !== 'number')\n return;\n for (let i = 0; i < last - 1; i++) {\n const elm = from[i];\n if (i & 1) {\n if (elm !== (i === 1 ? 'CHECKSIG' : 'CHECKSIGADD'))\n throw new Error('OutScript.encode/tr_ms: wrong element');\n continue;\n }\n if (!u.isBytes(elm))\n throw new Error('OutScript.encode/tr_ms: wrong key element');\n pubkeys.push(elm);\n }\n return { type: 'tr_ms', pubkeys, m };\n },\n decode: (to) => {\n if (to.type !== 'tr_ms')\n return;\n const out = [to.pubkeys[0], 'CHECKSIG'];\n for (let i = 1; i < to.pubkeys.length; i++)\n out.push(to.pubkeys[i], 'CHECKSIGADD');\n out.push(to.m, 'NUMEQUAL');\n return out;\n },\n};\nconst OutUnknown = {\n encode(from) {\n return { type: 'unknown', script: Script.encode(from) };\n },\n decode: (to) => to.type === 'unknown' ? Script.decode(to.script) : undefined,\n};\n// /Payments\nconst OutScripts = [\n OutP2A,\n OutPK,\n OutPKH,\n OutSH,\n OutWSH,\n OutWPKH,\n OutMS,\n OutTR,\n OutTRNS,\n OutTRMS,\n OutUnknown,\n];\n// TODO: we can support user supplied output scripts now\n// - addOutScript\n// - removeOutScript\n// - We can do that as log we modify array in-place\n// - Actually is very hard, since there is sign/finalize logic\nconst _OutScript = P.apply(Script, P.coders.match(OutScripts));\n// We can validate this once, because of packed & coders\nexport const OutScript = P.validate(_OutScript, (i) => {\n if (i.type === 'pk' && !isValidPubkey(i.pubkey, u.PubT.ecdsa))\n throw new Error('OutScript/pk: wrong key');\n if ((i.type === 'pkh' || i.type === 'sh' || i.type === 'wpkh') &&\n (!u.isBytes(i.hash) || i.hash.length !== 20))\n throw new Error(`OutScript/${i.type}: wrong hash`);\n if (i.type === 'wsh' && (!u.isBytes(i.hash) || i.hash.length !== 32))\n throw new Error(`OutScript/wsh: wrong hash`);\n if (i.type === 'tr' && (!u.isBytes(i.pubkey) || !isValidPubkey(i.pubkey, u.PubT.schnorr)))\n throw new Error('OutScript/tr: wrong taproot public key');\n if (i.type === 'ms' || i.type === 'tr_ns' || i.type === 'tr_ms')\n if (!Array.isArray(i.pubkeys))\n throw new Error('OutScript/multisig: wrong pubkeys array');\n if (i.type === 'ms') {\n const n = i.pubkeys.length;\n for (const p of i.pubkeys)\n if (!isValidPubkey(p, u.PubT.ecdsa))\n throw new Error('OutScript/multisig: wrong pubkey');\n if (i.m <= 0 || n > 16 || i.m > n)\n throw new Error('OutScript/multisig: invalid params');\n }\n if (i.type === 'tr_ns' || i.type === 'tr_ms') {\n for (const p of i.pubkeys)\n if (!isValidPubkey(p, u.PubT.schnorr))\n throw new Error(`OutScript/${i.type}: wrong pubkey`);\n }\n if (i.type === 'tr_ms') {\n const n = i.pubkeys.length;\n if (i.m <= 0 || n > 999 || i.m > n)\n throw new Error('OutScript/tr_ms: invalid params');\n }\n return i;\n});\n// Basic sanity check for scripts\nfunction checkWSH(s, witnessScript) {\n if (!u.equalBytes(s.hash, u.sha256(witnessScript)))\n throw new Error('checkScript: wsh wrong witnessScript hash');\n const w = OutScript.decode(witnessScript);\n if (w.type === 'tr' || w.type === 'tr_ns' || w.type === 'tr_ms')\n throw new Error(`checkScript: P2${w.type} cannot be wrapped in P2SH`);\n if (w.type === 'wpkh' || w.type === 'sh')\n throw new Error(`checkScript: P2${w.type} cannot be wrapped in P2WSH`);\n}\nexport function checkScript(script, redeemScript, witnessScript) {\n if (script) {\n const s = OutScript.decode(script);\n // ms||pk maybe work, but there will be no address, hard to spend\n if (s.type === 'tr_ns' || s.type === 'tr_ms' || s.type === 'ms' || s.type == 'pk')\n throw new Error(`checkScript: non-wrapped ${s.type}`);\n if (s.type === 'sh' && redeemScript) {\n if (!u.equalBytes(s.hash, u.hash160(redeemScript)))\n throw new Error('checkScript: sh wrong redeemScript hash');\n const r = OutScript.decode(redeemScript);\n if (r.type === 'tr' || r.type === 'tr_ns' || r.type === 'tr_ms')\n throw new Error(`checkScript: P2${r.type} cannot be wrapped in P2SH`);\n // Not sure if this unspendable, but we cannot represent this via PSBT\n if (r.type === 'sh')\n throw new Error('checkScript: P2SH cannot be wrapped in P2SH');\n }\n if (s.type === 'wsh' && witnessScript)\n checkWSH(s, witnessScript);\n }\n if (redeemScript) {\n const r = OutScript.decode(redeemScript);\n if (r.type === 'wsh' && witnessScript)\n checkWSH(r, witnessScript);\n }\n}\nfunction uniqPubkey(pubkeys) {\n const map = {};\n for (const pub of pubkeys) {\n const key = hex.encode(pub);\n if (map[key])\n throw new Error(`Multisig: non-uniq pubkey: ${pubkeys.map(hex.encode)}`);\n map[key] = true;\n }\n}\nexport const p2pk = (pubkey, _network = NETWORK) => {\n // network is unused\n if (!isValidPubkey(pubkey, u.PubT.ecdsa))\n throw new Error('P2PK: invalid publicKey');\n return { type: 'pk', script: OutScript.encode({ type: 'pk', pubkey }) };\n};\nexport const p2pkh = (publicKey, network = NETWORK) => {\n if (!isValidPubkey(publicKey, u.PubT.ecdsa))\n throw new Error('P2PKH: invalid publicKey');\n const hash = u.hash160(publicKey);\n return {\n type: 'pkh',\n script: OutScript.encode({ type: 'pkh', hash }),\n address: Address(network).encode({ type: 'pkh', hash }),\n hash,\n };\n};\nexport const p2sh = (child, network = NETWORK) => {\n // It is already tested inside noble-hashes and checkScript\n const cs = child.script;\n if (!u.isBytes(cs))\n throw new Error(`Wrong script: ${typeof child.script}, expected Uint8Array`);\n const hash = u.hash160(cs);\n const script = OutScript.encode({ type: 'sh', hash });\n checkScript(script, cs, child.witnessScript);\n if (child.witnessScript) {\n return {\n type: 'sh',\n redeemScript: cs,\n script: OutScript.encode({ type: 'sh', hash }),\n address: Address(network).encode({ type: 'sh', hash }),\n hash,\n witnessScript: child.witnessScript,\n };\n }\n else {\n return {\n type: 'sh',\n redeemScript: cs,\n script: OutScript.encode({ type: 'sh', hash }),\n address: Address(network).encode({ type: 'sh', hash }),\n hash,\n };\n }\n};\nexport const p2wsh = (child, network = NETWORK) => {\n const cs = child.script;\n if (!u.isBytes(cs))\n throw new Error(`Wrong script: ${typeof cs}, expected Uint8Array`);\n const hash = u.sha256(cs);\n const script = OutScript.encode({ type: 'wsh', hash });\n checkScript(script, undefined, cs);\n return {\n type: 'wsh',\n witnessScript: cs,\n script: OutScript.encode({ type: 'wsh', hash }),\n address: Address(network).encode({ type: 'wsh', hash }),\n hash,\n };\n};\nexport const p2wpkh = (publicKey, network = NETWORK) => {\n if (!isValidPubkey(publicKey, u.PubT.ecdsa))\n throw new Error('P2WPKH: invalid publicKey');\n if (publicKey.length === 65)\n throw new Error('P2WPKH: uncompressed public key');\n const hash = u.hash160(publicKey);\n return {\n type: 'wpkh',\n script: OutScript.encode({ type: 'wpkh', hash }),\n address: Address(network).encode({ type: 'wpkh', hash }),\n hash,\n };\n};\nexport const p2ms = (m, pubkeys, allowSamePubkeys = false) => {\n if (!allowSamePubkeys)\n uniqPubkey(pubkeys);\n return {\n type: 'ms',\n script: OutScript.encode({ type: 'ms', pubkeys, m }),\n };\n};\nfunction checkTaprootScript(script, internalPubKey, allowUnknownOutputs = false, customScripts) {\n const out = OutScript.decode(script);\n if (out.type === 'unknown') {\n // NOTE: this check should be before allowUnknownOutputs, otherwise it will\n // disable custom. All custom scripts for taproot should have prefix 'tr_'\n if (customScripts) {\n const cs = P.apply(Script, P.coders.match(customScripts));\n const c = cs.decode(script);\n if (c !== undefined) {\n if (typeof c.type !== 'string' || !c.type.startsWith('tr_'))\n throw new Error(`P2TR: invalid custom type=${c.type}`);\n return;\n }\n }\n if (allowUnknownOutputs)\n return;\n }\n if (!['tr_ns', 'tr_ms'].includes(out.type))\n throw new Error(`P2TR: invalid leaf script=${out.type}`);\n const outms = out;\n if (!allowUnknownOutputs && outms.pubkeys) {\n for (const p of outms.pubkeys) {\n if (u.equalBytes(p, u.TAPROOT_UNSPENDABLE_KEY))\n throw new Error('Unspendable taproot key in leaf script');\n // It's likely a mistake at this point:\n // 1. p2tr(A, p2tr_ns(2, [A, B])) == p2tr(A, p2tr_pk(B)) (A or B key)\n // but will take more space and fees.\n // 2. For multi-sig p2tr(A, p2tr_ns(2, [A, B, C])) it's probably a security issue:\n // User creates 2 of 3 multisig of keys [A, B, C],\n // but key A always can spend whole output without signatures from other keys.\n // p2tr(A, p2tr_ns(2, [B, C, D])) is ok: A or (B and C) or (B and D) or (C and D)\n if (u.equalBytes(p, internalPubKey)) {\n throw new Error('Using P2TR with leaf script with same key as internal key is not supported');\n }\n }\n }\n}\n// Helper for generating binary tree from list, with weights\nexport function taprootListToTree(taprootList) {\n // Clone input in order to not corrupt it\n const lst = Array.from(taprootList);\n // We have at least 2 elements => can create branch\n while (lst.length >= 2) {\n // Sort: elements with smallest weight are in the end of queue\n lst.sort((a, b) => (b.weight || 1) - (a.weight || 1));\n const b = lst.pop();\n const a = lst.pop();\n const weight = (a?.weight || 1) + (b?.weight || 1);\n lst.push({\n weight,\n // Unwrap children array\n // TODO: Very hard to remove any here\n childs: [a?.childs || a, b?.childs || b],\n });\n }\n // At this point there is always 1 element in lst\n const last = lst[0];\n return (last?.childs || last);\n}\nfunction taprootAddPath(tree, path = []) {\n if (!tree)\n throw new Error(`taprootAddPath: empty tree`);\n if (tree.type === 'leaf')\n return { ...tree, path };\n if (tree.type !== 'branch')\n throw new Error(`taprootAddPath: wrong type=${tree}`);\n return {\n ...tree,\n path,\n // Left element has right hash in path and otherwise\n left: taprootAddPath(tree.left, [tree.right.hash, ...path]),\n right: taprootAddPath(tree.right, [tree.left.hash, ...path]),\n };\n}\nfunction taprootWalkTree(tree) {\n if (!tree)\n throw new Error(`taprootAddPath: empty tree`);\n if (tree.type === 'leaf')\n return [tree];\n if (tree.type !== 'branch')\n throw new Error(`taprootWalkTree: wrong type=${tree}`);\n return [...taprootWalkTree(tree.left), ...taprootWalkTree(tree.right)];\n}\nfunction taprootHashTree(tree, internalPubKey, allowUnknownOutputs = false, customScripts) {\n if (!tree)\n throw new Error('taprootHashTree: empty tree');\n if (Array.isArray(tree) && tree.length === 1)\n tree = tree[0];\n // Terminal node (leaf)\n if (!Array.isArray(tree)) {\n const { leafVersion: version, script: leafScript } = tree;\n // Earliest tree walk where we can validate tapScripts\n if (tree.tapLeafScript || (tree.tapMerkleRoot && !u.equalBytes(tree.tapMerkleRoot, P.EMPTY)))\n throw new Error('P2TR: tapRoot leafScript cannot have tree');\n const script = typeof leafScript === 'string' ? hex.decode(leafScript) : leafScript;\n if (!u.isBytes(script))\n throw new Error(`checkScript: wrong script type=${script}`);\n checkTaprootScript(script, internalPubKey, allowUnknownOutputs, customScripts);\n return {\n type: 'leaf',\n version,\n script,\n hash: tapLeafHash(script, version),\n };\n }\n // If tree / branch is not binary tree, convert it\n if (tree.length !== 2)\n tree = taprootListToTree(tree);\n if (tree.length !== 2)\n throw new Error('hashTree: non binary tree!');\n // branch\n // Both nodes should exist\n const left = taprootHashTree(tree[0], internalPubKey, allowUnknownOutputs, customScripts);\n const right = taprootHashTree(tree[1], internalPubKey, allowUnknownOutputs, customScripts);\n // We cannot swap left/right here, since it will change structure of tree\n let [lH, rH] = [left.hash, right.hash];\n if (u.compareBytes(rH, lH) === -1)\n [lH, rH] = [rH, lH];\n return { type: 'branch', left, right, hash: u.tagSchnorr('TapBranch', lH, rH) };\n}\nexport const TAP_LEAF_VERSION = 0xc0;\nexport const tapLeafHash = (script, version = TAP_LEAF_VERSION) => u.tagSchnorr('TapLeaf', new Uint8Array([version]), VarBytes.encode(script));\nexport function p2tr(internalPubKey, tree, network = NETWORK, allowUnknownOutputs = false, customScripts) {\n // Unspendable\n if (!internalPubKey && !tree)\n throw new Error('p2tr: should have pubKey or scriptTree (or both)');\n const pubKey = typeof internalPubKey === 'string'\n ? hex.decode(internalPubKey)\n : internalPubKey || u.TAPROOT_UNSPENDABLE_KEY;\n if (!isValidPubkey(pubKey, u.PubT.schnorr))\n throw new Error('p2tr: non-schnorr pubkey');\n if (tree) {\n let hashedTree = taprootAddPath(taprootHashTree(tree, pubKey, allowUnknownOutputs, customScripts));\n const tapMerkleRoot = hashedTree.hash;\n const [tweakedPubkey, parity] = u.taprootTweakPubkey(pubKey, tapMerkleRoot);\n const leaves = taprootWalkTree(hashedTree).map((l) => ({\n ...l,\n controlBlock: TaprootControlBlock.encode({\n version: (l.version || TAP_LEAF_VERSION) + parity,\n internalKey: pubKey,\n merklePath: l.path,\n }),\n }));\n return {\n type: 'tr',\n script: OutScript.encode({ type: 'tr', pubkey: tweakedPubkey }),\n address: Address(network).encode({ type: 'tr', pubkey: tweakedPubkey }),\n // For tests\n tweakedPubkey,\n // PSBT stuff\n tapInternalKey: pubKey,\n leaves,\n tapLeafScript: leaves.map((l) => [\n TaprootControlBlock.decode(l.controlBlock),\n u.concatBytes(l.script, new Uint8Array([l.version || TAP_LEAF_VERSION])),\n ]),\n tapMerkleRoot,\n };\n }\n else {\n const tweakedPubkey = u.taprootTweakPubkey(pubKey, P.EMPTY)[0];\n return {\n type: 'tr',\n script: OutScript.encode({ type: 'tr', pubkey: tweakedPubkey }),\n address: Address(network).encode({ type: 'tr', pubkey: tweakedPubkey }),\n // For tests\n tweakedPubkey,\n // PSBT stuff\n tapInternalKey: pubKey,\n };\n }\n}\n// Returns all combinations of size M from lst\nexport function combinations(m, list) {\n const res = [];\n if (!Array.isArray(list))\n throw new Error('combinations: lst arg should be array');\n const n = list.length;\n if (m > n)\n throw new Error('combinations: m > lst.length, no combinations possible');\n /*\n Basically works as M nested loops like:\n for (;idx[0]<lst.length;idx[0]++) for (idx[1]=idx[0]+1;idx[1]<lst.length;idx[1]++)\n but since we cannot create nested loops dynamically, we unroll it to a single loop\n */\n const idx = Array.from({ length: m }, (_, i) => i);\n const last = idx.length - 1;\n main: for (;;) {\n res.push(idx.map((i) => list[i]));\n idx[last] += 1;\n let i = last;\n // Propagate increment\n // idx[i] cannot be bigger than n-m+i, otherwise last elements in right part will overflow\n for (; i >= 0 && idx[i] > n - m + i; i--) {\n idx[i] = 0;\n // Overflow in idx[0], break\n if (i === 0)\n break main;\n idx[i - 1] += 1;\n }\n // Propagate: idx[i+1] = idx[idx]+1\n for (i += 1; i < idx.length; i++)\n idx[i] = idx[i - 1] + 1;\n }\n return res;\n}\nexport const p2tr_ns = (m, pubkeys, allowSamePubkeys = false) => {\n if (!allowSamePubkeys)\n uniqPubkey(pubkeys);\n return combinations(m, pubkeys).map((i) => ({\n type: 'tr_ns',\n script: OutScript.encode({ type: 'tr_ns', pubkeys: i }),\n }));\n};\nexport const p2tr_pk = (pubkey) => p2tr_ns(1, [pubkey], undefined)[0];\nexport function p2tr_ms(m, pubkeys, allowSamePubkeys = false) {\n if (!allowSamePubkeys)\n uniqPubkey(pubkeys);\n return {\n type: 'tr_ms',\n script: OutScript.encode({ type: 'tr_ms', pubkeys, m }),\n };\n}\n// Simple pubkey address, without complex scripts\nexport function getAddress(type, privKey, network = NETWORK) {\n if (type === 'tr') {\n return p2tr(u.pubSchnorr(privKey), undefined, network).address;\n }\n const pubKey = u.pubECDSA(privKey);\n if (type === 'pkh')\n return p2pkh(pubKey, network).address;\n if (type === 'wpkh')\n return p2wpkh(pubKey, network).address;\n throw new Error(`getAddress: unknown type=${type}`);\n}\nexport const _sortPubkeys = (pubkeys) => Array.from(pubkeys).sort(u.compareBytes);\nexport function multisig(m, pubkeys, sorted = false, witness = false, network = NETWORK) {\n const ms = p2ms(m, sorted ? _sortPubkeys(pubkeys) : pubkeys);\n return witness ? p2wsh(ms, network) : p2sh(ms, network);\n}\nexport function sortedMultisig(m, pubkeys, witness = false, network = NETWORK) {\n return multisig(m, pubkeys, true, witness, network);\n}\nconst base58check = createBase58check(u.sha256);\nfunction validateWitness(version, data) {\n if (data.length < 2 || data.length > 40)\n throw new Error('Witness: invalid length');\n if (version > 16)\n throw new Error('Witness: invalid version');\n if (version === 0 && !(data.length === 20 || data.length === 32))\n throw new Error('Witness: invalid length for version');\n}\nfunction programToWitness(version, data, network = NETWORK) {\n validateWitness(version, data);\n const coder = version === 0 ? bech32 : bech32m;\n return coder.encode(network.bech32, [version].concat(coder.toWords(data)));\n}\nfunction formatKey(hashed, prefix) {\n return base58check.encode(u.concatBytes(Uint8Array.from(prefix), hashed));\n}\nexport function WIF(network = NETWORK) {\n return {\n encode(privKey) {\n const compressed = u.concatBytes(privKey, new Uint8Array([0x01]));\n return formatKey(compressed.subarray(0, 33), [network.wif]);\n },\n decode(wif) {\n let parsed = base58check.decode(wif);\n if (parsed[0] !== network.wif)\n throw new Error('Wrong WIF prefix');\n parsed = parsed.subarray(1);\n // Check what it is. Compressed flag?\n if (parsed.length !== 33)\n throw new Error('Wrong WIF length');\n if (parsed[32] !== 0x01)\n throw new Error('Wrong WIF postfix');\n return parsed.subarray(0, -1);\n },\n };\n}\n// Returns OutType, which can be used to create outscript\nexport function Address(network = NETWORK) {\n return {\n encode(from) {\n const { type } = from;\n if (type === 'wpkh')\n return programToWitness(0, from.hash, network);\n else if (type === 'wsh')\n return programToWitness(0, from.hash, network);\n else if (type === 'tr')\n return programToWitness(1, from.pubkey, network);\n else if (type === 'pkh')\n return formatKey(from.hash, [network.pubKeyHash]);\n else if (type === 'sh')\n return formatKey(from.hash, [network.scriptHash]);\n throw new Error(`Unknown address type=${type}`);\n },\n decode(address) {\n if (address.length < 14 || address.length > 74)\n throw new Error('Invalid address length');\n // Bech32\n if (network.bech32 && address.toLowerCase().startsWith(`${network.bech32}1`)) {\n let res;\n try {\n res = bech32.decode(address);\n if (res.words[0] !== 0)\n throw new Error(`bech32: wrong version=${res.words[0]}`);\n }\n catch (_) {\n // Starting from version 1 it is decoded as bech32m\n res = bech32m.decode(address);\n if (res.words[0] === 0)\n throw new Error(`bech32m: wrong version=${res.words[0]}`);\n }\n if (res.prefix !== network.bech32)\n throw new Error(`wrong bech32 prefix=${res.prefix}`);\n const [version, ...program] = res.words;\n const data = bech32.fromWords(program);\n validateWitness(version, data);\n if (version === 0 && data.length === 32)\n return { type: 'wsh', hash: data };\n else if (version === 0 && data.length === 20)\n return { type: 'wpkh', hash: data };\n else if (version === 1 && data.length === 32)\n return { type: 'tr', pubkey: data };\n else\n throw new Error('Unknown witness program');\n }\n const data = base58check.decode(address);\n if (data.length !== 21)\n throw new Error('Invalid base58 address');\n // Pay To Public Key Hash\n if (data[0] === network.pubKeyHash) {\n return { type: 'pkh', hash: data.slice(1) };\n }\n else if (data[0] === network.scriptHash) {\n return {\n type: 'sh',\n hash: data.slice(1),\n };\n }\n throw new Error(`Invalid address prefix=${data[0]}`);\n },\n };\n}\n//# sourceMappingURL=payment.js.map","import { hex } from '@scure/base';\nimport * as P from 'micro-packed';\nimport { Address, OutScript, checkScript, tapLeafHash } from \"./payment.js\";\nimport * as psbt from \"./psbt.js\";\nimport { CompactSizeLen, RawOldTx, RawOutput, RawTx, RawWitness, Script, VarBytes, } from \"./script.js\";\nimport * as u from \"./utils.js\";\nimport { NETWORK, concatBytes, equalBytes, isBytes } from \"./utils.js\";\nconst EMPTY32 = new Uint8Array(32);\nconst EMPTY_OUTPUT = {\n amount: 0xffffffffffffffffn,\n script: P.EMPTY,\n};\nexport const toVsize = (weight) => Math.ceil(weight / 4);\nexport const PRECISION = 8;\nexport const DEFAULT_VERSION = 2;\nexport const DEFAULT_LOCKTIME = 0;\nexport const DEFAULT_SEQUENCE = 4294967295;\nexport const Decimal = P.coders.decimal(PRECISION);\n// Same as value || def, but doesn't overwrites zero ('0', 0, 0n, etc)\nexport const def = (value, def) => (value === undefined ? def : value);\nexport function cloneDeep(obj) {\n if (Array.isArray(obj))\n return obj.map((i) => cloneDeep(i));\n // slice of nodejs Buffer doesn't copy\n else if (isBytes(obj))\n return Uint8Array.from(obj);\n // immutable\n else if (['number', 'bigint', 'boolean', 'string', 'undefined'].includes(typeof obj))\n return obj;\n // null is object\n else if (obj === null)\n return obj;\n // should be last, so it won't catch other types\n else if (typeof obj === 'object') {\n return Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, cloneDeep(v)]));\n }\n throw new Error(`cloneDeep: unknown type=${obj} (${typeof obj})`);\n}\n/**\n * Internal, exported only for backwards-compat. Use `SigHash` instead.\n * @deprecated\n */\nexport var SignatureHash;\n(function (SignatureHash) {\n SignatureHash[SignatureHash[\"DEFAULT\"] = 0] = \"DEFAULT\";\n SignatureHash[SignatureHash[\"ALL\"] = 1] = \"ALL\";\n SignatureHash[SignatureHash[\"NONE\"] = 2] = \"NONE\";\n SignatureHash[SignatureHash[\"SINGLE\"] = 3] = \"SINGLE\";\n SignatureHash[SignatureHash[\"ANYONECANPAY\"] = 128] = \"ANYONECANPAY\";\n})(SignatureHash || (SignatureHash = {}));\nexport var SigHash;\n(function (SigHash) {\n SigHash[SigHash[\"DEFAULT\"] = 0] = \"DEFAULT\";\n SigHash[SigHash[\"ALL\"] = 1] = \"ALL\";\n SigHash[SigHash[\"NONE\"] = 2] = \"NONE\";\n SigHash[SigHash[\"SINGLE\"] = 3] = \"SINGLE\";\n SigHash[SigHash[\"DEFAULT_ANYONECANPAY\"] = 128] = \"DEFAULT_ANYONECANPAY\";\n SigHash[SigHash[\"ALL_ANYONECANPAY\"] = 129] = \"ALL_ANYONECANPAY\";\n SigHash[SigHash[\"NONE_ANYONECANPAY\"] = 130] = \"NONE_ANYONECANPAY\";\n SigHash[SigHash[\"SINGLE_ANYONECANPAY\"] = 131] = \"SINGLE_ANYONECANPAY\";\n})(SigHash || (SigHash = {}));\nfunction getTaprootKeys(privKey, pubKey, internalKey, merkleRoot = P.EMPTY) {\n if (equalBytes(internalKey, pubKey)) {\n privKey = u.taprootTweakPrivKey(privKey, merkleRoot);\n pubKey = u.pubSchnorr(privKey);\n }\n return { privKey, pubKey };\n}\n// Force check amount/script\nfunction outputBeforeSign(i) {\n if (i.script === undefined || i.amount === undefined)\n throw new Error('Transaction/output: script and amount required');\n return { script: i.script, amount: i.amount };\n}\n// Force check index/txid/sequence\nexport function inputBeforeSign(i) {\n if (i.txid === undefined || i.index === undefined)\n throw new Error('Transaction/input: txid and index required');\n return {\n txid: i.txid,\n index: i.index,\n sequence: def(i.sequence, DEFAULT_SEQUENCE),\n finalScriptSig: def(i.finalScriptSig, P.EMPTY),\n };\n}\nfunction cleanFinalInput(i) {\n for (const _k in i) {\n const k = _k;\n if (!psbt.PSBTInputFinalKeys.includes(k))\n delete i[k];\n }\n}\n// (TxHash, Idx)\nconst TxHashIdx = P.struct({ txid: P.bytes(32, true), index: P.U32LE });\nfunction validateSigHash(s) {\n if (typeof s !== 'number' || typeof SigHash[s] !== 'string')\n throw new Error(`Invalid SigHash=${s}`);\n return s;\n}\nfunction unpackSighash(hashType) {\n const masked = hashType & 0b0011111;\n return {\n isAny: !!(hashType & SignatureHash.ANYONECANPAY),\n isNone: masked === SignatureHash.NONE,\n isSingle: masked === SignatureHash.SINGLE,\n };\n}\nfunction validateOpts(opts) {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error(`Wrong object type for transaction options: ${opts}`);\n const _opts = {\n ...opts,\n // Defaults\n version: def(opts.version, DEFAULT_VERSION),\n lockTime: def(opts.lockTime, 0),\n PSBTVersion: def(opts.PSBTVersion, 0),\n };\n if (typeof _opts.allowUnknowInput !== 'undefined')\n opts.allowUnknownInputs = _opts.allowUnknowInput;\n if (typeof _opts.allowUnknowOutput !== 'undefined')\n opts.allowUnknownOutputs = _opts.allowUnknowOutput;\n if (typeof _opts.lockTime !== 'number')\n throw new Error('Transaction lock time should be number');\n P.U32LE.encode(_opts.lockTime); // Additional range checks that lockTime\n // There is no PSBT v1, and any new version will probably have fields which we don't know how to parse, which\n // can lead to constructing broken transactions\n if (_opts.PSBTVersion !== 0 && _opts.PSBTVersion !== 2)\n throw new Error(`Unknown PSBT version ${_opts.PSBTVersion}`);\n // Flags\n for (const k of [\n 'allowUnknownVersion',\n 'allowUnknownOutputs',\n 'allowUnknownInputs',\n 'disableScriptCheck',\n 'bip174jsCompat',\n 'allowLegacyWitnessUtxo',\n 'lowR',\n ]) {\n const v = _opts[k];\n if (v === undefined)\n continue; // optional\n if (typeof v !== 'boolean')\n throw new Error(`Transation options wrong type: ${k}=${v} (${typeof v})`);\n }\n // 0 and -1 happens in tests\n if (_opts.allowUnknownVersion\n ? typeof _opts.version === 'number'\n : ![-1, 0, 1, 2, 3].includes(_opts.version))\n throw new Error(`Unknown version: ${_opts.version}`);\n if (_opts.customScripts !== undefined) {\n const cs = _opts.customScripts;\n if (!Array.isArray(cs)) {\n throw new Error(`wrong custom scripts type (expected array): customScripts=${cs} (${typeof cs})`);\n }\n for (const s of cs) {\n if (typeof s.encode !== 'function' || typeof s.decode !== 'function')\n throw new Error(`wrong script=${s} (${typeof s})`);\n if (s.finalizeTaproot !== undefined && typeof s.finalizeTaproot !== 'function')\n throw new Error(`wrong script=${s} (${typeof s})`);\n }\n }\n return Object.freeze(_opts);\n}\n// NOTE: we cannot do this inside PSBTInput coder, because there is no index/txid at this point!\nfunction validateInput(i) {\n if (i.nonWitnessUtxo && i.index !== undefined) {\n const last = i.nonWitnessUtxo.outputs.length - 1;\n if (i.index > last)\n throw new Error(`validateInput: index(${i.index}) not in nonWitnessUtxo`);\n const prevOut = i.nonWitnessUtxo.outputs[i.index];\n if (i.witnessUtxo &&\n (!equalBytes(i.witnessUtxo.script, prevOut.script) || i.witnessUtxo.amount !== prevOut.amount))\n throw new Error('validateInput: witnessUtxo different from nonWitnessUtxo');\n if (i.txid) {\n const outputs = i.nonWitnessUtxo.outputs;\n if (outputs.length - 1 < i.index)\n throw new Error('nonWitnessUtxo: incorect output index');\n // At this point, we are using previous tx output to create new input.\n // Script safety checks are unnecessary:\n // - User has no control over previous tx. If somebody send money in same tx\n // as unspendable output, we still want user able to spend money\n // - We still want some checks to notify user about possible errors early\n // in case user wants to use wrong input by mistake\n // - Worst case: tx will be rejected by nodes. Still better than disallowing user\n // to spend real input, no matter how broken it looks\n const tx = Transaction.fromRaw(RawTx.encode(i.nonWitnessUtxo), {\n allowUnknownOutputs: true,\n disableScriptCheck: true,\n allowUnknownInputs: true,\n });\n const txid = hex.encode(i.txid);\n // PSBTv2 vectors have non-final tx in inputs\n if (tx.isFinal && tx.id !== txid)\n throw new Error(`nonWitnessUtxo: wrong txid, exp=${txid} got=${tx.id}`);\n }\n }\n return i;\n}\n// Normalizes input\nexport function getPrevOut(input) {\n if (input.nonWitnessUtxo) {\n if (input.index === undefined)\n throw new Error('Unknown input index');\n return input.nonWitnessUtxo.outputs[input.index];\n }\n else if (input.witnessUtxo)\n return input.witnessUtxo;\n else\n throw new Error('Cannot find previous output info');\n}\nexport function normalizeInput(i, cur, allowedFields, disableScriptCheck = false, allowUnknown = false) {\n let { nonWitnessUtxo, txid } = i;\n // String support for common fields. We usually prefer Uint8Array to avoid errors\n // like hex looking string accidentally passed, however, in case of nonWitnessUtxo\n // it is better to expect string, since constructing this complex object will be\n // difficult for user\n if (typeof nonWitnessUtxo === 'string')\n nonWitnessUtxo = hex.decode(nonWitnessUtxo);\n if (isBytes(nonWitnessUtxo))\n nonWitnessUtxo = RawTx.decode(nonWitnessUtxo);\n if (!('nonWitnessUtxo' in i) && nonWitnessUtxo === undefined)\n nonWitnessUtxo = cur?.nonWitnessUtxo;\n if (typeof txid === 'string')\n txid = hex.decode(txid);\n // TODO: if we have nonWitnessUtxo, we can extract txId from here\n if (txid === undefined)\n txid = cur?.txid;\n let res = { ...cur, ...i, nonWitnessUtxo, txid };\n if (!('nonWitnessUtxo' in i) && res.nonWitnessUtxo === undefined)\n delete res.nonWitnessUtxo;\n if (res.sequence === undefined)\n res.sequence = DEFAULT_SEQUENCE;\n if (res.tapMerkleRoot === null)\n delete res.tapMerkleRoot;\n res = psbt.mergeKeyMap(psbt.PSBTInput, res, cur, allowedFields, allowUnknown);\n psbt.PSBTInputCoder.encode(res); // Validates that everything is correct at this point\n let prevOut;\n if (res.nonWitnessUtxo && res.index !== undefined)\n prevOut = res.nonWitnessUtxo.outputs[res.index];\n else if (res.witnessUtxo)\n prevOut = res.witnessUtxo;\n if (prevOut && !disableScriptCheck)\n checkScript(prevOut && prevOut.script, res.redeemScript, res.witnessScript);\n return res;\n}\nexport function getInputType(input, allowLegacyWitnessUtxo = false) {\n let txType = 'legacy';\n let defaultSighash = SignatureHash.ALL;\n const prevOut = getPrevOut(input);\n const first = OutScript.decode(prevOut.script);\n let type = first.type;\n let cur = first;\n const stack = [first];\n if (first.type === 'tr') {\n defaultSighash = SignatureHash.DEFAULT;\n return {\n txType: 'taproot',\n type: 'tr',\n last: first,\n lastScript: prevOut.script,\n defaultSighash,\n sighash: input.sighashType || defaultSighash,\n };\n }\n else {\n if (first.type === 'wpkh' || first.type === 'wsh')\n txType = 'segwit';\n if (first.type === 'sh') {\n if (!input.redeemScript)\n throw new Error('inputType: sh without redeemScript');\n let child = OutScript.decode(input.redeemScript);\n if (child.type === 'wpkh' || child.type === 'wsh')\n txType = 'segwit';\n stack.push(child);\n cur = child;\n type += `-${child.type}`;\n }\n // wsh can be inside sh\n if (cur.type === 'wsh') {\n if (!input.witnessScript)\n throw new Error('inputType: wsh without witnessScript');\n let child = OutScript.decode(input.witnessScript);\n if (child.type === 'wsh')\n txType = 'segwit';\n stack.push(child);\n cur = child;\n type += `-${child.type}`;\n }\n const last = stack[stack.length - 1];\n if (last.type === 'sh' || last.type === 'wsh')\n throw new Error('inputType: sh/wsh cannot be terminal type');\n const lastScript = OutScript.encode(last);\n const res = {\n type,\n txType,\n last,\n lastScript,\n defaultSighash,\n sighash: input.sighashType || defaultSighash,\n };\n if (txType === 'legacy' && !allowLegacyWitnessUtxo && !input.nonWitnessUtxo) {\n throw new Error(`Transaction/sign: legacy input without nonWitnessUtxo, can result in attack that forces paying higher fees. Pass allowLegacyWitnessUtxo=true, if you sure`);\n }\n return res;\n }\n}\nexport class Transaction {\n constructor(opts = {}) {\n this.global = {};\n this.inputs = []; // use getInput()\n this.outputs = []; // use getOutput()\n const _opts = (this.opts = validateOpts(opts));\n // Merge with global structure of PSBTv2\n if (_opts.lockTime !== DEFAULT_LOCKTIME)\n this.global.fallbackLocktime = _opts.lockTime;\n this.global.txVersion = _opts.version;\n }\n // Import\n static fromRaw(raw, opts = {}) {\n const parsed = RawTx.decode(raw);\n const tx = new Transaction({ ...opts, version: parsed.version, lockTime: parsed.lockTime });\n for (const o of parsed.outputs)\n tx.addOutput(o);\n tx.outputs = parsed.outputs;\n tx.inputs = parsed.inputs;\n if (parsed.witnesses) {\n for (let i = 0; i < parsed.witnesses.length; i++)\n tx.inputs[i].finalScriptWitness = parsed.witnesses[i];\n }\n return tx;\n }\n // PSBT\n static fromPSBT(psbt_, opts = {}) {\n let parsed;\n try {\n parsed = psbt.RawPSBTV0.decode(psbt_);\n }\n catch (e0) {\n try {\n parsed = psbt.RawPSBTV2.decode(psbt_);\n }\n catch (e2) {\n // Throw error for v0 parsing, since it popular, otherwise it would be shadowed by v2 error\n throw e0;\n }\n }\n const PSBTVersion = parsed.global.version || 0;\n if (PSBTVersion !== 0 && PSBTVersion !== 2)\n throw new Error(`Wrong PSBT version=${PSBTVersion}`);\n const unsigned = parsed.global.unsignedTx;\n const version = PSBTVersion === 0 ? unsigned?.version : parsed.global.txVersion;\n const lockTime = PSBTVersion === 0 ? unsigned?.lockTime : parsed.global.fallbackLocktime;\n const tx = new Transaction({ ...opts, version, lockTime, PSBTVersion });\n // We need slice here, because otherwise\n const inputCount = PSBTVersion === 0 ? unsigned?.inputs.length : parsed.global.inputCount;\n tx.inputs = parsed.inputs.slice(0, inputCount).map((i, j) => validateInput({\n finalScriptSig: P.EMPTY,\n ...parsed.global.unsignedTx?.inputs[j],\n ...i,\n }));\n const outputCount = PSBTVersion === 0 ? unsigned?.outputs.length : parsed.global.outputCount;\n tx.outputs = parsed.outputs.slice(0, outputCount).map((i, j) => ({\n ...i,\n ...parsed.global.unsignedTx?.outputs[j],\n }));\n tx.global = { ...parsed.global, txVersion: version }; // just in case proprietary/unknown fields\n if (lockTime !== DEFAULT_LOCKTIME)\n tx.global.fallbackLocktime = lockTime;\n return tx;\n }\n toPSBT(PSBTVersion = this.opts.PSBTVersion) {\n if (PSBTVersion !== 0 && PSBTVersion !== 2)\n throw new Error(`Wrong PSBT version=${PSBTVersion}`);\n // if (PSBTVersion === 0 && this.inputs.length === 0) {\n // throw new Error(\n // 'PSBT version=0 export for transaction without inputs disabled, please use version=2. Please check `toPSBT` method for explanation.'\n // );\n // }\n const inputs = this.inputs.map((i) => validateInput(psbt.cleanPSBTFields(PSBTVersion, psbt.PSBTInput, i)));\n for (const inp of inputs) {\n // Don't serialize empty fields\n if (inp.partialSig && !inp.partialSig.length)\n delete inp.partialSig;\n if (inp.finalScriptSig && !inp.finalScriptSig.length)\n delete inp.finalScriptSig;\n if (inp.finalScriptWitness && !inp.finalScriptWitness.length)\n delete inp.finalScriptWitness;\n }\n const outputs = this.outputs.map((i) => psbt.cleanPSBTFields(PSBTVersion, psbt.PSBTOutput, i));\n const global = { ...this.global };\n if (PSBTVersion === 0) {\n /*\n - Bitcoin raw transaction expects to have at least 1 input because it uses case with zero inputs as marker for SegWit\n - this means we cannot serialize raw tx with zero inputs since it will be parsed as SegWit tx\n - Parsing of PSBTv0 depends on unsignedTx (it looks for input count here)\n - BIP-174 requires old serialization format (without witnesses) inside global, which solves this\n */\n global.unsignedTx = RawOldTx.decode(RawOldTx.encode({\n version: this.version,\n lockTime: this.lockTime,\n inputs: this.inputs.map(inputBeforeSign).map((i) => ({\n ...i,\n finalScriptSig: P.EMPTY,\n })),\n outputs: this.outputs.map(outputBeforeSign),\n }));\n delete global.fallbackLocktime;\n delete global.txVersion;\n }\n else {\n global.version = PSBTVersion;\n global.txVersion = this.version;\n global.inputCount = this.inputs.length;\n global.outputCount = this.outputs.length;\n if (global.fallbackLocktime && global.fallbackLocktime === DEFAULT_LOCKTIME)\n delete global.fallbackLocktime;\n }\n if (this.opts.bip174jsCompat) {\n if (!inputs.length)\n inputs.push({});\n if (!outputs.length)\n outputs.push({});\n }\n return (PSBTVersion === 0 ? psbt.RawPSBTV0 : psbt.RawPSBTV2).encode({\n global,\n inputs,\n outputs,\n });\n }\n // BIP370 lockTime (https://github.com/bitcoin/bips/blob/master/bip-0370.mediawiki#determining-lock-time)\n get lockTime() {\n let height = DEFAULT_LOCKTIME;\n let heightCnt = 0;\n let time = DEFAULT_LOCKTIME;\n let timeCnt = 0;\n for (const i of this.inputs) {\n if (i.requiredHeightLocktime) {\n height = Math.max(height, i.requiredHeightLocktime);\n heightCnt++;\n }\n if (i.requiredTimeLocktime) {\n time = Math.max(time, i.requiredTimeLocktime);\n timeCnt++;\n }\n }\n if (heightCnt && heightCnt >= timeCnt)\n return height;\n if (time !== DEFAULT_LOCKTIME)\n return time;\n return this.global.fallbackLocktime || DEFAULT_LOCKTIME;\n }\n get version() {\n // Should be not possible\n if (this.global.txVersion === undefined)\n throw new Error('No global.txVersion');\n return this.global.txVersion;\n }\n inputStatus(idx) {\n this.checkInputIdx(idx);\n const input = this.inputs[idx];\n // Finalized\n if (input.finalScriptSig && input.finalScriptSig.length)\n return 'finalized';\n if (input.finalScriptWitness && input.finalScriptWitness.length)\n return 'finalized';\n // Signed taproot\n if (input.tapKeySig)\n return 'signed';\n if (input.tapScriptSig && input.tapScriptSig.length)\n return 'signed';\n // Signed\n if (input.partialSig && input.partialSig.length)\n return 'signed';\n return 'unsigned';\n }\n // Cannot replace unpackSighash, tests rely on very generic implemenetation with signing inputs outside of range\n // We will lose some vectors -> smaller test coverage of preimages (very important!)\n inputSighash(idx) {\n this.checkInputIdx(idx);\n const inputSighash = this.inputs[idx].sighashType;\n const sighash = inputSighash === undefined ? SignatureHash.DEFAULT : inputSighash;\n // ALL or DEFAULT -- everything signed\n // NONE -- all inputs + no outputs\n // SINGLE -- all inputs + output with same index\n // ALL + ANYONE -- specific input + all outputs\n // NONE + ANYONE -- specific input + no outputs\n // SINGLE -- specific inputs + output with same index\n const sigOutputs = sighash === SignatureHash.DEFAULT ? SignatureHash.ALL : sighash & 0b11;\n const sigInputs = sighash & SignatureHash.ANYONECANPAY;\n return { sigInputs, sigOutputs };\n }\n // Very nice for debug purposes, but slow. If there is too much inputs/outputs to add, will be quadratic.\n // Some cache will be nice, but there chance to have bugs with cache invalidation\n signStatus() {\n // if addInput or addOutput is not possible, then all inputs or outputs are signed\n let addInput = true, addOutput = true;\n let inputs = [], outputs = [];\n for (let idx = 0; idx < this.inputs.length; idx++) {\n const status = this.inputStatus(idx);\n // Unsigned input doesn't affect anything\n if (status === 'unsigned')\n continue;\n const { sigInputs, sigOutputs } = this.inputSighash(idx);\n // Input type\n if (sigInputs === SignatureHash.ANYONECANPAY)\n inputs.push(idx);\n else\n addInput = false;\n // Output type\n if (sigOutputs === SignatureHash.ALL)\n addOutput = false;\n else if (sigOutputs === SignatureHash.SINGLE)\n outputs.push(idx);\n else if (sigOutputs === SignatureHash.NONE) {\n // Doesn't affect any outputs at all\n }\n else\n throw new Error(`Wrong signature hash output type: ${sigOutputs}`);\n }\n return { addInput, addOutput, inputs, outputs };\n }\n get isFinal() {\n for (let idx = 0; idx < this.inputs.length; idx++)\n if (this.inputStatus(idx) !== 'finalized')\n return false;\n return true;\n }\n // Info utils\n get hasWitnesses() {\n let out = false;\n for (const i of this.inputs)\n if (i.finalScriptWitness && i.finalScriptWitness.length)\n out = true;\n return out;\n }\n // https://en.bitcoin.it/wiki/Weight_units\n get weight() {\n if (!this.isFinal)\n throw new Error('Transaction is not finalized');\n let out = 32;\n // Outputs\n const outputs = this.outputs.map(outputBeforeSign);\n out += 4 * CompactSizeLen.encode(this.outputs.length).length;\n for (const o of outputs)\n out += 32 + 4 * VarBytes.encode(o.script).length;\n // Inputs\n if (this.hasWitnesses)\n out += 2;\n out += 4 * CompactSizeLen.encode(this.inputs.length).length;\n for (const i of this.inputs) {\n out += 160 + 4 * VarBytes.encode(i.finalScriptSig || P.EMPTY).length;\n if (this.hasWitnesses && i.finalScriptWitness)\n out += RawWitness.encode(i.finalScriptWitness).length;\n }\n return out;\n }\n get vsize() {\n return toVsize(this.weight);\n }\n toBytes(withScriptSig = false, withWitness = false) {\n return RawTx.encode({\n version: this.version,\n lockTime: this.lockTime,\n inputs: this.inputs.map(inputBeforeSign).map((i) => ({\n ...i,\n finalScriptSig: (withScriptSig && i.finalScriptSig) || P.EMPTY,\n })),\n outputs: this.outputs.map(outputBeforeSign),\n witnesses: this.inputs.map((i) => i.finalScriptWitness || []),\n segwitFlag: withWitness && this.hasWitnesses,\n });\n }\n get unsignedTx() {\n return this.toBytes(false, false);\n }\n get hex() {\n return hex.encode(this.toBytes(true, this.hasWitnesses));\n }\n get hash() {\n if (!this.isFinal)\n throw new Error('Transaction is not finalized');\n return hex.encode(u.sha256x2(this.toBytes(true)));\n }\n get id() {\n if (!this.isFinal)\n throw new Error('Transaction is not finalized');\n return hex.encode(u.sha256x2(this.toBytes(true)).reverse());\n }\n // Input stuff\n checkInputIdx(idx) {\n if (!Number.isSafeInteger(idx) || 0 > idx || idx >= this.inputs.length)\n throw new Error(`Wrong input index=${idx}`);\n }\n getInput(idx) {\n this.checkInputIdx(idx);\n return cloneDeep(this.inputs[idx]);\n }\n get inputsLength() {\n return this.inputs.length;\n }\n // Modification\n addInput(input, _ignoreSignStatus = false) {\n if (!_ignoreSignStatus && !this.signStatus().addInput)\n throw new Error('Tx has signed inputs, cannot add new one');\n this.inputs.push(normalizeInput(input, undefined, undefined, this.opts.disableScriptCheck));\n return this.inputs.length - 1;\n }\n updateInput(idx, input, _ignoreSignStatus = false) {\n this.checkInputIdx(idx);\n let allowedFields = undefined;\n if (!_ignoreSignStatus) {\n const status = this.signStatus();\n if (!status.addInput || status.inputs.includes(idx))\n allowedFields = psbt.PSBTInputUnsignedKeys;\n }\n this.inputs[idx] = normalizeInput(input, this.inputs[idx], allowedFields, this.opts.disableScriptCheck, this.opts.allowUnknown);\n }\n // Output stuff\n checkOutputIdx(idx) {\n if (!Number.isSafeInteger(idx) || 0 > idx || idx >= this.outputs.length)\n throw new Error(`Wrong output index=${idx}`);\n }\n getOutput(idx) {\n this.checkOutputIdx(idx);\n return cloneDeep(this.outputs[idx]);\n }\n getOutputAddress(idx, network = NETWORK) {\n const out = this.getOutput(idx);\n if (!out.script)\n return;\n return Address(network).encode(OutScript.decode(out.script));\n }\n get outputsLength() {\n return this.outputs.length;\n }\n normalizeOutput(o, cur, allowedFields) {\n let { amount, script } = o;\n if (amount === undefined)\n amount = cur?.amount;\n if (typeof amount !== 'bigint')\n throw new Error(`Wrong amount type, should be of type bigint in sats, but got ${amount} of type ${typeof amount}`);\n if (typeof script === 'string')\n script = hex.decode(script);\n if (script === undefined)\n script = cur?.script;\n let res = { ...cur, ...o, amount, script };\n if (res.amount === undefined)\n delete res.amount;\n res = psbt.mergeKeyMap(psbt.PSBTOutput, res, cur, allowedFields, this.opts.allowUnknown);\n psbt.PSBTOutputCoder.encode(res);\n if (res.script &&\n !this.opts.allowUnknownOutputs &&\n OutScript.decode(res.script).type === 'unknown') {\n throw new Error('Transaction/output: unknown output script type, there is a chance that input is unspendable. Pass allowUnknownOutputs=true, if you sure');\n }\n if (!this.opts.disableScriptCheck)\n checkScript(res.script, res.redeemScript, res.witnessScript);\n return res;\n }\n addOutput(o, _ignoreSignStatus = false) {\n if (!_ignoreSignStatus && !this.signStatus().addOutput)\n throw new Error('Tx has signed outputs, cannot add new one');\n this.outputs.push(this.normalizeOutput(o));\n return this.outputs.length - 1;\n }\n updateOutput(idx, output, _ignoreSignStatus = false) {\n this.checkOutputIdx(idx);\n let allowedFields = undefined;\n if (!_ignoreSignStatus) {\n const status = this.signStatus();\n if (!status.addOutput || status.outputs.includes(idx))\n allowedFields = psbt.PSBTOutputUnsignedKeys;\n }\n this.outputs[idx] = this.normalizeOutput(output, this.outputs[idx], allowedFields);\n }\n addOutputAddress(address, amount, network = NETWORK) {\n return this.addOutput({ script: OutScript.encode(Address(network).decode(address)), amount });\n }\n // Utils\n get fee() {\n let res = 0n;\n for (const i of this.inputs) {\n const prevOut = getPrevOut(i);\n if (!prevOut)\n throw new Error('Empty input amount');\n res += prevOut.amount;\n }\n const outputs = this.outputs.map(outputBeforeSign);\n for (const o of outputs)\n res -= o.amount;\n return res;\n }\n // Signing\n // Based on https://github.com/bitcoin/bitcoin/blob/5871b5b5ab57a0caf9b7514eb162c491c83281d5/test/functional/test_framework/script.py#L624\n // There is optimization opportunity to re-use hashes for multiple inputs for witness v0/v1,\n // but we are trying to be less complicated for audit purpose for now.\n preimageLegacy(idx, prevOutScript, hashType) {\n const { isAny, isNone, isSingle } = unpackSighash(hashType);\n if (idx < 0 || !Number.isSafeInteger(idx))\n throw new Error(`Invalid input idx=${idx}`);\n if ((isSingle && idx >= this.outputs.length) || idx >= this.inputs.length)\n return P.U256BE.encode(1n);\n prevOutScript = Script.encode(Script.decode(prevOutScript).filter((i) => i !== 'CODESEPARATOR'));\n let inputs = this.inputs\n .map(inputBeforeSign)\n .map((input, inputIdx) => ({\n ...input,\n finalScriptSig: inputIdx === idx ? prevOutScript : P.EMPTY,\n }));\n if (isAny)\n inputs = [inputs[idx]];\n else if (isNone || isSingle) {\n inputs = inputs.map((input, inputIdx) => ({\n ...input,\n sequence: inputIdx === idx ? input.sequence : 0,\n }));\n }\n let outputs = this.outputs.map(outputBeforeSign);\n if (isNone)\n outputs = [];\n else if (isSingle) {\n outputs = outputs.slice(0, idx).fill(EMPTY_OUTPUT).concat([outputs[idx]]);\n }\n const tmpTx = RawTx.encode({\n lockTime: this.lockTime,\n version: this.version,\n segwitFlag: false,\n inputs,\n outputs,\n });\n return u.sha256x2(tmpTx, P.I32LE.encode(hashType));\n }\n preimageWitnessV0(idx, prevOutScript, hashType, amount) {\n const { isAny, isNone, isSingle } = unpackSighash(hashType);\n let inputHash = EMPTY32;\n let sequenceHash = EMPTY32;\n let outputHash = EMPTY32;\n const inputs = this.inputs.map(inputBeforeSign);\n const outputs = this.outputs.map(outputBeforeSign);\n if (!isAny)\n inputHash = u.sha256x2(...inputs.map(TxHashIdx.encode));\n if (!isAny && !isSingle && !isNone)\n sequenceHash = u.sha256x2(...inputs.map((i) => P.U32LE.encode(i.sequence)));\n if (!isSingle && !isNone) {\n outputHash = u.sha256x2(...outputs.map(RawOutput.encode));\n }\n else if (isSingle && idx < outputs.length)\n outputHash = u.sha256x2(RawOutput.encode(outputs[idx]));\n const input = inputs[idx];\n return u.sha256x2(P.I32LE.encode(this.version), inputHash, sequenceHash, P.bytes(32, true).encode(input.txid), P.U32LE.encode(input.index), VarBytes.encode(prevOutScript), P.U64LE.encode(amount), P.U32LE.encode(input.sequence), outputHash, P.U32LE.encode(this.lockTime), P.U32LE.encode(hashType));\n }\n preimageWitnessV1(idx, prevOutScript, hashType, amount, codeSeparator = -1, leafScript, leafVer = 0xc0, annex) {\n if (!Array.isArray(amount) || this.inputs.length !== amount.length)\n throw new Error(`Invalid amounts array=${amount}`);\n if (!Array.isArray(prevOutScript) || this.inputs.length !== prevOutScript.length)\n throw new Error(`Invalid prevOutScript array=${prevOutScript}`);\n const out = [\n P.U8.encode(0),\n P.U8.encode(hashType), // U8 sigHash\n P.I32LE.encode(this.version),\n P.U32LE.encode(this.lockTime),\n ];\n const outType = hashType === SignatureHash.DEFAULT ? SignatureHash.ALL : hashType & 0b11;\n const inType = hashType & SignatureHash.ANYONECANPAY;\n const inputs = this.inputs.map(inputBeforeSign);\n const outputs = this.outputs.map(outputBeforeSign);\n if (inType !== SignatureHash.ANYONECANPAY) {\n out.push(...[\n inputs.map(TxHashIdx.encode),\n amount.map(P.U64LE.encode),\n prevOutScript.map(VarBytes.encode),\n inputs.map((i) => P.U32LE.encode(i.sequence)),\n ].map((i) => u.sha256(concatBytes(...i))));\n }\n if (outType === SignatureHash.ALL) {\n out.push(u.sha256(concatBytes(...outputs.map(RawOutput.encode))));\n }\n const spendType = (annex ? 1 : 0) | (leafScript ? 2 : 0);\n out.push(new Uint8Array([spendType]));\n if (inType === SignatureHash.ANYONECANPAY) {\n const inp = inputs[idx];\n out.push(TxHashIdx.encode(inp), P.U64LE.encode(amount[idx]), VarBytes.encode(prevOutScript[idx]), P.U32LE.encode(inp.sequence));\n }\n else\n out.push(P.U32LE.encode(idx));\n if (spendType & 1)\n out.push(u.sha256(VarBytes.encode(annex || P.EMPTY)));\n if (outType === SignatureHash.SINGLE)\n out.push(idx < outputs.length ? u.sha256(RawOutput.encode(outputs[idx])) : EMPTY32);\n if (leafScript)\n out.push(tapLeafHash(leafScript, leafVer), P.U8.encode(0), P.I32LE.encode(codeSeparator));\n return u.tagSchnorr('TapSighash', ...out);\n }\n // Signer can be privateKey OR instance of bip32 HD stuff\n signIdx(privateKey, idx, allowedSighash, _auxRand) {\n this.checkInputIdx(idx);\n const input = this.inputs[idx];\n const inputType = getInputType(input, this.opts.allowLegacyWitnessUtxo);\n // Handle BIP32 HDKey\n if (!isBytes(privateKey)) {\n if (!input.bip32Derivation || !input.bip32Derivation.length)\n throw new Error('bip32Derivation: empty');\n const signers = input.bip32Derivation\n .filter((i) => i[1].fingerprint == privateKey.fingerprint)\n .map(([pubKey, { path }]) => {\n let s = privateKey;\n for (const i of path)\n s = s.deriveChild(i);\n if (!equalBytes(s.publicKey, pubKey))\n throw new Error('bip32Derivation: wrong pubKey');\n if (!s.privateKey)\n throw new Error('bip32Derivation: no privateKey');\n return s;\n });\n if (!signers.length)\n throw new Error(`bip32Derivation: no items with fingerprint=${privateKey.fingerprint}`);\n let signed = false;\n for (const s of signers)\n if (this.signIdx(s.privateKey, idx))\n signed = true;\n return signed;\n }\n // Sighash checks\n // Just for compat with bitcoinjs-lib, so users won't face unexpected behaviour.\n if (!allowedSighash)\n allowedSighash = [inputType.defaultSighash];\n else\n allowedSighash.forEach(validateSigHash);\n const sighash = inputType.sighash;\n if (!allowedSighash.includes(sighash)) {\n throw new Error(`Input with not allowed sigHash=${sighash}. Allowed: ${allowedSighash.join(', ')}`);\n }\n // It is possible to sign these inputs for legacy/segwit v0 (but no taproot!),\n // however this was because of bug in bitcoin-core, which remains here because of consensus.\n // If this is absolutely neccessary for your case, please open issue.\n // We disable it to avoid complicated workflow where SINGLE will block adding new outputs\n const { sigOutputs } = this.inputSighash(idx);\n if (sigOutputs === SignatureHash.SINGLE && idx >= this.outputs.length) {\n throw new Error(`Input with sighash SINGLE, but there is no output with corresponding index=${idx}`);\n }\n // Actual signing\n // Taproot\n const prevOut = getPrevOut(input);\n if (inputType.txType === 'taproot') {\n const prevOuts = this.inputs.map(getPrevOut);\n const prevOutScript = prevOuts.map((i) => i.script);\n const amount = prevOuts.map((i) => i.amount);\n let signed = false;\n let schnorrPub = u.pubSchnorr(privateKey);\n let merkleRoot = input.tapMerkleRoot || P.EMPTY;\n if (input.tapInternalKey) {\n // internal + tweak = tweaked key\n // if internal key == current public key, we need to tweak private key,\n // otherwise sign as is. bitcoinjs implementation always wants tweaked\n // priv key to be provided\n const { pubKey, privKey } = getTaprootKeys(privateKey, schnorrPub, input.tapInternalKey, merkleRoot);\n const [taprootPubKey, _] = u.taprootTweakPubkey(input.tapInternalKey, merkleRoot);\n if (equalBytes(taprootPubKey, pubKey)) {\n const hash = this.preimageWitnessV1(idx, prevOutScript, sighash, amount);\n const sig = concatBytes(u.signSchnorr(hash, privKey, _auxRand), sighash !== SignatureHash.DEFAULT ? new Uint8Array([sighash]) : P.EMPTY);\n this.updateInput(idx, { tapKeySig: sig }, true);\n signed = true;\n }\n }\n if (input.tapLeafScript) {\n input.tapScriptSig = input.tapScriptSig || [];\n for (const [_, _script] of input.tapLeafScript) {\n const script = _script.subarray(0, -1);\n const scriptDecoded = Script.decode(script);\n const ver = _script[_script.length - 1];\n const hash = tapLeafHash(script, ver);\n // NOTE: no need to tweak internal key here, since we don't support nested p2tr\n const pos = scriptDecoded.findIndex((i) => isBytes(i) && equalBytes(i, schnorrPub));\n // Skip if there is no public key in tapLeafScript\n if (pos === -1)\n continue;\n const msg = this.preimageWitnessV1(idx, prevOutScript, sighash, amount, undefined, script, ver);\n const sig = concatBytes(u.signSchnorr(msg, privateKey, _auxRand), sighash !== SignatureHash.DEFAULT ? new Uint8Array([sighash]) : P.EMPTY);\n this.updateInput(idx, { tapScriptSig: [[{ pubKey: schnorrPub, leafHash: hash }, sig]] }, true);\n signed = true;\n }\n }\n if (!signed)\n throw new Error('No taproot scripts signed');\n return true;\n }\n else {\n // only compressed keys are supported for now\n const pubKey = u.pubECDSA(privateKey);\n // TODO: replace with explicit checks\n // Check if script has public key or its has inside\n let hasPubkey = false;\n const pubKeyHash = u.hash160(pubKey);\n for (const i of Script.decode(inputType.lastScript)) {\n if (isBytes(i) && (equalBytes(i, pubKey) || equalBytes(i, pubKeyHash)))\n hasPubkey = true;\n }\n if (!hasPubkey)\n throw new Error(`Input script doesn't have pubKey: ${inputType.lastScript}`);\n let hash;\n if (inputType.txType === 'legacy') {\n hash = this.preimageLegacy(idx, inputType.lastScript, sighash);\n }\n else if (inputType.txType === 'segwit') {\n let script = inputType.lastScript;\n // If wpkh OR sh-wpkh, wsh-wpkh is impossible, so looks ok\n if (inputType.last.type === 'wpkh')\n script = OutScript.encode({ type: 'pkh', hash: inputType.last.hash });\n hash = this.preimageWitnessV0(idx, script, sighash, prevOut.amount);\n }\n else\n throw new Error(`Transaction/sign: unknown tx type: ${inputType.txType}`);\n const sig = u.signECDSA(hash, privateKey, this.opts.lowR);\n this.updateInput(idx, {\n partialSig: [[pubKey, concatBytes(sig, new Uint8Array([sighash]))]],\n }, true);\n }\n return true;\n }\n // This is bad API. Will work if user creates and signs tx, but if\n // there is some complex workflow with exchanging PSBT and signing them,\n // then it is better to validate which output user signs. How could a better API look like?\n // Example: user adds input, sends to another party, then signs received input (mixer etc),\n // another user can add different input for same key and user will sign it.\n // Even worse: another user can add bip32 derivation, and spend money from different address.\n // Better api: signIdx\n sign(privateKey, allowedSighash, _auxRand) {\n let num = 0;\n for (let i = 0; i < this.inputs.length; i++) {\n try {\n if (this.signIdx(privateKey, i, allowedSighash, _auxRand))\n num++;\n }\n catch (e) { }\n }\n if (!num)\n throw new Error('No inputs signed');\n return num;\n }\n finalizeIdx(idx) {\n this.checkInputIdx(idx);\n if (this.fee < 0n)\n throw new Error('Outputs spends more than inputs amount');\n const input = this.inputs[idx];\n const inputType = getInputType(input, this.opts.allowLegacyWitnessUtxo);\n // Taproot finalize\n if (inputType.txType === 'taproot') {\n if (input.tapKeySig)\n input.finalScriptWitness = [input.tapKeySig];\n else if (input.tapLeafScript && input.tapScriptSig) {\n // Sort leafs by control block length.\n const leafs = input.tapLeafScript.sort((a, b) => psbt.TaprootControlBlock.encode(a[0]).length -\n psbt.TaprootControlBlock.encode(b[0]).length);\n for (const [cb, _script] of leafs) {\n // Last byte is version\n const script = _script.slice(0, -1);\n const ver = _script[_script.length - 1];\n const outScript = OutScript.decode(script);\n const hash = tapLeafHash(script, ver);\n const scriptSig = input.tapScriptSig.filter((i) => equalBytes(i[0].leafHash, hash));\n let signatures = [];\n if (outScript.type === 'tr_ms') {\n const m = outScript.m;\n const pubkeys = outScript.pubkeys;\n let added = 0;\n for (const pub of pubkeys) {\n const sigIdx = scriptSig.findIndex((i) => equalBytes(i[0].pubKey, pub));\n // Should have exact amount of signatures (more -- will fail)\n if (added === m || sigIdx === -1) {\n signatures.push(P.EMPTY);\n continue;\n }\n signatures.push(scriptSig[sigIdx][1]);\n added++;\n }\n // Should be exact same as m\n if (added !== m)\n continue;\n }\n else if (outScript.type === 'tr_ns') {\n for (const pub of outScript.pubkeys) {\n const sigIdx = scriptSig.findIndex((i) => equalBytes(i[0].pubKey, pub));\n if (sigIdx === -1)\n continue;\n signatures.push(scriptSig[sigIdx][1]);\n }\n if (signatures.length !== outScript.pubkeys.length)\n continue;\n }\n else if (outScript.type === 'unknown' && this.opts.allowUnknownInputs) {\n // Trying our best to sign what we can\n const scriptDecoded = Script.decode(script);\n signatures = scriptSig\n .map(([{ pubKey }, signature]) => {\n const pos = scriptDecoded.findIndex((i) => isBytes(i) && equalBytes(i, pubKey));\n if (pos === -1)\n throw new Error('finalize/taproot: cannot find position of pubkey in script');\n return { signature, pos };\n })\n // Reverse order (because witness is stack and we take last element first from it)\n .sort((a, b) => a.pos - b.pos)\n .map((i) => i.signature);\n if (!signatures.length)\n continue;\n }\n else {\n const custom = this.opts.customScripts;\n if (custom) {\n for (const c of custom) {\n if (!c.finalizeTaproot)\n continue;\n const scriptDecoded = Script.decode(script);\n const csEncoded = c.encode(scriptDecoded);\n if (csEncoded === undefined)\n continue;\n const finalized = c.finalizeTaproot(script, csEncoded, scriptSig);\n if (!finalized)\n continue;\n input.finalScriptWitness = finalized.concat(psbt.TaprootControlBlock.encode(cb));\n input.finalScriptSig = P.EMPTY;\n cleanFinalInput(input);\n return;\n }\n }\n throw new Error('Finalize: Unknown tapLeafScript');\n }\n // Witness is stack, so last element will be used first\n input.finalScriptWitness = signatures\n .reverse()\n .concat([script, psbt.TaprootControlBlock.encode(cb)]);\n break;\n }\n if (!input.finalScriptWitness)\n throw new Error('finalize/taproot: empty witness');\n }\n else\n throw new Error('finalize/taproot: unknown input');\n input.finalScriptSig = P.EMPTY;\n cleanFinalInput(input);\n return;\n }\n if (!input.partialSig || !input.partialSig.length)\n throw new Error('Not enough partial sign');\n let inputScript = P.EMPTY;\n let witness = [];\n // TODO: move input scripts closer to payments/output scripts\n // Multisig\n if (inputType.last.type === 'ms') {\n const m = inputType.last.m;\n const pubkeys = inputType.last.pubkeys;\n let signatures = [];\n // partial: [pubkey, sign]\n for (const pub of pubkeys) {\n const sign = input.partialSig.find((s) => equalBytes(pub, s[0]));\n if (!sign)\n continue;\n signatures.push(sign[1]);\n }\n signatures = signatures.slice(0, m);\n if (signatures.length !== m) {\n throw new Error(`Multisig: wrong signatures count, m=${m} n=${pubkeys.length} signatures=${signatures.length}`);\n }\n inputScript = Script.encode([0, ...signatures]);\n }\n else if (inputType.last.type === 'pk') {\n inputScript = Script.encode([input.partialSig[0][1]]);\n }\n else if (inputType.last.type === 'pkh') {\n inputScript = Script.encode([input.partialSig[0][1], input.partialSig[0][0]]);\n }\n else if (inputType.last.type === 'wpkh') {\n inputScript = P.EMPTY;\n witness = [input.partialSig[0][1], input.partialSig[0][0]];\n }\n else if (inputType.last.type === 'unknown' && !this.opts.allowUnknownInputs)\n throw new Error('Unknown inputs not allowed');\n // Create final scripts (generic part)\n let finalScriptSig, finalScriptWitness;\n if (inputType.type.includes('wsh-')) {\n // P2WSH\n if (inputScript.length && inputType.lastScript.length) {\n witness = Script.decode(inputScript).map((i) => {\n if (i === 0)\n return P.EMPTY;\n if (isBytes(i))\n return i;\n throw new Error(`Wrong witness op=${i}`);\n });\n }\n witness = witness.concat(inputType.lastScript);\n }\n if (inputType.txType === 'segwit')\n finalScriptWitness = witness;\n if (inputType.type.startsWith('sh-wsh-')) {\n finalScriptSig = Script.encode([Script.encode([0, u.sha256(inputType.lastScript)])]);\n }\n else if (inputType.type.startsWith('sh-')) {\n finalScriptSig = Script.encode([...Script.decode(inputScript), inputType.lastScript]);\n }\n else if (inputType.type.startsWith('wsh-')) {\n }\n else if (inputType.txType !== 'segwit')\n finalScriptSig = inputScript;\n if (!finalScriptSig && !finalScriptWitness)\n throw new Error('Unknown error finalizing input');\n if (finalScriptSig)\n input.finalScriptSig = finalScriptSig;\n if (finalScriptWitness)\n input.finalScriptWitness = finalScriptWitness;\n cleanFinalInput(input);\n }\n finalize() {\n for (let i = 0; i < this.inputs.length; i++)\n this.finalizeIdx(i);\n }\n extract() {\n if (!this.isFinal)\n throw new Error('Transaction has unfinalized inputs');\n if (!this.outputs.length)\n throw new Error('Transaction has no outputs');\n if (this.fee < 0n)\n throw new Error('Outputs spends more than inputs amount');\n return this.toBytes(true, true);\n }\n combine(other) {\n for (const k of ['PSBTVersion', 'version', 'lockTime']) {\n if (this.opts[k] !== other.opts[k]) {\n throw new Error(`Transaction/combine: different ${k} this=${this.opts[k]} other=${other.opts[k]}`);\n }\n }\n for (const k of ['inputs', 'outputs']) {\n if (this[k].length !== other[k].length) {\n throw new Error(`Transaction/combine: different ${k} length this=${this[k].length} other=${other[k].length}`);\n }\n }\n const thisUnsigned = this.global.unsignedTx ? RawOldTx.encode(this.global.unsignedTx) : P.EMPTY;\n const otherUnsigned = other.global.unsignedTx\n ? RawOldTx.encode(other.global.unsignedTx)\n : P.EMPTY;\n if (!equalBytes(thisUnsigned, otherUnsigned))\n throw new Error(`Transaction/combine: different unsigned tx`);\n this.global = psbt.mergeKeyMap(psbt.PSBTGlobal, this.global, other.global, undefined, this.opts.allowUnknown);\n for (let i = 0; i < this.inputs.length; i++)\n this.updateInput(i, other.inputs[i], true);\n for (let i = 0; i < this.outputs.length; i++)\n this.updateOutput(i, other.outputs[i], true);\n return this;\n }\n clone() {\n // deepClone probably faster, but this enforces that encoding is valid\n return Transaction.fromPSBT(this.toPSBT(this.opts.PSBTVersion), this.opts);\n }\n}\nexport function PSBTCombine(psbts) {\n if (!psbts || !Array.isArray(psbts) || !psbts.length)\n throw new Error('PSBTCombine: wrong PSBT list');\n const tx = Transaction.fromPSBT(psbts[0]);\n for (let i = 1; i < psbts.length; i++)\n tx.combine(Transaction.fromPSBT(psbts[i]));\n return tx.toPSBT();\n}\n// Copy-pasted from bip32 derive, maybe do something like 'bip32.parsePath'?\nconst HARDENED_OFFSET = 0x80000000;\nexport function bip32Path(path) {\n const out = [];\n if (!/^[mM]'?/.test(path))\n throw new Error('Path must start with \"m\" or \"M\"');\n if (/^[mM]'?$/.test(path))\n return out;\n const parts = path.replace(/^[mM]'?\\//, '').split('/');\n for (const c of parts) {\n const m = /^(\\d+)('?)$/.exec(c);\n if (!m || m.length !== 3)\n throw new Error(`Invalid child index: ${c}`);\n let idx = +m[1];\n if (!Number.isSafeInteger(idx) || idx >= HARDENED_OFFSET)\n throw new Error('Invalid index');\n // hardened key\n if (m[2] === \"'\")\n idx += HARDENED_OFFSET;\n out.push(idx);\n }\n return out;\n}\n//# sourceMappingURL=transaction.js.map","import { Base64 } from '@vbyte/micro-lib'\nimport { Transaction } from '@scure/btc-signer'\n\nimport type { PSBTData } from '@/types/index.js'\n\nexport function decode_psbt (b64str : string) : Transaction {\n const psbt = Base64.decode(b64str)\n return Transaction.fromPSBT(psbt, { allowUnknownOutputs: true })\n}\n\nexport function encode_psbt (psbt : PSBTData) : string {\n const psbt_bytes = psbt.toPSBT(0)\n return Base64.encode(psbt_bytes)\n}\n\nexport function parse_psbt (psbt : string | PSBTData) : Transaction {\n if (psbt instanceof Transaction) {\n return psbt\n } else if (typeof psbt === 'string') {\n return decode_psbt(psbt)\n } else {\n throw new Error('invalid psbt input: ' + psbt)\n }\n}\n","import { Assert } from '@vbyte/micro-lib'\nimport { parse_psbt } from './encoder.js'\n\nimport type {\n PSBTData,\n PSBTInput,\n PSBTOutput,\n PSBTPrevouts\n} from '@/types/index.js'\n\nexport function collect_vins (\n psbt : string | PSBTData\n) : PSBTInput[] {\n const pdata = parse_psbt(psbt)\n const count = pdata.inputsLength\n const vins : PSBTInput[] = []\n for (let i = 0; i < count; i++) {\n const vin = pdata.getInput(i)\n vins.push(vin)\n }\n return vins\n}\n\nexport function collect_vouts (\n psbt : string | PSBTData\n) : PSBTOutput[] {\n const pdata = parse_psbt(psbt)\n const count = pdata.outputsLength\n const vouts : PSBTOutput[] = []\n for (let i = 0; i < count; i++) {\n const vout = pdata.getOutput(i)\n vouts.push(vout)\n }\n return vouts\n}\n\nexport function collect_prevouts (\n psbt : PSBTData\n) : PSBTPrevouts {\n const amounts : bigint[] = [],\n scripts : Uint8Array[] = []\n const pdata = parse_psbt(psbt)\n for (let i = 0; i < pdata.inputsLength; i++) {\n const txin = pdata.getInput(i)\n Assert.exists(txin.witnessUtxo, `witness utxo does not exist for input ${i}`)\n amounts.push(txin.witnessUtxo.amount)\n scripts.push(txin.witnessUtxo.script)\n }\n return { amounts, scripts }\n}\n\nexport function finalize_legacy_inputs (pdata : PSBTData) {\n for (let i = 0; i < pdata.inputsLength; i++) {\n const pvin = pdata.getInput(i)\n const script = pvin.redeemScript\n const psig = pvin.partialSig?.at(0)\n if (script !== undefined && psig !== undefined) {\n pdata.finalizeIdx(i)\n }\n }\n return pdata\n}\n","import { OPCODE_MAP } from './words.js'\nimport { encode_script } from './encode.js'\n\nimport {\n decode_script,\n is_valid_script\n} from './decode.js'\n\nimport {\n parse_script_pubkeys,\n prefix_script_size\n} from './util.js'\n\nexport * from './decode.js'\nexport * from './encode.js'\nexport * from './util.js'\nexport * from './words.js'\n\nexport namespace ScriptUtil {\n export const prefix_size = prefix_script_size\n export const decode = decode_script\n export const encode = encode_script\n export const is_valid = is_valid_script\n export const get_pubkeys = parse_script_pubkeys\n export const OPCODES = OPCODE_MAP\n}\n","import { Assert } from '@vbyte/micro-lib'\nimport { parse_psbt } from './encoder.js'\n\nimport {\n collect_vins,\n collect_vouts\n} from './util.js'\n\nimport type { PSBTData } from '@/types/index.js'\n\nexport function assert_psbt_is_funded (psbt : string | PSBTData) : void {\n const pdata = parse_psbt(psbt)\n const pvouts = collect_vins(pdata)\n const txouts = collect_vouts(pdata)\n const vin_amt = pvouts.reduce((p, n) => p + Number(n.witnessUtxo?.amount ?? 0), 0)\n const out_amt = txouts.reduce((p, n) => p + Number(n.amount ?? 0), 0)\n Assert.ok(vin_amt >= out_amt, `value in (${vin_amt}) < value out (${out_amt})`)\n}","import { parse_psbt } from './encoder.js'\nimport { finalize_legacy_inputs } from './util.js'\n\nimport { PSBTData } from '@/types/index.js'\n\nexport function get_vsize (psbt : string | PSBTData) : number {\n const pdata = parse_psbt(psbt)\n return pdata.vsize\n}\n\nexport function get_txhex (psbt : PSBTData) : string {\n let pdata = parse_psbt(psbt)\n pdata = finalize_legacy_inputs(pdata)\n return pdata.hex\n}\n","import { Buff } from '@vbyte/buff'\n\nexport function prefix_script_size (script: string | Uint8Array): string {\n return Buff.bytes(script).prefix_varint('le').hex\n}\n\nexport function parse_script_pubkeys (script: string | Uint8Array): string[] {\n // Convert the script to a string if it's a Uint8Array\n const scriptHex = typeof script === 'string' ? script : Buff.bytes(script).hex\n \n // Define the regex pattern to match the specified pattern\n // 20 = pushdata byte for 32 bytes (0x20)\n // [0-9a-f]{64} = 32-byte hex string (64 hex characters)\n // (ac|ad|ba) = OP_CHECKSIG (0xac), OP_CHECKSIGVERIFY (0xad), or OP_CHECKSIGADD (0xba)\n const pubkeyPattern = /20([0-9a-f]{64})(ac|ad|ba)/gi\n \n // Find all matches in the script\n const matches = [...scriptHex.matchAll(pubkeyPattern)]\n \n // Extract the public keys from the matches\n return matches.map(match => match[1])\n}\n\n// export function parse_witness_pubkeys (\n// witness : string[] | TxWitnessData\n// ) : string[] {\n// // Parse the witness data if it is an array.\n// if (witness instanceof Array) {\n// witness = parse_witness_data(witness)\n// }\n// // Define the set of pubkeys.\n// const pubkeys = new Set<string>()\n// // Get the witness type.\n// const type = witness.type\n// // If the witness type is a p2tr-ts:\n// if (type === 'p2tr-ts') {\n// // Parse the internal pubkey from the cblock.\n// const int_pk = witness.cblock?.slice(2, 66)\n// // If the internal pubkey is present, add it to the list.\n// if (int_pk !== undefined) pubkeys.add(int_pk)\n// // Parse any pubkeys witness parameters.\n// witness.params\n// .filter(p => p.length === 64)\n// .forEach(p => pubkeys.add(p))\n// // Parse any pubkeys from the script.\n// parse_taproot_pubkeys(witness.script!)\n// .forEach(p => pubkeys.add(p))\n// // If the witness type is a p2w-pkh:\n// } else if (type === 'p2w-pkh') {\n// // Parse the witness parameter pubkey.\n// const params_pk = witness.params.find(p => p.length === 66)\n// // If the parameter pubkey is present, add it to the list.\n// if (params_pk !== undefined) pubkeys.add(params_pk)\n// // If the witness type is a p2w-sh:\n// } else if (type === 'p2w-sh') {\n// // Parse any witness parameter pubkeys.\n// witness.params\n// .filter(p => p.length === 66)\n// .forEach(p => pubkeys.add(p))\n// // Parse any script pubkeys.\n// parse_segwit_pubkeys(witness.script!)\n// .forEach(p => pubkeys.add(p))\n// }\n// // Return the list of pubkeys.\n// return Array.from(pubkeys)\n// }\n\n// function parse_segwit_pubkeys (script : string) : string[] {\n// const regex = /21([0-9a-f]{66})(ac|ad)/gi\n// const matches = [...script.matchAll(regex)]\n// return matches.map(match => match[1])\n// }\n\n// function parse_taproot_pubkeys (script : string) : string[] {\n// const regex = /20([0-9a-f]{64})(ac|ad|ba)/gi\n// const matches = [...script.matchAll(regex)]\n// return matches.map(match => match[1])\n// }\n","import { Buff } from '@vbyte/buff'\nimport { Assert } from '@vbyte/micro-lib'\nimport { sha256 } from '@vbyte/micro-lib/hash'\n\nimport type {\n SigHashOptions,\n TxInput,\n TxData,\n TxOutput,\n} from '@/types/index.js'\n\nexport function get_prevout (vin : TxInput) : TxOutput {\n Assert.exists(vin.prevout, 'Prevout data missing for input: ' + String(vin.txid))\n return vin.prevout\n}\n\nexport function parse_txinput (\n txdata : TxData,\n config ?: SigHashOptions\n) : TxInput {\n let { txindex, txinput } = config ?? {}\n if (txindex !== undefined) {\n if (txindex >= txdata.vin.length) {\n // If index is out of bounds, throw error.\n throw new Error('Input index out of bounds: ' + String(txindex))\n }\n txinput = txdata.vin.at(txindex)\n }\n Assert.ok(txinput !== undefined)\n return txinput\n}\n\nexport function get_annex_data (\n witness ?: string[]\n) : Buff | undefined {\n // If no witness exists, return undefined.\n if (witness === undefined) return\n // If there are less than two elements, return undefined.\n if (witness.length < 2) return\n // Define the last element as the annex.\n const annex = witness.at(-1)\n // If the annex is a string and starts with '50',\n if (typeof annex === 'string' && annex.startsWith('50')) {\n // Convert the annex to a buffer with a varint prefix.\n const bytes = Buff.hex(annex).prefix_varint('be')\n // Return the sha256 of the annex.\n return sha256(bytes)\n }\n // Else, return undefined.\n return undefined\n}\n","export const COINBASE = {\n TXID : '00'.repeat(32),\n VOUT : 0xFFFFFFFF,\n}\n\nexport const DEFAULT = {\n LOCKTIME : 0,\n SEQUENCE : 0xFFFFFFFF,\n VERSION : 2,\n}\n\nexport const TAPLEAF_VERSIONS = [\n 0xc0, 0xc2, 0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce,\n 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde,\n 0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee,\n 0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc, 0xfe,\n 0x66, 0x7e, 0x80, 0x84, 0x96, 0x98, 0xba, 0xbc,\n 0xbe\n]\n\nexport const TAPLEAF_DEFAULT_VERSION = 0xc0\n\nexport const LOCK_SCRIPT_REGEX : Record<string, RegExp> = {\n 'p2pkh' : /^76a914[0-9a-f]{40}88ac$/i,\n 'p2sh' : /^a914[0-9a-f]{40}87$/i,\n 'p2wpkh' : /^0014[0-9a-f]{40}$/i,\n 'p2wsh' : /^0020[0-9a-f]{64}$/i,\n 'p2tr' : /^5120[0-9a-f]{64}$/i,\n 'opreturn' : /^6a[0-9a-f]{2,}$/i,\n}\n\nexport const SCRIPT_INT_KEY = ''\n\nexport const TX_SIZE = {\n GLOBAL_BASE : 8,\n GLOBAL_WIT : 10,\n TXIN_BASE : 32 + 4 + 4,\n TXOUT_BASE : 8,\n}\n\nexport const SIGHASH_DEFAULT = 0x01\nexport const SIGHASH_SEGWIT = [ 0x01, 0x02, 0x03, 0x81, 0x82, 0x83 ]\nexport const SIGHASH_TAPROOT = [ 0x00, ...SIGHASH_SEGWIT ]\n","import { z } from 'zod'\n\nimport { byte32, uint } from '@vbyte/micro-lib/schema'\n\nexport const taptree = z.union([ z.array(byte32), byte32 ])\n\nexport const config = z.object({\n pubkey : byte32,\n leaves : taptree.array().optional(),\n target : byte32.optional(),\n version : uint.optional(),\n})\n","import { z } from 'zod'\n\nimport { hex, hex32, uint } from '@vbyte/micro-lib/schema'\n\nconst sats = z.bigint().positive().max(2_100_000_000_000_000n)\n\nexport const tx_output = z.object({\n value : sats,\n script_pk : hex,\n})\n\nexport const tx_input = z.object({\n coinbase : hex.nullable(),\n txid : hex32,\n vout : uint,\n prevout : tx_output.nullable(),\n script_sig : hex.nullable(),\n sequence : uint,\n witness : z.array(hex)\n})\n\nexport const tx_data = z.object({\n version : uint,\n vin : z.array(tx_input),\n vout : z.array(tx_output),\n locktime : uint,\n})\n\nexport const vout_template = tx_output.extend({\n value : z.union([ uint, sats ])\n})\n\nexport const vin_template = tx_input.extend({\n coinbase : hex.nullable().optional(),\n prevout : vout_template.nullable().optional(),\n script_sig : hex.nullable().optional(),\n sequence : z.union([ hex, uint ]).optional(),\n witness : z.array(hex).optional(),\n})\n\nexport const tx_template = z.object({\n version : uint.default(1),\n vin : z.array(vin_template).default([]),\n vout : z.array(vout_template).default([]),\n locktime : uint.optional(),\n})\n","import * as Schema from '@/schema/index.js'\n\nimport {\n TxSpendInput,\n TxData,\n TxInput,\n TxInputTemplate,\n TxOutput,\n TxTemplate,\n TxOutputTemplate,\n TxSpendData,\n} from '@/types/index.js'\n\nexport function assert_tx_template (txdata : unknown) : asserts txdata is TxTemplate {\n Schema.tx.tx_template.parse(txdata)\n}\n\nexport function assert_has_prevouts (vin : TxInput[]) : asserts vin is TxSpendInput[] {\n if (vin.some(txin => txin.prevout === null)) {\n throw new Error('transaction missing prevouts')\n }\n}\n\nexport function assert_tx_data (txdata : unknown) : asserts txdata is TxData {\n Schema.tx.tx_data.parse(txdata)\n}\n\nexport function assert_tx_spend_data (txdata : unknown) : asserts txdata is TxSpendData {\n // Assert the txdata is a valid tx data object.\n assert_tx_data(txdata)\n // Assert the txdata has prevouts.\n assert_has_prevouts(txdata.vin)\n}\n\nexport function assert_tx_input (tx_input : unknown) : asserts tx_input is TxInput {\n Schema.tx.tx_input.parse(tx_input)\n}\n\nexport function assert_tx_output (tx_output : unknown) : asserts tx_output is TxOutput {\n Schema.tx.tx_output.parse(tx_output)\n}\n\nexport function assert_vin_template (vin : unknown) : asserts vin is TxInputTemplate {\n Schema.tx.vin_template.parse(vin)\n}\n\nexport function assert_vout_template (vout : unknown) : asserts vout is TxOutputTemplate {\n Schema.tx.vout_template.parse(vout)\n}\n","import { Buff } from '@vbyte/buff'\nimport { Assert } from '@vbyte/micro-lib'\nimport { assert_tx_data } from './validate.js'\nimport { COINBASE } from '@/const.js'\n\nimport {\n TxInput,\n TxOutput,\n TxData\n} from '@/types/index.js'\n\nexport function encode_tx (\n txdata : TxData,\n use_segwit = true\n) : Buff {\n // Assert the txdata is a valid tx data object.\n assert_tx_data(txdata)\n // Unpack the transaction data.\n const { version, vin, vout, locktime } = txdata\n // Create a buffer for the transaction.\n const buffer : Buff[] = [ encode_tx_version(version) ]\n // If the transaction is a segwit transaction,\n if (use_segwit) {\n // Add the segwit marker to the buffer.\n buffer.push(Buff.hex('0001'))\n }\n // Add the inputs to the buffer.\n buffer.push(encode_tx_inputs(vin))\n // Add the outputs to the buffer.\n buffer.push(encode_tx_outputs(vout))\n // If the transaction is a segwit transaction,\n if (use_segwit) {\n // For each input in the transaction,\n for (const input of vin) {\n // Add the witness data to the buffer.\n buffer.push(encode_vin_witness(input.witness))\n }\n }\n // Add the locktime to the buffer.\n buffer.push(encode_tx_locktime(locktime))\n // Return the buffer as a single payload. \n return Buff.join(buffer)\n}\n\nexport function encode_tx_version (num : number) : Buff {\n // Encode the transaction version as a 4-byte little-endian number.\n return Buff.num(num, 4).reverse()\n}\n\nexport function encode_txin_txid (txid : string) : Buff {\n // Encode the transaction ID as a 32-byte little-endian number.\n return Buff.hex(txid, 32).reverse()\n}\n\nexport function encode_txin_vout (vout : number) : Buff {\n // Encode the output index as a 4-byte little-endian number.\n return Buff.num(vout, 4).reverse()\n}\n\nexport function encode_txin_sequence (sequence : number) : Buff {\n // Encode the sequence number as a 4-byte little-endian number.\n return Buff.num(sequence, 4).reverse()\n}\n\nexport function encode_tx_inputs (vin : TxInput[]) : Buff {\n // Create a buffer for the inputs, starting with the array length.\n const raw : Buff[] = [ Buff.varint(vin.length, 'le') ]\n // For each input in the array,\n for (const input of vin) {\n // Encode the input, and add it to the buffer.\n raw.push(encode_vin(input))\n }\n // Return the buffer as a single payload.\n return Buff.join(raw)\n}\n\nexport function encode_vin (txin : TxInput) : Buff {\n // If the input is a coinbase,\n if (txin.coinbase !== null) {\n // Encode and return the coinbase as a single payload.\n return Buff.join([\n encode_txin_txid(COINBASE.TXID),\n encode_txin_vout(COINBASE.VOUT),\n encode_script_data(txin.coinbase),\n encode_txin_sequence(txin.sequence)\n ])\n } else {\n // Encode and return the input as a single payload.\n return Buff.join([\n encode_txin_txid(txin.txid),\n encode_txin_vout(txin.vout),\n encode_script_data(txin.script_sig),\n encode_txin_sequence(txin.sequence)\n ])\n }\n}\n\nexport function encode_vout_value (value : bigint) : Buff {\n // Encode the value as an 8-byte little-endian number.\n return Buff.big(value, 8).reverse()\n}\n\nexport function encode_tx_outputs (vout : TxOutput[]) : Buff {\n // Create a buffer for the outputs, starting with the array length.\n const buffer : Buff[] = [ Buff.varint(vout.length, 'le') ]\n // For each output in the array,\n for (const output of vout) {\n // Encode the output, and add it to the buffer.\n buffer.push(encode_tx_vout(output))\n }\n // Return the buffer as a single payload.\n return Buff.join(buffer)\n}\n\nexport function encode_tx_vout (txout : TxOutput) : Buff {\n // Get the value and script pubkey from the output.\n const { value, script_pk } = txout\n // Return the data encoded as a single payload.\n return Buff.join([\n encode_vout_value(value),\n encode_script_data(script_pk)\n ])\n}\n\nexport function encode_vin_witness (data : string[]) : Buff {\n // Create a buffer for the witness data, starting with the array length.\n const buffer : Buff[] = [ Buff.varint(data.length) ]\n // For each parameter in the witness array,\n for (const param of data) {\n // Encode the parameter, and add it to the buffer.\n buffer.push(encode_script_data(param))\n }\n // Return the buffer as a single payload.\n return Buff.join(buffer)\n}\n\nexport function encode_tx_locktime (locktime : number) : Buff {\n // Encode the locktime as a 4-byte little-endian number.\n return Buff.num(locktime, 4).reverse()\n}\n\nexport function encode_script_data (\n script : string | null\n) : Buff {\n // If the script is not null,\n if (script !== null) {\n // Assert that the script is a hex string.\n Assert.is_hex(script)\n // Encode the script, and add it to the buffer.\n return Buff.hex(script).prefix_varint('le')\n } else {\n // Return a single byte of zero.\n return Buff.hex('00')\n }\n}\n","import { Buff } from '@vbyte/buff'\nimport { Test } from '@vbyte/micro-lib'\nimport { Assert } from '@vbyte/micro-lib/assert'\nimport { hash256 } from '@vbyte/micro-lib/hash'\nimport { encode_tx } from './encode.js'\nimport { assert_tx_template } from './validate.js'\n\nimport { DEFAULT, LOCK_SCRIPT_REGEX } from '@/const.js'\n\nimport type {\n TxData,\n TxOutput,\n TxOutputInfo,\n TxOutputTemplate,\n TxOutputType,\n TxValue,\n WitnessVersion\n} from '@/types/index.js'\n\nexport function is_return_script (script : string) : boolean {\n return script.startsWith('6a')\n}\n\nexport function get_vout_info (txout : TxOutput) : TxOutputInfo {\n return {\n type : get_vout_type(txout.script_pk),\n version : get_vout_version(txout.script_pk)\n }\n}\n\nexport function get_vout_type (\n script : string\n) : TxOutputType {\n for (const [ type, regex ] of Object.entries(LOCK_SCRIPT_REGEX)) {\n if (regex.test(script)) return type as TxOutputType\n }\n return 'unknown'\n}\n\nexport function get_vout_version (\n script : string\n) : WitnessVersion {\n const wit_ver = script.slice(0, 4)\n switch (wit_ver) {\n case '0014' : return 0\n case '5120' : return 1\n default : return null\n }\n}\n\nexport function get_txid (\n txdata : TxData\n) : string {\n assert_tx_template(txdata)\n const data = encode_tx(txdata, false)\n return hash256(data).reverse().hex\n}\n\nexport function get_txhash (\n txdata : TxData\n) : string {\n assert_tx_template(txdata)\n const data = encode_tx(txdata, true)\n return hash256(data).reverse().hex\n}\n\nexport function get_tx_value (\n txdata : TxData\n) : TxValue {\n const vin = txdata.vin.reduce((acc, txin) => acc + (txin.prevout?.value ?? 0n), 0n)\n const vout = txdata.vout.reduce((acc, txout) => acc + txout.value, 0n)\n const fees = (vin > vout) ? (vin - vout) : 0n\n return { fees, vin, vout }\n}\n\nexport function get_prevouts (txdata : TxData) : TxOutput[] {\n // Assert the structure of the transaction data is valid.\n assert_tx_template(txdata)\n // Collect the prevouts from the transaction.\n const prevouts = txdata.vin.map(e => e.prevout)\n // Assert that all the prevouts are defined.\n Assert.ok(prevouts.every(e => e !== null), 'prevouts missing from tx')\n // Return the array of prevouts.\n return prevouts\n}\n\nexport function normalize_sequence (sequence? : number | string | null) : number {\n // If sequence is not defined, return a default sequence value.\n if (!Test.exists(sequence)) return DEFAULT.SEQUENCE\n // If sequence is a hex string, decode it and return the number value.\n if (Test.is_hex(sequence)) return Buff.hex(sequence as string, 4).reverse().num\n // If sequence is a valid unsigned integer, return the value.\n if (Test.is_uint(sequence)) return sequence\n // Else, throw an error.\n throw new Error('invalid sequence value: ' + String(sequence))\n}\n\nexport function normalize_value (value : number | bigint) : bigint {\n // If value is a unsigned integer, return it as a bigint.\n if (Test.is_uint(value)) return BigInt(value)\n // If value is a bigint, return it as-is.\n if (typeof value === 'bigint') return value\n // Else, throw an error.\n throw new TypeError('invalid output value: ' + String(value))\n}\n\nexport function normalize_prevout (prevout : TxOutputTemplate) : TxOutput {\n // Return the output with a normalized value.\n return { script_pk: prevout.script_pk, value: normalize_value(prevout.value) }\n}\n","import { Assert } from '@vbyte/micro-lib'\nimport { COINBASE, DEFAULT } from '@/const.js'\n\nimport {\n normalize_prevout,\n normalize_sequence,\n normalize_value\n} from './util.js'\n\nimport {\n assert_tx_template,\n assert_vin_template,\n assert_vout_template\n} from './validate.js'\n\nimport type {\n TxData,\n TxInput,\n TxOutput,\n TxTemplate,\n TxSpendInput,\n TxCoinbaseInput,\n TxOutputTemplate,\n TxVirtualInput,\n TxInputTemplate\n} from '@/types/index.js'\n\nexport function create_coinbase_input (\n config : TxInputTemplate\n) : TxCoinbaseInput {\n assert_vin_template(config)\n Assert.exists(config.coinbase, 'coinbase is required')\n const txid = COINBASE.TXID\n const vout = COINBASE.VOUT\n const coinbase = config.coinbase\n const witness = config.witness ?? []\n const sequence = normalize_sequence(config.sequence)\n return { coinbase, prevout: null, script_sig: null, sequence, witness, txid, vout }\n}\n\nexport function create_virtual_input (\n config : TxInputTemplate\n) : TxVirtualInput {\n assert_vin_template(config)\n Assert.is_empty(config.coinbase, 'coinbase is not allowed')\n Assert.is_empty(config.prevout, 'prevout is not allowed')\n const { txid, vout, script_sig = null, witness = [] } = config\n const sequence = normalize_sequence(config.sequence)\n return { txid, vout, coinbase: null, prevout: null, script_sig, sequence, witness }\n}\n\nexport function create_spend_input (\n config : TxInputTemplate\n) : TxSpendInput {\n assert_vin_template(config)\n Assert.exists(config.prevout, 'prevout is required')\n const { txid, vout, script_sig = null, witness = [] } = config\n const prevout = normalize_prevout(config.prevout)\n const sequence = normalize_sequence(config.sequence)\n return { txid, vout, coinbase: null, prevout, script_sig, sequence, witness }\n}\n\nexport function create_tx_input (\n config : TxInputTemplate\n) : TxInput {\n if (config.coinbase) return create_coinbase_input(config)\n if (config.prevout) return create_spend_input(config)\n return create_virtual_input(config)\n}\n\nexport function create_tx_output (\n config : TxOutputTemplate\n) : TxOutput {\n assert_vout_template(config)\n const script_pk = config.script_pk\n const value = normalize_value(config.value)\n return { script_pk, value }\n}\n\nexport function create_tx (\n config? : Partial<TxTemplate>\n) : TxData {\n assert_tx_template(config)\n const { vin = [], vout = [] } = config ?? { vin: [], vout: [] }\n const locktime = config.locktime ?? DEFAULT.LOCKTIME\n const version = config.version ?? DEFAULT.VERSION\n const inputs = vin.map(txin => create_tx_input(txin))\n const outputs = vout.map(txout => create_tx_output(txout))\n return { locktime, vin : inputs, vout : outputs, version }\n}\n","import { Stream } from '@vbyte/buff'\nimport { Assert } from '@vbyte/micro-lib/assert'\nimport { parse_error } from '@vbyte/micro-lib/util'\nimport { COINBASE } from '@/const.js'\n\nimport {\n TxInput,\n TxOutput,\n TxCoinbaseInput,\n TxVirtualInput,\n TxDecodedData\n} from '@/types/index.js'\n\nexport function decode_tx (\n txdata : string | Uint8Array,\n use_segwit = true\n) : TxDecodedData {\n // Assert the txdata is a bytes object.\n Assert.is_bytes(txdata, 'txdata must be hex or bytes')\n // Setup a byte-stream.\n const stream = new Stream(txdata)\n // Parse tx version.\n const version = read_version(stream)\n // Check and enable any flags that are set.\n const has_witness = (use_segwit)\n ? check_witness_flag(stream)\n : false\n // Parse our inputs and outputs.\n const vin = read_inputs(stream)\n const vout = read_outputs(stream)\n // If witness flag is set, parse witness data.\n if (has_witness) {\n for (const txin of vin) {\n txin.witness = read_witness(stream)\n }\n }\n // Parse locktime.\n const locktime = read_locktime(stream)\n // Return transaction object with calculated fields.\n return { version, vin, vout, locktime }\n}\n\nfunction read_version (stream : Stream) : number {\n return stream.read(4).reverse().to_num()\n}\n\nfunction check_witness_flag (stream : Stream) : boolean {\n const [ marker, flag ] : number[] = [ ...stream.peek(2) ]\n if (marker === 0) {\n stream.read(2)\n if (flag === 1) {\n return true\n } else {\n throw new Error(`Invalid witness flag: ${flag}`)\n }\n }\n return false\n}\n\nfunction read_inputs (stream : Stream) : TxInput[] {\n const inputs = []\n const vinCount = stream.varint()\n for (let i = 0; i < vinCount; i++) {\n const txinput = read_vin(stream)\n inputs.push(txinput)\n }\n return inputs\n}\n\nfunction read_vin (stream : Stream) : TxInput {\n const txid = stream.read(32).reverse().hex\n const vout = stream.read(4).reverse().num\n const script_sig = read_payload(stream)\n const sequence = stream.read(4).reverse().num\n const witness : string[] = []\n if (txid === COINBASE.TXID && vout === COINBASE.VOUT) {\n return { coinbase : script_sig, prevout: null, script_sig : null, sequence, txid, vout, witness } as TxCoinbaseInput\n } else {\n return { coinbase : null, prevout: null, script_sig, sequence, txid, vout, witness } as TxVirtualInput\n }\n}\n\nfunction read_outputs (stream : Stream) : TxOutput[] {\n const outputs = []\n const vcount = stream.varint()\n for (let i = 0; i < vcount; i++) {\n try {\n outputs.push(read_vout(stream))\n } catch (error) {\n throw new Error(`failed to decode output: ${i}: ${parse_error(error)}`)\n }\n }\n return outputs\n}\n\nfunction read_vout (stream : Stream) : TxOutput {\n const value = stream.read(8).reverse().big\n const script_pk = read_payload(stream)\n Assert.exists(script_pk, 'failed to decode script_pk')\n return { value, script_pk }\n}\n\nfunction read_witness (stream : Stream) : string[] {\n const stack = []\n const count = stream.varint()\n for (let i = 0; i < count; i++) {\n const element = read_payload(stream)\n if (element === null) {\n throw new Error('failed to decode witness element: ' + i)\n }\n stack.push(element)\n }\n return stack\n}\n\nexport function read_payload (stream : Stream) : string | null {\n const size = stream.varint('le')\n return (size > 0) ? stream.read(size).hex : null\n}\n\nfunction read_locktime (stream : Stream) : number {\n return stream.read(4).reverse().to_num()\n}\n","import { Assert } from '@vbyte/micro-lib/assert'\nimport { decode_tx } from './decode.js'\nimport { assert_tx_template } from './validate.js'\nimport { create_tx, create_tx_output } from './create.js'\n\nimport type { TxData, TxOutputTemplate } from '@/types/index.js'\n\nexport function parse_tx (\n txdata : unknown,\n prevouts? : TxOutputTemplate[]\n) : TxData {\n // Define the tx variable.\n let tx : TxData\n // If the txdata is a string or Uint8Array,\n if (typeof txdata === 'string' || txdata instanceof Uint8Array) {\n // Decode the tx.\n tx = decode_tx(txdata)\n } else {\n // Assert the txdata is a valid tx template.\n assert_tx_template(txdata)\n // Create the tx.\n tx = create_tx(txdata)\n }\n // If the prevouts are provided,\n if (prevouts) {\n // Assert the prevouts are a non-empty array.\n Assert.has_items(prevouts, 'prevouts must be a non-empty array')\n // Iterate over the inputs.\n for (const [ idx, vin ] of tx.vin.entries()) {\n // Get the prevout.\n const prevout = prevouts.at(idx)\n // Assert the prevout exists.\n Assert.exists(prevout, 'prevout not found for input index: ' + idx)\n // Create the prevout.\n vin.prevout = create_tx_output(prevout)\n }\n }\n // Return the tx.\n return tx\n}\n\nexport function serialize_tx (\n txdata : unknown\n) : Record<string, unknown> {\n const tx = parse_tx(txdata)\n const version = tx.version\n const locktime = tx.locktime\n\n const vin : Record<string, unknown>[] = []\n const vout : Record<string, unknown>[] = []\n\n for (const e of tx.vin) {\n if (e.prevout !== null) {\n vin.push({\n script_pk : e.prevout.script_pk,\n value : Number(e.prevout.value)\n })\n }\n }\n\n for (const e of tx.vout) {\n vout.push({\n script_pk : e.script_pk,\n value : Number(e.value)\n })\n }\n\n return { version, locktime, vin, vout }\n}\n","import { Buff, Bytes } from '@vbyte/buff'\nimport { parse_tx } from './parse.js'\n\nimport {\n encode_tx,\n encode_tx_inputs,\n encode_tx_outputs,\n encode_tx_vout,\n encode_vin,\n encode_vin_witness\n} from './encode.js'\n\nimport type {\n TxData,\n TxInput,\n TxOutput,\n TxSize\n} from '@/types/index.js'\n\nconst WIT_FLAG_BYTES = 2\n\nexport function get_vsize (\n bytes : Bytes\n) : number {\n const weight = Buff.bytes(bytes).length\n const remain = (weight % 4 > 0) ? 1 : 0\n return Math.ceil(weight / 4) + remain\n}\n\nexport function get_txsize (\n txdata : string | TxData\n) : TxSize {\n const json = parse_tx(txdata)\n const base = encode_tx(json, false).length\n const total = encode_tx(json, true).length\n const weight = base * 3 + total\n const remain = (weight % 4 > 0) ? 1 : 0\n const vsize = Math.ceil(weight / 4) + remain\n return { base, total, vsize, weight }\n}\n\nexport function get_vin_size (vin : TxInput[]) : number {\n const bytes = encode_tx_inputs(vin)\n return bytes.length\n}\n\nexport function get_vout_size (vout : TxOutput[]) : number {\n const bytes = encode_tx_outputs(vout)\n return bytes.length\n}\n\nexport function get_segwit_size (txinputs : TxInput[]) : number {\n const segwit_data = txinputs\n .filter(e => e.witness.length > 0)\n .map(e => e.witness)\n return WIT_FLAG_BYTES + segwit_data\n .reduce((acc, e) => acc + encode_vin_witness(e).length, 0)\n}\n\nexport function get_txin_size (txinput : TxInput) : number {\n const bytes = encode_vin(txinput)\n return bytes.length\n}\n\nexport function get_txout_size (txoutput : TxOutput) : number {\n const bytes = encode_tx_vout(txoutput)\n return bytes.length\n}\n","import { Buff } from '@vbyte/buff'\nimport { hash160, hash256 } from '@vbyte/micro-lib/hash'\nimport { Assert } from '@vbyte/micro-lib'\nimport { parse_txinput } from './util.js'\n\nimport {\n prefix_script_size,\n decode_script\n} from '@/lib/script/index.js'\n\nimport {\n encode_txin_vout,\n encode_tx_locktime,\n encode_txin_sequence,\n encode_txin_txid,\n encode_vout_value,\n encode_tx_version,\n parse_tx\n} from '@/lib/tx/index.js'\n\nimport {\n SigHashOptions,\n TxData,\n TxInput,\n TxOutput\n} from '@/types/index.js'\n\nimport * as CONST from '@/const.js'\n\nexport function hash_segwit_tx (\n txdata : TxData,\n options : SigHashOptions = {}\n) : Buff {\n // Unpack the sigflag from our config object.\n const { sigflag = 0x01, txindex } = options\n // Normalize the tx into JSON format.\n const tx = parse_tx(txdata)\n // Check if the ANYONECANPAY flag is set.\n const is_anypay = (sigflag & 0x80) === 0x80\n // Save a normalized version of the sigflag.\n const flag = sigflag % 0x80\n // Check if the sigflag exists as a valid type.\n if (!CONST.SIGHASH_SEGWIT.includes(flag)) {\n throw new Error('Invalid hash type: ' + String(sigflag))\n }\n // Unpack the tx object.\n const { version, vin, vout, locktime } = tx\n // Parse the input we are signing from the config.\n const txinput = parse_txinput(tx, options)\n // Unpack the chosen input for signing.\n const { txid, vout: prevIdx, prevout, sequence } = txinput\n // Unpack the prevout for the chosen input.\n const { value } = prevout ?? {}\n // Check if a prevout value is provided.\n if (value === undefined) {\n throw new Error('Prevout value is empty!')\n }\n // Initialize our script variable from the config.\n let { pubkey, script } = options\n // Check if a pubkey is provided (instead of a script).\n if (script === undefined && pubkey !== undefined) {\n const pkhash = hash160(pubkey).hex\n script = `76a914${String(pkhash)}88ac`\n }\n // Make sure that some form of script has been provided.\n if (script === undefined) {\n throw new Error('No pubkey / script has been set!')\n }\n // Throw if OP_CODESEPARATOR is used in a script.\n if (decode_script(script).includes('OP_CODESEPARATOR')) {\n throw new Error('This library does not currently support the use of OP_CODESEPARATOR in segwit scripts.')\n }\n\n const sighash = [\n encode_tx_version(version),\n bip143_hash_prevouts(vin, is_anypay),\n bip143_hash_sequence(vin, flag, is_anypay),\n encode_txin_txid(txid),\n encode_txin_vout(prevIdx),\n prefix_script_size(script),\n encode_vout_value(value),\n encode_txin_sequence(sequence),\n bip143_hash_outputs(vout, flag, txindex),\n encode_tx_locktime(locktime),\n Buff.num(sigflag, 4).reverse()\n ]\n\n return hash256(Buff.join(sighash))\n}\n\nexport function bip143_hash_prevouts (\n vin : TxInput[],\n isAnypay ?: boolean\n) : Uint8Array {\n if (isAnypay === true) {\n return Buff.num(0, 32)\n }\n\n const stack = []\n\n for (const { txid, vout } of vin) {\n stack.push(encode_txin_txid(txid))\n stack.push(encode_txin_vout(vout))\n }\n\n return hash256(Buff.join(stack))\n}\n\nexport function bip143_hash_sequence (\n vin : TxInput[],\n sigflag : number,\n isAnyPay : boolean\n) : Uint8Array {\n if (isAnyPay || sigflag !== 0x01) {\n return Buff.num(0, 32)\n }\n\n const stack = []\n\n for (const { sequence } of vin) {\n stack.push(encode_txin_sequence(sequence))\n }\n return hash256(Buff.join(stack))\n}\n\nexport function bip143_hash_outputs (\n vout : TxOutput[],\n sigflag : number,\n idx ?: number\n) : Uint8Array {\n const stack = []\n\n if (sigflag === 0x01) {\n for (const { value, script_pk } of vout) {\n stack.push(encode_vout_value(value))\n stack.push(prefix_script_size(script_pk))\n }\n return hash256(Buff.join(stack))\n }\n\n if (sigflag === 0x03) {\n Assert.ok(idx !== undefined)\n if (idx < vout.length) {\n const { value, script_pk } = vout[idx]\n stack.push(encode_vout_value(value))\n stack.push(prefix_script_size(script_pk))\n return hash256(Buff.join(stack))\n }\n }\n\n return Buff.num(0, 32)\n}\n","import { Buff } from '@vbyte/buff'\nimport { hash340 } from '@vbyte/micro-lib/hash'\nimport { Assert } from '@vbyte/micro-lib'\nimport { prefix_script_size } from '@/lib/script/index.js'\n\nimport { TAPLEAF_DEFAULT_VERSION } from '@/const.js'\n\nconst DEFAULT_VERSION = TAPLEAF_DEFAULT_VERSION\n\nexport function encode_tapscript (\n script : string | Uint8Array,\n version = DEFAULT_VERSION\n) : Buff {\n const preimg = prefix_script_size(script)\n return encode_tapleaf(preimg, version)\n}\n\nexport function encode_tapleaf (\n data : string | Uint8Array,\n version = DEFAULT_VERSION\n) : Buff {\n const vbyte = encode_leaf_version(version)\n return hash340('TapLeaf', vbyte, data)\n}\n\nexport function encode_tapbranch (\n leaf_a : string,\n leaf_b : string\n) : Buff {\n // Compare leaves in lexical order.\n if (leaf_b < leaf_a) {\n // Swap leaves if needed.\n [ leaf_a, leaf_b ] = [ leaf_b, leaf_a ]\n }\n // Return digest of leaves as a branch hash.\n return hash340('TapBranch', leaf_a, leaf_b)\n}\n\nexport function encode_leaf_version (version = 0xc0) : number {\n return version & 0xfe\n}\n\nexport function encode_taptweak (\n pubkey : string | Uint8Array,\n data : string | Uint8Array = new Uint8Array()\n) : Buff {\n Assert.size(pubkey, 32)\n return hash340('TapTweak', pubkey, data)\n}\n","import { Buff } from '@vbyte/buff'\nimport { Assert } from '@vbyte/micro-lib'\nimport { hash340, sha256 } from '@vbyte/micro-lib/hash'\nimport { encode_tapscript } from '@/lib/taproot/encode.js'\nimport { parse_tx } from '@/lib/tx/parse.js'\nimport * as CONST from '@/const.js'\n\nimport {\n parse_txinput,\n get_annex_data,\n get_prevout\n} from './util.js'\n\nimport {\n encode_txin_vout,\n encode_tx_locktime,\n encode_txin_sequence,\n encode_txin_txid,\n encode_vout_value,\n encode_tx_version,\n encode_script_data\n} from '@/lib/tx/encode.js'\n\nimport type {\n SigHashOptions,\n TxData,\n TxInput,\n TxOutput\n} from '@/types/index.js'\n\nexport function hash_taproot_tx (\n template : TxData | string,\n config : SigHashOptions = {}\n) : Buff {\n const preimage = get_taproot_tx_preimage(template, config)\n return hash340('TapSighash', preimage)\n}\n\nexport function get_taproot_tx_preimage (\n template : TxData | string,\n config : SigHashOptions = {}\n) : Buff {\n // Unpack configuration.\n const {\n script,\n txindex,\n sigflag = 0x00,\n extflag = 0x00,\n key_version = 0x00,\n separator_pos = 0xFFFFFFFF\n } = config\n\n // Normalize the txdata object.\n const tx = parse_tx(template)\n // Unpack the txdata object.\n const { version, vin: input, vout: output, locktime } = tx\n // Parse the input we are signing from the config.\n const txinput = parse_txinput(tx, config)\n // Unpack the txinput object.\n const { txid, vout, sequence, witness = [] } = txinput\n // Check if we are using a valid hash type.\n if (!CONST.SIGHASH_TAPROOT.includes(sigflag)) {\n // If the sigflag is an invalid type, throw error.\n throw new Error('Invalid hash type: ' + String(sigflag))\n }\n if (extflag < 0 || extflag > 127) {\n // If the extflag is out of range, throw error.\n throw new Error('Extention flag out of range: ' + String(extflag))\n }\n\n let { extension } = config\n\n if (script !== undefined) {\n extension = encode_tapscript(script).hex\n }\n\n // Define the parameters of the transaction.\n const is_anypay = (sigflag & 0x80) === 0x80\n const annex = get_annex_data(witness)\n const annexBit = (annex !== undefined) ? 1 : 0\n const extendBit = (extension !== undefined) ? 1 : 0\n const spendType = ((extflag + extendBit) * 2) + annexBit\n\n // Begin building our preimage.\n const preimage : (string | Uint8Array)[] = [\n Buff.num(0x00, 1), // Add zero-byte.\n Buff.num(sigflag, 1), // Commit to signature flag.\n encode_tx_version(version), // Commit to tx version.\n encode_tx_locktime(locktime) // Commit to tx locktime.\n ]\n\n if (!is_anypay) {\n // If flag ANYONE_CAN_PAY is not set,\n // then commit to all inputs.\n const prevouts = input.map(e => get_prevout(e))\n preimage.push(\n bip341_hash_outpoints(input), // Commit to txid/vout for each input.\n bip341_hash_amounts(prevouts), // Commit to prevout amount for each input.\n bip341_hash_scripts(prevouts), // Commit to prevout script for each input.\n bip341_hash_sequence(input) // Commit to sequence value for each input.\n )\n }\n\n if ((sigflag & 0x03) < 2 || (sigflag & 0x03) > 3) {\n // If neither SINGLE or NONE flags are set,\n // include a commitment to all outputs.\n preimage.push(bip341_hash_outputs(output))\n }\n\n // At this step, we include the spend type.\n preimage.push(Buff.num(spendType, 1))\n\n if (is_anypay) {\n // If ANYONE_CAN_PAY flag is set, then we will\n // provide a commitment to the input being signed.\n const { value, script_pk } = get_prevout(txinput)\n preimage.push(\n encode_txin_txid(txid), // Commit to the input txid.\n encode_txin_vout(vout), // Commit to the input vout index.\n encode_vout_value(value), // Commit to the input's prevout value.\n encode_script_data(script_pk), // Commit to the input's prevout script.\n encode_txin_sequence(sequence) // Commit to the input's sequence value.\n )\n } else {\n // Otherwise, we must have already included a commitment\n // to all inputs in the tx, so simply add a commitment to\n // the index of the input we are signing for.\n Assert.ok(typeof txindex === 'number')\n preimage.push(Buff.num(txindex, 4).reverse())\n }\n\n if (annex !== undefined) {\n // If an annex has been set, include it here.\n preimage.push(annex)\n }\n\n if ((sigflag & 0x03) === 0x03) {\n // If the SINGLE flag is set, then include a\n // commitment to the output which is adjacent\n // to the input that we are signing for.\n Assert.ok(typeof txindex === 'number')\n preimage.push(bip341_hash_output(output[txindex]))\n }\n\n if (extension !== undefined) {\n // If we are extending this signature to include\n // other commitments (such as a tapleaf), then we\n // will add it to the preimage here.\n preimage.push(\n Buff.bytes(extension), // Extention data (in bytes).\n Buff.num(key_version), // Key version (reserved for future upgrades).\n Buff.num(separator_pos, 4,'le') // If OP_CODESEPARATOR is used, this must be set.\n )\n }\n\n return Buff.join(preimage)\n}\n\nexport function bip341_hash_outpoints (\n vin : TxInput[]\n) : Buff {\n const stack = []\n for (const { txid, vout } of vin) {\n stack.push(encode_txin_txid(txid))\n stack.push(encode_txin_vout(vout))\n }\n return sha256(Buff.join(stack))\n}\n\nexport function bip341_hash_sequence (\n vin : TxInput[]\n) : Buff {\n return sha256(...vin.map(vin => encode_txin_sequence(vin.sequence)))\n}\n\nexport function bip341_hash_amounts (\n prevouts : TxOutput[]\n) : Buff {\n return sha256(...prevouts.map(prevout => encode_vout_value(prevout.value)))\n}\n\nexport function bip341_hash_scripts (\n prevouts : TxOutput[]\n) : Buff {\n return sha256(...prevouts.map(prevout => encode_script_data(prevout.script_pk)))\n}\n\nexport function bip341_hash_outputs (\n vout : TxOutput[]\n) : Buff {\n const stack = []\n for (const { value, script_pk } of vout) {\n stack.push(encode_vout_value(value))\n stack.push(encode_script_data(script_pk))\n }\n return sha256(...stack)\n}\n\nexport function bip341_hash_output (\n vout : TxOutput\n) : Buff {\n return sha256(\n encode_vout_value(vout.value),\n encode_script_data(vout.script_pk)\n )\n}\n","import { Buff } from '@vbyte/buff'\nimport { ECC } from '@vbyte/micro-lib'\nimport { parse_tx } from '@/lib/tx/parse.js'\nimport { SIGHASH_DEFAULT } from '@/const.js'\nimport { hash_segwit_tx } from '@/lib/sighash/segwit.js'\nimport { hash_taproot_tx } from '@/lib/sighash/taproot.js'\n\nimport type {\n SigHashOptions,\n TxData\n} from '@/types/index.js'\n\nexport function sign_segwit_tx (\n seckey : string,\n txdata : TxData,\n options : SigHashOptions,\n) {\n const tx = parse_tx(txdata)\n const msg = hash_segwit_tx(tx, options)\n const sig = ECC.get_ecdsa_sig(seckey, msg).hex\n const flag = format_sigflag(options.sigflag ?? SIGHASH_DEFAULT)\n return sig + flag\n}\n\nexport function sign_taproot_tx (\n seckey : string,\n txdata : TxData,\n options : SigHashOptions,\n) {\n const tx = parse_tx(txdata)\n const msg = hash_taproot_tx(tx, options)\n const sig = ECC.get_bip340_sig(seckey, msg).hex\n const flag = format_sigflag(options.sigflag ?? 0)\n return sig + flag\n}\n\nfunction format_sigflag (flag : number) {\n return (flag !== 0) ? Buff.num(flag, 1).hex : ''\n}\n","import { Bytes } from '@vbyte/buff'\n\nimport type {\n SigHashOptions,\n TxData\n} from '@/types/index.js'\n\nexport function verify_tx (\n _txdata : TxData | Bytes,\n _config : SigHashOptions = {}\n) : boolean {\n console.warn('verify_segwit_tx is not implemented')\n return true\n}\n\n// export function verify_signature (\n// txdata : TxData | Bytes,\n// index : number,\n// config : HashConfig = {}\n// ) : boolean {\n// const tx = Tx.fmt.toJson(txdata)\n// const { throws = false } = config\n// const { prevout, witness = [] } = tx.vin[index]\n// const witnessData = Tx.util.readWitness(witness)\n// const { cblock, script, params } = witnessData\n\n// let pub : Buff\n\n// if (params.length < 1) {\n// return safeThrow('Invalid witness data: ' + String(witness), throws)\n// }\n\n// const { scriptPubKey } = prevout ?? {}\n\n// if (scriptPubKey === undefined) {\n// return safeThrow('Prevout scriptPubKey is empty!', throws)\n// }\n\n// const { type, data: tapkey } = Tx.util.readScriptPubKey(scriptPubKey)\n\n// if (type !== 'p2tr') {\n// return safeThrow('Prevout script is not a valid taproot output:' + tapkey.hex, throws)\n// }\n\n// if (tapkey.length !== 32) {\n// return safeThrow('Invalid tapkey length: ' + String(tapkey.length), throws)\n// }\n\n// if (\n// cblock !== null &&\n// script !== null\n// ) {\n// const version = cblock[0] & 0xfe\n// const target = getTapLeaf(script, version)\n// config.extension = target\n\n// if (!checkPath(tapkey, target, cblock, { throws })) {\n// return safeThrow('cblock verification failed!', throws)\n// }\n// }\n\n// if (config.pubkey !== undefined) {\n// pub = Buff.bytes(config.pubkey)\n// } else if (params.length > 1 && params[1].length === 32) {\n// pub = Buff.bytes(params[1])\n// } else {\n// pub = Buff.bytes(tapkey)\n// }\n\n// const rawsig = Script.fmt.toParam(params[0])\n// const stream = new Stream(rawsig)\n// const signature = stream.read(64).raw\n\n// if (stream.size === 1) {\n// config.sigflag = stream.read(1).num\n// if (config.sigflag === 0x00) {\n// return safeThrow('0x00 is not a valid appended sigflag!', throws)\n// }\n// }\n\n// const hash = hashTx(tx, index, config)\n\n// if (!verify(signature, hash, pub, throws)) {\n// return safeThrow('Invalid signature!', throws)\n// }\n\n// return true\n// }\n","import { Buff } from '@vbyte/buff'\nimport { encode_tapbranch } from './encode.js'\n\nimport type { TapTree, MerkleProof } from '@/types/index.js'\n\n/**\n * Get the root of a taproot tree.\n * @param leaves - The leaves of the tree.\n * @returns The root of the tree.\n */\nexport function get_merkle_root (leaves : TapTree) {\n // Process the merkle tree, and return the root.\n return merkleize(leaves)[0]\n}\n\n/**\n * Process a taproot tree into a merkle proof.\n * @param taptree - The leaves of the tree.\n * @param target - The target leaf of the tree.\n * @param path - The recursive path of the tree.\n * @returns The root of the tree.\n */\nexport function merkleize (\n taptree : TapTree,\n target ?: string,\n path : string[] = []\n) : MerkleProof {\n // Initialize the leaves and tree arrays.\n const leaves : string[] = []\n const tree : string[] = []\n // If there are no leaves, throw an error.\n if (taptree.length < 1) {\n throw new Error('Tree is empty!')\n }\n // Crawl through the tree, and find each leaf.\n for (let i = 0; i < taptree.length; i++) {\n // Get the current leaf as bytes.\n const bytes = taptree[i]\n // If the leaf is an array,\n if (Array.isArray(bytes)) {\n // Recursively process the nested tree.\n let [ tapleaf, new_target, branches ] = merkleize(bytes, target)\n // Update the target leaf.\n target = new_target\n // Add the nested tapleaf to the leaves array.\n leaves.push(tapleaf)\n // For each branch node,\n for (const branch of branches) {\n // Add the branch to the path.\n path.push(branch)\n }\n } else {\n // Convert the leaf to a hex string.\n const leaf = Buff.bytes(bytes).hex\n // Add the leaf to the leaves array.\n leaves.push(leaf)\n }\n }\n\n // If there is only one leaf,\n if (leaves.length === 1) {\n // Return the leaf as the root.\n return [ leaves[0], target, path ]\n }\n // Ensure the tree is sorted at this point.\n leaves.sort()\n // Ensure the tree is balanced evenly.\n if (leaves.length % 2 !== 0) {\n // If uneven, duplicate the last leaf.\n leaves.push(leaves[leaves.length - 1])\n }\n // Sort through the leaves (two at a time).\n for (let i = 0; i < leaves.length - 1; i += 2) {\n // Compute two leaves into a branch.\n const branch = encode_tapbranch(leaves[i], leaves[i + 1]).hex\n // Push our branch to the tree.\n tree.push(branch)\n // Check if a proof target is specified.\n if (typeof target === 'string') {\n // Check if this branch is part of our proofs.\n if (target === leaves[i]) {\n // If so, include right-side of branch.\n path.push(leaves[i + 1])\n target = branch\n } else if (target === leaves[i + 1]) {\n // If so, include left-side of branch.\n path.push(leaves[i])\n target = branch\n }\n }\n }\n // Recursively process the tree.\n return merkleize(tree, target, path)\n}\n","import { Buff, Bytes } from '@vbyte/buff'\nimport { is_valid_script } from '@/lib/script/decode.js'\nimport { TAPLEAF_VERSIONS } from '@/const.js'\n\nimport type {\n WitnessData,\n WitnessType\n} from '@/types/index.js'\n\nexport function parse_witness (\n witness : Bytes[]\n) : WitnessData {\n // Parse the witness data.\n const elems = witness.map(e => Buff.bytes(e))\n const stack = witness.map(e => Buff.bytes(e).hex)\n const annex = parse_annex_data(elems)\n if (annex !== null) elems.pop()\n const cblock = parse_cblock_data(elems)\n if (cblock !== null) elems.pop()\n const type = parse_witness_type(elems, cblock)\n const version = parse_witness_version(type)\n const script = parse_witness_script(elems, type)\n if (script !== null) elems.pop()\n const params = elems.map(e => e.hex)\n return { annex, cblock, params, script, stack, type, version }\n}\n\nfunction parse_annex_data (\n data : Uint8Array[]\n) : string | null {\n // Get the last element of the array.\n let elem = data.at(-1)\n // Check if the element fits the annex format.\n if (\n data.length > 1 &&\n elem instanceof Uint8Array &&\n elem[0] === 0x50\n ) {\n // Return the element.\n return new Buff(elem).hex\n } else {\n // Return null.\n return null\n }\n}\n\nfunction parse_cblock_data (\n data : Uint8Array[]\n) : string | null {\n let elem = data.at(-1)\n if (\n data.length > 1 &&\n elem instanceof Uint8Array &&\n elem.length > 32 &&\n TAPLEAF_VERSIONS.includes(elem[0] & 0xfe)\n ) {\n // Return the element.\n return new Buff(elem).hex\n } else {\n // Return null.\n return null\n }\n}\n\nfunction parse_witness_script (\n elems : Uint8Array[],\n type : WitnessType\n) {\n let script : Uint8Array | undefined\n switch (type) {\n case 'p2tr-ts':\n script = elems.at(-1)\n case 'p2w-sh':\n script = elems.at(-1)\n }\n return (script !== undefined) ? new Buff(script).hex : null\n}\n\nfunction parse_witness_type (\n elems : Uint8Array[],\n cblock : string | null\n) : WitnessType {\n // Get the important elements of the witness.\n let param_0 = elems.at(0),\n param_1 = elems.at(1),\n param_x = elems.at(-1)\n // If the cblock is present and the last element exists:\n if (cblock !== null && param_x !== undefined) {\n return 'p2tr-ts'\n // If the witness elements match the profile of a p2w-pkh:\n } else if (\n elems.length === 2 &&\n param_0 !== undefined &&\n param_1 !== undefined &&\n param_0.length >= 64 &&\n param_1.length === 33\n ) {\n return 'p2w-pkh'\n // If the witness elements match the profile of a p2tr-pk:\n } else if (\n elems.length === 1 &&\n param_0 !== undefined &&\n param_0.length === 64\n ) {\n return 'p2tr-pk'\n // If there is at least two witness elements:\n } else if (\n elems.length > 1 && \n param_x !== undefined &&\n is_valid_script(param_x)\n ) {\n return 'p2w-sh'\n // If the witness elements don't match any known profile:\n } else {\n return 'unknown'\n }\n}\n\nfunction parse_witness_version (type : WitnessType) : number | null {\n if (type.startsWith('p2tr')) return 1\n if (type.startsWith('p2w')) return 0\n return null\n}\n","import { Buff, Stream } from '@vbyte/buff'\nimport { Assert, ECC } from '@vbyte/micro-lib'\nimport { parse_witness } from '@/lib/witness/parse.js'\n\nimport {\n encode_tapbranch,\n encode_tapscript,\n encode_taptweak,\n} from './encode.js'\n\nimport type { ControlBlock } from '@/types/index.js'\n\nexport function parse_taproot_witness (witness : string[]) {\n const { cblock, params, script } = parse_witness(witness)\n\n Assert.exists(cblock, 'cblock is null')\n Assert.exists(script, 'script is null')\n\n const cblk = parse_cblock(cblock)\n const target = encode_tapscript(script, cblk.version)\n\n let branch = target.hex\n\n for (const leaf of cblk.path) {\n branch = encode_tapbranch(branch, leaf).hex\n }\n\n const tweak = encode_taptweak(cblk.int_key, branch)\n const tapkey = ECC.tweak_pubkey(cblk.int_key, tweak, 'bip340')\n\n params.map(e => Buff.bytes(e).hex)\n\n return { cblock: cblk, params, script, tapkey: tapkey.hex, tweak: tweak.hex }\n}\n\nexport function parse_cblock (cblock : string | Uint8Array) : ControlBlock {\n const buffer = new Stream(cblock)\n const cbyte = buffer.read(1).num\n const int_key = buffer.read(32).hex\n const [ version, parity ] = parse_cblock_parity(cbyte)\n const path = []\n while (buffer.size >= 32) {\n path.push(buffer.read(32).hex)\n }\n if (buffer.size !== 0) {\n throw new Error('Non-empty buffer on control block: ' + String(buffer))\n }\n return { int_key, path, parity, version }\n}\n\nexport function parse_cblock_parity (cbits : number) {\n return (cbits % 2 === 0)\n ? [ cbits - 0, 0x02 ]\n : [ cbits - 1, 0x03 ]\n}\n\nexport function parse_pubkey_parity (\n pubkey : string | Uint8Array\n) : number {\n Assert.size(pubkey, 33, 'invalid pubkey size')\n const [ parity ] = Buff.bytes(pubkey)\n if (parity === 0x02) return 0\n if (parity === 0x03) return 1\n throw new Error('Invalid parity bit: ' + String(parity))\n}\n","import { Buff, Bytes } from '@vbyte/buff'\nimport { Assert, ECC } from '@vbyte/micro-lib'\nimport { merkleize } from './tree.js'\nimport { TAPLEAF_DEFAULT_VERSION } from '@/const.js'\nimport * as Schema from '@/schema/index.js'\n\nimport {\n encode_tapbranch,\n encode_taptweak\n} from './encode.js'\n\nimport {\n parse_pubkey_parity,\n parse_cblock\n} from './parse.js'\n\nimport {\n TaprootConfig,\n TaprootContext\n} from '@/types/index.js'\n\nconst DEFAULT_VERSION = TAPLEAF_DEFAULT_VERSION\n\nexport function create_taproot (config : TaprootConfig) : TaprootContext {\n Schema.taproot.config.parse(config)\n\n const { pubkey, version = DEFAULT_VERSION } = config\n\n const leaves = config.leaves ?? []\n\n const target = (config.target !== undefined)\n ? Buff.bytes(config.target).hex \n : undefined\n\n let path : string[] = [],\n taproot : string | undefined\n\n if (leaves.length > 0) {\n // Merkelize the leaves into a root hash (with proof).\n const [ root, _, proofs ] = merkleize(leaves, target)\n // Get the control path from the merkelized output.\n path = proofs\n // Get the tapped key from the internal key.\n taproot = root\n } else {\n // Get the tapped key from the single tapleaf.\n taproot = target\n }\n\n const taptweak = encode_taptweak(pubkey, taproot)\n const twk_key = ECC.tweak_pubkey(pubkey, taptweak, 'ecdsa')\n const parity = parse_pubkey_parity(twk_key)\n const tapkey = ECC.serialize_pubkey(twk_key, 'bip340')\n // Get the block version / parity bit.\n const cbit = Buff.num(version + parity)\n // Stack the initial control block data.\n const block : Bytes[] = [ cbit, Buff.bytes(pubkey) ]\n // If there is more than one path, add to block.\n if (path.length > 0) {\n path.forEach(e => block.push(e))\n }\n // Merge the data together into one array.\n const cblock = Buff.join(block)\n\n return {\n int_key : Buff.bytes(pubkey).hex,\n parity,\n taproot : taproot ?? null,\n cblock : cblock.hex,\n tapkey : tapkey.hex,\n taptweak : taptweak.hex\n }\n}\n\nexport function verify_taproot (\n tapkey : string,\n target : string,\n cblock : string\n) : boolean {\n Assert.size(tapkey, 32)\n const { parity, path, int_key } = parse_cblock(cblock)\n\n const ext_key = Buff.join([ parity, tapkey ])\n\n let branch = Buff.bytes(target).hex\n\n for (const leaf of path) {\n branch = encode_tapbranch(branch, leaf).hex\n }\n\n const tap_tweak = encode_taptweak(int_key, branch)\n const tweaked_key = ECC.tweak_pubkey(int_key, tap_tweak, 'ecdsa')\n\n return (ext_key.hex === tweaked_key.hex)\n}\n","import { Buff, Bytes } from '@vbyte/buff'\nimport { Assert } from '@vbyte/micro-lib'\n\nimport type { WitnessSize } from '@/types/index.js'\n\nconst WIT_LENGTH_BYTE = 1\n\nexport function get_witness_size (witness : Bytes[]) : WitnessSize {\n const stack = witness.map(e => Buff.bytes(e))\n const size = stack.reduce((prev, next) => prev + next.length, 0)\n const vsize = Math.ceil(WIT_LENGTH_BYTE + size / 4) \n return { total: size, vsize }\n}\n\nexport function assert_witness (witness : unknown) : asserts witness is Bytes[] {\n Assert.ok(Array.isArray(witness), 'witness must be an array')\n Assert.ok(witness.every(e => Buff.is_bytes(e)), 'witness must be an array of strings or bytes')\n}\n"],"names":["Check","Assert","is_hex","input","match","length","is_bytes","Uint8Array","Array","isArray","every","e","within_size","data","size","TypeError","hex","Error","bytes","String","is_json","str","JSON","parse","is_safe_int","num","Number","MAX_SAFE_INTEGER","_0n","BigInt","_255n","_256n","big_to_bytes","big","endian","undefined","get_big_size","use_le","buffer","ArrayBuffer","dataView","DataView","offset","byte","setUint8","bigint_replacer","_","v","bigint_reviver","test","slice","num_to_bytes","get_num_size","hex_to_bytes","hexstr","len","get_hex_size","use_be","i","char","substring","parseInt","fill","set","create_bytes","ec","TextEncoder","dc","TextDecoder","str_to_bytes","encode","bytes_to_str","decode","Buff","this","number","bigint","bin","uint","binary","bins","split","map","ct","j","Lib.bin_to_bytes","Lib.str_to_bytes","json","replacer","Lib.bigint_replacer","stringify","blob","payload","chunk_size","total_size","chunks","data_blob","count","idx","subarray","Lib.split_bytes","Lib.buffer","is_equal","a","b","random","crypto","getRandomValues","pcrypto","randomBytes","Lib.get_random_bytes","now","stamp","Math","floor","Date","constructor","super","arr","to_arr","to_big","to_bin","to_hex","to_num","to_str","to_uint","Lib.bytes_to_big","reverse","chars","toString","padStart","Lib.bytes_to_hex","to_json","reviver","Lib.bigint_reviver","Lib.bytes_to_str","Lib.bytes_to_num","join","Lib.bytes_to_bin","append","equals","prepend","prefix_varint","varint","array","start","end","begin","toJSON","from","of","args","joined","reduce","buff","Lib.join_bytes","sort","Stream","peek","read","chunk","sort_obj","obj","Map","Object","keys","filter","value","sorted","key","parse_error","err","message","Test","is_object","is_string","is_number","isInteger","isNaN","exists","is_deep_equal","has_items","is_bigint","is_uchar","is_ushort","is_uint","is_u8a","is_base58","is_base64","is_b64url","is_bech32","is_hash","ok","msg","is_empty","is_instance","type","name","err_msg","globalThis","isBytes","isView","anumber","n","isSafeInteger","abytes","lengths","includes","aexists","instance","checkFinished","destroyed","finished","clean","arrays","createView","byteOffset","byteLength","rotr","word","shift","rotl","hasHexBuiltin","toHex","fromHex","hexes","bytesToHex","asciis","asciiToBase16","ch","hexToBytes","hl","al","ai","hi","n1","charCodeAt","n2","toBytes","utf8ToBytes","concatBytes","sum","res","pad","Hash","createHasher","hashCons","hashC","update","digest","tmp","outputLen","blockLen","create","bytesLength","Chi","c","Maj","HashMD","padOffset","isLE","pos","view","take","min","process","roundClean","digestInto","out","aoutput","setBigUint64","_32n","_u32_max","wh","wl","h","l","setUint32","oview","outLen","state","get","destroy","_cloneInto","to","clone","SHA256_IV","Uint32Array","SHA256_K","SHA256_W","SHA256","A","B","C","D","E","F","G","H","getUint32","W15","W2","s0","s1","T1","T2","sha256","HMAC","hash","_key","ahash","iHash","oHash","buf","getPrototypeOf","hmac","_1n","abool","title","numberToHexUnpadded","hexToNumber","bytesToNumberBE","bytesToHex_","bytesToNumberLE","abytes_","numberToBytesBE","hexToBytes_","numberToBytesLE","ensureBytes","expectedLength","isBytes_","isPosBig","inRange","max","aInRange","bitMask","_validateObject","object","fields","optFields","checkField","fieldName","expectedType","isOpt","val","current","entries","forEach","k","memoized","fn","WeakMap","arg","computed","_2n","_3n","_4n","_5n","_8n","mod","result","pow2","x","power","modulo","invert","u","r","m","sqrt3mod4","Fp","p1div4","ORDER","root","pow","eql","sqr","sqrt5mod8","p5div8","mul","nv","sub","ONE","FpSqrt","P","Q","S","Z","_Fp","Field","FpLegendre","cc","Q1div2","is0","M","t","R","ZERO","t_tmp","exponent","tonelliShanks","FIELD_FIELDS","FpInvertBatch","nums","passZero","inverted","multipliedAcc","acc","invertedAcc","inv","reduceRight","p1mod2","powered","yes","zero","no","neg","bitLenOrOpts","opts","_nbitLength","_sqrt","sqrt","_opts","BITS","nBitLength","nByteLength","BYTES","_nBitLength","ceil","nLength","sqrtP","f","freeze","MASK","isValid","isValidNot0","isOdd","lhs","rhs","add","p","d","FpPow","div","sqrN","addN","subN","mulN","fromBytes","invertBatch","lst","cmov","getFieldBytesLength","fieldOrder","bitLength","getMinHashLength","negateCt","condition","item","negate","validateW","W","bits","calcWOpts","scalarBits","maxNumber","windows","windowSize","mask","shiftBy","calcOffsets","window","wOpts","wbits","nextN","offsetStart","abs","isZero","isNeg","isNegF","offsetF","pointPrecomputes","pointWindowSizes","getW","assert0","pippenger","fieldN","points","scalars","validateMSMPoints","field","s","validateMSMScalars","plength","slength","bitLen","buckets","scalar","resI","sumI","double","createField","order","validateField","validateSigVerOpts","lowS","prehash","DERErr","DER","Err","_tlv","tag","dataLen","lenLen","first","lengthBytes","_int","toSig","int","tlv","seqBytes","seqLeftBytes","rBytes","rLeftBytes","sBytes","sLeftBytes","hexFromSig","sig","seq","_legacyHelperNormPriv","Fn","allowedPrivateKeyLengths","wrapPrivateKey","expected","padded","error","weierstrassN","CURVE","curveOpts","params","_createCurveFields","cofactor","CURVE_ORDER","allowInfinityPoint","clearCofactor","isTorsionFree","endo","beta","splitScalar","assertCompressionIsSupported","_c","point","isCompressed","y","toAffine","bx","pprefix","L","LC","LU","head","tail","isValidXY","y2","weierstrassEquation","sqrtError","x2","x3","_legacyHelperEquat","left","right","Gx","Gy","_4a3","_27b2","acoord","banZero","aprjpoint","other","Point","toAffineMemo","iz","px","py","pz","z","ax","ay","zz","assertValidMemo","finishEndo","endoBeta","k1p","k2p","k1neg","k2neg","fromAffine","normalizeZ","property","toInv","assertValidity","fromPrivateKey","privateKey","normPrivateKeyToScalar","BASE","multiply","msm","precompute","isLazy","wnaf","setWindowSize","_setWindowSize","hasEvenY","X1","Y1","Z1","X2","Y2","Z2","U1","U2","b3","X3","Y3","Z3","t0","t1","t2","t3","t4","t5","subtract","fake","wNAFCached","k1","k2","k1f","k2f","multiplyUnsafe","sc","hasPrecomputes","p1","p2","mulEndoUnsafe","wNAFCachedUnsafe","multiplyAndAddUnsafe","invertedZ","toRawBytes","constTimeNegate","elm","unsafeLadder","precomputeWindow","base","push","wNAF","precomputes","wo","wNAFUnsafe","getPrecomputes","transform","comp","prev","delete","ecdsa","ecdsaOpts","bits2int","bits2int_modN","randomBytes_","hmac_","msgs","fnBits","isBiggerThanHalfOrder","aValidRS","Signature","recovery","fromCompact","fromDER","addRecoveryBit","recoverPublicKey","msgHash","FIELD_ORDER","rec","radj","ir","u1","u2","hasHighS","normalizeS","format","toDERRawBytes","toDERHex","toCompactRawBytes","toCompactHex","utils","isValidPrivateKey","randomPrivateKey","fieldLen","minLen","reduced","mapHashToField","isProbPub","delta","ORDER_MASK","int2octets","prepSig","defaultSigOpts","some","extraEntropy","ent","h1int","seedArgs","seed","k2sig","kBytes","ik","q","normS","defaultVerOpts","getPublicKey","getSharedSecret","privateA","publicB","sign","privKey","hashLen","qByteLen","hmacFn","u8n","u8of","reset","reseed","gen","sl","concatBytes_","pred","createHmacDrbg","drbg","verify","signature","publicKey","sg","isHex","isObj","_sig","derError","is","_ecdsa_legacy_opts_to_new","_weierstrass_legacy_opts_to_new","weierstrass","assign","ProjectivePoint","_ecdsa_new_output_to_legacy","secp256k1_CURVE","divNearest","sqrtMod","_6n","_11n","_22n","_23n","_44n","_88n","b2","b6","b9","b11","b22","b44","b88","b176","b220","b223","Fpk1","secp256k1","curveDef","defHash","createCurve","a1","b1","a2","POW_2_128","c1","c2","TAGGED_HASH_PREFIXES","taggedHash","messages","tagP","tagH","pointToBytes","numTo32b","modP","modN","hasEven","schnorrGetExtPubKey","priv","d_","lift_x","xx","challenge","schnorrGetPublicKey","schnorrSign","auxRand","rand","k_","rx","schnorrVerify","pub","schnorr","GP","tweak_pubkey","pubkey","tweak","even_y","twk_big","serialize_bytes","pub_pt","pk","serialize_pubkey","lift_point","tweak_pt","tweaked_pt","prefix","Rho160","Id160","Pi160","idxLR","idxL","idxR","shifts160","shiftsL160","shiftsR160","Kl160","Kr160","ripemd_f","group","BUF_160","RIPEMD160","h0","h1","h2","h3","h4","ar","bl","br","cl","cr","dl","dr","el","er","rGroup","hbl","hbr","rl","rr","sr","tl","tr","ripemd160","hash160","noble_r160","noble_s256","hash256","hash340","htag","hashtag","util","objectUtil","assertEqual","assertIs","_arg","assertNever","_x","arrayToEnum","items","getValidEnumValues","validKeys","objectKeys","filtered","objectValues","prototype","hasOwnProperty","call","find","checker","isFinite","joinValues","separator","jsonStringifyReplacer","mergeShapes","second","ZodParsedType","getParsedType","string","nan","boolean","function","symbol","null","then","catch","promise","Set","date","unknown","ZodIssueCode","ZodError","errors","issues","addIssue","addIssues","subs","actualProto","setPrototypeOf","__proto__","_mapper","mapper","issue","fieldErrors","_errors","processError","code","unionErrors","returnTypeError","argumentsError","path","curr","assert","isEmpty","flatten","formErrors","firstEl","errorMap","_ctx","invalid_type","received","invalid_literal","unrecognized_keys","invalid_union","invalid_union_discriminator","options","invalid_enum_value","invalid_arguments","invalid_return_type","invalid_date","invalid_string","validation","position","startsWith","endsWith","too_small","exact","inclusive","minimum","too_big","maximum","custom","invalid_intersection_types","not_multiple_of","multipleOf","not_finite","defaultError","overrideErrorMap","defaultErrorMap","addIssueToContext","ctx","issueData","overrideMap","errorMaps","fullPath","fullIssue","errorMessage","maps","makeIssue","common","contextualErrorMap","schemaErrorMap","ParseStatus","dirty","abort","mergeArray","status","results","arrayValue","INVALID","mergeObjectAsync","pairs","syncPairs","pair","mergeObjectSync","finalObject","alwaysSet","DIRTY","OK","isAborted","isDirty","isAsync","Promise","errorUtil","errToObj","ParseInputLazyPath","parent","_cachedPath","_path","handleResult","success","_error","processCreateParams","invalid_type_error","required_error","description","iss","ZodType","_def","_getType","_getOrReturnCtx","parsedType","_processInputParams","_parseSync","_parse","_parseAsync","resolve","safeParse","async","toLowerCase","parseAsync","safeParseAsync","maybeAsyncResult","refine","check","getIssueProperties","_refinement","setError","refinement","refinementData","ZodEffects","schema","typeName","ZodFirstPartyTypeKind","effect","superRefine","def","spa","bind","optional","nullable","nullish","or","and","brand","default","describe","pipe","readonly","isNullable","isOptional","version","vendor","validate","ZodOptional","ZodNullable","ZodArray","ZodPromise","option","ZodUnion","incoming","ZodIntersection","defaultValueFunc","ZodDefault","innerType","defaultValue","ZodBranded","catchValueFunc","ZodCatch","catchValue","This","target","ZodPipeline","ZodReadonly","cuidRegex","cuid2Regex","ulidRegex","uuidRegex","nanoidRegex","jwtRegex","durationRegex","emailRegex","emojiRegex","ipv4Regex","ipv4CidrRegex","ipv6Regex","ipv6CidrRegex","base64Regex","base64urlRegex","dateRegexSource","dateRegex","RegExp","timeRegexSource","secondsRegexSource","precision","timeRegex","datetimeRegex","regex","local","isValidIP","ip","isValidJWT","jwt","alg","header","base64","replace","padEnd","decoded","atob","typ","isValidCidr","ZodString","coerce","checks","kind","tooBig","tooSmall","URL","lastIndex","trim","toUpperCase","_regex","_addCheck","email","url","emoji","uuid","nanoid","cuid","cuid2","ulid","base64url","cidr","datetime","time","duration","minLength","maxLength","nonempty","isDatetime","isDate","isTime","isDuration","isEmail","isURL","isEmoji","isUUID","isNANOID","isCUID","isCUID2","isULID","isIP","isCIDR","isBase64","isBase64url","floatSafeRemainder","step","valDecCount","stepDecCount","decCount","toFixed","ZodNumber","arguments","gte","lte","setLimit","gt","lt","positive","negative","nonpositive","nonnegative","finite","safe","MIN_SAFE_INTEGER","minValue","maxValue","isInt","ZodBigInt","_getInvalidInput","ZodBoolean","Boolean","ZodDate","getTime","minDate","maxDate","ZodSymbol","ZodUndefined","ZodNull","ZodAny","_any","ZodUnknown","_unknown","ZodNever","never","ZodVoid","void","exactLength","all","element","deepPartialify","ZodObject","newShape","shape","fieldSchema","unwrap","ZodTuple","_cached","nonstrict","passthrough","augment","extend","_getCached","shapeKeys","extraKeys","catchall","unknownKeys","keyValidator","strict","strip","augmentation","merge","merging","setKey","index","pick","omit","deepPartial","partial","required","newField","keyof","createZodEnum","strictCreate","lazycreate","childCtx","mergeValues","aType","bType","valid","bKeys","sharedKeys","indexOf","newObj","sharedValue","newArray","types","handleParsed","parsedLeft","parsedRight","merged","rest","itemIndex","schemas","ZodRecord","keySchema","keyType","valueSchema","valueType","third","ZodMap","finalMap","ZodSet","minSize","maxSize","finalizeSet","elements","parsedSet","values","ZodLazy","getter","ZodLiteral","ZodEnum","expectedValues","_cache","has","enum","enumValues","Values","Enum","extract","newDef","exclude","opt","ZodNativeEnum","nativeEnumValues","promisified","sourceType","checkCtx","fatal","processed","executeRefinement","inner","createWithPreprocess","preprocess","removeDefault","newCtx","removeCatch","ZodNaN","inResult","in","handleAsync","cleanParams","stringType","numberType","bigIntType","booleanType","dateType","nullType","anyType","arrayType","objectType","unionType","recordType","lazyType","z.bigint","z.boolean","z.date","z.number","u8a","cls","_params","_fatal","z.instanceof","z.string","z.any","parts","at","literal","z.union","z.null","z.lazy","z.array","z.record","u8a32","u8a33","u8a64","hex32","hex33","hex64","byte32","isArrayOf","isString","afn","astr","label","aArr","astrArr","anumArr","chain","id","wrap","alphabet","letters","lettersA","indexes","digits","letter","convertRadix","dlen","carry","done","digit","fromCarry","digitBase","rounded","gcd","radix2carry","powers","convertRadix2","padding","radix2","revPadding","unsafeWrapper","apply","toBase64","fromBase64","lastChunkHandling","decodeBase64Builtin","chr","base64urlnopad","base58","abc","radix","createBase58check","oldChecksum","newChecksum","BECH_ALPHABET","POLYMOD_GENERATORS","bech32Polymod","pre","chk","bechChecksum","words","encodingConst","genBech32","encoding","ENCODING_CONST","_words","fromWords","toWords","fromWordsUnsafe","limit","plen","actualLength","lowered","slen","sepIndex","lastIndexOf","encodeFromBytes","decodeToBytes","decodeUnsafe","bech32","bech32m","utf8","B58chk","Base64","B64url","Bech32","Bech32m","assert_prefix","assert_words","to_words","to_bytes","ENCODING_REGEX","VERSION","decode_address","address","get_address_format","encoded","base58_decode","bech32_decode","bech32m_decode","encode_address","config","base58_encode","bech32_encode","bech32m_encode","CONFIG_TABLE","get_address_config","address_network","address_type","network","parse_address","dec","get_address_ctx","script","script_key","script_type","script_hex","script_asm","get_p2pkh_script","get_p2sh_script","get_p2w_pkh_script","get_p2w_sh_script","get_p2tr_script","get_address_script","ADDR_TYPE","P2PKH","create_p2pkh_address","encode_p2pkh_address","pk_hash","decode_p2pkh_address","parsed","P2SH","create_p2sh_address","encode_p2sh_address","script_hash","decode_p2sh_address","P2WPKH","create_p2wpkh_address","encode_p2wpkh_address","decode_p2wpkh_address","P2WSH","create_p2wsh_address","encode_p2wsh_address","decode_p2wsh_address","P2TR","AddressTool","encode_p2tr_address","decode_p2tr_address","P2PKH_TOOL","P2SH_TOOL","P2WPKH_TOOL","P2WSH_TOOL","P2TR_TOOL","LOCKTIME_THRESHOLD","LocktimeUtil","RefEncoder","encode_locktime","locktime","height","decode_locktime","encode_inscription_id","txid","decode_inscription_id","inscription_id","assert_inscription_id","verify_inscription_id","encode_rune_id","block_height","block_index","decode_rune_id","rune_id","assert_rune_id","verify_rune_id","encode_outpoint","vout","decode_outpoint","outpoint","assert_outpoint","verify_outpoint","record_id","OPCODE_MAP","OP_0","OP_PUSHDATA1","OP_PUSHDATA2","OP_PUSHDATA4","OP_1NEGATE","OP_SUCCESS80","OP_1","OP_2","OP_3","OP_4","OP_5","OP_6","OP_7","OP_8","OP_9","OP_10","OP_11","OP_12","OP_13","OP_14","OP_15","OP_16","OP_NOP","OP_SUCCESS98","OP_IF","OP_NOTIF","OP_ELSE","OP_ENDIF","OP_VERIFY","OP_RETURN","OP_TOALTSTACK","OP_FROMALTSTACK","OP_2DROP","OP_2DUP","OP_3DUP","OP_2OVER","OP_2ROT","OP_2SWAP","OP_IFDUP","OP_DEPTH","OP_DROP","OP_DUP","OP_NIP","OP_OVER","OP_PICK","OP_ROLL","OP_ROT","OP_SWAP","OP_TUCK","OP_SUCCESS126","OP_SUCCESS127","OP_SUCCESS128","OP_SUCCESS129","OP_SIZE","OP_SUCCESS131","OP_SUCCESS132","OP_SUCCESS133","OP_SUCCESS134","OP_EQUAL","OP_EQUALVERIFY","OP_SUCCESS137","OP_SUCCESS138","OP_1ADD","OP_1SUB","OP_SUCCESS141","OP_SUCCESS142","OP_NEGATE","OP_ABS","OP_NOT","OP_0NOTEQUAL","OP_ADD","OP_SUB","OP_SUCCESS149","OP_SUCCESS150","OP_SUCCESS151","OP_SUCCESS152","OP_SUCCESS153","OP_BOOLAND","OP_BOOLOR","OP_NUMEQUAL","OP_NUMEQUALVERIFY","OP_NUMNOTEQUAL","OP_LESSTHAN","OP_GREATERTHAN","OP_LESSTHANOREQUAL","OP_GREATERTHANOREQUAL","OP_MIN","OP_MAX","OP_WITHIN","OP_RIPEMD160","OP_SHA1","OP_SHA256","OP_HASH160","OP_HASH256","OP_CODESEPARATOR","OP_CHECKSIG","OP_CHECKSIGVERIFY","OP_CHECKMULTISIG","OP_CHECKMULTISIGVERIFY","OP_NOP1","OP_CHECKLOCKTIMEVERIFY","OP_CHECKSEQUENCEVERIFY","OP_NOP4","OP_NOP5","OP_NOP6","OP_NOP7","OP_NOP8","OP_NOP9","OP_NOP10","OP_CHECKSIGADD","get_op_code","get_asm_code","get_op_type","is_valid_op","MAX_WORD_SIZE","encode_script","encode_script_word","asm_code","split_script_word","prefix_word_size","get_size_varint","decode_script","stream","stack","stack_size","word_type","word_size","is_valid_script","_26n","ScribeEncoder","decode_inscription","envelopes","start_idx","findIndex","stop_idx","env","parse_envelopes","parse_record","encode_inscription","create_envelope","asm","delegate","encode_id","ref","opcode","encode_pointer","pointer","ptr","rune","encode_rune_label","mimetype","encode_label","content","encode_content","envelope","record","decode_label","decode_pointer","decode_id","decode_rune_label","decode_content","identifier","hexstrs","charCode","fromCharCode","TIMELOCK_TYPE","TIMELOCK_VALUE_MASK","TIMELOCK_VALUE_MAX","SequenceUtil","encode_sequence","mode","parse_height","ts","parse_stamp","decode_sequence","sequence","parse_sequence","EMPTY","NULL","equalBytes","isPlainObject","isNum","lengthCoder","isCoder","encodeStream","w","byteLen","Path","decodeStream","Bitset","FULL_MASK","bs","debug","checkLen","chunkLen","bsLen","allowRewrite","indices","lastMask","range","cur","rangeDebug","setRange","lastPos","last","pushObj","objFn","fieldFn","pop","objPath","_Reader","parentOffset","bitBuf","bitPos","_enablePointers","allowMultipleReads","markBytesBS","markBytes","readView","absBytes","finish","allowUnreadBytes","baseHex","notRead","formatted","isEnd","leftBytes","offsetReader","totalBytes","needle","_Writer","buffers","ptrs","viewBuf","writeView","concat","swapEndianness","_wrap","isBaseCoder","coder","coders","dict","numberBigint","tsEnum","decimal","round","decimalMask","sep","frac","intS","fracS","fracLen","le","signed","sized","bLen","signBit","checkBounds","U256BE","U64LE","I64LE","intView","maxVal","write","U32LE","U32BE","I32LE","getInt32","setInt32","U16LE","getUint16","setUint16","U8","getUint8","createBytes","_length","_isb","tPos","innerValue","magic","constant","_value","sizeof","struct","_w","startPos","secp","packedUtils","sha256x2","pubSchnorr","pubECDSA","hasLowR","signSchnorr","tagSchnorr","PubT","validatePubkey","tapTweak","tn","NETWORK","pubKeyHash","scriptHash","wif","compareBytes","OP","ScriptNum","bytesLimit","forceMinimal","P.wrap","Script","o","PUSHDATA1","PUSHDATA2","P.U16LE","PUSHDATA4","P.U32LE","P.U8","op","CSLimits","CompactSize","flag","stop","b0","CompactSizeLen","P.apply","P.coders","VarBytes","P.bytes","RawWitness","P.array","BTCArray","RawInput","P.struct","finalScriptSig","RawOutput","amount","P.U64LE","RawTx","P.validate","P.I32LE","segwitFlag","flagValue","xor","hasFlag","P.flag","inputs","outputs","witnesses","P.flagged","lockTime","tx","RawOldTx","PubKeyECDSA","PubKeySchnorr","SignatureSchnorr","BIP32Der","fingerprint","P.U32BE","TaprootBIP32Der","hashes","der","GlobalXPUB","tapScriptSigKey","pubKey","leafHash","TaprootControlBlock","internalKey","merklePath","cb","tapTree","depth","BytesInf","Bytes20","Bytes32","PSBTGlobal","unsignedTx","xpub","txVersion","fallbackLocktime","inputCount","outputCount","txModifiable","proprietary","PSBTInput","nonWitnessUtxo","witnessUtxo","partialSig","sighashType","redeemScript","witnessScript","bip32Derivation","finalScriptWitness","porCommitment","requiredTimeLocktime","requiredHeightLocktime","tapKeySig","tapScriptSig","tapLeafScript","tapBip32Derivation","tapInternalKey","tapMerkleRoot","PSBTInputFinalKeys","PSBTInputUnsignedKeys","PSBTOutput","P.I64LE","PSBTOutputUnsignedKeys","PSBTKeyPair","P.NULL","P.prefix","PSBTKeyInfo","info","kc","vc","reqInc","allowInc","silentIgnore","PSBTKeyMap","psbtEnum","byType","kv","P.EMPTY","raw","noKey","_name","PSBTInputCoder","PSBTOutputCoder","PSBTGlobalCoder","g","inp","_RawPSBTV0","P.magic","P.string","global","_RawPSBTV2","validatePSBTFields","cleanPSBTFields","_k","validatePSBT","inputsLeft","outputsLeft","mergeKeyMap","allowedFields","allowUnknown","kC","vC","cannotChange","oldKV","newKV","kStr","oldVal","newVal","P.tuple","with0x","P.hex","RawPSBTV0","RawPSBTV2","isValidPubkey","u.validatePubkey","OutScripts","u.isBytes","u.PubT","pubkeys","OpToNum","OutScript","checkWSH","u.equalBytes","u.sha256","checkScript","u.hash160","tapLeafHash","u.tagSchnorr","base58check","validateWitness","programToWitness","formatKey","hashed","u.concatBytes","Address","program","EMPTY32","EMPTY_OUTPUT","DEFAULT_SEQUENCE","cloneDeep","fromEntries","SignatureHash","SigHash","getTaprootKeys","merkleRoot","seckey0","seckey","u.taprootTweakPrivKey","u.pubSchnorr","outputBeforeSign","inputBeforeSign","cleanFinalInput","psbt.PSBTInputFinalKeys","TxHashIdx","validateSigHash","unpackSighash","hashType","masked","isAny","ANYONECANPAY","isNone","NONE","isSingle","SINGLE","validateInput","prevOut","Transaction","fromRaw","allowUnknownOutputs","disableScriptCheck","allowUnknownInputs","isFinal","getPrevOut","normalizeInput","psbt.mergeKeyMap","psbt.PSBTInput","psbt.PSBTInputCoder","getInputType","allowLegacyWitnessUtxo","txType","defaultSighash","ALL","DEFAULT","lastScript","sighash","child","PSBTVersion","allowUnknowInput","allowUnknowOutput","allowUnknownVersion","customScripts","cs","finalizeTaproot","validateOpts","addOutput","fromPSBT","psbt_","psbt.RawPSBTV0","e0","psbt.RawPSBTV2","e2","unsigned","toPSBT","psbt.cleanPSBTFields","psbt.PSBTOutput","bip174jsCompat","heightCnt","timeCnt","inputStatus","checkInputIdx","inputSighash","sigOutputs","sigInputs","signStatus","addInput","hasWitnesses","weight","vsize","withScriptSig","withWitness","u.sha256x2","getInput","inputsLength","_ignoreSignStatus","updateInput","psbt.PSBTInputUnsignedKeys","checkOutputIdx","getOutput","getOutputAddress","outputsLength","normalizeOutput","psbt.PSBTOutputCoder","updateOutput","output","psbt.PSBTOutputUnsignedKeys","addOutputAddress","fee","preimageLegacy","prevOutScript","P.U256BE","inputIdx","tmpTx","preimageWitnessV0","inputHash","sequenceHash","outputHash","preimageWitnessV1","codeSeparator","leafScript","leafVer","annex","outType","inType","spendType","signIdx","allowedSighash","_auxRand","inputType","signers","deriveChild","prevOuts","schnorrPub","taprootPubKey","parity","u.taprootTweakPubkey","u.signSchnorr","_script","scriptDecoded","ver","u.pubECDSA","hasPubkey","lowR","counter","u.signECDSA","finalizeIdx","leafs","psbt.TaprootControlBlock","outScript","scriptSig","signatures","added","sigIdx","csEncoded","finalized","inputScript","witness","finalize","combine","thisUnsigned","otherUnsigned","psbt.PSBTGlobal","decode_psbt","b64str","psbt","parse_psbt","collect_vins","pdata","vins","vin","collect_vouts","vouts","finalize_legacy_inputs","pvin","psig","ScriptUtil","pvouts","txouts","vin_amt","out_amt","amounts","scripts","txin","psbt_bytes","prefix_script_size","parse_script_pubkeys","matchAll","prefix_size","is_valid","get_pubkeys","OPCODES","get_prevout","prevout","parse_txinput","txdata","txindex","txinput","get_annex_data","COINBASE","TXID","repeat","VOUT","LOCKTIME","SEQUENCE","TAPLEAF_VERSIONS","LOCK_SCRIPT_REGEX","p2pkh","p2sh","p2wpkh","p2wsh","p2tr","opreturn","SIGHASH_SEGWIT","SIGHASH_TAPROOT","GLOBAL_BASE","GLOBAL_WIT","TXIN_BASE","TXOUT_BASE","taptree","z.object","leaves","sats","tx_output","script_pk","tx_input","coinbase","script_sig","tx_data","vout_template","vin_template","tx_template","assert_tx_template","Schema.tx.tx_template","assert_has_prevouts","assert_tx_data","Schema.tx.tx_data","assert_vin_template","Schema.tx.vin_template","assert_vout_template","Schema.tx.vout_template","encode_tx","use_segwit","encode_tx_version","encode_tx_inputs","encode_tx_outputs","encode_vin_witness","encode_tx_locktime","encode_txin_txid","encode_txin_vout","encode_txin_sequence","encode_vin","encode_script_data","encode_vout_value","encode_tx_vout","txout","param","get_vout_type","get_vout_version","normalize_sequence","normalize_value","normalize_prevout","create_coinbase_input","create_virtual_input","create_spend_input","create_tx_input","create_tx_output","create_tx","decode_tx","read_version","has_witness","marker","check_witness_flag","vinCount","read_vin","read_inputs","vcount","read_vout","read_outputs","read_witness","read_locktime","read_payload","parse_tx","prevouts","Schema.tx.tx_input","Schema.tx.tx_output","txinputs","fees","txoutput","total","remain","hash_segwit_tx","sigflag","is_anypay","CONST.SIGHASH_SEGWIT","prevIdx","pkhash","bip143_hash_prevouts","bip143_hash_sequence","bip143_hash_outputs","isAnypay","isAnyPay","encode_tapscript","encode_tapleaf","encode_leaf_version","encode_tapbranch","leaf_a","leaf_b","encode_taptweak","hash_taproot_tx","template","get_taproot_tx_preimage","extflag","key_version","separator_pos","CONST.SIGHASH_TAPROOT","extension","preimage","bip341_hash_outpoints","bip341_hash_amounts","bip341_hash_scripts","bip341_hash_sequence","bip341_hash_outputs","bip341_hash_output","format_sigflag","ECC.get_ecdsa_sig","ECC.get_bip340_sig","_txdata","_config","console","warn","merkleize","tree","tapleaf","new_target","branches","branch","leaf","parse_witness","elems","elem","parse_annex_data","cblock","parse_cblock_data","param_0","param_1","param_x","parse_witness_type","parse_witness_version","parse_witness_script","parse_cblock","cbyte","int_key","parse_cblock_parity","cbits","parse_pubkey_parity","DEFAULT_VERSION","Schema.taproot.config","taproot","proofs","taptweak","twk_key","ECC.tweak_pubkey","tapkey","ECC.serialize_pubkey","block","cblk","ext_key","tweaked_key","next"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,54,55,56,57,58,59]}
|
|
1
|
+
{"version":3,"file":"script.js","sources":["../node_modules/@vbyte/buff/dist/util/validate.js","../node_modules/@vbyte/buff/dist/util/assert.js","../node_modules/@vbyte/buff/dist/lib/big.js","../node_modules/@vbyte/buff/dist/lib/num.js","../node_modules/@vbyte/buff/dist/lib/hex.js","../node_modules/@vbyte/buff/dist/lib/bytes.js","../node_modules/@vbyte/buff/dist/lib/str.js","../node_modules/@vbyte/buff/dist/class/buff.js","../node_modules/@vbyte/buff/dist/lib/bin.js","../node_modules/@vbyte/buff/dist/lib/rand.js","../node_modules/@vbyte/buff/dist/class/stream.js","../node_modules/@vbyte/micro-lib/dist/lib/util.js","../node_modules/@vbyte/micro-lib/dist/lib/test.js","../node_modules/@vbyte/micro-lib/dist/lib/assert.js","../node_modules/@noble/hashes/esm/crypto.js","../node_modules/@noble/hashes/esm/utils.js","../node_modules/@noble/hashes/esm/_md.js","../node_modules/@noble/hashes/esm/sha2.js","../node_modules/@noble/hashes/esm/hmac.js","../node_modules/@noble/curves/esm/utils.js","../node_modules/@noble/curves/esm/abstract/modular.js","../node_modules/@noble/curves/esm/abstract/curve.js","../node_modules/@noble/curves/esm/abstract/weierstrass.js","../node_modules/@noble/curves/esm/secp256k1.js","../node_modules/@noble/curves/esm/_shortw_utils.js","../node_modules/@vbyte/micro-lib/dist/lib/ecc.js","../node_modules/@noble/hashes/esm/legacy.js","../node_modules/@vbyte/micro-lib/dist/lib/hash.js","../node_modules/zod/v3/helpers/util.js","../node_modules/zod/v3/ZodError.js","../node_modules/zod/v3/locales/en.js","../node_modules/zod/v3/errors.js","../node_modules/zod/v3/helpers/parseUtil.js","../node_modules/zod/v3/helpers/errorUtil.js","../node_modules/zod/v3/types.js","../node_modules/@vbyte/micro-lib/dist/lib/schema.js","../node_modules/@scure/base/lib/esm/index.js","../node_modules/@vbyte/micro-lib/dist/lib/encode.js","../src/lib/address/encode.ts","../src/lib/address/util.ts","../src/lib/address/script.ts","../src/lib/address/p2pkh.ts","../src/lib/address/p2sh.ts","../src/lib/address/p2wpkh.ts","../src/lib/address/p2wsh.ts","../src/lib/address/p2tr.ts","../src/lib/address/index.ts","../src/lib/meta/locktime.ts","../src/lib/meta/ref.ts","../src/lib/script/words.ts","../src/lib/script/encode.ts","../src/lib/script/decode.ts","../src/lib/meta/scribe.ts","../src/lib/meta/sequence.ts","../src/lib/script/index.ts","../src/lib/script/util.ts","../src/lib/sighash/util.ts","../src/const.ts","../src/schema/taproot.ts","../src/schema/tx.ts","../src/lib/tx/validate.ts","../src/lib/tx/encode.ts","../src/lib/tx/util.ts","../src/lib/tx/create.ts","../src/lib/tx/decode.ts","../src/lib/tx/parse.ts","../src/lib/tx/size.ts","../src/lib/sighash/segwit.ts","../src/lib/taproot/encode.ts","../src/lib/sighash/taproot.ts","../src/lib/signer/sign.ts","../src/lib/signer/verify.ts","../src/lib/taproot/tree.ts","../src/lib/witness/parse.ts","../src/lib/taproot/parse.ts","../src/lib/taproot/cblock.ts","../src/lib/witness/util.ts"],"sourcesContent":["export var Check;\n(function (Check) {\n function is_hex(input) {\n return (input.match(/[^a-fA-F0-9]/) === null &&\n input.length % 2 === 0);\n }\n Check.is_hex = is_hex;\n function is_bytes(input) {\n if (typeof input === 'string' && is_hex(input)) {\n return true;\n }\n else if (input instanceof Uint8Array) {\n return true;\n }\n else if (Array.isArray(input) &&\n input.every(e => typeof e === 'number')) {\n return true;\n }\n else {\n return false;\n }\n }\n Check.is_bytes = is_bytes;\n})(Check || (Check = {}));\n","import { Check } from '../util/validate.js';\nexport var Assert;\n(function (Assert) {\n function within_size(data, size) {\n if (data.length > size) {\n throw new TypeError(`Data is larger than array size: ${data.length} > ${size}`);\n }\n }\n Assert.within_size = within_size;\n function is_hex(hex) {\n if (hex.match(/[^a-fA-f0-9]/) !== null) {\n throw new TypeError('Invalid characters in hex string: ' + hex);\n }\n if (hex.length % 2 !== 0) {\n throw new Error(`Length of hex string is invalid: ${hex.length}`);\n }\n }\n Assert.is_hex = is_hex;\n function is_bytes(bytes) {\n if (!Check.is_bytes(bytes)) {\n throw new Error('Bytes contains invalid elements: ' + String(bytes));\n }\n }\n Assert.is_bytes = is_bytes;\n function is_json(str) {\n try {\n JSON.parse(str);\n }\n catch {\n throw new TypeError('JSON string is invalid!');\n }\n }\n Assert.is_json = is_json;\n function is_safe_int(num) {\n if (num > Number.MAX_SAFE_INTEGER) {\n throw new TypeError('Number exceeds safe bounds!');\n }\n }\n Assert.is_safe_int = is_safe_int;\n})(Assert || (Assert = {}));\n","const _0n = BigInt(0);\nconst _255n = BigInt(255);\nconst _256n = BigInt(256);\nexport function get_big_size(big) {\n if (big <= 0xffn)\n return 1;\n if (big <= 0xffffn)\n return 2;\n if (big <= 0xffffffffn)\n return 4;\n if (big <= 0xffffffffffffffffn)\n return 8;\n if (big <= 0xffffffffffffffffffffffffffffffffn)\n return 16;\n if (big <= 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn) {\n return 32;\n }\n throw new TypeError('Must specify a fixed buffer size for bigints greater than 32 bytes.');\n}\nexport function big_to_bytes(big, size, endian = 'be') {\n if (size === undefined)\n size = get_big_size(big);\n const use_le = (endian === 'le');\n const buffer = new ArrayBuffer(size);\n const dataView = new DataView(buffer);\n let offset = (use_le) ? 0 : size - 1;\n while (big > _0n) {\n const byte = big & _255n;\n const num = Number(byte);\n if (use_le) {\n dataView.setUint8(offset++, num);\n }\n else {\n dataView.setUint8(offset--, num);\n }\n big = (big - byte) / _256n;\n }\n return new Uint8Array(buffer);\n}\nexport function bytes_to_big(bytes) {\n let num = BigInt(0);\n for (let i = bytes.length - 1; i >= 0; i--) {\n num = (num * _256n) + BigInt(bytes[i]);\n }\n return BigInt(num);\n}\nexport function bigint_replacer(_, v) {\n return typeof v === 'bigint'\n ? `${v}n`\n : v;\n}\nexport function bigint_reviver(_, v) {\n return typeof v === 'string' && /^[0-9]+n$/.test(v)\n ? BigInt(v.slice(0, -1))\n : v;\n}\n","import { Assert } from '../util/assert.js';\nexport function get_num_size(num) {\n if (num <= 0xFF)\n return 1;\n if (num <= 0xFFFF)\n return 2;\n if (num <= 0xFFFFFFFF)\n return 4;\n throw new TypeError('Numbers larger than 4 bytes must specify a fixed size!');\n}\nexport function num_to_bytes(num, size, endian = 'be') {\n if (size === undefined)\n size = get_num_size(num);\n const use_le = (endian === 'le');\n const buffer = new ArrayBuffer(size);\n const dataView = new DataView(buffer);\n let offset = (use_le) ? 0 : size - 1;\n while (num > 0) {\n const byte = num & 255;\n if (use_le) {\n dataView.setUint8(offset++, num);\n }\n else {\n dataView.setUint8(offset--, num);\n }\n num = (num - byte) / 256;\n }\n return new Uint8Array(buffer);\n}\nexport function bytes_to_num(bytes) {\n let num = 0;\n for (let i = bytes.length - 1; i >= 0; i--) {\n num = (num * 256) + bytes[i];\n Assert.is_safe_int(num);\n }\n return num;\n}\n","import { Assert } from '../util/assert.js';\nexport function hex_to_bytes(hexstr, size, endian = 'be') {\n size = get_hex_size(hexstr, size);\n const use_be = (endian === 'be');\n const buffer = new ArrayBuffer(size);\n const dataView = new DataView(buffer);\n let offset = (use_be) ? 0 : size - 1;\n for (let i = 0; i < hexstr.length; i += 2) {\n const char = hexstr.substring(i, i + 2);\n const num = parseInt(char, 16);\n if (use_be) {\n dataView.setUint8(offset++, num);\n }\n else {\n dataView.setUint8(offset--, num);\n }\n }\n return new Uint8Array(buffer);\n}\nexport function bytes_to_hex(bytes) {\n let chars = '';\n for (let i = 0; i < bytes.length; i++) {\n chars += bytes[i].toString(16).padStart(2, '0');\n }\n return chars;\n}\nfunction get_hex_size(hexstr, size) {\n Assert.is_hex(hexstr);\n const len = hexstr.length / 2;\n if (size === undefined)\n size = len;\n if (len > size) {\n throw new TypeError(`Hex string is larger than array size: ${len} > ${size}`);\n }\n return size;\n}\n","import { Assert } from '../util/assert.js';\nimport { big_to_bytes } from './big.js';\nimport { num_to_bytes } from './num.js';\nimport { hex_to_bytes } from './hex.js';\nexport function buffer(bytes, size, endian) {\n if (bytes instanceof ArrayBuffer) {\n return new Uint8Array(bytes);\n }\n else if (bytes instanceof Uint8Array) {\n return create_bytes(bytes, size, endian);\n }\n else if (typeof bytes === 'string') {\n Assert.is_hex(bytes);\n return hex_to_bytes(bytes, size, endian);\n }\n else if (typeof bytes === 'bigint') {\n return big_to_bytes(bytes, size, endian);\n }\n else if (typeof bytes === 'number') {\n return num_to_bytes(bytes, size, endian);\n }\n throw new TypeError('Input type not supported:' + typeof bytes);\n}\nexport function create_bytes(data, size, endian = 'le') {\n if (size === undefined)\n size = data.length;\n Assert.within_size(data, size);\n const buffer = new Uint8Array(size).fill(0);\n const offset = (endian === 'be') ? 0 : size - data.length;\n buffer.set(data, offset);\n return buffer;\n}\nexport function join_bytes(arr) {\n let i, offset = 0;\n const size = arr.reduce((len, arr) => len + arr.length, 0);\n const buff = new Uint8Array(size);\n for (i = 0; i < arr.length; i++) {\n const a = arr[i];\n buff.set(a, offset);\n offset += a.length;\n }\n return buff;\n}\nexport function split_bytes(data_blob, chunk_size, total_size) {\n const len = data_blob.length, count = total_size / chunk_size;\n if (total_size % chunk_size !== 0) {\n throw new TypeError(`Invalid parameters: ${total_size} % ${chunk_size} !== 0`);\n }\n if (len !== total_size) {\n throw new TypeError(`Invalid data stream: ${len} !== ${total_size}`);\n }\n if (len % chunk_size !== 0) {\n throw new TypeError(`Invalid data stream: ${len} % ${chunk_size} !== 0`);\n }\n const chunks = new Array(count);\n for (let i = 0; i < count; i++) {\n const idx = i * chunk_size;\n chunks[i] = data_blob.subarray(idx, idx + chunk_size);\n }\n return chunks;\n}\n","const ec = new TextEncoder();\nconst dc = new TextDecoder();\nexport function str_to_bytes(str) {\n return ec.encode(str);\n}\nexport function bytes_to_str(bytes) {\n return dc.decode(bytes);\n}\n","import * as Lib from '../lib/index.js';\nimport { Assert, Check } from '../util/index.js';\nexport class Buff extends Uint8Array {\n static { this.num = (number, size, endian) => {\n return new Buff(number, size, endian);\n }; }\n static { this.big = (bigint, size, endian) => {\n return new Buff(bigint, size, endian);\n }; }\n static { this.bin = (data, size, endian) => {\n const uint = Lib.bin_to_bytes(data);\n return new Buff(uint, size, endian);\n }; }\n static { this.uint = (data, size, endian) => {\n return new Buff(data, size, endian);\n }; }\n static { this.str = (data, size, endian) => {\n const uint = Lib.str_to_bytes(data);\n return new Buff(uint, size, endian);\n }; }\n static { this.hex = (data, size, endian) => {\n Assert.is_hex(data);\n return new Buff(data, size, endian);\n }; }\n static { this.bytes = (bytes, size, endian) => {\n Assert.is_bytes(bytes);\n return new Buff(bytes, size, endian);\n }; }\n static { this.json = (data, replacer) => {\n replacer = replacer ?? Lib.bigint_replacer;\n const str = JSON.stringify(data, replacer);\n const uint = Lib.str_to_bytes(str);\n return new Buff(uint);\n }; }\n static { this.blob = (payload, chunk_size, total_size) => {\n const bytes = Lib.buffer(payload);\n const chunks = Lib.split_bytes(bytes, chunk_size, total_size);\n return chunks.map(e => new Buff(e));\n }; }\n static { this.is_equal = (a, b) => {\n return new Buff(a).hex === new Buff(b).hex;\n }; }\n static { this.is_bytes = Check.is_bytes; }\n static { this.is_hex = Check.is_hex; }\n static random(size = 32) {\n const uint = Lib.get_random_bytes(size);\n return new Buff(uint, size);\n }\n static now() {\n const stamp = Math.floor(Date.now() / 1000);\n return new Buff(stamp, 4);\n }\n constructor(data, size, endian) {\n if (data instanceof Buff && size === undefined) {\n return data;\n }\n const buffer = Lib.buffer(data, size, endian);\n super(buffer);\n }\n get arr() {\n return this.to_arr();\n }\n get big() {\n return this.to_big();\n }\n get bin() {\n return this.to_bin();\n }\n get hex() {\n return this.to_hex();\n }\n get num() {\n return this.to_num();\n }\n get str() {\n return this.to_str();\n }\n get uint() {\n return this.to_uint();\n }\n to_big(endian = 'be') {\n const bytes = (endian === 'be')\n ? this.uint.reverse()\n : this.uint;\n return Lib.bytes_to_big(bytes);\n }\n to_hex(endian = 'be') {\n const bytes = (endian === 'be')\n ? this.uint\n : this.uint.reverse();\n return Lib.bytes_to_hex(bytes);\n }\n to_json(reviver) {\n if (reviver === undefined) {\n reviver = Lib.bigint_reviver;\n }\n const str = Lib.bytes_to_str(this);\n return JSON.parse(str, reviver);\n }\n to_num(endian = 'be') {\n const bytes = (endian === 'be')\n ? this.uint.reverse()\n : this.uint;\n return Lib.bytes_to_num(bytes);\n }\n to_arr() { return [...this]; }\n to_bin() { return Lib.bytes_to_bin(this); }\n to_str() { return Lib.bytes_to_str(this); }\n to_uint() { return new Uint8Array(this); }\n append(data) {\n return Buff.join([this, new Buff(data)]);\n }\n equals(data) {\n return new Buff(data).hex === this.hex;\n }\n prepend(data) {\n return Buff.join([new Buff(data), this]);\n }\n prefix_varint(endian) {\n if (this.length === 0)\n throw new Error('buffer is empty');\n const varint = Buff.varint(this.length, endian);\n return this.prepend(varint);\n }\n reverse() {\n super.reverse();\n return this;\n }\n set(array, offset) {\n this.set(array, offset);\n }\n slice(start, end) {\n const arr = new Uint8Array(this).slice(start, end);\n return new Buff(arr);\n }\n subarray(begin, end) {\n const arr = new Uint8Array(this).subarray(begin, end);\n return new Buff(arr);\n }\n toJSON() {\n return this.hex;\n }\n toString() {\n return this.hex;\n }\n static from(data) {\n return new Buff(Uint8Array.from(data));\n }\n static of(...args) {\n return new Buff(Uint8Array.of(...args));\n }\n static join(arr) {\n const bytes = arr.map(e => new Buff(e));\n const joined = Lib.join_bytes(bytes);\n return new Buff(joined);\n }\n static sort(arr, size) {\n const hex = arr.map(e => new Buff(e, size).hex);\n hex.sort();\n return hex.map(e => Buff.hex(e, size));\n }\n static varint(num, endian) {\n if (num < 0xFD) {\n return Buff.num(num, 1);\n }\n else if (num < 0x10000) {\n return Buff.of(0xFD, ...Buff.num(num, 2, endian));\n }\n else if (num < 0x100000000) {\n return Buff.of(0xFE, ...Buff.num(num, 4, endian));\n }\n else if (BigInt(num) < 0x10000000000000000n) {\n return Buff.of(0xFF, ...Buff.num(num, 8, endian));\n }\n else {\n throw new Error(`Value is too large: ${num}`);\n }\n }\n}\n","export function bin_to_bytes(binary) {\n const bins = binary.split('').map(Number);\n if (bins.length % 8 !== 0) {\n throw new Error(`Binary array is invalid length: ${binary.length}`);\n }\n const bytes = new Uint8Array(bins.length / 8);\n for (let i = 0, ct = 0; i < bins.length; i += 8, ct++) {\n let byte = 0;\n for (let j = 0; j < 8; j++) {\n byte |= (bins[i + j] << (7 - j));\n }\n bytes[ct] = byte;\n }\n return bytes;\n}\nexport function bytes_to_bin(bytes) {\n const bin = new Array(bytes.length * 8);\n let count = 0;\n for (const num of bytes) {\n if (num > 255) {\n throw new Error(`Invalid byte value: ${num}. Byte values must be between 0 and 255.`);\n }\n for (let i = 7; i >= 0; i--, count++) {\n bin[count] = (num >> i) & 1;\n }\n }\n return bin.join('');\n}\n","export function get_random_bytes(length = 32) {\n if (crypto &&\n typeof crypto.getRandomValues === 'function') {\n return crypto.getRandomValues(new Uint8Array(length));\n }\n const pcrypto = crypto;\n if (pcrypto &&\n pcrypto.randomBytes !== undefined &&\n typeof pcrypto.randomBytes === 'function') {\n return pcrypto.randomBytes(length);\n }\n throw new Error('getRandomValues from crypto library is undefined');\n}\n","import { Buff } from '../class/buff.js';\nexport class Stream {\n constructor(data) {\n this.data = new Buff(data);\n this.size = this.data.length;\n }\n peek(size) {\n if (size > this.size) {\n throw new Error(`Size greater than stream: ${size} > ${this.size}`);\n }\n return new Buff(this.data.slice(0, size));\n }\n read(size) {\n const chunk = this.peek(size);\n this.data = this.data.slice(size);\n this.size = this.data.length;\n return chunk;\n }\n varint(endian) {\n const num = this.read(1).num;\n switch (true) {\n case (num >= 0 && num < 0xFD):\n return num;\n case (num === 0xFD):\n return this.read(2).to_num(endian);\n case (num === 0xFE):\n return this.read(4).to_num(endian);\n case (num === 0xFF):\n return this.read(8).to_num(endian);\n default:\n throw new Error(`Varint is out of range: ${num}`);\n }\n }\n}\n","export const now = () => Math.floor(Date.now() / 1000);\nexport const sleep = (ms = 1000) => new Promise(res => setTimeout(res, ms));\nexport function create_timeout(promise, timeout) {\n return new Promise(async (resolve, reject) => {\n const timer = setTimeout(() => reject('timeout'), timeout);\n const res = await promise;\n clearTimeout(timer);\n resolve(res);\n });\n}\nexport function sort_obj(obj) {\n if (obj instanceof Map || Array.isArray(obj) || typeof obj !== 'object') {\n return obj;\n }\n else {\n return Object.keys(obj)\n .sort()\n .filter(([_, value]) => value !== undefined)\n .reduce((sorted, key) => {\n sorted[key] = obj[key];\n return sorted;\n }, {});\n }\n}\nexport function parse_error(err) {\n if (err instanceof Error)\n return err.message;\n if (typeof err === 'string')\n return err;\n return String(err);\n}\n","import { Buff } from '@vbyte/buff';\nimport { sort_obj } from './util.js';\nexport var Test;\n(function (Test) {\n function exists(value) {\n if (typeof value === 'undefined' || value === null) {\n return false;\n }\n return true;\n }\n Test.exists = exists;\n function is_equal(a, b) {\n return a === b;\n }\n Test.is_equal = is_equal;\n function is_object(value) {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n }\n Test.is_object = is_object;\n function is_deep_equal(a, b) {\n if (is_object(a))\n a = sort_obj(a);\n if (is_object(b))\n b = sort_obj(b);\n return String(a) === String(b);\n }\n Test.is_deep_equal = is_deep_equal;\n function has_items(array) {\n return Array.isArray(array) && array.length > 0;\n }\n Test.has_items = has_items;\n function is_string(value) {\n return typeof value === 'string';\n }\n Test.is_string = is_string;\n function is_number(value) {\n return Number.isInteger(value) && !Number.isNaN(value);\n }\n Test.is_number = is_number;\n function is_bigint(value) {\n return typeof value === 'bigint';\n }\n Test.is_bigint = is_bigint;\n function is_uchar(value) {\n return is_number(value) && value >= 0 && value <= 0xFF;\n }\n Test.is_uchar = is_uchar;\n function is_ushort(value) {\n return is_number(value) && value >= 0 && value <= 0xFFFF;\n }\n Test.is_ushort = is_ushort;\n function is_uint(value) {\n return is_number(value) && value >= 0 && value <= 0xFFFFFFFF;\n }\n Test.is_uint = is_uint;\n function is_u8a(value) {\n return value instanceof Uint8Array;\n }\n Test.is_u8a = is_u8a;\n function is_bytes(value) {\n return Buff.is_bytes(value);\n }\n Test.is_bytes = is_bytes;\n function is_base58(value) {\n if (typeof value !== 'string')\n return false;\n return /^[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+$/.test(value);\n }\n Test.is_base58 = is_base58;\n function is_base64(value) {\n if (typeof value !== 'string')\n return false;\n return /^[a-zA-Z0-9+/]+={0,2}$/.test(value);\n }\n Test.is_base64 = is_base64;\n function is_b64url(value) {\n if (typeof value !== 'string')\n return false;\n return /^[a-zA-Z0-9\\-_]+={0,2}$/.test(value);\n }\n Test.is_b64url = is_b64url;\n function is_bech32(value) {\n if (typeof value !== 'string')\n return false;\n return /^[a-z]+1[023456789acdefghjklmnpqrstuvwxyz]+$/.test(value);\n }\n Test.is_bech32 = is_bech32;\n function is_hex(value) {\n if (!is_string(value))\n return false;\n return (value.match(/[^a-fA-F0-9]/) === null && value.length % 2 === 0);\n }\n Test.is_hex = is_hex;\n function is_hash(value) {\n return (is_string(value) && is_hex(value) && value.length === 64);\n }\n Test.is_hash = is_hash;\n})(Test || (Test = {}));\n","import { Buff } from '@vbyte/buff';\nimport { Test } from './test.js';\nexport var Assert;\n(function (Assert) {\n function ok(value, message) {\n if (value === false) {\n throw new Error(message ?? 'Assertion failed!');\n }\n }\n Assert.ok = ok;\n function exists(value, msg) {\n if (!Test.exists(value)) {\n throw new Error(msg ?? 'Value is null or undefined!');\n }\n }\n Assert.exists = exists;\n function is_empty(value, msg) {\n if (value !== null && value !== undefined) {\n throw new Error(msg ?? 'value is not null or undefined!');\n }\n }\n Assert.is_empty = is_empty;\n function is_instance(value, type, msg) {\n if (!(value instanceof type)) {\n throw new Error(msg ?? `value is not an instance of ${type.name}`);\n }\n }\n Assert.is_instance = is_instance;\n function is_equal(a, b, msg) {\n if (!Test.is_equal(a, b)) {\n throw new Error(msg ?? `values are not equal: ${String(a)} !== ${String(b)}`);\n }\n }\n Assert.is_equal = is_equal;\n function is_object(value, msg) {\n if (!Test.is_object(value)) {\n throw new Error(msg ?? `value is not an object: ${String(value)}`);\n }\n }\n Assert.is_object = is_object;\n function is_deep_equal(a, b, msg) {\n if (!Test.is_deep_equal(a, b)) {\n throw new Error(msg ?? `values are not deep equal: ${String(a)} !== ${String(b)}`);\n }\n }\n Assert.is_deep_equal = is_deep_equal;\n function is_number(value) {\n if (!Test.is_number(value)) {\n throw new TypeError(`invalid number: ${String(value)}`);\n }\n }\n Assert.is_number = is_number;\n function is_bigint(value) {\n if (!Test.is_bigint(value)) {\n throw new TypeError(`invalid bigint: ${String(value)}`);\n }\n }\n Assert.is_bigint = is_bigint;\n function is_hex(value) {\n if (!Test.is_hex(value)) {\n throw new TypeError(`invalid hex: ${String(value)}`);\n }\n }\n Assert.is_hex = is_hex;\n function is_uchar(value) {\n if (!Test.is_uchar(value)) {\n throw new TypeError(`invalid unsignedchar: ${String(value)}`);\n }\n }\n Assert.is_uchar = is_uchar;\n function is_ushort(value) {\n if (!Test.is_ushort(value)) {\n throw new TypeError(`invalid unsigned short: ${String(value)}`);\n }\n }\n Assert.is_ushort = is_ushort;\n function is_uint(value) {\n if (!Test.is_uint(value)) {\n throw new TypeError(`invalid unsigned int: ${String(value)}`);\n }\n }\n Assert.is_uint = is_uint;\n function is_u8a(value) {\n if (!Test.is_u8a(value)) {\n throw new TypeError(`invalid Uint8Array: ${String(value)}`);\n }\n }\n Assert.is_u8a = is_u8a;\n function is_hash(value, msg) {\n if (!Test.is_hash(value)) {\n throw new TypeError(msg ?? `invalid hash: ${String(value)}`);\n }\n }\n Assert.is_hash = is_hash;\n function is_bytes(value, msg) {\n if (!Test.is_bytes(value)) {\n throw new TypeError(msg ?? `invalid bytes: ${String(value)}`);\n }\n }\n Assert.is_bytes = is_bytes;\n function size(input, size, msg) {\n const bytes = Buff.bytes(input);\n if (bytes.length !== size) {\n throw new Error(msg ?? `invalid input size: ${bytes.length} !== ${size}`);\n }\n }\n Assert.size = size;\n function has_items(array, err_msg) {\n if (!Test.has_items(array)) {\n throw new Error(err_msg ?? 'array does not contain any items');\n }\n }\n Assert.has_items = has_items;\n function is_base58(value) {\n if (!Test.is_base58(value)) {\n throw new Error('invalid base58 string');\n }\n }\n Assert.is_base58 = is_base58;\n function is_base64(value) {\n if (!Test.is_base64(value)) {\n throw new Error('invalid base64 string');\n }\n }\n Assert.is_base64 = is_base64;\n function is_b64url(value) {\n if (!Test.is_b64url(value)) {\n throw new Error('invalid base64url string');\n }\n }\n Assert.is_b64url = is_b64url;\n function is_bech32(value) {\n if (!Test.is_bech32(value)) {\n throw new Error('invalid bech32 string');\n }\n }\n Assert.is_bech32 = is_bech32;\n})(Assert || (Assert = {}));\n","export const crypto = typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\n//# sourceMappingURL=crypto.js.map","/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nexport function isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n/** Asserts something is positive integer. */\nexport function anumber(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error('positive integer expected, got ' + n);\n}\n/** Asserts something is Uint8Array. */\nexport function abytes(b, ...lengths) {\n if (!isBytes(b))\n throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\n/** Asserts something is hash */\nexport function ahash(h) {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash should be wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n/** Asserts a hash instance has not been destroyed / finished */\nexport function aexists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\n/** Asserts output is properly-sized byte array */\nexport function aoutput(out, instance) {\n abytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('digestInto() expects output buffer of length at least ' + min);\n }\n}\n/** Cast u8 / u16 / u32 to u8. */\nexport function u8(arr) {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** Cast u8 / u16 / u32 to u32. */\nexport function u32(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nexport function clean(...arrays) {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n/** Create DataView of an array for easy byte-level manipulation. */\nexport function createView(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** The rotate right (circular right shift) operation for uint32 */\nexport function rotr(word, shift) {\n return (word << (32 - shift)) | (word >>> shift);\n}\n/** The rotate left (circular left shift) operation for uint32 */\nexport function rotl(word, shift) {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexport const isLE = /* @__PURE__ */ (() => new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n/** The byte swap operation for uint32 */\nexport function byteSwap(word) {\n return (((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff));\n}\n/** Conditionally byte swap if on a big-endian platform */\nexport const swap8IfBE = isLE\n ? (n) => n\n : (n) => byteSwap(n);\n/** @deprecated */\nexport const byteSwapIfBE = swap8IfBE;\n/** In place byte swap for Uint32Array */\nexport function byteSwap32(arr) {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\nexport const swap32IfBE = isLE\n ? (u) => u\n : byteSwap32;\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin = /* @__PURE__ */ (() => \n// @ts-ignore\ntypeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes) {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin)\n return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 };\nfunction asciiToBase16(ch) {\n if (ch >= asciis._0 && ch <= asciis._9)\n return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F)\n return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f)\n return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin)\n return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nexport const nextTick = async () => { };\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nexport async function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await nextTick();\n ts += diff;\n }\n}\n/**\n * Converts string to bytes using UTF8 encoding.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Converts bytes to string using UTF8 encoding.\n * @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'\n */\nexport function bytesToUtf8(bytes) {\n return new TextDecoder().decode(bytes);\n}\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nexport function kdfInputToBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/** Copies several Uint8Arrays into one. */\nexport function concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\nexport function checkOpts(defaults, opts) {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\n/** For runtime check if class implements interface */\nexport class Hash {\n}\n/** Wraps hash function, creating an interface on top of it */\nexport function createHasher(hashCons) {\n const hashC = (msg) => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\nexport function createOptHasher(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexport function createXOFer(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexport const wrapConstructor = createHasher;\nexport const wrapConstructorWithOpts = createOptHasher;\nexport const wrapXOFConstructorWithOpts = createXOFer;\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nexport function randomBytes(bytesLength = 32) {\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n // Legacy Node.js compatibility\n if (crypto && typeof crypto.randomBytes === 'function') {\n return Uint8Array.from(crypto.randomBytes(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n//# sourceMappingURL=utils.js.map","/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nimport { Hash, abytes, aexists, aoutput, clean, createView, toBytes } from \"./utils.js\";\n/** Polyfill for Safari 14. https://caniuse.com/mdn-javascript_builtins_dataview_setbiguint64 */\nexport function setBigUint64(view, byteOffset, value, isLE) {\n if (typeof view.setBigUint64 === 'function')\n return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number((value >> _32n) & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\n/** Choice: a ? b : c */\nexport function Chi(a, b, c) {\n return (a & b) ^ (~a & c);\n}\n/** Majority function, true if any two inputs is true. */\nexport function Maj(a, b, c) {\n return (a & b) ^ (a & c) ^ (b & c);\n}\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport class HashMD extends Hash {\n constructor(blockLen, outputLen, padOffset, isLE) {\n super();\n this.finished = false;\n this.length = 0;\n this.pos = 0;\n this.destroyed = false;\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data) {\n aexists(this);\n data = toBytes(data);\n abytes(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen)\n this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out) {\n aexists(this);\n aoutput(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n clean(this.buffer.subarray(pos));\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++)\n buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n if (len % 4)\n throw new Error('_sha2: outputLen should be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length)\n throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++)\n oview.setUint32(4 * i, state[i], isLE);\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to) {\n to || (to = new this.constructor());\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n if (length % blockLen)\n to.buffer.set(buffer);\n return to;\n }\n clone() {\n return this._cloneInto();\n }\n}\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n/** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */\nexport const SHA256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */\nexport const SHA224_IV = /* @__PURE__ */ Uint32Array.from([\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */\nexport const SHA384_IV = /* @__PURE__ */ Uint32Array.from([\n 0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */\nexport const SHA512_IV = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n//# sourceMappingURL=_md.js.map","/**\n * SHA2 hash function. A.k.a. sha256, sha384, sha512, sha512_224, sha512_256.\n * SHA256 is the fastest hash implementable in JS, even faster than Blake3.\n * Check out [RFC 4634](https://datatracker.ietf.org/doc/html/rfc4634) and\n * [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n */\nimport { Chi, HashMD, Maj, SHA224_IV, SHA256_IV, SHA384_IV, SHA512_IV } from \"./_md.js\";\nimport * as u64 from \"./_u64.js\";\nimport { clean, createHasher, rotr } from \"./utils.js\";\n/**\n * Round constants:\n * First 32 bits of fractional parts of the cube roots of the first 64 primes 2..311)\n */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n/** Reusable temporary buffer. \"W\" comes straight from spec. */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nexport class SHA256 extends HashMD {\n constructor(outputLen = 32) {\n super(64, outputLen, 8, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n this.A = SHA256_IV[0] | 0;\n this.B = SHA256_IV[1] | 0;\n this.C = SHA256_IV[2] | 0;\n this.D = SHA256_IV[3] | 0;\n this.E = SHA256_IV[4] | 0;\n this.F = SHA256_IV[5] | 0;\n this.G = SHA256_IV[6] | 0;\n this.H = SHA256_IV[7] | 0;\n }\n get() {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n set(A, B, C, D, E, F, G, H) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4)\n SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = (sigma0 + Maj(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n roundClean() {\n clean(SHA256_W);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n clean(this.buffer);\n }\n}\nexport class SHA224 extends SHA256 {\n constructor() {\n super(28);\n this.A = SHA224_IV[0] | 0;\n this.B = SHA224_IV[1] | 0;\n this.C = SHA224_IV[2] | 0;\n this.D = SHA224_IV[3] | 0;\n this.E = SHA224_IV[4] | 0;\n this.F = SHA224_IV[5] | 0;\n this.G = SHA224_IV[6] | 0;\n this.H = SHA224_IV[7] | 0;\n }\n}\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n// Round contants\n// First 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (() => u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (() => K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (() => K512[1])();\n// Reusable temporary buffers\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\nexport class SHA512 extends HashMD {\n constructor(outputLen = 64) {\n super(128, outputLen, 16, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = SHA512_IV[0] | 0;\n this.Al = SHA512_IV[1] | 0;\n this.Bh = SHA512_IV[2] | 0;\n this.Bl = SHA512_IV[3] | 0;\n this.Ch = SHA512_IV[4] | 0;\n this.Cl = SHA512_IV[5] | 0;\n this.Dh = SHA512_IV[6] | 0;\n this.Dl = SHA512_IV[7] | 0;\n this.Eh = SHA512_IV[8] | 0;\n this.El = SHA512_IV[9] | 0;\n this.Fh = SHA512_IV[10] | 0;\n this.Fl = SHA512_IV[11] | 0;\n this.Gh = SHA512_IV[12] | 0;\n this.Gl = SHA512_IV[13] | 0;\n this.Hh = SHA512_IV[14] | 0;\n this.Hl = SHA512_IV[15] | 0;\n }\n // prettier-ignore\n get() {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl) {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n roundClean() {\n clean(SHA512_W_H, SHA512_W_L);\n }\n destroy() {\n clean(this.buffer);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\nexport class SHA384 extends SHA512 {\n constructor() {\n super(48);\n this.Ah = SHA384_IV[0] | 0;\n this.Al = SHA384_IV[1] | 0;\n this.Bh = SHA384_IV[2] | 0;\n this.Bl = SHA384_IV[3] | 0;\n this.Ch = SHA384_IV[4] | 0;\n this.Cl = SHA384_IV[5] | 0;\n this.Dh = SHA384_IV[6] | 0;\n this.Dl = SHA384_IV[7] | 0;\n this.Eh = SHA384_IV[8] | 0;\n this.El = SHA384_IV[9] | 0;\n this.Fh = SHA384_IV[10] | 0;\n this.Fl = SHA384_IV[11] | 0;\n this.Gh = SHA384_IV[12] | 0;\n this.Gl = SHA384_IV[13] | 0;\n this.Hh = SHA384_IV[14] | 0;\n this.Hl = SHA384_IV[15] | 0;\n }\n}\n/**\n * Truncated SHA512/256 and SHA512/224.\n * SHA512_IV is XORed with 0xa5a5a5a5a5a5a5a5, then used as \"intermediary\" IV of SHA512/t.\n * Then t hashes string to produce result IV.\n * See `test/misc/sha2-gen-iv.js`.\n */\n/** SHA512/224 IV */\nconst T224_IV = /* @__PURE__ */ Uint32Array.from([\n 0x8c3d37c8, 0x19544da2, 0x73e19966, 0x89dcd4d6, 0x1dfab7ae, 0x32ff9c82, 0x679dd514, 0x582f9fcf,\n 0x0f6d2b69, 0x7bd44da8, 0x77e36f73, 0x04c48942, 0x3f9d85a8, 0x6a1d36c8, 0x1112e6ad, 0x91d692a1,\n]);\n/** SHA512/256 IV */\nconst T256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x22312194, 0xfc2bf72c, 0x9f555fa3, 0xc84c64c2, 0x2393b86b, 0x6f53b151, 0x96387719, 0x5940eabd,\n 0x96283ee2, 0xa88effe3, 0xbe5e1e25, 0x53863992, 0x2b0199fc, 0x2c85b8aa, 0x0eb72ddc, 0x81c52ca2,\n]);\nexport class SHA512_224 extends SHA512 {\n constructor() {\n super(28);\n this.Ah = T224_IV[0] | 0;\n this.Al = T224_IV[1] | 0;\n this.Bh = T224_IV[2] | 0;\n this.Bl = T224_IV[3] | 0;\n this.Ch = T224_IV[4] | 0;\n this.Cl = T224_IV[5] | 0;\n this.Dh = T224_IV[6] | 0;\n this.Dl = T224_IV[7] | 0;\n this.Eh = T224_IV[8] | 0;\n this.El = T224_IV[9] | 0;\n this.Fh = T224_IV[10] | 0;\n this.Fl = T224_IV[11] | 0;\n this.Gh = T224_IV[12] | 0;\n this.Gl = T224_IV[13] | 0;\n this.Hh = T224_IV[14] | 0;\n this.Hl = T224_IV[15] | 0;\n }\n}\nexport class SHA512_256 extends SHA512 {\n constructor() {\n super(32);\n this.Ah = T256_IV[0] | 0;\n this.Al = T256_IV[1] | 0;\n this.Bh = T256_IV[2] | 0;\n this.Bl = T256_IV[3] | 0;\n this.Ch = T256_IV[4] | 0;\n this.Cl = T256_IV[5] | 0;\n this.Dh = T256_IV[6] | 0;\n this.Dl = T256_IV[7] | 0;\n this.Eh = T256_IV[8] | 0;\n this.El = T256_IV[9] | 0;\n this.Fh = T256_IV[10] | 0;\n this.Fl = T256_IV[11] | 0;\n this.Gh = T256_IV[12] | 0;\n this.Gl = T256_IV[13] | 0;\n this.Hh = T256_IV[14] | 0;\n this.Hl = T256_IV[15] | 0;\n }\n}\n/**\n * SHA2-256 hash function from RFC 4634.\n *\n * It is the fastest JS hash, even faster than Blake3.\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n */\nexport const sha256 = /* @__PURE__ */ createHasher(() => new SHA256());\n/** SHA2-224 hash function from RFC 4634 */\nexport const sha224 = /* @__PURE__ */ createHasher(() => new SHA224());\n/** SHA2-512 hash function from RFC 4634. */\nexport const sha512 = /* @__PURE__ */ createHasher(() => new SHA512());\n/** SHA2-384 hash function from RFC 4634. */\nexport const sha384 = /* @__PURE__ */ createHasher(() => new SHA384());\n/**\n * SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_256 = /* @__PURE__ */ createHasher(() => new SHA512_256());\n/**\n * SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_224 = /* @__PURE__ */ createHasher(() => new SHA512_224());\n//# sourceMappingURL=sha2.js.map","/**\n * HMAC: RFC2104 message authentication code.\n * @module\n */\nimport { abytes, aexists, ahash, clean, Hash, toBytes } from \"./utils.js\";\nexport class HMAC extends Hash {\n constructor(hash, _key) {\n super();\n this.finished = false;\n this.destroyed = false;\n ahash(hash);\n const key = toBytes(_key);\n this.iHash = hash.create();\n if (typeof this.iHash.update !== 'function')\n throw new Error('Expected instance of class which extends utils.Hash');\n this.blockLen = this.iHash.blockLen;\n this.outputLen = this.iHash.outputLen;\n const blockLen = this.blockLen;\n const pad = new Uint8Array(blockLen);\n // blockLen can be bigger than outputLen\n pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 0x36;\n this.iHash.update(pad);\n // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone\n this.oHash = hash.create();\n // Undo internal XOR && apply outer XOR\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 0x36 ^ 0x5c;\n this.oHash.update(pad);\n clean(pad);\n }\n update(buf) {\n aexists(this);\n this.iHash.update(buf);\n return this;\n }\n digestInto(out) {\n aexists(this);\n abytes(out, this.outputLen);\n this.finished = true;\n this.iHash.digestInto(out);\n this.oHash.update(out);\n this.oHash.digestInto(out);\n this.destroy();\n }\n digest() {\n const out = new Uint8Array(this.oHash.outputLen);\n this.digestInto(out);\n return out;\n }\n _cloneInto(to) {\n // Create new instance without calling constructor since key already in state and we don't know it.\n to || (to = Object.create(Object.getPrototypeOf(this), {}));\n const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n to = to;\n to.finished = finished;\n to.destroyed = destroyed;\n to.blockLen = blockLen;\n to.outputLen = outputLen;\n to.oHash = oHash._cloneInto(to.oHash);\n to.iHash = iHash._cloneInto(to.iHash);\n return to;\n }\n clone() {\n return this._cloneInto();\n }\n destroy() {\n this.destroyed = true;\n this.oHash.destroy();\n this.iHash.destroy();\n }\n}\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - message key\n * @param message - message data\n * @example\n * import { hmac } from '@noble/hashes/hmac';\n * import { sha256 } from '@noble/hashes/sha2';\n * const mac1 = hmac(sha256, 'key', 'message');\n */\nexport const hmac = (hash, key, message) => new HMAC(hash, key).update(message).digest();\nhmac.create = (hash, key) => new HMAC(hash, key);\n//# sourceMappingURL=hmac.js.map","/**\n * Hex, bytes and number utilities.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { abytes as abytes_, bytesToHex as bytesToHex_, concatBytes as concatBytes_, hexToBytes as hexToBytes_, isBytes as isBytes_, } from '@noble/hashes/utils.js';\nexport { abytes, anumber, bytesToHex, bytesToUtf8, concatBytes, hexToBytes, isBytes, randomBytes, utf8ToBytes, } from '@noble/hashes/utils.js';\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nexport function abool(title, value) {\n if (typeof value !== 'boolean')\n throw new Error(title + ' boolean expected, got ' + value);\n}\n// Used in weierstrass, der\nexport function numberToHexUnpadded(num) {\n const hex = num.toString(16);\n return hex.length & 1 ? '0' + hex : hex;\n}\nexport function hexToNumber(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n return hex === '' ? _0n : BigInt('0x' + hex); // Big Endian\n}\n// BE: Big Endian, LE: Little Endian\nexport function bytesToNumberBE(bytes) {\n return hexToNumber(bytesToHex_(bytes));\n}\nexport function bytesToNumberLE(bytes) {\n abytes_(bytes);\n return hexToNumber(bytesToHex_(Uint8Array.from(bytes).reverse()));\n}\nexport function numberToBytesBE(n, len) {\n return hexToBytes_(n.toString(16).padStart(len * 2, '0'));\n}\nexport function numberToBytesLE(n, len) {\n return numberToBytesBE(n, len).reverse();\n}\n// Unpadded, rarely used\nexport function numberToVarBytesBE(n) {\n return hexToBytes_(numberToHexUnpadded(n));\n}\n/**\n * Takes hex string or Uint8Array, converts to Uint8Array.\n * Validates output length.\n * Will throw error for other types.\n * @param title descriptive title for an error e.g. 'private key'\n * @param hex hex string or Uint8Array\n * @param expectedLength optional, will compare to result array's length\n * @returns\n */\nexport function ensureBytes(title, hex, expectedLength) {\n let res;\n if (typeof hex === 'string') {\n try {\n res = hexToBytes_(hex);\n }\n catch (e) {\n throw new Error(title + ' must be hex string or Uint8Array, cause: ' + e);\n }\n }\n else if (isBytes_(hex)) {\n // Uint8Array.from() instead of hash.slice() because node.js Buffer\n // is instance of Uint8Array, and its slice() creates **mutable** copy\n res = Uint8Array.from(hex);\n }\n else {\n throw new Error(title + ' must be hex string or Uint8Array');\n }\n const len = res.length;\n if (typeof expectedLength === 'number' && len !== expectedLength)\n throw new Error(title + ' of length ' + expectedLength + ' expected, got ' + len);\n return res;\n}\n// Compares 2 u8a-s in kinda constant time\nexport function equalBytes(a, b) {\n if (a.length !== b.length)\n return false;\n let diff = 0;\n for (let i = 0; i < a.length; i++)\n diff |= a[i] ^ b[i];\n return diff === 0;\n}\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\n// export const utf8ToBytes: typeof utf8ToBytes_ = utf8ToBytes_;\n/**\n * Converts bytes to string using UTF8 encoding.\n * @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'\n */\n// export const bytesToUtf8: typeof bytesToUtf8_ = bytesToUtf8_;\n// Is positive bigint\nconst isPosBig = (n) => typeof n === 'bigint' && _0n <= n;\nexport function inRange(n, min, max) {\n return isPosBig(n) && isPosBig(min) && isPosBig(max) && min <= n && n < max;\n}\n/**\n * Asserts min <= n < max. NOTE: It's < max and not <= max.\n * @example\n * aInRange('x', x, 1n, 256n); // would assume x is in (1n..255n)\n */\nexport function aInRange(title, n, min, max) {\n // Why min <= n < max and not a (min < n < max) OR b (min <= n <= max)?\n // consider P=256n, min=0n, max=P\n // - a for min=0 would require -1: `inRange('x', x, -1n, P)`\n // - b would commonly require subtraction: `inRange('x', x, 0n, P - 1n)`\n // - our way is the cleanest: `inRange('x', x, 0n, P)\n if (!inRange(n, min, max))\n throw new Error('expected valid ' + title + ': ' + min + ' <= n < ' + max + ', got ' + n);\n}\n// Bit operations\n/**\n * Calculates amount of bits in a bigint.\n * Same as `n.toString(2).length`\n * TODO: merge with nLength in modular\n */\nexport function bitLen(n) {\n let len;\n for (len = 0; n > _0n; n >>= _1n, len += 1)\n ;\n return len;\n}\n/**\n * Gets single bit at position.\n * NOTE: first bit position is 0 (same as arrays)\n * Same as `!!+Array.from(n.toString(2)).reverse()[pos]`\n */\nexport function bitGet(n, pos) {\n return (n >> BigInt(pos)) & _1n;\n}\n/**\n * Sets single bit at position.\n */\nexport function bitSet(n, pos, value) {\n return n | ((value ? _1n : _0n) << BigInt(pos));\n}\n/**\n * Calculate mask for N bits. Not using ** operator with bigints because of old engines.\n * Same as BigInt(`0b${Array(i).fill('1').join('')}`)\n */\nexport const bitMask = (n) => (_1n << BigInt(n)) - _1n;\n/**\n * Minimal HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n * @returns function that will call DRBG until 2nd arg returns something meaningful\n * @example\n * const drbg = createHmacDRBG<Key>(32, 32, hmac);\n * drbg(seed, bytesToKey); // bytesToKey must return Key or undefined\n */\nexport function createHmacDrbg(hashLen, qByteLen, hmacFn) {\n if (typeof hashLen !== 'number' || hashLen < 2)\n throw new Error('hashLen must be a number');\n if (typeof qByteLen !== 'number' || qByteLen < 2)\n throw new Error('qByteLen must be a number');\n if (typeof hmacFn !== 'function')\n throw new Error('hmacFn must be a function');\n // Step B, Step C: set hashLen to 8*ceil(hlen/8)\n const u8n = (len) => new Uint8Array(len); // creates Uint8Array\n const u8of = (byte) => Uint8Array.of(byte); // another shortcut\n let v = u8n(hashLen); // Minimal non-full-spec HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n let k = u8n(hashLen); // Steps B and C of RFC6979 3.2: set hashLen, in our case always same\n let i = 0; // Iterations counter, will throw when over 1000\n const reset = () => {\n v.fill(1);\n k.fill(0);\n i = 0;\n };\n const h = (...b) => hmacFn(k, v, ...b); // hmac(k)(v, ...values)\n const reseed = (seed = u8n(0)) => {\n // HMAC-DRBG reseed() function. Steps D-G\n k = h(u8of(0x00), seed); // k = hmac(k || v || 0x00 || seed)\n v = h(); // v = hmac(k || v)\n if (seed.length === 0)\n return;\n k = h(u8of(0x01), seed); // k = hmac(k || v || 0x01 || seed)\n v = h(); // v = hmac(k || v)\n };\n const gen = () => {\n // HMAC-DRBG generate() function\n if (i++ >= 1000)\n throw new Error('drbg: tried 1000 values');\n let len = 0;\n const out = [];\n while (len < qByteLen) {\n v = h();\n const sl = v.slice();\n out.push(sl);\n len += v.length;\n }\n return concatBytes_(...out);\n };\n const genUntil = (seed, pred) => {\n reset();\n reseed(seed); // Steps D-G\n let res = undefined; // Step H: grind until k is in [1..n-1]\n while (!(res = pred(gen())))\n reseed();\n reset();\n return res;\n };\n return genUntil;\n}\n// Validating curves and fields\nconst validatorFns = {\n bigint: (val) => typeof val === 'bigint',\n function: (val) => typeof val === 'function',\n boolean: (val) => typeof val === 'boolean',\n string: (val) => typeof val === 'string',\n stringOrUint8Array: (val) => typeof val === 'string' || isBytes_(val),\n isSafeInteger: (val) => Number.isSafeInteger(val),\n array: (val) => Array.isArray(val),\n field: (val, object) => object.Fp.isValid(val),\n hash: (val) => typeof val === 'function' && Number.isSafeInteger(val.outputLen),\n};\n// type Record<K extends string | number | symbol, T> = { [P in K]: T; }\nexport function validateObject(object, validators, optValidators = {}) {\n const checkField = (fieldName, type, isOptional) => {\n const checkVal = validatorFns[type];\n if (typeof checkVal !== 'function')\n throw new Error('invalid validator function');\n const val = object[fieldName];\n if (isOptional && val === undefined)\n return;\n if (!checkVal(val, object)) {\n throw new Error('param ' + String(fieldName) + ' is invalid. Expected ' + type + ', got ' + val);\n }\n };\n for (const [fieldName, type] of Object.entries(validators))\n checkField(fieldName, type, false);\n for (const [fieldName, type] of Object.entries(optValidators))\n checkField(fieldName, type, true);\n return object;\n}\n// validate type tests\n// const o: { a: number; b: number; c: number } = { a: 1, b: 5, c: 6 };\n// const z0 = validateObject(o, { a: 'isSafeInteger' }, { c: 'bigint' }); // Ok!\n// // Should fail type-check\n// const z1 = validateObject(o, { a: 'tmp' }, { c: 'zz' });\n// const z2 = validateObject(o, { a: 'isSafeInteger' }, { c: 'zz' });\n// const z3 = validateObject(o, { test: 'boolean', z: 'bug' });\n// const z4 = validateObject(o, { a: 'boolean', z: 'bug' });\nexport function isHash(val) {\n return typeof val === 'function' && Number.isSafeInteger(val.outputLen);\n}\nexport function _validateObject(object, fields, optFields = {}) {\n if (!object || typeof object !== 'object')\n throw new Error('expected valid options object');\n function checkField(fieldName, expectedType, isOpt) {\n const val = object[fieldName];\n if (isOpt && val === undefined)\n return;\n const current = typeof val;\n if (current !== expectedType || val === null)\n throw new Error(`param \"${fieldName}\" is invalid: expected ${expectedType}, got ${current}`);\n }\n Object.entries(fields).forEach(([k, v]) => checkField(k, v, false));\n Object.entries(optFields).forEach(([k, v]) => checkField(k, v, true));\n}\n/**\n * throws not implemented error\n */\nexport const notImplemented = () => {\n throw new Error('not implemented');\n};\n/**\n * Memoizes (caches) computation result.\n * Uses WeakMap: the value is going auto-cleaned by GC after last reference is removed.\n */\nexport function memoized(fn) {\n const map = new WeakMap();\n return (arg, ...args) => {\n const val = map.get(arg);\n if (val !== undefined)\n return val;\n const computed = fn(arg, ...args);\n map.set(arg, computed);\n return computed;\n };\n}\n//# sourceMappingURL=utils.js.map","/**\n * Utils for modular division and fields.\n * Field over 11 is a finite (Galois) field is integer number operations `mod 11`.\n * There is no division: it is replaced by modular multiplicative inverse.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { _validateObject, anumber, bitMask, bytesToNumberBE, bytesToNumberLE, ensureBytes, numberToBytesBE, numberToBytesLE, } from \"../utils.js\";\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = /* @__PURE__ */ BigInt(2), _3n = /* @__PURE__ */ BigInt(3);\n// prettier-ignore\nconst _4n = /* @__PURE__ */ BigInt(4), _5n = /* @__PURE__ */ BigInt(5);\nconst _8n = /* @__PURE__ */ BigInt(8);\n// Calculates a modulo b\nexport function mod(a, b) {\n const result = a % b;\n return result >= _0n ? result : b + result;\n}\n/**\n * Efficiently raise num to power and do modular division.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n * @example\n * pow(2n, 6n, 11n) // 64n % 11n == 9n\n */\nexport function pow(num, power, modulo) {\n return FpPow(Field(modulo), num, power);\n}\n/** Does `x^(2^power)` mod p. `pow2(30, 4)` == `30^(2^4)` */\nexport function pow2(x, power, modulo) {\n let res = x;\n while (power-- > _0n) {\n res *= res;\n res %= modulo;\n }\n return res;\n}\n/**\n * Inverses number over modulo.\n * Implemented using [Euclidean GCD](https://brilliant.org/wiki/extended-euclidean-algorithm/).\n */\nexport function invert(number, modulo) {\n if (number === _0n)\n throw new Error('invert: expected non-zero number');\n if (modulo <= _0n)\n throw new Error('invert: expected positive modulus, got ' + modulo);\n // Fermat's little theorem \"CT-like\" version inv(n) = n^(m-2) mod m is 30x slower.\n let a = mod(number, modulo);\n let b = modulo;\n // prettier-ignore\n let x = _0n, y = _1n, u = _1n, v = _0n;\n while (a !== _0n) {\n // JIT applies optimization if those two lines follow each other\n const q = b / a;\n const r = b % a;\n const m = x - u * q;\n const n = y - v * q;\n // prettier-ignore\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n const gcd = b;\n if (gcd !== _1n)\n throw new Error('invert: does not exist');\n return mod(x, modulo);\n}\n// Not all roots are possible! Example which will throw:\n// const NUM =\n// n = 72057594037927816n;\n// Fp = Field(BigInt('0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab'));\nfunction sqrt3mod4(Fp, n) {\n const p1div4 = (Fp.ORDER + _1n) / _4n;\n const root = Fp.pow(n, p1div4);\n // Throw if root^2 != n\n if (!Fp.eql(Fp.sqr(root), n))\n throw new Error('Cannot find square root');\n return root;\n}\nfunction sqrt5mod8(Fp, n) {\n const p5div8 = (Fp.ORDER - _5n) / _8n;\n const n2 = Fp.mul(n, _2n);\n const v = Fp.pow(n2, p5div8);\n const nv = Fp.mul(n, v);\n const i = Fp.mul(Fp.mul(nv, _2n), v);\n const root = Fp.mul(nv, Fp.sub(i, Fp.ONE));\n if (!Fp.eql(Fp.sqr(root), n))\n throw new Error('Cannot find square root');\n return root;\n}\n// TODO: Commented-out for now. Provide test vectors.\n// Tonelli is too slow for extension fields Fp2.\n// That means we can't use sqrt (c1, c2...) even for initialization constants.\n// if (P % _16n === _9n) return sqrt9mod16;\n// // prettier-ignore\n// function sqrt9mod16<T>(Fp: IField<T>, n: T, p7div16?: bigint) {\n// if (p7div16 === undefined) p7div16 = (Fp.ORDER + BigInt(7)) / _16n;\n// const c1 = Fp.sqrt(Fp.neg(Fp.ONE)); // 1. c1 = sqrt(-1) in F, i.e., (c1^2) == -1 in F\n// const c2 = Fp.sqrt(c1); // 2. c2 = sqrt(c1) in F, i.e., (c2^2) == c1 in F\n// const c3 = Fp.sqrt(Fp.neg(c1)); // 3. c3 = sqrt(-c1) in F, i.e., (c3^2) == -c1 in F\n// const c4 = p7div16; // 4. c4 = (q + 7) / 16 # Integer arithmetic\n// let tv1 = Fp.pow(n, c4); // 1. tv1 = x^c4\n// let tv2 = Fp.mul(c1, tv1); // 2. tv2 = c1 * tv1\n// const tv3 = Fp.mul(c2, tv1); // 3. tv3 = c2 * tv1\n// let tv4 = Fp.mul(c3, tv1); // 4. tv4 = c3 * tv1\n// const e1 = Fp.eql(Fp.sqr(tv2), n); // 5. e1 = (tv2^2) == x\n// const e2 = Fp.eql(Fp.sqr(tv3), n); // 6. e2 = (tv3^2) == x\n// tv1 = Fp.cmov(tv1, tv2, e1); // 7. tv1 = CMOV(tv1, tv2, e1) # Select tv2 if (tv2^2) == x\n// tv2 = Fp.cmov(tv4, tv3, e2); // 8. tv2 = CMOV(tv4, tv3, e2) # Select tv3 if (tv3^2) == x\n// const e3 = Fp.eql(Fp.sqr(tv2), n); // 9. e3 = (tv2^2) == x\n// return Fp.cmov(tv1, tv2, e3); // 10. z = CMOV(tv1, tv2, e3) # Select the sqrt from tv1 and tv2\n// }\n/**\n * Tonelli-Shanks square root search algorithm.\n * 1. https://eprint.iacr.org/2012/685.pdf (page 12)\n * 2. Square Roots from 1; 24, 51, 10 to Dan Shanks\n * @param P field order\n * @returns function that takes field Fp (created from P) and number n\n */\nexport function tonelliShanks(P) {\n // Initialization (precomputation).\n // Caching initialization could boost perf by 7%.\n if (P < BigInt(3))\n throw new Error('sqrt is not defined for small field');\n // Factor P - 1 = Q * 2^S, where Q is odd\n let Q = P - _1n;\n let S = 0;\n while (Q % _2n === _0n) {\n Q /= _2n;\n S++;\n }\n // Find the first quadratic non-residue Z >= 2\n let Z = _2n;\n const _Fp = Field(P);\n while (FpLegendre(_Fp, Z) === 1) {\n // Basic primality test for P. After x iterations, chance of\n // not finding quadratic non-residue is 2^x, so 2^1000.\n if (Z++ > 1000)\n throw new Error('Cannot find square root: probably non-prime P');\n }\n // Fast-path; usually done before Z, but we do \"primality test\".\n if (S === 1)\n return sqrt3mod4;\n // Slow-path\n // TODO: test on Fp2 and others\n let cc = _Fp.pow(Z, Q); // c = z^Q\n const Q1div2 = (Q + _1n) / _2n;\n return function tonelliSlow(Fp, n) {\n if (Fp.is0(n))\n return n;\n // Check if n is a quadratic residue using Legendre symbol\n if (FpLegendre(Fp, n) !== 1)\n throw new Error('Cannot find square root');\n // Initialize variables for the main loop\n let M = S;\n let c = Fp.mul(Fp.ONE, cc); // c = z^Q, move cc from field _Fp into field Fp\n let t = Fp.pow(n, Q); // t = n^Q, first guess at the fudge factor\n let R = Fp.pow(n, Q1div2); // R = n^((Q+1)/2), first guess at the square root\n // Main loop\n // while t != 1\n while (!Fp.eql(t, Fp.ONE)) {\n if (Fp.is0(t))\n return Fp.ZERO; // if t=0 return R=0\n let i = 1;\n // Find the smallest i >= 1 such that t^(2^i) ≡ 1 (mod P)\n let t_tmp = Fp.sqr(t); // t^(2^1)\n while (!Fp.eql(t_tmp, Fp.ONE)) {\n i++;\n t_tmp = Fp.sqr(t_tmp); // t^(2^2)...\n if (i === M)\n throw new Error('Cannot find square root');\n }\n // Calculate the exponent for b: 2^(M - i - 1)\n const exponent = _1n << BigInt(M - i - 1); // bigint is important\n const b = Fp.pow(c, exponent); // b = 2^(M - i - 1)\n // Update variables\n M = i;\n c = Fp.sqr(b); // c = b^2\n t = Fp.mul(t, c); // t = (t * b^2)\n R = Fp.mul(R, b); // R = R*b\n }\n return R;\n };\n}\n/**\n * Square root for a finite field. Will try optimized versions first:\n *\n * 1. P ≡ 3 (mod 4)\n * 2. P ≡ 5 (mod 8)\n * 3. Tonelli-Shanks algorithm\n *\n * Different algorithms can give different roots, it is up to user to decide which one they want.\n * For example there is FpSqrtOdd/FpSqrtEven to choice root based on oddness (used for hash-to-curve).\n */\nexport function FpSqrt(P) {\n // P ≡ 3 (mod 4) => √n = n^((P+1)/4)\n if (P % _4n === _3n)\n return sqrt3mod4;\n // P ≡ 5 (mod 8) => Atkin algorithm, page 10 of https://eprint.iacr.org/2012/685.pdf\n if (P % _8n === _5n)\n return sqrt5mod8;\n // P ≡ 9 (mod 16) not implemented, see above\n // Tonelli-Shanks algorithm\n return tonelliShanks(P);\n}\n// Little-endian check for first LE bit (last BE bit);\nexport const isNegativeLE = (num, modulo) => (mod(num, modulo) & _1n) === _1n;\n// prettier-ignore\nconst FIELD_FIELDS = [\n 'create', 'isValid', 'is0', 'neg', 'inv', 'sqrt', 'sqr',\n 'eql', 'add', 'sub', 'mul', 'pow', 'div',\n 'addN', 'subN', 'mulN', 'sqrN'\n];\nexport function validateField(field) {\n const initial = {\n ORDER: 'bigint',\n MASK: 'bigint',\n BYTES: 'number',\n BITS: 'number',\n };\n const opts = FIELD_FIELDS.reduce((map, val) => {\n map[val] = 'function';\n return map;\n }, initial);\n _validateObject(field, opts);\n // const max = 16384;\n // if (field.BYTES < 1 || field.BYTES > max) throw new Error('invalid field');\n // if (field.BITS < 1 || field.BITS > 8 * max) throw new Error('invalid field');\n return field;\n}\n// Generic field functions\n/**\n * Same as `pow` but for Fp: non-constant-time.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n */\nexport function FpPow(Fp, num, power) {\n if (power < _0n)\n throw new Error('invalid exponent, negatives unsupported');\n if (power === _0n)\n return Fp.ONE;\n if (power === _1n)\n return num;\n let p = Fp.ONE;\n let d = num;\n while (power > _0n) {\n if (power & _1n)\n p = Fp.mul(p, d);\n d = Fp.sqr(d);\n power >>= _1n;\n }\n return p;\n}\n/**\n * Efficiently invert an array of Field elements.\n * Exception-free. Will return `undefined` for 0 elements.\n * @param passZero map 0 to 0 (instead of undefined)\n */\nexport function FpInvertBatch(Fp, nums, passZero = false) {\n const inverted = new Array(nums.length).fill(passZero ? Fp.ZERO : undefined);\n // Walk from first to last, multiply them by each other MOD p\n const multipliedAcc = nums.reduce((acc, num, i) => {\n if (Fp.is0(num))\n return acc;\n inverted[i] = acc;\n return Fp.mul(acc, num);\n }, Fp.ONE);\n // Invert last element\n const invertedAcc = Fp.inv(multipliedAcc);\n // Walk from last to first, multiply them by inverted each other MOD p\n nums.reduceRight((acc, num, i) => {\n if (Fp.is0(num))\n return acc;\n inverted[i] = Fp.mul(acc, inverted[i]);\n return Fp.mul(acc, num);\n }, invertedAcc);\n return inverted;\n}\n// TODO: remove\nexport function FpDiv(Fp, lhs, rhs) {\n return Fp.mul(lhs, typeof rhs === 'bigint' ? invert(rhs, Fp.ORDER) : Fp.inv(rhs));\n}\n/**\n * Legendre symbol.\n * Legendre constant is used to calculate Legendre symbol (a | p)\n * which denotes the value of a^((p-1)/2) (mod p).\n *\n * * (a | p) ≡ 1 if a is a square (mod p), quadratic residue\n * * (a | p) ≡ -1 if a is not a square (mod p), quadratic non residue\n * * (a | p) ≡ 0 if a ≡ 0 (mod p)\n */\nexport function FpLegendre(Fp, n) {\n // We can use 3rd argument as optional cache of this value\n // but seems unneeded for now. The operation is very fast.\n const p1mod2 = (Fp.ORDER - _1n) / _2n;\n const powered = Fp.pow(n, p1mod2);\n const yes = Fp.eql(powered, Fp.ONE);\n const zero = Fp.eql(powered, Fp.ZERO);\n const no = Fp.eql(powered, Fp.neg(Fp.ONE));\n if (!yes && !zero && !no)\n throw new Error('invalid Legendre symbol result');\n return yes ? 1 : zero ? 0 : -1;\n}\n// This function returns True whenever the value x is a square in the field F.\nexport function FpIsSquare(Fp, n) {\n const l = FpLegendre(Fp, n);\n return l === 1;\n}\n// CURVE.n lengths\nexport function nLength(n, nBitLength) {\n // Bit size, byte size of CURVE.n\n if (nBitLength !== undefined)\n anumber(nBitLength);\n const _nBitLength = nBitLength !== undefined ? nBitLength : n.toString(2).length;\n const nByteLength = Math.ceil(_nBitLength / 8);\n return { nBitLength: _nBitLength, nByteLength };\n}\n/**\n * Creates a finite field. Major performance optimizations:\n * * 1. Denormalized operations like mulN instead of mul.\n * * 2. Identical object shape: never add or remove keys.\n * * 3. `Object.freeze`.\n * Fragile: always run a benchmark on a change.\n * Security note: operations don't check 'isValid' for all elements for performance reasons,\n * it is caller responsibility to check this.\n * This is low-level code, please make sure you know what you're doing.\n *\n * Note about field properties:\n * * CHARACTERISTIC p = prime number, number of elements in main subgroup.\n * * ORDER q = similar to cofactor in curves, may be composite `q = p^m`.\n *\n * @param ORDER field order, probably prime, or could be composite\n * @param bitLen how many bits the field consumes\n * @param isLE (default: false) if encoding / decoding should be in little-endian\n * @param redef optional faster redefinitions of sqrt and other methods\n */\nexport function Field(ORDER, bitLenOrOpts, isLE = false, opts = {}) {\n if (ORDER <= _0n)\n throw new Error('invalid field: expected ORDER > 0, got ' + ORDER);\n let _nbitLength = undefined;\n let _sqrt = undefined;\n if (typeof bitLenOrOpts === 'object' && bitLenOrOpts != null) {\n if (opts.sqrt || isLE)\n throw new Error('cannot specify opts in two arguments');\n const _opts = bitLenOrOpts;\n if (_opts.BITS)\n _nbitLength = _opts.BITS;\n if (_opts.sqrt)\n _sqrt = _opts.sqrt;\n if (typeof _opts.isLE === 'boolean')\n isLE = _opts.isLE;\n }\n else {\n if (typeof bitLenOrOpts === 'number')\n _nbitLength = bitLenOrOpts;\n if (opts.sqrt)\n _sqrt = opts.sqrt;\n }\n const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, _nbitLength);\n if (BYTES > 2048)\n throw new Error('invalid field: expected ORDER of <= 2048 bytes');\n let sqrtP; // cached sqrtP\n const f = Object.freeze({\n ORDER,\n isLE,\n BITS,\n BYTES,\n MASK: bitMask(BITS),\n ZERO: _0n,\n ONE: _1n,\n create: (num) => mod(num, ORDER),\n isValid: (num) => {\n if (typeof num !== 'bigint')\n throw new Error('invalid field element: expected bigint, got ' + typeof num);\n return _0n <= num && num < ORDER; // 0 is valid element, but it's not invertible\n },\n is0: (num) => num === _0n,\n // is valid and invertible\n isValidNot0: (num) => !f.is0(num) && f.isValid(num),\n isOdd: (num) => (num & _1n) === _1n,\n neg: (num) => mod(-num, ORDER),\n eql: (lhs, rhs) => lhs === rhs,\n sqr: (num) => mod(num * num, ORDER),\n add: (lhs, rhs) => mod(lhs + rhs, ORDER),\n sub: (lhs, rhs) => mod(lhs - rhs, ORDER),\n mul: (lhs, rhs) => mod(lhs * rhs, ORDER),\n pow: (num, power) => FpPow(f, num, power),\n div: (lhs, rhs) => mod(lhs * invert(rhs, ORDER), ORDER),\n // Same as above, but doesn't normalize\n sqrN: (num) => num * num,\n addN: (lhs, rhs) => lhs + rhs,\n subN: (lhs, rhs) => lhs - rhs,\n mulN: (lhs, rhs) => lhs * rhs,\n inv: (num) => invert(num, ORDER),\n sqrt: _sqrt ||\n ((n) => {\n if (!sqrtP)\n sqrtP = FpSqrt(ORDER);\n return sqrtP(f, n);\n }),\n toBytes: (num) => (isLE ? numberToBytesLE(num, BYTES) : numberToBytesBE(num, BYTES)),\n fromBytes: (bytes) => {\n if (bytes.length !== BYTES)\n throw new Error('Field.fromBytes: expected ' + BYTES + ' bytes, got ' + bytes.length);\n return isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n },\n // TODO: we don't need it here, move out to separate fn\n invertBatch: (lst) => FpInvertBatch(f, lst),\n // We can't move this out because Fp6, Fp12 implement it\n // and it's unclear what to return in there.\n cmov: (a, b, c) => (c ? b : a),\n });\n return Object.freeze(f);\n}\nexport function FpSqrtOdd(Fp, elm) {\n if (!Fp.isOdd)\n throw new Error(\"Field doesn't have isOdd\");\n const root = Fp.sqrt(elm);\n return Fp.isOdd(root) ? root : Fp.neg(root);\n}\nexport function FpSqrtEven(Fp, elm) {\n if (!Fp.isOdd)\n throw new Error(\"Field doesn't have isOdd\");\n const root = Fp.sqrt(elm);\n return Fp.isOdd(root) ? Fp.neg(root) : root;\n}\n/**\n * \"Constant-time\" private key generation utility.\n * Same as mapKeyToField, but accepts less bytes (40 instead of 48 for 32-byte field).\n * Which makes it slightly more biased, less secure.\n * @deprecated use `mapKeyToField` instead\n */\nexport function hashToPrivateScalar(hash, groupOrder, isLE = false) {\n hash = ensureBytes('privateHash', hash);\n const hashLen = hash.length;\n const minLen = nLength(groupOrder).nByteLength + 8;\n if (minLen < 24 || hashLen < minLen || hashLen > 1024)\n throw new Error('hashToPrivateScalar: expected ' + minLen + '-1024 bytes of input, got ' + hashLen);\n const num = isLE ? bytesToNumberLE(hash) : bytesToNumberBE(hash);\n return mod(num, groupOrder - _1n) + _1n;\n}\n/**\n * Returns total number of bytes consumed by the field element.\n * For example, 32 bytes for usual 256-bit weierstrass curve.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of field\n */\nexport function getFieldBytesLength(fieldOrder) {\n if (typeof fieldOrder !== 'bigint')\n throw new Error('field order must be bigint');\n const bitLength = fieldOrder.toString(2).length;\n return Math.ceil(bitLength / 8);\n}\n/**\n * Returns minimal amount of bytes that can be safely reduced\n * by field order.\n * Should be 2^-128 for 128-bit curve such as P256.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of target hash\n */\nexport function getMinHashLength(fieldOrder) {\n const length = getFieldBytesLength(fieldOrder);\n return length + Math.ceil(length / 2);\n}\n/**\n * \"Constant-time\" private key generation utility.\n * Can take (n + n/2) or more bytes of uniform input e.g. from CSPRNG or KDF\n * and convert them into private scalar, with the modulo bias being negligible.\n * Needs at least 48 bytes of input for 32-byte private key.\n * https://research.kudelskisecurity.com/2020/07/28/the-definitive-guide-to-modulo-bias-and-how-to-avoid-it/\n * FIPS 186-5, A.2 https://csrc.nist.gov/publications/detail/fips/186/5/final\n * RFC 9380, https://www.rfc-editor.org/rfc/rfc9380#section-5\n * @param hash hash output from SHA3 or a similar function\n * @param groupOrder size of subgroup - (e.g. secp256k1.CURVE.n)\n * @param isLE interpret hash bytes as LE num\n * @returns valid private scalar\n */\nexport function mapHashToField(key, fieldOrder, isLE = false) {\n const len = key.length;\n const fieldLen = getFieldBytesLength(fieldOrder);\n const minLen = getMinHashLength(fieldOrder);\n // No small numbers: need to understand bias story. No huge numbers: easier to detect JS timings.\n if (len < 16 || len < minLen || len > 1024)\n throw new Error('expected ' + minLen + '-1024 bytes of input, got ' + len);\n const num = isLE ? bytesToNumberLE(key) : bytesToNumberBE(key);\n // `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0\n const reduced = mod(num, fieldOrder - _1n) + _1n;\n return isLE ? numberToBytesLE(reduced, fieldLen) : numberToBytesBE(reduced, fieldLen);\n}\n//# sourceMappingURL=modular.js.map","/**\n * Methods for elliptic curve multiplication by scalars.\n * Contains wNAF, pippenger\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { bitLen, bitMask, validateObject } from \"../utils.js\";\nimport { Field, FpInvertBatch, nLength, validateField } from \"./modular.js\";\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nexport function negateCt(condition, item) {\n const neg = item.negate();\n return condition ? neg : item;\n}\n/**\n * Takes a bunch of Projective Points but executes only one\n * inversion on all of them. Inversion is very slow operation,\n * so this improves performance massively.\n * Optimization: converts a list of projective points to a list of identical points with Z=1.\n */\nexport function normalizeZ(c, property, points) {\n const getz = property === 'pz' ? (p) => p.pz : (p) => p.ez;\n const toInv = FpInvertBatch(c.Fp, points.map(getz));\n // @ts-ignore\n const affined = points.map((p, i) => p.toAffine(toInv[i]));\n return affined.map(c.fromAffine);\n}\nfunction validateW(W, bits) {\n if (!Number.isSafeInteger(W) || W <= 0 || W > bits)\n throw new Error('invalid window size, expected [1..' + bits + '], got W=' + W);\n}\nfunction calcWOpts(W, scalarBits) {\n validateW(W, scalarBits);\n const windows = Math.ceil(scalarBits / W) + 1; // W=8 33. Not 32, because we skip zero\n const windowSize = 2 ** (W - 1); // W=8 128. Not 256, because we skip zero\n const maxNumber = 2 ** W; // W=8 256\n const mask = bitMask(W); // W=8 255 == mask 0b11111111\n const shiftBy = BigInt(W); // W=8 8\n return { windows, windowSize, mask, maxNumber, shiftBy };\n}\nfunction calcOffsets(n, window, wOpts) {\n const { windowSize, mask, maxNumber, shiftBy } = wOpts;\n let wbits = Number(n & mask); // extract W bits.\n let nextN = n >> shiftBy; // shift number by W bits.\n // What actually happens here:\n // const highestBit = Number(mask ^ (mask >> 1n));\n // let wbits2 = wbits - 1; // skip zero\n // if (wbits2 & highestBit) { wbits2 ^= Number(mask); // (~);\n // split if bits > max: +224 => 256-32\n if (wbits > windowSize) {\n // we skip zero, which means instead of `>= size-1`, we do `> size`\n wbits -= maxNumber; // -32, can be maxNumber - wbits, but then we need to set isNeg here.\n nextN += _1n; // +256 (carry)\n }\n const offsetStart = window * windowSize;\n const offset = offsetStart + Math.abs(wbits) - 1; // -1 because we skip zero\n const isZero = wbits === 0; // is current window slice a 0?\n const isNeg = wbits < 0; // is current window slice negative?\n const isNegF = window % 2 !== 0; // fake random statement for noise\n const offsetF = offsetStart; // fake offset for noise\n return { nextN, offset, isZero, isNeg, isNegF, offsetF };\n}\nfunction validateMSMPoints(points, c) {\n if (!Array.isArray(points))\n throw new Error('array expected');\n points.forEach((p, i) => {\n if (!(p instanceof c))\n throw new Error('invalid point at index ' + i);\n });\n}\nfunction validateMSMScalars(scalars, field) {\n if (!Array.isArray(scalars))\n throw new Error('array of scalars expected');\n scalars.forEach((s, i) => {\n if (!field.isValid(s))\n throw new Error('invalid scalar at index ' + i);\n });\n}\n// Since points in different groups cannot be equal (different object constructor),\n// we can have single place to store precomputes.\n// Allows to make points frozen / immutable.\nconst pointPrecomputes = new WeakMap();\nconst pointWindowSizes = new WeakMap();\nfunction getW(P) {\n return pointWindowSizes.get(P) || 1;\n}\nfunction assert0(n) {\n if (n !== _0n)\n throw new Error('invalid wNAF');\n}\n/**\n * Elliptic curve multiplication of Point by scalar. Fragile.\n * Scalars should always be less than curve order: this should be checked inside of a curve itself.\n * Creates precomputation tables for fast multiplication:\n * - private scalar is split by fixed size windows of W bits\n * - every window point is collected from window's table & added to accumulator\n * - since windows are different, same point inside tables won't be accessed more than once per calc\n * - each multiplication is 'Math.ceil(CURVE_ORDER / 𝑊) + 1' point additions (fixed for any scalar)\n * - +1 window is neccessary for wNAF\n * - wNAF reduces table size: 2x less memory + 2x faster generation, but 10% slower multiplication\n *\n * @todo Research returning 2d JS array of windows, instead of a single window.\n * This would allow windows to be in different memory locations\n */\nexport function wNAF(c, bits) {\n return {\n constTimeNegate: negateCt,\n hasPrecomputes(elm) {\n return getW(elm) !== 1;\n },\n // non-const time multiplication ladder\n unsafeLadder(elm, n, p = c.ZERO) {\n let d = elm;\n while (n > _0n) {\n if (n & _1n)\n p = p.add(d);\n d = d.double();\n n >>= _1n;\n }\n return p;\n },\n /**\n * Creates a wNAF precomputation window. Used for caching.\n * Default window size is set by `utils.precompute()` and is equal to 8.\n * Number of precomputed points depends on the curve size:\n * 2^(𝑊−1) * (Math.ceil(𝑛 / 𝑊) + 1), where:\n * - 𝑊 is the window size\n * - 𝑛 is the bitlength of the curve order.\n * For a 256-bit curve and window size 8, the number of precomputed points is 128 * 33 = 4224.\n * @param elm Point instance\n * @param W window size\n * @returns precomputed point tables flattened to a single array\n */\n precomputeWindow(elm, W) {\n const { windows, windowSize } = calcWOpts(W, bits);\n const points = [];\n let p = elm;\n let base = p;\n for (let window = 0; window < windows; window++) {\n base = p;\n points.push(base);\n // i=1, bc we skip 0\n for (let i = 1; i < windowSize; i++) {\n base = base.add(p);\n points.push(base);\n }\n p = base.double();\n }\n return points;\n },\n /**\n * Implements ec multiplication using precomputed tables and w-ary non-adjacent form.\n * @param W window size\n * @param precomputes precomputed tables\n * @param n scalar (we don't check here, but should be less than curve order)\n * @returns real and fake (for const-time) points\n */\n wNAF(W, precomputes, n) {\n // Smaller version:\n // https://github.com/paulmillr/noble-secp256k1/blob/47cb1669b6e506ad66b35fe7d76132ae97465da2/index.ts#L502-L541\n // TODO: check the scalar is less than group order?\n // wNAF behavior is undefined otherwise. But have to carefully remove\n // other checks before wNAF. ORDER == bits here.\n // Accumulators\n let p = c.ZERO;\n let f = c.BASE;\n // This code was first written with assumption that 'f' and 'p' will never be infinity point:\n // since each addition is multiplied by 2 ** W, it cannot cancel each other. However,\n // there is negate now: it is possible that negated element from low value\n // would be the same as high element, which will create carry into next window.\n // It's not obvious how this can fail, but still worth investigating later.\n const wo = calcWOpts(W, bits);\n for (let window = 0; window < wo.windows; window++) {\n // (n === _0n) is handled and not early-exited. isEven and offsetF are used for noise\n const { nextN, offset, isZero, isNeg, isNegF, offsetF } = calcOffsets(n, window, wo);\n n = nextN;\n if (isZero) {\n // bits are 0: add garbage to fake point\n // Important part for const-time getPublicKey: add random \"noise\" point to f.\n f = f.add(negateCt(isNegF, precomputes[offsetF]));\n }\n else {\n // bits are 1: add to result point\n p = p.add(negateCt(isNeg, precomputes[offset]));\n }\n }\n assert0(n);\n // Return both real and fake points: JIT won't eliminate f.\n // At this point there is a way to F be infinity-point even if p is not,\n // which makes it less const-time: around 1 bigint multiply.\n return { p, f };\n },\n /**\n * Implements ec unsafe (non const-time) multiplication using precomputed tables and w-ary non-adjacent form.\n * @param W window size\n * @param precomputes precomputed tables\n * @param n scalar (we don't check here, but should be less than curve order)\n * @param acc accumulator point to add result of multiplication\n * @returns point\n */\n wNAFUnsafe(W, precomputes, n, acc = c.ZERO) {\n const wo = calcWOpts(W, bits);\n for (let window = 0; window < wo.windows; window++) {\n if (n === _0n)\n break; // Early-exit, skip 0 value\n const { nextN, offset, isZero, isNeg } = calcOffsets(n, window, wo);\n n = nextN;\n if (isZero) {\n // Window bits are 0: skip processing.\n // Move to next window.\n continue;\n }\n else {\n const item = precomputes[offset];\n acc = acc.add(isNeg ? item.negate() : item); // Re-using acc allows to save adds in MSM\n }\n }\n assert0(n);\n return acc;\n },\n getPrecomputes(W, P, transform) {\n // Calculate precomputes on a first run, reuse them after\n let comp = pointPrecomputes.get(P);\n if (!comp) {\n comp = this.precomputeWindow(P, W);\n if (W !== 1) {\n // Doing transform outside of if brings 15% perf hit\n if (typeof transform === 'function')\n comp = transform(comp);\n pointPrecomputes.set(P, comp);\n }\n }\n return comp;\n },\n wNAFCached(P, n, transform) {\n const W = getW(P);\n return this.wNAF(W, this.getPrecomputes(W, P, transform), n);\n },\n wNAFCachedUnsafe(P, n, transform, prev) {\n const W = getW(P);\n if (W === 1)\n return this.unsafeLadder(P, n, prev); // For W=1 ladder is ~x2 faster\n return this.wNAFUnsafe(W, this.getPrecomputes(W, P, transform), n, prev);\n },\n // We calculate precomputes for elliptic curve point multiplication\n // using windowed method. This specifies window size and\n // stores precomputed values. Usually only base point would be precomputed.\n setWindowSize(P, W) {\n validateW(W, bits);\n pointWindowSizes.set(P, W);\n pointPrecomputes.delete(P);\n },\n };\n}\n/**\n * Endomorphism-specific multiplication for Koblitz curves.\n * Cost: 128 dbl, 0-256 adds.\n */\nexport function mulEndoUnsafe(c, point, k1, k2) {\n let acc = point;\n let p1 = c.ZERO;\n let p2 = c.ZERO;\n while (k1 > _0n || k2 > _0n) {\n if (k1 & _1n)\n p1 = p1.add(acc);\n if (k2 & _1n)\n p2 = p2.add(acc);\n acc = acc.double();\n k1 >>= _1n;\n k2 >>= _1n;\n }\n return { p1, p2 };\n}\n/**\n * Pippenger algorithm for multi-scalar multiplication (MSM, Pa + Qb + Rc + ...).\n * 30x faster vs naive addition on L=4096, 10x faster than precomputes.\n * For N=254bit, L=1, it does: 1024 ADD + 254 DBL. For L=5: 1536 ADD + 254 DBL.\n * Algorithmically constant-time (for same L), even when 1 point + scalar, or when scalar = 0.\n * @param c Curve Point constructor\n * @param fieldN field over CURVE.N - important that it's not over CURVE.P\n * @param points array of L curve points\n * @param scalars array of L scalars (aka private keys / bigints)\n */\nexport function pippenger(c, fieldN, points, scalars) {\n // If we split scalars by some window (let's say 8 bits), every chunk will only\n // take 256 buckets even if there are 4096 scalars, also re-uses double.\n // TODO:\n // - https://eprint.iacr.org/2024/750.pdf\n // - https://tches.iacr.org/index.php/TCHES/article/view/10287\n // 0 is accepted in scalars\n validateMSMPoints(points, c);\n validateMSMScalars(scalars, fieldN);\n const plength = points.length;\n const slength = scalars.length;\n if (plength !== slength)\n throw new Error('arrays of points and scalars must have equal length');\n // if (plength === 0) throw new Error('array must be of length >= 2');\n const zero = c.ZERO;\n const wbits = bitLen(BigInt(plength));\n let windowSize = 1; // bits\n if (wbits > 12)\n windowSize = wbits - 3;\n else if (wbits > 4)\n windowSize = wbits - 2;\n else if (wbits > 0)\n windowSize = 2;\n const MASK = bitMask(windowSize);\n const buckets = new Array(Number(MASK) + 1).fill(zero); // +1 for zero array\n const lastBits = Math.floor((fieldN.BITS - 1) / windowSize) * windowSize;\n let sum = zero;\n for (let i = lastBits; i >= 0; i -= windowSize) {\n buckets.fill(zero);\n for (let j = 0; j < slength; j++) {\n const scalar = scalars[j];\n const wbits = Number((scalar >> BigInt(i)) & MASK);\n buckets[wbits] = buckets[wbits].add(points[j]);\n }\n let resI = zero; // not using this will do small speed-up, but will lose ct\n // Skip first bucket, because it is zero\n for (let j = buckets.length - 1, sumI = zero; j > 0; j--) {\n sumI = sumI.add(buckets[j]);\n resI = resI.add(sumI);\n }\n sum = sum.add(resI);\n if (i !== 0)\n for (let j = 0; j < windowSize; j++)\n sum = sum.double();\n }\n return sum;\n}\n/**\n * Precomputed multi-scalar multiplication (MSM, Pa + Qb + Rc + ...).\n * @param c Curve Point constructor\n * @param fieldN field over CURVE.N - important that it's not over CURVE.P\n * @param points array of L curve points\n * @returns function which multiplies points with scaars\n */\nexport function precomputeMSMUnsafe(c, fieldN, points, windowSize) {\n /**\n * Performance Analysis of Window-based Precomputation\n *\n * Base Case (256-bit scalar, 8-bit window):\n * - Standard precomputation requires:\n * - 31 additions per scalar × 256 scalars = 7,936 ops\n * - Plus 255 summary additions = 8,191 total ops\n * Note: Summary additions can be optimized via accumulator\n *\n * Chunked Precomputation Analysis:\n * - Using 32 chunks requires:\n * - 255 additions per chunk\n * - 256 doublings\n * - Total: (255 × 32) + 256 = 8,416 ops\n *\n * Memory Usage Comparison:\n * Window Size | Standard Points | Chunked Points\n * ------------|-----------------|---------------\n * 4-bit | 520 | 15\n * 8-bit | 4,224 | 255\n * 10-bit | 13,824 | 1,023\n * 16-bit | 557,056 | 65,535\n *\n * Key Advantages:\n * 1. Enables larger window sizes due to reduced memory overhead\n * 2. More efficient for smaller scalar counts:\n * - 16 chunks: (16 × 255) + 256 = 4,336 ops\n * - ~2x faster than standard 8,191 ops\n *\n * Limitations:\n * - Not suitable for plain precomputes (requires 256 constant doublings)\n * - Performance degrades with larger scalar counts:\n * - Optimal for ~256 scalars\n * - Less efficient for 4096+ scalars (Pippenger preferred)\n */\n validateW(windowSize, fieldN.BITS);\n validateMSMPoints(points, c);\n const zero = c.ZERO;\n const tableSize = 2 ** windowSize - 1; // table size (without zero)\n const chunks = Math.ceil(fieldN.BITS / windowSize); // chunks of item\n const MASK = bitMask(windowSize);\n const tables = points.map((p) => {\n const res = [];\n for (let i = 0, acc = p; i < tableSize; i++) {\n res.push(acc);\n acc = acc.add(p);\n }\n return res;\n });\n return (scalars) => {\n validateMSMScalars(scalars, fieldN);\n if (scalars.length > points.length)\n throw new Error('array of scalars must be smaller than array of points');\n let res = zero;\n for (let i = 0; i < chunks; i++) {\n // No need to double if accumulator is still zero.\n if (res !== zero)\n for (let j = 0; j < windowSize; j++)\n res = res.double();\n const shiftBy = BigInt(chunks * windowSize - (i + 1) * windowSize);\n for (let j = 0; j < scalars.length; j++) {\n const n = scalars[j];\n const curr = Number((n >> shiftBy) & MASK);\n if (!curr)\n continue; // skip zero scalars chunks\n res = res.add(tables[j][curr - 1]);\n }\n }\n return res;\n };\n}\n// TODO: remove\n/** @deprecated */\nexport function validateBasic(curve) {\n validateField(curve.Fp);\n validateObject(curve, {\n n: 'bigint',\n h: 'bigint',\n Gx: 'field',\n Gy: 'field',\n }, {\n nBitLength: 'isSafeInteger',\n nByteLength: 'isSafeInteger',\n });\n // Set defaults\n return Object.freeze({\n ...nLength(curve.n, curve.nBitLength),\n ...curve,\n ...{ p: curve.Fp.ORDER },\n });\n}\nfunction createField(order, field) {\n if (field) {\n if (field.ORDER !== order)\n throw new Error('Field.ORDER must match order: Fp == p, Fn == n');\n validateField(field);\n return field;\n }\n else {\n return Field(order);\n }\n}\n/** Validates CURVE opts and creates fields */\nexport function _createCurveFields(type, CURVE, curveOpts = {}) {\n if (!CURVE || typeof CURVE !== 'object')\n throw new Error(`expected valid ${type} CURVE object`);\n for (const p of ['p', 'n', 'h']) {\n const val = CURVE[p];\n if (!(typeof val === 'bigint' && val > _0n))\n throw new Error(`CURVE.${p} must be positive bigint`);\n }\n const Fp = createField(CURVE.p, curveOpts.Fp);\n const Fn = createField(CURVE.n, curveOpts.Fn);\n const _b = type === 'weierstrass' ? 'b' : 'd';\n const params = ['Gx', 'Gy', 'a', _b];\n for (const p of params) {\n // @ts-ignore\n if (!Fp.isValid(CURVE[p]))\n throw new Error(`CURVE.${p} must be valid field element of CURVE.Fp`);\n }\n return { Fp, Fn };\n}\n//# sourceMappingURL=curve.js.map","/**\n * Short Weierstrass curve methods. The formula is: y² = x³ + ax + b.\n *\n * ### Design rationale for types\n *\n * * Interaction between classes from different curves should fail:\n * `k256.Point.BASE.add(p256.Point.BASE)`\n * * For this purpose we want to use `instanceof` operator, which is fast and works during runtime\n * * Different calls of `curve()` would return different classes -\n * `curve(params) !== curve(params)`: if somebody decided to monkey-patch their curve,\n * it won't affect others\n *\n * TypeScript can't infer types for classes created inside a function. Classes is one instance\n * of nominative types in TypeScript and interfaces only check for shape, so it's hard to create\n * unique type for every function call.\n *\n * We can use generic types via some param, like curve opts, but that would:\n * 1. Enable interaction between `curve(params)` and `curve(params)` (curves of same params)\n * which is hard to debug.\n * 2. Params can be generic and we can't enforce them to be constant value:\n * if somebody creates curve from non-constant params,\n * it would be allowed to interact with other curves with non-constant params\n *\n * @todo https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html#unique-symbol\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { hmac } from '@noble/hashes/hmac.js';\nimport { _validateObject, abool, abytes, aInRange, bitMask, bytesToHex, bytesToNumberBE, concatBytes, createHmacDrbg, ensureBytes, hexToBytes, inRange, isBytes, memoized, numberToHexUnpadded, randomBytes, } from \"../utils.js\";\nimport { _createCurveFields, mulEndoUnsafe, negateCt, normalizeZ, pippenger, wNAF, } from \"./curve.js\";\nimport { Field, FpInvertBatch, getMinHashLength, mapHashToField, validateField, } from \"./modular.js\";\nfunction validateSigVerOpts(opts) {\n if (opts.lowS !== undefined)\n abool('lowS', opts.lowS);\n if (opts.prehash !== undefined)\n abool('prehash', opts.prehash);\n}\nexport class DERErr extends Error {\n constructor(m = '') {\n super(m);\n }\n}\n/**\n * ASN.1 DER encoding utilities. ASN is very complex & fragile. Format:\n *\n * [0x30 (SEQUENCE), bytelength, 0x02 (INTEGER), intLength, R, 0x02 (INTEGER), intLength, S]\n *\n * Docs: https://letsencrypt.org/docs/a-warm-welcome-to-asn1-and-der/, https://luca.ntop.org/Teaching/Appunti/asn1.html\n */\nexport const DER = {\n // asn.1 DER encoding utils\n Err: DERErr,\n // Basic building block is TLV (Tag-Length-Value)\n _tlv: {\n encode: (tag, data) => {\n const { Err: E } = DER;\n if (tag < 0 || tag > 256)\n throw new E('tlv.encode: wrong tag');\n if (data.length & 1)\n throw new E('tlv.encode: unpadded data');\n const dataLen = data.length / 2;\n const len = numberToHexUnpadded(dataLen);\n if ((len.length / 2) & 128)\n throw new E('tlv.encode: long form length too big');\n // length of length with long form flag\n const lenLen = dataLen > 127 ? numberToHexUnpadded((len.length / 2) | 128) : '';\n const t = numberToHexUnpadded(tag);\n return t + lenLen + len + data;\n },\n // v - value, l - left bytes (unparsed)\n decode(tag, data) {\n const { Err: E } = DER;\n let pos = 0;\n if (tag < 0 || tag > 256)\n throw new E('tlv.encode: wrong tag');\n if (data.length < 2 || data[pos++] !== tag)\n throw new E('tlv.decode: wrong tlv');\n const first = data[pos++];\n const isLong = !!(first & 128); // First bit of first length byte is flag for short/long form\n let length = 0;\n if (!isLong)\n length = first;\n else {\n // Long form: [longFlag(1bit), lengthLength(7bit), length (BE)]\n const lenLen = first & 127;\n if (!lenLen)\n throw new E('tlv.decode(long): indefinite length not supported');\n if (lenLen > 4)\n throw new E('tlv.decode(long): byte length is too big'); // this will overflow u32 in js\n const lengthBytes = data.subarray(pos, pos + lenLen);\n if (lengthBytes.length !== lenLen)\n throw new E('tlv.decode: length bytes not complete');\n if (lengthBytes[0] === 0)\n throw new E('tlv.decode(long): zero leftmost byte');\n for (const b of lengthBytes)\n length = (length << 8) | b;\n pos += lenLen;\n if (length < 128)\n throw new E('tlv.decode(long): not minimal encoding');\n }\n const v = data.subarray(pos, pos + length);\n if (v.length !== length)\n throw new E('tlv.decode: wrong value length');\n return { v, l: data.subarray(pos + length) };\n },\n },\n // https://crypto.stackexchange.com/a/57734 Leftmost bit of first byte is 'negative' flag,\n // since we always use positive integers here. It must always be empty:\n // - add zero byte if exists\n // - if next byte doesn't have a flag, leading zero is not allowed (minimal encoding)\n _int: {\n encode(num) {\n const { Err: E } = DER;\n if (num < _0n)\n throw new E('integer: negative integers are not allowed');\n let hex = numberToHexUnpadded(num);\n // Pad with zero byte if negative flag is present\n if (Number.parseInt(hex[0], 16) & 0b1000)\n hex = '00' + hex;\n if (hex.length & 1)\n throw new E('unexpected DER parsing assertion: unpadded hex');\n return hex;\n },\n decode(data) {\n const { Err: E } = DER;\n if (data[0] & 128)\n throw new E('invalid signature integer: negative');\n if (data[0] === 0x00 && !(data[1] & 128))\n throw new E('invalid signature integer: unnecessary leading zero');\n return bytesToNumberBE(data);\n },\n },\n toSig(hex) {\n // parse DER signature\n const { Err: E, _int: int, _tlv: tlv } = DER;\n const data = ensureBytes('signature', hex);\n const { v: seqBytes, l: seqLeftBytes } = tlv.decode(0x30, data);\n if (seqLeftBytes.length)\n throw new E('invalid signature: left bytes after parsing');\n const { v: rBytes, l: rLeftBytes } = tlv.decode(0x02, seqBytes);\n const { v: sBytes, l: sLeftBytes } = tlv.decode(0x02, rLeftBytes);\n if (sLeftBytes.length)\n throw new E('invalid signature: left bytes after parsing');\n return { r: int.decode(rBytes), s: int.decode(sBytes) };\n },\n hexFromSig(sig) {\n const { _tlv: tlv, _int: int } = DER;\n const rs = tlv.encode(0x02, int.encode(sig.r));\n const ss = tlv.encode(0x02, int.encode(sig.s));\n const seq = rs + ss;\n return tlv.encode(0x30, seq);\n },\n};\n// Be friendly to bad ECMAScript parsers by not using bigint literals\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3), _4n = BigInt(4);\n// TODO: remove\nexport function _legacyHelperEquat(Fp, a, b) {\n /**\n * y² = x³ + ax + b: Short weierstrass curve formula. Takes x, returns y².\n * @returns y²\n */\n function weierstrassEquation(x) {\n const x2 = Fp.sqr(x); // x * x\n const x3 = Fp.mul(x2, x); // x² * x\n return Fp.add(Fp.add(x3, Fp.mul(x, a)), b); // x³ + a * x + b\n }\n return weierstrassEquation;\n}\nexport function _legacyHelperNormPriv(Fn, allowedPrivateKeyLengths, wrapPrivateKey) {\n const { BYTES: expected } = Fn;\n // Validates if priv key is valid and converts it to bigint.\n function normPrivateKeyToScalar(key) {\n let num;\n if (typeof key === 'bigint') {\n num = key;\n }\n else {\n let bytes = ensureBytes('private key', key);\n if (allowedPrivateKeyLengths) {\n if (!allowedPrivateKeyLengths.includes(bytes.length * 2))\n throw new Error('invalid private key');\n const padded = new Uint8Array(expected);\n padded.set(bytes, padded.length - bytes.length);\n bytes = padded;\n }\n try {\n num = Fn.fromBytes(bytes);\n }\n catch (error) {\n throw new Error(`invalid private key: expected ui8a of size ${expected}, got ${typeof key}`);\n }\n }\n if (wrapPrivateKey)\n num = Fn.create(num); // disabled by default, enabled for BLS\n if (!Fn.isValidNot0(num))\n throw new Error('invalid private key: out of range [1..N-1]');\n return num;\n }\n return normPrivateKeyToScalar;\n}\nexport function weierstrassN(CURVE, curveOpts = {}) {\n const { Fp, Fn } = _createCurveFields('weierstrass', CURVE, curveOpts);\n const { h: cofactor, n: CURVE_ORDER } = CURVE;\n _validateObject(curveOpts, {}, {\n allowInfinityPoint: 'boolean',\n clearCofactor: 'function',\n isTorsionFree: 'function',\n fromBytes: 'function',\n toBytes: 'function',\n endo: 'object',\n wrapPrivateKey: 'boolean',\n });\n const { endo } = curveOpts;\n if (endo) {\n // validateObject(endo, { beta: 'bigint', splitScalar: 'function' });\n if (!Fp.is0(CURVE.a) ||\n typeof endo.beta !== 'bigint' ||\n typeof endo.splitScalar !== 'function') {\n throw new Error('invalid endo: expected \"beta\": bigint and \"splitScalar\": function');\n }\n }\n function assertCompressionIsSupported() {\n if (!Fp.isOdd)\n throw new Error('compression is not supported: Field does not have .isOdd()');\n }\n // Implements IEEE P1363 point encoding\n function pointToBytes(_c, point, isCompressed) {\n const { x, y } = point.toAffine();\n const bx = Fp.toBytes(x);\n abool('isCompressed', isCompressed);\n if (isCompressed) {\n assertCompressionIsSupported();\n const hasEvenY = !Fp.isOdd(y);\n return concatBytes(pprefix(hasEvenY), bx);\n }\n else {\n return concatBytes(Uint8Array.of(0x04), bx, Fp.toBytes(y));\n }\n }\n function pointFromBytes(bytes) {\n abytes(bytes);\n const L = Fp.BYTES;\n const LC = L + 1; // length compressed, e.g. 33 for 32-byte field\n const LU = 2 * L + 1; // length uncompressed, e.g. 65 for 32-byte field\n const length = bytes.length;\n const head = bytes[0];\n const tail = bytes.subarray(1);\n // No actual validation is done here: use .assertValidity()\n if (length === LC && (head === 0x02 || head === 0x03)) {\n const x = Fp.fromBytes(tail);\n if (!Fp.isValid(x))\n throw new Error('bad point: is not on curve, wrong x');\n const y2 = weierstrassEquation(x); // y² = x³ + ax + b\n let y;\n try {\n y = Fp.sqrt(y2); // y = y² ^ (p+1)/4\n }\n catch (sqrtError) {\n const err = sqrtError instanceof Error ? ': ' + sqrtError.message : '';\n throw new Error('bad point: is not on curve, sqrt error' + err);\n }\n assertCompressionIsSupported();\n const isYOdd = Fp.isOdd(y); // (y & _1n) === _1n;\n const isHeadOdd = (head & 1) === 1; // ECDSA-specific\n if (isHeadOdd !== isYOdd)\n y = Fp.neg(y);\n return { x, y };\n }\n else if (length === LU && head === 0x04) {\n // TODO: more checks\n const x = Fp.fromBytes(tail.subarray(L * 0, L * 1));\n const y = Fp.fromBytes(tail.subarray(L * 1, L * 2));\n if (!isValidXY(x, y))\n throw new Error('bad point: is not on curve');\n return { x, y };\n }\n else {\n throw new Error(`bad point: got length ${length}, expected compressed=${LC} or uncompressed=${LU}`);\n }\n }\n const toBytes = curveOpts.toBytes || pointToBytes;\n const fromBytes = curveOpts.fromBytes || pointFromBytes;\n const weierstrassEquation = _legacyHelperEquat(Fp, CURVE.a, CURVE.b);\n // TODO: move top-level\n /** Checks whether equation holds for given x, y: y² == x³ + ax + b */\n function isValidXY(x, y) {\n const left = Fp.sqr(y); // y²\n const right = weierstrassEquation(x); // x³ + ax + b\n return Fp.eql(left, right);\n }\n // Validate whether the passed curve params are valid.\n // Test 1: equation y² = x³ + ax + b should work for generator point.\n if (!isValidXY(CURVE.Gx, CURVE.Gy))\n throw new Error('bad curve params: generator point');\n // Test 2: discriminant Δ part should be non-zero: 4a³ + 27b² != 0.\n // Guarantees curve is genus-1, smooth (non-singular).\n const _4a3 = Fp.mul(Fp.pow(CURVE.a, _3n), _4n);\n const _27b2 = Fp.mul(Fp.sqr(CURVE.b), BigInt(27));\n if (Fp.is0(Fp.add(_4a3, _27b2)))\n throw new Error('bad curve params: a or b');\n /** Asserts coordinate is valid: 0 <= n < Fp.ORDER. */\n function acoord(title, n, banZero = false) {\n if (!Fp.isValid(n) || (banZero && Fp.is0(n)))\n throw new Error(`bad point coordinate ${title}`);\n return n;\n }\n function aprjpoint(other) {\n if (!(other instanceof Point))\n throw new Error('ProjectivePoint expected');\n }\n // Memoized toAffine / validity check. They are heavy. Points are immutable.\n // Converts Projective point to affine (x, y) coordinates.\n // Can accept precomputed Z^-1 - for example, from invertBatch.\n // (X, Y, Z) ∋ (x=X/Z, y=Y/Z)\n const toAffineMemo = memoized((p, iz) => {\n const { px: x, py: y, pz: z } = p;\n // Fast-path for normalized points\n if (Fp.eql(z, Fp.ONE))\n return { x, y };\n const is0 = p.is0();\n // If invZ was 0, we return zero point. However we still want to execute\n // all operations, so we replace invZ with a random number, 1.\n if (iz == null)\n iz = is0 ? Fp.ONE : Fp.inv(z);\n const ax = Fp.mul(x, iz);\n const ay = Fp.mul(y, iz);\n const zz = Fp.mul(z, iz);\n if (is0)\n return { x: Fp.ZERO, y: Fp.ZERO };\n if (!Fp.eql(zz, Fp.ONE))\n throw new Error('invZ was invalid');\n return { x: ax, y: ay };\n });\n // NOTE: on exception this will crash 'cached' and no value will be set.\n // Otherwise true will be return\n const assertValidMemo = memoized((p) => {\n if (p.is0()) {\n // (0, 1, 0) aka ZERO is invalid in most contexts.\n // In BLS, ZERO can be serialized, so we allow it.\n // (0, 0, 0) is invalid representation of ZERO.\n if (curveOpts.allowInfinityPoint && !Fp.is0(p.py))\n return;\n throw new Error('bad point: ZERO');\n }\n // Some 3rd-party test vectors require different wording between here & `fromCompressedHex`\n const { x, y } = p.toAffine();\n if (!Fp.isValid(x) || !Fp.isValid(y))\n throw new Error('bad point: x or y not field elements');\n if (!isValidXY(x, y))\n throw new Error('bad point: equation left != right');\n if (!p.isTorsionFree())\n throw new Error('bad point: not in prime-order subgroup');\n return true;\n });\n function finishEndo(endoBeta, k1p, k2p, k1neg, k2neg) {\n k2p = new Point(Fp.mul(k2p.px, endoBeta), k2p.py, k2p.pz);\n k1p = negateCt(k1neg, k1p);\n k2p = negateCt(k2neg, k2p);\n return k1p.add(k2p);\n }\n /**\n * Projective Point works in 3d / projective (homogeneous) coordinates:(X, Y, Z) ∋ (x=X/Z, y=Y/Z).\n * Default Point works in 2d / affine coordinates: (x, y).\n * We're doing calculations in projective, because its operations don't require costly inversion.\n */\n class Point {\n /** Does NOT validate if the point is valid. Use `.assertValidity()`. */\n constructor(px, py, pz) {\n this.px = acoord('x', px);\n this.py = acoord('y', py, true);\n this.pz = acoord('z', pz);\n Object.freeze(this);\n }\n /** Does NOT validate if the point is valid. Use `.assertValidity()`. */\n static fromAffine(p) {\n const { x, y } = p || {};\n if (!p || !Fp.isValid(x) || !Fp.isValid(y))\n throw new Error('invalid affine point');\n if (p instanceof Point)\n throw new Error('projective point not allowed');\n // (0, 0) would've produced (0, 0, 1) - instead, we need (0, 1, 0)\n if (Fp.is0(x) && Fp.is0(y))\n return Point.ZERO;\n return new Point(x, y, Fp.ONE);\n }\n get x() {\n return this.toAffine().x;\n }\n get y() {\n return this.toAffine().y;\n }\n static normalizeZ(points) {\n return normalizeZ(Point, 'pz', points);\n }\n static fromBytes(bytes) {\n abytes(bytes);\n return Point.fromHex(bytes);\n }\n /** Converts hash string or Uint8Array to Point. */\n static fromHex(hex) {\n const P = Point.fromAffine(fromBytes(ensureBytes('pointHex', hex)));\n P.assertValidity();\n return P;\n }\n /** Multiplies generator point by privateKey. */\n static fromPrivateKey(privateKey) {\n const normPrivateKeyToScalar = _legacyHelperNormPriv(Fn, curveOpts.allowedPrivateKeyLengths, curveOpts.wrapPrivateKey);\n return Point.BASE.multiply(normPrivateKeyToScalar(privateKey));\n }\n /** Multiscalar Multiplication */\n static msm(points, scalars) {\n return pippenger(Point, Fn, points, scalars);\n }\n /**\n *\n * @param windowSize\n * @param isLazy true will defer table computation until the first multiplication\n * @returns\n */\n precompute(windowSize = 8, isLazy = true) {\n wnaf.setWindowSize(this, windowSize);\n if (!isLazy)\n this.multiply(_3n); // random number\n return this;\n }\n /** \"Private method\", don't use it directly */\n _setWindowSize(windowSize) {\n this.precompute(windowSize);\n }\n // TODO: return `this`\n /** A point on curve is valid if it conforms to equation. */\n assertValidity() {\n assertValidMemo(this);\n }\n hasEvenY() {\n const { y } = this.toAffine();\n if (!Fp.isOdd)\n throw new Error(\"Field doesn't support isOdd\");\n return !Fp.isOdd(y);\n }\n /** Compare one point to another. */\n equals(other) {\n aprjpoint(other);\n const { px: X1, py: Y1, pz: Z1 } = this;\n const { px: X2, py: Y2, pz: Z2 } = other;\n const U1 = Fp.eql(Fp.mul(X1, Z2), Fp.mul(X2, Z1));\n const U2 = Fp.eql(Fp.mul(Y1, Z2), Fp.mul(Y2, Z1));\n return U1 && U2;\n }\n /** Flips point to one corresponding to (x, -y) in Affine coordinates. */\n negate() {\n return new Point(this.px, Fp.neg(this.py), this.pz);\n }\n // Renes-Costello-Batina exception-free doubling formula.\n // There is 30% faster Jacobian formula, but it is not complete.\n // https://eprint.iacr.org/2015/1060, algorithm 3\n // Cost: 8M + 3S + 3*a + 2*b3 + 15add.\n double() {\n const { a, b } = CURVE;\n const b3 = Fp.mul(b, _3n);\n const { px: X1, py: Y1, pz: Z1 } = this;\n let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n let t0 = Fp.mul(X1, X1); // step 1\n let t1 = Fp.mul(Y1, Y1);\n let t2 = Fp.mul(Z1, Z1);\n let t3 = Fp.mul(X1, Y1);\n t3 = Fp.add(t3, t3); // step 5\n Z3 = Fp.mul(X1, Z1);\n Z3 = Fp.add(Z3, Z3);\n X3 = Fp.mul(a, Z3);\n Y3 = Fp.mul(b3, t2);\n Y3 = Fp.add(X3, Y3); // step 10\n X3 = Fp.sub(t1, Y3);\n Y3 = Fp.add(t1, Y3);\n Y3 = Fp.mul(X3, Y3);\n X3 = Fp.mul(t3, X3);\n Z3 = Fp.mul(b3, Z3); // step 15\n t2 = Fp.mul(a, t2);\n t3 = Fp.sub(t0, t2);\n t3 = Fp.mul(a, t3);\n t3 = Fp.add(t3, Z3);\n Z3 = Fp.add(t0, t0); // step 20\n t0 = Fp.add(Z3, t0);\n t0 = Fp.add(t0, t2);\n t0 = Fp.mul(t0, t3);\n Y3 = Fp.add(Y3, t0);\n t2 = Fp.mul(Y1, Z1); // step 25\n t2 = Fp.add(t2, t2);\n t0 = Fp.mul(t2, t3);\n X3 = Fp.sub(X3, t0);\n Z3 = Fp.mul(t2, t1);\n Z3 = Fp.add(Z3, Z3); // step 30\n Z3 = Fp.add(Z3, Z3);\n return new Point(X3, Y3, Z3);\n }\n // Renes-Costello-Batina exception-free addition formula.\n // There is 30% faster Jacobian formula, but it is not complete.\n // https://eprint.iacr.org/2015/1060, algorithm 1\n // Cost: 12M + 0S + 3*a + 3*b3 + 23add.\n add(other) {\n aprjpoint(other);\n const { px: X1, py: Y1, pz: Z1 } = this;\n const { px: X2, py: Y2, pz: Z2 } = other;\n let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n const a = CURVE.a;\n const b3 = Fp.mul(CURVE.b, _3n);\n let t0 = Fp.mul(X1, X2); // step 1\n let t1 = Fp.mul(Y1, Y2);\n let t2 = Fp.mul(Z1, Z2);\n let t3 = Fp.add(X1, Y1);\n let t4 = Fp.add(X2, Y2); // step 5\n t3 = Fp.mul(t3, t4);\n t4 = Fp.add(t0, t1);\n t3 = Fp.sub(t3, t4);\n t4 = Fp.add(X1, Z1);\n let t5 = Fp.add(X2, Z2); // step 10\n t4 = Fp.mul(t4, t5);\n t5 = Fp.add(t0, t2);\n t4 = Fp.sub(t4, t5);\n t5 = Fp.add(Y1, Z1);\n X3 = Fp.add(Y2, Z2); // step 15\n t5 = Fp.mul(t5, X3);\n X3 = Fp.add(t1, t2);\n t5 = Fp.sub(t5, X3);\n Z3 = Fp.mul(a, t4);\n X3 = Fp.mul(b3, t2); // step 20\n Z3 = Fp.add(X3, Z3);\n X3 = Fp.sub(t1, Z3);\n Z3 = Fp.add(t1, Z3);\n Y3 = Fp.mul(X3, Z3);\n t1 = Fp.add(t0, t0); // step 25\n t1 = Fp.add(t1, t0);\n t2 = Fp.mul(a, t2);\n t4 = Fp.mul(b3, t4);\n t1 = Fp.add(t1, t2);\n t2 = Fp.sub(t0, t2); // step 30\n t2 = Fp.mul(a, t2);\n t4 = Fp.add(t4, t2);\n t0 = Fp.mul(t1, t4);\n Y3 = Fp.add(Y3, t0);\n t0 = Fp.mul(t5, t4); // step 35\n X3 = Fp.mul(t3, X3);\n X3 = Fp.sub(X3, t0);\n t0 = Fp.mul(t3, t1);\n Z3 = Fp.mul(t5, Z3);\n Z3 = Fp.add(Z3, t0); // step 40\n return new Point(X3, Y3, Z3);\n }\n subtract(other) {\n return this.add(other.negate());\n }\n is0() {\n return this.equals(Point.ZERO);\n }\n /**\n * Constant time multiplication.\n * Uses wNAF method. Windowed method may be 10% faster,\n * but takes 2x longer to generate and consumes 2x memory.\n * Uses precomputes when available.\n * Uses endomorphism for Koblitz curves.\n * @param scalar by which the point would be multiplied\n * @returns New point\n */\n multiply(scalar) {\n const { endo } = curveOpts;\n if (!Fn.isValidNot0(scalar))\n throw new Error('invalid scalar: out of range'); // 0 is invalid\n let point, fake; // Fake point is used to const-time mult\n const mul = (n) => wnaf.wNAFCached(this, n, Point.normalizeZ);\n /** See docs for {@link EndomorphismOpts} */\n if (endo) {\n const { k1neg, k1, k2neg, k2 } = endo.splitScalar(scalar);\n const { p: k1p, f: k1f } = mul(k1);\n const { p: k2p, f: k2f } = mul(k2);\n fake = k1f.add(k2f);\n point = finishEndo(endo.beta, k1p, k2p, k1neg, k2neg);\n }\n else {\n const { p, f } = mul(scalar);\n point = p;\n fake = f;\n }\n // Normalize `z` for both points, but return only real one\n return Point.normalizeZ([point, fake])[0];\n }\n /**\n * Non-constant-time multiplication. Uses double-and-add algorithm.\n * It's faster, but should only be used when you don't care about\n * an exposed private key e.g. sig verification, which works over *public* keys.\n */\n multiplyUnsafe(sc) {\n const { endo } = curveOpts;\n const p = this;\n if (!Fn.isValid(sc))\n throw new Error('invalid scalar: out of range'); // 0 is valid\n if (sc === _0n || p.is0())\n return Point.ZERO;\n if (sc === _1n)\n return p; // fast-path\n if (wnaf.hasPrecomputes(this))\n return this.multiply(sc);\n if (endo) {\n const { k1neg, k1, k2neg, k2 } = endo.splitScalar(sc);\n // `wNAFCachedUnsafe` is 30% slower\n const { p1, p2 } = mulEndoUnsafe(Point, p, k1, k2);\n return finishEndo(endo.beta, p1, p2, k1neg, k2neg);\n }\n else {\n return wnaf.wNAFCachedUnsafe(p, sc);\n }\n }\n multiplyAndAddUnsafe(Q, a, b) {\n const sum = this.multiplyUnsafe(a).add(Q.multiplyUnsafe(b));\n return sum.is0() ? undefined : sum;\n }\n /**\n * Converts Projective point to affine (x, y) coordinates.\n * @param invertedZ Z^-1 (inverted zero) - optional, precomputation is useful for invertBatch\n */\n toAffine(invertedZ) {\n return toAffineMemo(this, invertedZ);\n }\n /**\n * Checks whether Point is free of torsion elements (is in prime subgroup).\n * Always torsion-free for cofactor=1 curves.\n */\n isTorsionFree() {\n const { isTorsionFree } = curveOpts;\n if (cofactor === _1n)\n return true;\n if (isTorsionFree)\n return isTorsionFree(Point, this);\n return wnaf.wNAFCachedUnsafe(this, CURVE_ORDER).is0();\n }\n clearCofactor() {\n const { clearCofactor } = curveOpts;\n if (cofactor === _1n)\n return this; // Fast-path\n if (clearCofactor)\n return clearCofactor(Point, this);\n return this.multiplyUnsafe(cofactor);\n }\n toBytes(isCompressed = true) {\n abool('isCompressed', isCompressed);\n this.assertValidity();\n return toBytes(Point, this, isCompressed);\n }\n /** @deprecated use `toBytes` */\n toRawBytes(isCompressed = true) {\n return this.toBytes(isCompressed);\n }\n toHex(isCompressed = true) {\n return bytesToHex(this.toBytes(isCompressed));\n }\n toString() {\n return `<Point ${this.is0() ? 'ZERO' : this.toHex()}>`;\n }\n }\n // base / generator point\n Point.BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);\n // zero / infinity / identity point\n Point.ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO); // 0, 1, 0\n // fields\n Point.Fp = Fp;\n Point.Fn = Fn;\n const bits = Fn.BITS;\n const wnaf = wNAF(Point, curveOpts.endo ? Math.ceil(bits / 2) : bits);\n return Point;\n}\n// _legacyWeierstrass\n/** @deprecated use `weierstrassN` */\nexport function weierstrassPoints(c) {\n const { CURVE, curveOpts } = _weierstrass_legacy_opts_to_new(c);\n const Point = weierstrassN(CURVE, curveOpts);\n return _weierstrass_new_output_to_legacy(c, Point);\n}\n// Points start with byte 0x02 when y is even; otherwise 0x03\nfunction pprefix(hasEvenY) {\n return Uint8Array.of(hasEvenY ? 0x02 : 0x03);\n}\nexport function ecdsa(Point, ecdsaOpts, curveOpts = {}) {\n _validateObject(ecdsaOpts, { hash: 'function' }, {\n hmac: 'function',\n lowS: 'boolean',\n randomBytes: 'function',\n bits2int: 'function',\n bits2int_modN: 'function',\n });\n const randomBytes_ = ecdsaOpts.randomBytes || randomBytes;\n const hmac_ = ecdsaOpts.hmac ||\n ((key, ...msgs) => hmac(ecdsaOpts.hash, key, concatBytes(...msgs)));\n const { Fp, Fn } = Point;\n const { ORDER: CURVE_ORDER, BITS: fnBits } = Fn;\n function isBiggerThanHalfOrder(number) {\n const HALF = CURVE_ORDER >> _1n;\n return number > HALF;\n }\n function normalizeS(s) {\n return isBiggerThanHalfOrder(s) ? Fn.neg(s) : s;\n }\n function aValidRS(title, num) {\n if (!Fn.isValidNot0(num))\n throw new Error(`invalid signature ${title}: out of range 1..CURVE.n`);\n }\n /**\n * ECDSA signature with its (r, s) properties. Supports DER & compact representations.\n */\n class Signature {\n constructor(r, s, recovery) {\n aValidRS('r', r); // r in [1..N-1]\n aValidRS('s', s); // s in [1..N-1]\n this.r = r;\n this.s = s;\n if (recovery != null)\n this.recovery = recovery;\n Object.freeze(this);\n }\n // pair (bytes of r, bytes of s)\n static fromCompact(hex) {\n const L = Fn.BYTES;\n const b = ensureBytes('compactSignature', hex, L * 2);\n return new Signature(Fn.fromBytes(b.subarray(0, L)), Fn.fromBytes(b.subarray(L, L * 2)));\n }\n // DER encoded ECDSA signature\n // https://bitcoin.stackexchange.com/questions/57644/what-are-the-parts-of-a-bitcoin-transaction-input-script\n static fromDER(hex) {\n const { r, s } = DER.toSig(ensureBytes('DER', hex));\n return new Signature(r, s);\n }\n /**\n * @todo remove\n * @deprecated\n */\n assertValidity() { }\n addRecoveryBit(recovery) {\n return new Signature(this.r, this.s, recovery);\n }\n // ProjPointType<bigint>\n recoverPublicKey(msgHash) {\n const FIELD_ORDER = Fp.ORDER;\n const { r, s, recovery: rec } = this;\n if (rec == null || ![0, 1, 2, 3].includes(rec))\n throw new Error('recovery id invalid');\n // ECDSA recovery is hard for cofactor > 1 curves.\n // In sign, `r = q.x mod n`, and here we recover q.x from r.\n // While recovering q.x >= n, we need to add r+n for cofactor=1 curves.\n // However, for cofactor>1, r+n may not get q.x:\n // r+n*i would need to be done instead where i is unknown.\n // To easily get i, we either need to:\n // a. increase amount of valid recid values (4, 5...); OR\n // b. prohibit non-prime-order signatures (recid > 1).\n const hasCofactor = CURVE_ORDER * _2n < FIELD_ORDER;\n if (hasCofactor && rec > 1)\n throw new Error('recovery id is ambiguous for h>1 curve');\n const radj = rec === 2 || rec === 3 ? r + CURVE_ORDER : r;\n if (!Fp.isValid(radj))\n throw new Error('recovery id 2 or 3 invalid');\n const x = Fp.toBytes(radj);\n const R = Point.fromHex(concatBytes(pprefix((rec & 1) === 0), x));\n const ir = Fn.inv(radj); // r^-1\n const h = bits2int_modN(ensureBytes('msgHash', msgHash)); // Truncate hash\n const u1 = Fn.create(-h * ir); // -hr^-1\n const u2 = Fn.create(s * ir); // sr^-1\n // (sr^-1)R-(hr^-1)G = -(hr^-1)G + (sr^-1). unsafe is fine: there is no private data.\n const Q = Point.BASE.multiplyUnsafe(u1).add(R.multiplyUnsafe(u2));\n if (Q.is0())\n throw new Error('point at infinify');\n Q.assertValidity();\n return Q;\n }\n // Signatures should be low-s, to prevent malleability.\n hasHighS() {\n return isBiggerThanHalfOrder(this.s);\n }\n normalizeS() {\n return this.hasHighS() ? new Signature(this.r, Fn.neg(this.s), this.recovery) : this;\n }\n toBytes(format) {\n if (format === 'compact')\n return concatBytes(Fn.toBytes(this.r), Fn.toBytes(this.s));\n if (format === 'der')\n return hexToBytes(DER.hexFromSig(this));\n throw new Error('invalid format');\n }\n // DER-encoded\n toDERRawBytes() {\n return this.toBytes('der');\n }\n toDERHex() {\n return bytesToHex(this.toBytes('der'));\n }\n // padded bytes of r, then padded bytes of s\n toCompactRawBytes() {\n return this.toBytes('compact');\n }\n toCompactHex() {\n return bytesToHex(this.toBytes('compact'));\n }\n }\n const normPrivateKeyToScalar = _legacyHelperNormPriv(Fn, curveOpts.allowedPrivateKeyLengths, curveOpts.wrapPrivateKey);\n const utils = {\n isValidPrivateKey(privateKey) {\n try {\n normPrivateKeyToScalar(privateKey);\n return true;\n }\n catch (error) {\n return false;\n }\n },\n normPrivateKeyToScalar: normPrivateKeyToScalar,\n /**\n * Produces cryptographically secure private key from random of size\n * (groupLen + ceil(groupLen / 2)) with modulo bias being negligible.\n */\n randomPrivateKey: () => {\n const n = CURVE_ORDER;\n return mapHashToField(randomBytes_(getMinHashLength(n)), n);\n },\n precompute(windowSize = 8, point = Point.BASE) {\n return point.precompute(windowSize, false);\n },\n };\n /**\n * Computes public key for a private key. Checks for validity of the private key.\n * @param privateKey private key\n * @param isCompressed whether to return compact (default), or full key\n * @returns Public key, full when isCompressed=false; short when isCompressed=true\n */\n function getPublicKey(privateKey, isCompressed = true) {\n return Point.fromPrivateKey(privateKey).toBytes(isCompressed);\n }\n /**\n * Quick and dirty check for item being public key. Does not validate hex, or being on-curve.\n */\n function isProbPub(item) {\n if (typeof item === 'bigint')\n return false;\n if (item instanceof Point)\n return true;\n const arr = ensureBytes('key', item);\n const length = arr.length;\n const L = Fp.BYTES;\n const LC = L + 1; // e.g. 33 for 32\n const LU = 2 * L + 1; // e.g. 65 for 32\n if (curveOpts.allowedPrivateKeyLengths || Fn.BYTES === LC) {\n return undefined;\n }\n else {\n return length === LC || length === LU;\n }\n }\n /**\n * ECDH (Elliptic Curve Diffie Hellman).\n * Computes shared public key from private key and public key.\n * Checks: 1) private key validity 2) shared key is on-curve.\n * Does NOT hash the result.\n * @param privateA private key\n * @param publicB different public key\n * @param isCompressed whether to return compact (default), or full key\n * @returns shared public key\n */\n function getSharedSecret(privateA, publicB, isCompressed = true) {\n if (isProbPub(privateA) === true)\n throw new Error('first arg must be private key');\n if (isProbPub(publicB) === false)\n throw new Error('second arg must be public key');\n const b = Point.fromHex(publicB); // check for being on-curve\n return b.multiply(normPrivateKeyToScalar(privateA)).toBytes(isCompressed);\n }\n // RFC6979: ensure ECDSA msg is X bytes and < N. RFC suggests optional truncating via bits2octets.\n // FIPS 186-4 4.6 suggests the leftmost min(nBitLen, outLen) bits, which matches bits2int.\n // bits2int can produce res>N, we can do mod(res, N) since the bitLen is the same.\n // int2octets can't be used; pads small msgs with 0: unacceptatble for trunc as per RFC vectors\n const bits2int = ecdsaOpts.bits2int ||\n function (bytes) {\n // Our custom check \"just in case\", for protection against DoS\n if (bytes.length > 8192)\n throw new Error('input is too large');\n // For curves with nBitLength % 8 !== 0: bits2octets(bits2octets(m)) !== bits2octets(m)\n // for some cases, since bytes.length * 8 is not actual bitLength.\n const num = bytesToNumberBE(bytes); // check for == u8 done here\n const delta = bytes.length * 8 - fnBits; // truncate to nBitLength leftmost bits\n return delta > 0 ? num >> BigInt(delta) : num;\n };\n const bits2int_modN = ecdsaOpts.bits2int_modN ||\n function (bytes) {\n return Fn.create(bits2int(bytes)); // can't use bytesToNumberBE here\n };\n // NOTE: pads output with zero as per spec\n const ORDER_MASK = bitMask(fnBits);\n /**\n * Converts to bytes. Checks if num in `[0..ORDER_MASK-1]` e.g.: `[0..2^256-1]`.\n */\n function int2octets(num) {\n // IMPORTANT: the check ensures working for case `Fn.BYTES != Fn.BITS * 8`\n aInRange('num < 2^' + fnBits, num, _0n, ORDER_MASK);\n return Fn.toBytes(num);\n }\n // Steps A, D of RFC6979 3.2\n // Creates RFC6979 seed; converts msg/privKey to numbers.\n // Used only in sign, not in verify.\n // NOTE: we cannot assume here that msgHash has same amount of bytes as curve order,\n // this will be invalid at least for P521. Also it can be bigger for P224 + SHA256\n function prepSig(msgHash, privateKey, opts = defaultSigOpts) {\n if (['recovered', 'canonical'].some((k) => k in opts))\n throw new Error('sign() legacy options not supported');\n const { hash } = ecdsaOpts;\n let { lowS, prehash, extraEntropy: ent } = opts; // generates low-s sigs by default\n if (lowS == null)\n lowS = true; // RFC6979 3.2: we skip step A, because we already provide hash\n msgHash = ensureBytes('msgHash', msgHash);\n validateSigVerOpts(opts);\n if (prehash)\n msgHash = ensureBytes('prehashed msgHash', hash(msgHash));\n // We can't later call bits2octets, since nested bits2int is broken for curves\n // with fnBits % 8 !== 0. Because of that, we unwrap it here as int2octets call.\n // const bits2octets = (bits) => int2octets(bits2int_modN(bits))\n const h1int = bits2int_modN(msgHash);\n const d = normPrivateKeyToScalar(privateKey); // validate private key, convert to bigint\n const seedArgs = [int2octets(d), int2octets(h1int)];\n // extraEntropy. RFC6979 3.6: additional k' (optional).\n if (ent != null && ent !== false) {\n // K = HMAC_K(V || 0x00 || int2octets(x) || bits2octets(h1) || k')\n const e = ent === true ? randomBytes_(Fp.BYTES) : ent; // generate random bytes OR pass as-is\n seedArgs.push(ensureBytes('extraEntropy', e)); // check for being bytes\n }\n const seed = concatBytes(...seedArgs); // Step D of RFC6979 3.2\n const m = h1int; // NOTE: no need to call bits2int second time here, it is inside truncateHash!\n // Converts signature params into point w r/s, checks result for validity.\n // Can use scalar blinding b^-1(bm + bdr) where b ∈ [1,q−1] according to\n // https://tches.iacr.org/index.php/TCHES/article/view/7337/6509. We've decided against it:\n // a) dependency on CSPRNG b) 15% slowdown c) doesn't really help since bigints are not CT\n function k2sig(kBytes) {\n // RFC 6979 Section 3.2, step 3: k = bits2int(T)\n // Important: all mod() calls here must be done over N\n const k = bits2int(kBytes); // Cannot use fields methods, since it is group element\n if (!Fn.isValidNot0(k))\n return; // Valid scalars (including k) must be in 1..N-1\n const ik = Fn.inv(k); // k^-1 mod n\n const q = Point.BASE.multiply(k).toAffine(); // q = Gk\n const r = Fn.create(q.x); // r = q.x mod n\n if (r === _0n)\n return;\n const s = Fn.create(ik * Fn.create(m + r * d)); // Not using blinding here, see comment above\n if (s === _0n)\n return;\n let recovery = (q.x === r ? 0 : 2) | Number(q.y & _1n); // recovery bit (2 or 3, when q.x > n)\n let normS = s;\n if (lowS && isBiggerThanHalfOrder(s)) {\n normS = normalizeS(s); // if lowS was passed, ensure s is always\n recovery ^= 1; // // in the bottom half of N\n }\n return new Signature(r, normS, recovery); // use normS, not s\n }\n return { seed, k2sig };\n }\n const defaultSigOpts = { lowS: ecdsaOpts.lowS, prehash: false };\n const defaultVerOpts = { lowS: ecdsaOpts.lowS, prehash: false };\n /**\n * Signs message hash with a private key.\n * ```\n * sign(m, d, k) where\n * (x, y) = G × k\n * r = x mod n\n * s = (m + dr)/k mod n\n * ```\n * @param msgHash NOT message. msg needs to be hashed to `msgHash`, or use `prehash`.\n * @param privKey private key\n * @param opts lowS for non-malleable sigs. extraEntropy for mixing randomness into k. prehash will hash first arg.\n * @returns signature with recovery param\n */\n function sign(msgHash, privKey, opts = defaultSigOpts) {\n const { seed, k2sig } = prepSig(msgHash, privKey, opts); // Steps A, D of RFC6979 3.2.\n const drbg = createHmacDrbg(ecdsaOpts.hash.outputLen, Fn.BYTES, hmac_);\n return drbg(seed, k2sig); // Steps B, C, D, E, F, G\n }\n // Enable precomputes. Slows down first publicKey computation by 20ms.\n Point.BASE.precompute(8);\n /**\n * Verifies a signature against message hash and public key.\n * Rejects lowS signatures by default: to override,\n * specify option `{lowS: false}`. Implements section 4.1.4 from https://www.secg.org/sec1-v2.pdf:\n *\n * ```\n * verify(r, s, h, P) where\n * U1 = hs^-1 mod n\n * U2 = rs^-1 mod n\n * R = U1⋅G - U2⋅P\n * mod(R.x, n) == r\n * ```\n */\n function verify(signature, msgHash, publicKey, opts = defaultVerOpts) {\n const sg = signature;\n msgHash = ensureBytes('msgHash', msgHash);\n publicKey = ensureBytes('publicKey', publicKey);\n // Verify opts\n validateSigVerOpts(opts);\n const { lowS, prehash, format } = opts;\n // TODO: remove\n if ('strict' in opts)\n throw new Error('options.strict was renamed to lowS');\n if (format !== undefined && !['compact', 'der', 'js'].includes(format))\n throw new Error('format must be \"compact\", \"der\" or \"js\"');\n const isHex = typeof sg === 'string' || isBytes(sg);\n const isObj = !isHex &&\n !format &&\n typeof sg === 'object' &&\n sg !== null &&\n typeof sg.r === 'bigint' &&\n typeof sg.s === 'bigint';\n if (!isHex && !isObj)\n throw new Error('invalid signature, expected Uint8Array, hex string or Signature instance');\n let _sig = undefined;\n let P;\n // deduce signature format\n try {\n // if (format === 'js') {\n // if (sg != null && !isBytes(sg)) _sig = new Signature(sg.r, sg.s);\n // } else if (format === 'compact') {\n // _sig = Signature.fromCompact(sg);\n // } else if (format === 'der') {\n // _sig = Signature.fromDER(sg);\n // } else {\n // throw new Error('invalid format');\n // }\n if (isObj) {\n if (format === undefined || format === 'js') {\n _sig = new Signature(sg.r, sg.s);\n }\n else {\n throw new Error('invalid format');\n }\n }\n if (isHex) {\n // TODO: remove this malleable check\n // Signature can be represented in 2 ways: compact (2*Fn.BYTES) & DER (variable-length).\n // Since DER can also be 2*Fn.BYTES bytes, we check for it first.\n try {\n if (format !== 'compact')\n _sig = Signature.fromDER(sg);\n }\n catch (derError) {\n if (!(derError instanceof DER.Err))\n throw derError;\n }\n if (!_sig && format !== 'der')\n _sig = Signature.fromCompact(sg);\n }\n P = Point.fromHex(publicKey);\n }\n catch (error) {\n return false;\n }\n if (!_sig)\n return false;\n if (lowS && _sig.hasHighS())\n return false;\n // todo: optional.hash => hash\n if (prehash)\n msgHash = ecdsaOpts.hash(msgHash);\n const { r, s } = _sig;\n const h = bits2int_modN(msgHash); // Cannot use fields methods, since it is group element\n const is = Fn.inv(s); // s^-1\n const u1 = Fn.create(h * is); // u1 = hs^-1 mod n\n const u2 = Fn.create(r * is); // u2 = rs^-1 mod n\n const R = Point.BASE.multiplyUnsafe(u1).add(P.multiplyUnsafe(u2));\n if (R.is0())\n return false;\n const v = Fn.create(R.x); // v = r.x mod n\n return v === r;\n }\n // TODO: clarify API for cloning .clone({hash: sha512}) ? .createWith({hash: sha512})?\n // const clone = (hash: CHash): ECDSA => ecdsa(Point, { ...ecdsaOpts, ...getHash(hash) }, curveOpts);\n return Object.freeze({\n getPublicKey,\n getSharedSecret,\n sign,\n verify,\n utils,\n Point,\n Signature,\n });\n}\nfunction _weierstrass_legacy_opts_to_new(c) {\n const CURVE = {\n a: c.a,\n b: c.b,\n p: c.Fp.ORDER,\n n: c.n,\n h: c.h,\n Gx: c.Gx,\n Gy: c.Gy,\n };\n const Fp = c.Fp;\n const Fn = Field(CURVE.n, c.nBitLength);\n const curveOpts = {\n Fp,\n Fn,\n allowedPrivateKeyLengths: c.allowedPrivateKeyLengths,\n allowInfinityPoint: c.allowInfinityPoint,\n endo: c.endo,\n wrapPrivateKey: c.wrapPrivateKey,\n isTorsionFree: c.isTorsionFree,\n clearCofactor: c.clearCofactor,\n fromBytes: c.fromBytes,\n toBytes: c.toBytes,\n };\n return { CURVE, curveOpts };\n}\nfunction _ecdsa_legacy_opts_to_new(c) {\n const { CURVE, curveOpts } = _weierstrass_legacy_opts_to_new(c);\n const ecdsaOpts = {\n hash: c.hash,\n hmac: c.hmac,\n randomBytes: c.randomBytes,\n lowS: c.lowS,\n bits2int: c.bits2int,\n bits2int_modN: c.bits2int_modN,\n };\n return { CURVE, curveOpts, ecdsaOpts };\n}\nfunction _weierstrass_new_output_to_legacy(c, Point) {\n const { Fp, Fn } = Point;\n // TODO: remove\n function isWithinCurveOrder(num) {\n return inRange(num, _1n, Fn.ORDER);\n }\n const weierstrassEquation = _legacyHelperEquat(Fp, c.a, c.b);\n const normPrivateKeyToScalar = _legacyHelperNormPriv(Fn, c.allowedPrivateKeyLengths, c.wrapPrivateKey);\n return Object.assign({}, {\n CURVE: c,\n Point: Point,\n ProjectivePoint: Point,\n normPrivateKeyToScalar,\n weierstrassEquation,\n isWithinCurveOrder,\n });\n}\nfunction _ecdsa_new_output_to_legacy(c, ecdsa) {\n return Object.assign({}, ecdsa, {\n ProjectivePoint: ecdsa.Point,\n CURVE: c,\n });\n}\n// _ecdsa_legacy\nexport function weierstrass(c) {\n const { CURVE, curveOpts, ecdsaOpts } = _ecdsa_legacy_opts_to_new(c);\n const Point = weierstrassN(CURVE, curveOpts);\n const signs = ecdsa(Point, ecdsaOpts, curveOpts);\n return _ecdsa_new_output_to_legacy(c, signs);\n}\n/**\n * Implementation of the Shallue and van de Woestijne method for any weierstrass curve.\n * TODO: check if there is a way to merge this with uvRatio in Edwards; move to modular.\n * b = True and y = sqrt(u / v) if (u / v) is square in F, and\n * b = False and y = sqrt(Z * (u / v)) otherwise.\n * @param Fp\n * @param Z\n * @returns\n */\nexport function SWUFpSqrtRatio(Fp, Z) {\n // Generic implementation\n const q = Fp.ORDER;\n let l = _0n;\n for (let o = q - _1n; o % _2n === _0n; o /= _2n)\n l += _1n;\n const c1 = l; // 1. c1, the largest integer such that 2^c1 divides q - 1.\n // We need 2n ** c1 and 2n ** (c1-1). We can't use **; but we can use <<.\n // 2n ** c1 == 2n << (c1-1)\n const _2n_pow_c1_1 = _2n << (c1 - _1n - _1n);\n const _2n_pow_c1 = _2n_pow_c1_1 * _2n;\n const c2 = (q - _1n) / _2n_pow_c1; // 2. c2 = (q - 1) / (2^c1) # Integer arithmetic\n const c3 = (c2 - _1n) / _2n; // 3. c3 = (c2 - 1) / 2 # Integer arithmetic\n const c4 = _2n_pow_c1 - _1n; // 4. c4 = 2^c1 - 1 # Integer arithmetic\n const c5 = _2n_pow_c1_1; // 5. c5 = 2^(c1 - 1) # Integer arithmetic\n const c6 = Fp.pow(Z, c2); // 6. c6 = Z^c2\n const c7 = Fp.pow(Z, (c2 + _1n) / _2n); // 7. c7 = Z^((c2 + 1) / 2)\n let sqrtRatio = (u, v) => {\n let tv1 = c6; // 1. tv1 = c6\n let tv2 = Fp.pow(v, c4); // 2. tv2 = v^c4\n let tv3 = Fp.sqr(tv2); // 3. tv3 = tv2^2\n tv3 = Fp.mul(tv3, v); // 4. tv3 = tv3 * v\n let tv5 = Fp.mul(u, tv3); // 5. tv5 = u * tv3\n tv5 = Fp.pow(tv5, c3); // 6. tv5 = tv5^c3\n tv5 = Fp.mul(tv5, tv2); // 7. tv5 = tv5 * tv2\n tv2 = Fp.mul(tv5, v); // 8. tv2 = tv5 * v\n tv3 = Fp.mul(tv5, u); // 9. tv3 = tv5 * u\n let tv4 = Fp.mul(tv3, tv2); // 10. tv4 = tv3 * tv2\n tv5 = Fp.pow(tv4, c5); // 11. tv5 = tv4^c5\n let isQR = Fp.eql(tv5, Fp.ONE); // 12. isQR = tv5 == 1\n tv2 = Fp.mul(tv3, c7); // 13. tv2 = tv3 * c7\n tv5 = Fp.mul(tv4, tv1); // 14. tv5 = tv4 * tv1\n tv3 = Fp.cmov(tv2, tv3, isQR); // 15. tv3 = CMOV(tv2, tv3, isQR)\n tv4 = Fp.cmov(tv5, tv4, isQR); // 16. tv4 = CMOV(tv5, tv4, isQR)\n // 17. for i in (c1, c1 - 1, ..., 2):\n for (let i = c1; i > _1n; i--) {\n let tv5 = i - _2n; // 18. tv5 = i - 2\n tv5 = _2n << (tv5 - _1n); // 19. tv5 = 2^tv5\n let tvv5 = Fp.pow(tv4, tv5); // 20. tv5 = tv4^tv5\n const e1 = Fp.eql(tvv5, Fp.ONE); // 21. e1 = tv5 == 1\n tv2 = Fp.mul(tv3, tv1); // 22. tv2 = tv3 * tv1\n tv1 = Fp.mul(tv1, tv1); // 23. tv1 = tv1 * tv1\n tvv5 = Fp.mul(tv4, tv1); // 24. tv5 = tv4 * tv1\n tv3 = Fp.cmov(tv2, tv3, e1); // 25. tv3 = CMOV(tv2, tv3, e1)\n tv4 = Fp.cmov(tvv5, tv4, e1); // 26. tv4 = CMOV(tv5, tv4, e1)\n }\n return { isValid: isQR, value: tv3 };\n };\n if (Fp.ORDER % _4n === _3n) {\n // sqrt_ratio_3mod4(u, v)\n const c1 = (Fp.ORDER - _3n) / _4n; // 1. c1 = (q - 3) / 4 # Integer arithmetic\n const c2 = Fp.sqrt(Fp.neg(Z)); // 2. c2 = sqrt(-Z)\n sqrtRatio = (u, v) => {\n let tv1 = Fp.sqr(v); // 1. tv1 = v^2\n const tv2 = Fp.mul(u, v); // 2. tv2 = u * v\n tv1 = Fp.mul(tv1, tv2); // 3. tv1 = tv1 * tv2\n let y1 = Fp.pow(tv1, c1); // 4. y1 = tv1^c1\n y1 = Fp.mul(y1, tv2); // 5. y1 = y1 * tv2\n const y2 = Fp.mul(y1, c2); // 6. y2 = y1 * c2\n const tv3 = Fp.mul(Fp.sqr(y1), v); // 7. tv3 = y1^2; 8. tv3 = tv3 * v\n const isQR = Fp.eql(tv3, u); // 9. isQR = tv3 == u\n let y = Fp.cmov(y2, y1, isQR); // 10. y = CMOV(y2, y1, isQR)\n return { isValid: isQR, value: y }; // 11. return (isQR, y) isQR ? y : y*c2\n };\n }\n // No curves uses that\n // if (Fp.ORDER % _8n === _5n) // sqrt_ratio_5mod8\n return sqrtRatio;\n}\n/**\n * Simplified Shallue-van de Woestijne-Ulas Method\n * https://www.rfc-editor.org/rfc/rfc9380#section-6.6.2\n */\nexport function mapToCurveSimpleSWU(Fp, opts) {\n validateField(Fp);\n const { A, B, Z } = opts;\n if (!Fp.isValid(A) || !Fp.isValid(B) || !Fp.isValid(Z))\n throw new Error('mapToCurveSimpleSWU: invalid opts');\n const sqrtRatio = SWUFpSqrtRatio(Fp, Z);\n if (!Fp.isOdd)\n throw new Error('Field does not have .isOdd()');\n // Input: u, an element of F.\n // Output: (x, y), a point on E.\n return (u) => {\n // prettier-ignore\n let tv1, tv2, tv3, tv4, tv5, tv6, x, y;\n tv1 = Fp.sqr(u); // 1. tv1 = u^2\n tv1 = Fp.mul(tv1, Z); // 2. tv1 = Z * tv1\n tv2 = Fp.sqr(tv1); // 3. tv2 = tv1^2\n tv2 = Fp.add(tv2, tv1); // 4. tv2 = tv2 + tv1\n tv3 = Fp.add(tv2, Fp.ONE); // 5. tv3 = tv2 + 1\n tv3 = Fp.mul(tv3, B); // 6. tv3 = B * tv3\n tv4 = Fp.cmov(Z, Fp.neg(tv2), !Fp.eql(tv2, Fp.ZERO)); // 7. tv4 = CMOV(Z, -tv2, tv2 != 0)\n tv4 = Fp.mul(tv4, A); // 8. tv4 = A * tv4\n tv2 = Fp.sqr(tv3); // 9. tv2 = tv3^2\n tv6 = Fp.sqr(tv4); // 10. tv6 = tv4^2\n tv5 = Fp.mul(tv6, A); // 11. tv5 = A * tv6\n tv2 = Fp.add(tv2, tv5); // 12. tv2 = tv2 + tv5\n tv2 = Fp.mul(tv2, tv3); // 13. tv2 = tv2 * tv3\n tv6 = Fp.mul(tv6, tv4); // 14. tv6 = tv6 * tv4\n tv5 = Fp.mul(tv6, B); // 15. tv5 = B * tv6\n tv2 = Fp.add(tv2, tv5); // 16. tv2 = tv2 + tv5\n x = Fp.mul(tv1, tv3); // 17. x = tv1 * tv3\n const { isValid, value } = sqrtRatio(tv2, tv6); // 18. (is_gx1_square, y1) = sqrt_ratio(tv2, tv6)\n y = Fp.mul(tv1, u); // 19. y = tv1 * u -> Z * u^3 * y1\n y = Fp.mul(y, value); // 20. y = y * y1\n x = Fp.cmov(x, tv3, isValid); // 21. x = CMOV(x, tv3, is_gx1_square)\n y = Fp.cmov(y, value, isValid); // 22. y = CMOV(y, y1, is_gx1_square)\n const e1 = Fp.isOdd(u) === Fp.isOdd(y); // 23. e1 = sgn0(u) == sgn0(y)\n y = Fp.cmov(Fp.neg(y), y, e1); // 24. y = CMOV(-y, y, e1)\n const tv4_inv = FpInvertBatch(Fp, [tv4], true)[0];\n x = Fp.mul(x, tv4_inv); // 25. x = x / tv4\n return { x, y };\n };\n}\n//# sourceMappingURL=weierstrass.js.map","/**\n * SECG secp256k1. See [pdf](https://www.secg.org/sec2-v2.pdf).\n *\n * Belongs to Koblitz curves: it has efficiently-computable GLV endomorphism ψ,\n * check out {@link EndomorphismOpts}. Seems to be rigid (not backdoored).\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha256 } from '@noble/hashes/sha2.js';\nimport { randomBytes } from '@noble/hashes/utils.js';\nimport { createCurve } from \"./_shortw_utils.js\";\nimport { createHasher, isogenyMap, } from \"./abstract/hash-to-curve.js\";\nimport { Field, mod, pow2 } from \"./abstract/modular.js\";\nimport { mapToCurveSimpleSWU, } from \"./abstract/weierstrass.js\";\nimport { aInRange, bytesToNumberBE, concatBytes, ensureBytes, inRange, numberToBytesBE, } from \"./utils.js\";\n// Seems like generator was produced from some seed:\n// `Point.BASE.multiply(Point.Fn.inv(2n, N)).toAffine().x`\n// // gives short x 0x3b78ce563f89a0ed9414f5aa28ad0d96d6795f9c63n\nconst secp256k1_CURVE = {\n p: BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f'),\n n: BigInt('0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141'),\n h: BigInt(1),\n a: BigInt(0),\n b: BigInt(7),\n Gx: BigInt('0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798'),\n Gy: BigInt('0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8'),\n};\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst divNearest = (a, b) => (a + b / _2n) / b;\n/**\n * √n = n^((p+1)/4) for fields p = 3 mod 4. We unwrap the loop and multiply bit-by-bit.\n * (P+1n/4n).toString(2) would produce bits [223x 1, 0, 22x 1, 4x 0, 11, 00]\n */\nfunction sqrtMod(y) {\n const P = secp256k1_CURVE.p;\n // prettier-ignore\n const _3n = BigInt(3), _6n = BigInt(6), _11n = BigInt(11), _22n = BigInt(22);\n // prettier-ignore\n const _23n = BigInt(23), _44n = BigInt(44), _88n = BigInt(88);\n const b2 = (y * y * y) % P; // x^3, 11\n const b3 = (b2 * b2 * y) % P; // x^7\n const b6 = (pow2(b3, _3n, P) * b3) % P;\n const b9 = (pow2(b6, _3n, P) * b3) % P;\n const b11 = (pow2(b9, _2n, P) * b2) % P;\n const b22 = (pow2(b11, _11n, P) * b11) % P;\n const b44 = (pow2(b22, _22n, P) * b22) % P;\n const b88 = (pow2(b44, _44n, P) * b44) % P;\n const b176 = (pow2(b88, _88n, P) * b88) % P;\n const b220 = (pow2(b176, _44n, P) * b44) % P;\n const b223 = (pow2(b220, _3n, P) * b3) % P;\n const t1 = (pow2(b223, _23n, P) * b22) % P;\n const t2 = (pow2(t1, _6n, P) * b2) % P;\n const root = pow2(t2, _2n, P);\n if (!Fpk1.eql(Fpk1.sqr(root), y))\n throw new Error('Cannot find square root');\n return root;\n}\nconst Fpk1 = Field(secp256k1_CURVE.p, undefined, undefined, { sqrt: sqrtMod });\n/**\n * secp256k1 curve, ECDSA and ECDH methods.\n *\n * Field: `2n**256n - 2n**32n - 2n**9n - 2n**8n - 2n**7n - 2n**6n - 2n**4n - 1n`\n *\n * @example\n * ```js\n * import { secp256k1 } from '@noble/curves/secp256k1';\n * const priv = secp256k1.utils.randomPrivateKey();\n * const pub = secp256k1.getPublicKey(priv);\n * const msg = new Uint8Array(32).fill(1); // message hash (not message) in ecdsa\n * const sig = secp256k1.sign(msg, priv); // `{prehash: true}` option is available\n * const isValid = secp256k1.verify(sig, msg, pub) === true;\n * ```\n */\nexport const secp256k1 = createCurve({\n ...secp256k1_CURVE,\n Fp: Fpk1,\n lowS: true, // Allow only low-S signatures by default in sign() and verify()\n endo: {\n // Endomorphism, see above\n beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'),\n splitScalar: (k) => {\n const n = secp256k1_CURVE.n;\n const a1 = BigInt('0x3086d221a7d46bcde86c90e49284eb15');\n const b1 = -_1n * BigInt('0xe4437ed6010e88286f547fa90abfe4c3');\n const a2 = BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8');\n const b2 = a1;\n const POW_2_128 = BigInt('0x100000000000000000000000000000000'); // (2n**128n).toString(16)\n const c1 = divNearest(b2 * k, n);\n const c2 = divNearest(-b1 * k, n);\n let k1 = mod(k - c1 * a1 - c2 * a2, n);\n let k2 = mod(-c1 * b1 - c2 * b2, n);\n const k1neg = k1 > POW_2_128;\n const k2neg = k2 > POW_2_128;\n if (k1neg)\n k1 = n - k1;\n if (k2neg)\n k2 = n - k2;\n if (k1 > POW_2_128 || k2 > POW_2_128) {\n throw new Error('splitScalar: Endomorphism failed, k=' + k);\n }\n return { k1neg, k1, k2neg, k2 };\n },\n },\n}, sha256);\n// Schnorr signatures are superior to ECDSA from above. Below is Schnorr-specific BIP0340 code.\n// https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki\n/** An object mapping tags to their tagged hash prefix of [SHA256(tag) | SHA256(tag)] */\nconst TAGGED_HASH_PREFIXES = {};\nfunction taggedHash(tag, ...messages) {\n let tagP = TAGGED_HASH_PREFIXES[tag];\n if (tagP === undefined) {\n const tagH = sha256(Uint8Array.from(tag, (c) => c.charCodeAt(0)));\n tagP = concatBytes(tagH, tagH);\n TAGGED_HASH_PREFIXES[tag] = tagP;\n }\n return sha256(concatBytes(tagP, ...messages));\n}\n// ECDSA compact points are 33-byte. Schnorr is 32: we strip first byte 0x02 or 0x03\nconst pointToBytes = (point) => point.toBytes(true).slice(1);\nconst numTo32b = (n) => numberToBytesBE(n, 32);\nconst modP = (x) => mod(x, secp256k1_CURVE.p);\nconst modN = (x) => mod(x, secp256k1_CURVE.n);\nconst Point = /* @__PURE__ */ (() => secp256k1.Point)();\nconst hasEven = (y) => y % _2n === _0n;\n// Calculate point, scalar and bytes\nfunction schnorrGetExtPubKey(priv) {\n let d_ = secp256k1.utils.normPrivateKeyToScalar(priv); // same method executed in fromPrivateKey\n let p = Point.fromPrivateKey(d_); // P = d'⋅G; 0 < d' < n check is done inside\n const scalar = hasEven(p.y) ? d_ : modN(-d_);\n return { scalar: scalar, bytes: pointToBytes(p) };\n}\n/**\n * lift_x from BIP340. Convert 32-byte x coordinate to elliptic curve point.\n * @returns valid point checked for being on-curve\n */\nfunction lift_x(x) {\n aInRange('x', x, _1n, secp256k1_CURVE.p); // Fail if x ≥ p.\n const xx = modP(x * x);\n const c = modP(xx * x + BigInt(7)); // Let c = x³ + 7 mod p.\n let y = sqrtMod(c); // Let y = c^(p+1)/4 mod p.\n if (!hasEven(y))\n y = modP(-y); // Return the unique point P such that x(P) = x and\n const p = Point.fromAffine({ x, y }); // y(P) = y if y mod 2 = 0 or y(P) = p-y otherwise.\n p.assertValidity();\n return p;\n}\nconst num = bytesToNumberBE;\n/**\n * Create tagged hash, convert it to bigint, reduce modulo-n.\n */\nfunction challenge(...args) {\n return modN(num(taggedHash('BIP0340/challenge', ...args)));\n}\n/**\n * Schnorr public key is just `x` coordinate of Point as per BIP340.\n */\nfunction schnorrGetPublicKey(privateKey) {\n return schnorrGetExtPubKey(privateKey).bytes; // d'=int(sk). Fail if d'=0 or d'≥n. Ret bytes(d'⋅G)\n}\n/**\n * Creates Schnorr signature as per BIP340. Verifies itself before returning anything.\n * auxRand is optional and is not the sole source of k generation: bad CSPRNG won't be dangerous.\n */\nfunction schnorrSign(message, privateKey, auxRand = randomBytes(32)) {\n const m = ensureBytes('message', message);\n const { bytes: px, scalar: d } = schnorrGetExtPubKey(privateKey); // checks for isWithinCurveOrder\n const a = ensureBytes('auxRand', auxRand, 32); // Auxiliary random data a: a 32-byte array\n const t = numTo32b(d ^ num(taggedHash('BIP0340/aux', a))); // Let t be the byte-wise xor of bytes(d) and hash/aux(a)\n const rand = taggedHash('BIP0340/nonce', t, px, m); // Let rand = hash/nonce(t || bytes(P) || m)\n const k_ = modN(num(rand)); // Let k' = int(rand) mod n\n if (k_ === _0n)\n throw new Error('sign failed: k is zero'); // Fail if k' = 0.\n const { bytes: rx, scalar: k } = schnorrGetExtPubKey(k_); // Let R = k'⋅G.\n const e = challenge(rx, px, m); // Let e = int(hash/challenge(bytes(R) || bytes(P) || m)) mod n.\n const sig = new Uint8Array(64); // Let sig = bytes(R) || bytes((k + ed) mod n).\n sig.set(rx, 0);\n sig.set(numTo32b(modN(k + e * d)), 32);\n // If Verify(bytes(P), m, sig) (see below) returns failure, abort\n if (!schnorrVerify(sig, m, px))\n throw new Error('sign: Invalid signature produced');\n return sig;\n}\n/**\n * Verifies Schnorr signature.\n * Will swallow errors & return false except for initial type validation of arguments.\n */\nfunction schnorrVerify(signature, message, publicKey) {\n const sig = ensureBytes('signature', signature, 64);\n const m = ensureBytes('message', message);\n const pub = ensureBytes('publicKey', publicKey, 32);\n try {\n const P = lift_x(num(pub)); // P = lift_x(int(pk)); fail if that fails\n const r = num(sig.subarray(0, 32)); // Let r = int(sig[0:32]); fail if r ≥ p.\n if (!inRange(r, _1n, secp256k1_CURVE.p))\n return false;\n const s = num(sig.subarray(32, 64)); // Let s = int(sig[32:64]); fail if s ≥ n.\n if (!inRange(s, _1n, secp256k1_CURVE.n))\n return false;\n const e = challenge(numTo32b(r), pointToBytes(P), m); // int(challenge(bytes(r)||bytes(P)||m))%n\n // R = s⋅G - e⋅P, where -eP == (n-e)P\n const R = Point.BASE.multiplyUnsafe(s).add(P.multiplyUnsafe(modN(-e)));\n const { x, y } = R.toAffine();\n // Fail if is_infinite(R) / not has_even_y(R) / x(R) ≠ r.\n if (R.is0() || !hasEven(y) || x !== r)\n return false;\n return true;\n }\n catch (error) {\n return false;\n }\n}\n/**\n * Schnorr signatures over secp256k1.\n * https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki\n * @example\n * ```js\n * import { schnorr } from '@noble/curves/secp256k1';\n * const priv = schnorr.utils.randomPrivateKey();\n * const pub = schnorr.getPublicKey(priv);\n * const msg = new TextEncoder().encode('hello');\n * const sig = schnorr.sign(msg, priv);\n * const isValid = schnorr.verify(sig, msg, pub);\n * ```\n */\nexport const schnorr = /* @__PURE__ */ (() => ({\n getPublicKey: schnorrGetPublicKey,\n sign: schnorrSign,\n verify: schnorrVerify,\n utils: {\n randomPrivateKey: secp256k1.utils.randomPrivateKey,\n lift_x,\n pointToBytes,\n numberToBytesBE,\n bytesToNumberBE,\n taggedHash,\n mod,\n },\n}))();\nconst isoMap = /* @__PURE__ */ (() => isogenyMap(Fpk1, [\n // xNum\n [\n '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa8c7',\n '0x7d3d4c80bc321d5b9f315cea7fd44c5d595d2fc0bf63b92dfff1044f17c6581',\n '0x534c328d23f234e6e2a413deca25caece4506144037c40314ecbd0b53d9dd262',\n '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa88c',\n ],\n // xDen\n [\n '0xd35771193d94918a9ca34ccbb7b640dd86cd409542f8487d9fe6b745781eb49b',\n '0xedadc6f64383dc1df7c4b2d51b54225406d36b641f5e41bbc52a56612a8c6d14',\n '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n ],\n // yNum\n [\n '0x4bda12f684bda12f684bda12f684bda12f684bda12f684bda12f684b8e38e23c',\n '0xc75e0c32d5cb7c0fa9d0a54b12a0a6d5647ab046d686da6fdffc90fc201d71a3',\n '0x29a6194691f91a73715209ef6512e576722830a201be2018a765e85a9ecee931',\n '0x2f684bda12f684bda12f684bda12f684bda12f684bda12f684bda12f38e38d84',\n ],\n // yDen\n [\n '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffff93b',\n '0x7a06534bb8bdb49fd5e9e6632722c2989467c1bfc8e8d978dfb425d2685c2573',\n '0x6484aa716545ca2cf3a70c3fa8fe337e0a3d21162f0d6299a7bf8192bfd2a76f',\n '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n ],\n].map((i) => i.map((j) => BigInt(j)))))();\nconst mapSWU = /* @__PURE__ */ (() => mapToCurveSimpleSWU(Fpk1, {\n A: BigInt('0x3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533'),\n B: BigInt('1771'),\n Z: Fpk1.create(BigInt('-11')),\n}))();\n/** Hashing / encoding to secp256k1 points / field. RFC 9380 methods. */\nexport const secp256k1_hasher = /* @__PURE__ */ (() => createHasher(secp256k1.Point, (scalars) => {\n const { x, y } = mapSWU(Fpk1.create(scalars[0]));\n return isoMap(x, y);\n}, {\n DST: 'secp256k1_XMD:SHA-256_SSWU_RO_',\n encodeDST: 'secp256k1_XMD:SHA-256_SSWU_NU_',\n p: Fpk1.ORDER,\n m: 1,\n k: 128,\n expand: 'xmd',\n hash: sha256,\n}))();\nexport const hashToCurve = /* @__PURE__ */ (() => secp256k1_hasher.hashToCurve)();\nexport const encodeToCurve = /* @__PURE__ */ (() => secp256k1_hasher.encodeToCurve)();\n//# sourceMappingURL=secp256k1.js.map","/**\n * Utilities for short weierstrass curves, combined with noble-hashes.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { weierstrass } from \"./abstract/weierstrass.js\";\n/** connects noble-curves to noble-hashes */\nexport function getHash(hash) {\n return { hash };\n}\nexport function createCurve(curveDef, defHash) {\n const create = (hash) => weierstrass({ ...curveDef, hash: hash });\n return { ...create(defHash), create };\n}\n//# sourceMappingURL=_shortw_utils.js.map","import { Buff } from '@vbyte/buff';\nimport { Assert } from './assert.js';\nimport { secp256k1, schnorr } from '@noble/curves/secp256k1';\nimport { Field } from '@noble/curves/abstract/modular';\nconst _0n = BigInt(0);\nconst _2n = BigInt(2);\nconst _N = secp256k1.CURVE.n;\nconst FD = Field(_N, 32, true);\nconst GP = secp256k1.Point.BASE;\nexport function get_seckey(secret, even_y = false) {\n let sk = serialize_bytes(secret).big % _N;\n if (even_y) {\n const pt = GP.multiply(sk);\n return (pt.y % _2n === _0n)\n ? Buff.big(sk)\n : Buff.big(_N - sk);\n }\n else {\n return Buff.big(sk);\n }\n}\nexport function get_pubkey(seckey, format) {\n const sk = serialize_bytes(seckey).big;\n const pt = GP.multiply(sk);\n const pk = pt.toHex(true);\n return serialize_pubkey(pk, format);\n}\nexport function tweak_seckey(seckey, tweak, even_y = false) {\n const sk = get_seckey(seckey, even_y).big;\n const twk = serialize_bytes(tweak).big;\n const tweaked_sk = FD.add(sk, twk);\n const new_secret = Buff.big(tweaked_sk);\n return get_seckey(new_secret, false);\n}\nexport function tweak_pubkey(pubkey, tweak, format, even_y = false) {\n const twk_big = serialize_bytes(tweak).big;\n const pub_pt = lift_point(pubkey);\n const tweak_pt = GP.multiply(twk_big);\n let tweaked_pt = pub_pt.add(tweak_pt);\n if (even_y && !tweaked_pt.hasEvenY()) {\n tweaked_pt = tweaked_pt.negate();\n }\n const pk = tweaked_pt.toHex(true);\n return serialize_pubkey(pk, format);\n}\nexport function verify_seckey(seckey) {\n const sk = serialize_bytes(seckey);\n Assert.size(sk, 32, 'ecdsa secret keys must be 32 bytes long');\n Assert.ok(sk.big < _N, 'ecdsa secret keys must be less than the curve order');\n Assert.ok(sk.big > 0, 'ecdsa secret keys must be greater than zero');\n}\nexport function verify_pubkey(pubkey, format) {\n const pk = serialize_bytes(pubkey);\n if (format === 'bip340') {\n Assert.size(pk, 32, 'bip340 public keys must be 32 bytes long');\n }\n else if (format === 'ecdsa') {\n Assert.size(pk, 33, 'ecdsa public keys must be 33 bytes long');\n }\n else {\n throw new Error('invalid format: ' + format);\n }\n verify_point(pk);\n}\nexport function get_ecdsa_sig(seckey, message) {\n const msg = serialize_bytes(message);\n const sig = secp256k1.sign(msg, seckey).toDERRawBytes();\n return Buff.bytes(sig);\n}\nexport function get_bip340_sig(seckey, message) {\n const msg = serialize_bytes(message);\n const sig = schnorr.sign(msg, seckey);\n return serialize_bytes(sig);\n}\nexport function verify_ecdsa_sig(signature, message, pubkey) {\n const sig = serialize_bytes(signature);\n const msg = serialize_bytes(message);\n const pk = serialize_pubkey(pubkey, 'ecdsa');\n return secp256k1.verify(sig, msg, pk);\n}\nexport function verify_bip340_sig(signature, message, pubkey) {\n const sig = serialize_bytes(signature);\n const msg = serialize_bytes(message);\n const pk = serialize_pubkey(pubkey, 'bip340');\n return schnorr.verify(sig, msg, pk);\n}\nexport function verify_point(pubkey) {\n try {\n const pt = lift_point(pubkey);\n pt.assertValidity();\n }\n catch (err) {\n throw new Error('invalid secp256k1 point: ' + pubkey);\n }\n}\nexport function lift_point(pubkey) {\n try {\n const pk = serialize_pubkey(pubkey, 'ecdsa');\n return secp256k1.Point.fromHex(pk);\n }\n catch (err) {\n throw new Error('invalid pubkey: ' + pubkey);\n }\n}\nexport function serialize_pubkey(pubkey, format) {\n try {\n const pk = serialize_bytes(pubkey);\n if (pk.length === 33 && format === 'bip340') {\n return pk.slice(1);\n }\n else if (pk.length === 32 && format === 'ecdsa') {\n const prefix = Buff.num(0x02, 1);\n return Buff.join([prefix, pk]);\n }\n else {\n return pk;\n }\n }\n catch (err) {\n throw new Error('invalid pubkey: ' + String(pubkey));\n }\n}\nexport function get_pubkey_format(pubkey) {\n const pk = serialize_bytes(pubkey);\n if (pk.length === 33)\n return 'ecdsa';\n if (pk.length === 32)\n return 'bip340';\n throw new Error('invalid pubkey: ' + String(pubkey));\n}\nexport function serialize_bytes(bytes) {\n try {\n return Buff.bytes(bytes);\n }\n catch (err) {\n throw new Error('invalid bytes: ' + String(bytes));\n }\n}\n","/**\n\nSHA1 (RFC 3174), MD5 (RFC 1321) and RIPEMD160 (RFC 2286) legacy, weak hash functions.\nDon't use them in a new protocol. What \"weak\" means:\n\n- Collisions can be made with 2^18 effort in MD5, 2^60 in SHA1, 2^80 in RIPEMD160.\n- No practical pre-image attacks (only theoretical, 2^123.4)\n- HMAC seems kinda ok: https://datatracker.ietf.org/doc/html/rfc6151\n * @module\n */\nimport { Chi, HashMD, Maj } from \"./_md.js\";\nimport { clean, createHasher, rotl } from \"./utils.js\";\n/** Initial SHA1 state */\nconst SHA1_IV = /* @__PURE__ */ Uint32Array.from([\n 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0,\n]);\n// Reusable temporary buffer\nconst SHA1_W = /* @__PURE__ */ new Uint32Array(80);\n/** SHA1 legacy hash class. */\nexport class SHA1 extends HashMD {\n constructor() {\n super(64, 20, 8, false);\n this.A = SHA1_IV[0] | 0;\n this.B = SHA1_IV[1] | 0;\n this.C = SHA1_IV[2] | 0;\n this.D = SHA1_IV[3] | 0;\n this.E = SHA1_IV[4] | 0;\n }\n get() {\n const { A, B, C, D, E } = this;\n return [A, B, C, D, E];\n }\n set(A, B, C, D, E) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n }\n process(view, offset) {\n for (let i = 0; i < 16; i++, offset += 4)\n SHA1_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 80; i++)\n SHA1_W[i] = rotl(SHA1_W[i - 3] ^ SHA1_W[i - 8] ^ SHA1_W[i - 14] ^ SHA1_W[i - 16], 1);\n // Compression function main loop, 80 rounds\n let { A, B, C, D, E } = this;\n for (let i = 0; i < 80; i++) {\n let F, K;\n if (i < 20) {\n F = Chi(B, C, D);\n K = 0x5a827999;\n }\n else if (i < 40) {\n F = B ^ C ^ D;\n K = 0x6ed9eba1;\n }\n else if (i < 60) {\n F = Maj(B, C, D);\n K = 0x8f1bbcdc;\n }\n else {\n F = B ^ C ^ D;\n K = 0xca62c1d6;\n }\n const T = (rotl(A, 5) + F + E + K + SHA1_W[i]) | 0;\n E = D;\n D = C;\n C = rotl(B, 30);\n B = A;\n A = T;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n this.set(A, B, C, D, E);\n }\n roundClean() {\n clean(SHA1_W);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0);\n clean(this.buffer);\n }\n}\n/** SHA1 (RFC 3174) legacy hash function. It was cryptographically broken. */\nexport const sha1 = /* @__PURE__ */ createHasher(() => new SHA1());\n/** Per-round constants */\nconst p32 = /* @__PURE__ */ Math.pow(2, 32);\nconst K = /* @__PURE__ */ Array.from({ length: 64 }, (_, i) => Math.floor(p32 * Math.abs(Math.sin(i + 1))));\n/** md5 initial state: same as sha1, but 4 u32 instead of 5. */\nconst MD5_IV = /* @__PURE__ */ SHA1_IV.slice(0, 4);\n// Reusable temporary buffer\nconst MD5_W = /* @__PURE__ */ new Uint32Array(16);\n/** MD5 legacy hash class. */\nexport class MD5 extends HashMD {\n constructor() {\n super(64, 16, 8, true);\n this.A = MD5_IV[0] | 0;\n this.B = MD5_IV[1] | 0;\n this.C = MD5_IV[2] | 0;\n this.D = MD5_IV[3] | 0;\n }\n get() {\n const { A, B, C, D } = this;\n return [A, B, C, D];\n }\n set(A, B, C, D) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n }\n process(view, offset) {\n for (let i = 0; i < 16; i++, offset += 4)\n MD5_W[i] = view.getUint32(offset, true);\n // Compression function main loop, 64 rounds\n let { A, B, C, D } = this;\n for (let i = 0; i < 64; i++) {\n let F, g, s;\n if (i < 16) {\n F = Chi(B, C, D);\n g = i;\n s = [7, 12, 17, 22];\n }\n else if (i < 32) {\n F = Chi(D, B, C);\n g = (5 * i + 1) % 16;\n s = [5, 9, 14, 20];\n }\n else if (i < 48) {\n F = B ^ C ^ D;\n g = (3 * i + 5) % 16;\n s = [4, 11, 16, 23];\n }\n else {\n F = C ^ (B | ~D);\n g = (7 * i) % 16;\n s = [6, 10, 15, 21];\n }\n F = F + A + K[i] + MD5_W[g];\n A = D;\n D = C;\n C = B;\n B = B + rotl(F, s[i % 4]);\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n this.set(A, B, C, D);\n }\n roundClean() {\n clean(MD5_W);\n }\n destroy() {\n this.set(0, 0, 0, 0);\n clean(this.buffer);\n }\n}\n/**\n * MD5 (RFC 1321) legacy hash function. It was cryptographically broken.\n * MD5 architecture is similar to SHA1, with some differences:\n * - Reduced output length: 16 bytes (128 bit) instead of 20\n * - 64 rounds, instead of 80\n * - Little-endian: could be faster, but will require more code\n * - Non-linear index selection: huge speed-up for unroll\n * - Per round constants: more memory accesses, additional speed-up for unroll\n */\nexport const md5 = /* @__PURE__ */ createHasher(() => new MD5());\n// RIPEMD-160\nconst Rho160 = /* @__PURE__ */ Uint8Array.from([\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n]);\nconst Id160 = /* @__PURE__ */ (() => Uint8Array.from(new Array(16).fill(0).map((_, i) => i)))();\nconst Pi160 = /* @__PURE__ */ (() => Id160.map((i) => (9 * i + 5) % 16))();\nconst idxLR = /* @__PURE__ */ (() => {\n const L = [Id160];\n const R = [Pi160];\n const res = [L, R];\n for (let i = 0; i < 4; i++)\n for (let j of res)\n j.push(j[i].map((k) => Rho160[k]));\n return res;\n})();\nconst idxL = /* @__PURE__ */ (() => idxLR[0])();\nconst idxR = /* @__PURE__ */ (() => idxLR[1])();\n// const [idxL, idxR] = idxLR;\nconst shifts160 = /* @__PURE__ */ [\n [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8],\n [12, 13, 11, 15, 6, 9, 9, 7, 12, 15, 11, 13, 7, 8, 7, 7],\n [13, 15, 14, 11, 7, 7, 6, 8, 13, 14, 13, 12, 5, 5, 6, 9],\n [14, 11, 12, 14, 8, 6, 5, 5, 15, 12, 15, 14, 9, 9, 8, 6],\n [15, 12, 13, 13, 9, 5, 8, 6, 14, 11, 12, 11, 8, 6, 5, 5],\n].map((i) => Uint8Array.from(i));\nconst shiftsL160 = /* @__PURE__ */ idxL.map((idx, i) => idx.map((j) => shifts160[i][j]));\nconst shiftsR160 = /* @__PURE__ */ idxR.map((idx, i) => idx.map((j) => shifts160[i][j]));\nconst Kl160 = /* @__PURE__ */ Uint32Array.from([\n 0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e,\n]);\nconst Kr160 = /* @__PURE__ */ Uint32Array.from([\n 0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000,\n]);\n// It's called f() in spec.\nfunction ripemd_f(group, x, y, z) {\n if (group === 0)\n return x ^ y ^ z;\n if (group === 1)\n return (x & y) | (~x & z);\n if (group === 2)\n return (x | ~y) ^ z;\n if (group === 3)\n return (x & z) | (y & ~z);\n return x ^ (y | ~z);\n}\n// Reusable temporary buffer\nconst BUF_160 = /* @__PURE__ */ new Uint32Array(16);\nexport class RIPEMD160 extends HashMD {\n constructor() {\n super(64, 20, 8, true);\n this.h0 = 0x67452301 | 0;\n this.h1 = 0xefcdab89 | 0;\n this.h2 = 0x98badcfe | 0;\n this.h3 = 0x10325476 | 0;\n this.h4 = 0xc3d2e1f0 | 0;\n }\n get() {\n const { h0, h1, h2, h3, h4 } = this;\n return [h0, h1, h2, h3, h4];\n }\n set(h0, h1, h2, h3, h4) {\n this.h0 = h0 | 0;\n this.h1 = h1 | 0;\n this.h2 = h2 | 0;\n this.h3 = h3 | 0;\n this.h4 = h4 | 0;\n }\n process(view, offset) {\n for (let i = 0; i < 16; i++, offset += 4)\n BUF_160[i] = view.getUint32(offset, true);\n // prettier-ignore\n let al = this.h0 | 0, ar = al, bl = this.h1 | 0, br = bl, cl = this.h2 | 0, cr = cl, dl = this.h3 | 0, dr = dl, el = this.h4 | 0, er = el;\n // Instead of iterating 0 to 80, we split it into 5 groups\n // And use the groups in constants, functions, etc. Much simpler\n for (let group = 0; group < 5; group++) {\n const rGroup = 4 - group;\n const hbl = Kl160[group], hbr = Kr160[group]; // prettier-ignore\n const rl = idxL[group], rr = idxR[group]; // prettier-ignore\n const sl = shiftsL160[group], sr = shiftsR160[group]; // prettier-ignore\n for (let i = 0; i < 16; i++) {\n const tl = (rotl(al + ripemd_f(group, bl, cl, dl) + BUF_160[rl[i]] + hbl, sl[i]) + el) | 0;\n al = el, el = dl, dl = rotl(cl, 10) | 0, cl = bl, bl = tl; // prettier-ignore\n }\n // 2 loops are 10% faster\n for (let i = 0; i < 16; i++) {\n const tr = (rotl(ar + ripemd_f(rGroup, br, cr, dr) + BUF_160[rr[i]] + hbr, sr[i]) + er) | 0;\n ar = er, er = dr, dr = rotl(cr, 10) | 0, cr = br, br = tr; // prettier-ignore\n }\n }\n // Add the compressed chunk to the current hash value\n this.set((this.h1 + cl + dr) | 0, (this.h2 + dl + er) | 0, (this.h3 + el + ar) | 0, (this.h4 + al + br) | 0, (this.h0 + bl + cr) | 0);\n }\n roundClean() {\n clean(BUF_160);\n }\n destroy() {\n this.destroyed = true;\n clean(this.buffer);\n this.set(0, 0, 0, 0, 0);\n }\n}\n/**\n * RIPEMD-160 - a legacy hash function from 1990s.\n * * https://homes.esat.kuleuven.be/~bosselae/ripemd160.html\n * * https://homes.esat.kuleuven.be/~bosselae/ripemd160/pdf/AB-9601/AB-9601.pdf\n */\nexport const ripemd160 = /* @__PURE__ */ createHasher(() => new RIPEMD160());\n//# sourceMappingURL=legacy.js.map","import { Buff } from '@vbyte/buff';\nimport { hmac as noble_hmac } from '@noble/hashes/hmac';\nimport { pbkdf2 as noble_pbkdf2 } from '@noble/hashes/pbkdf2';\nimport { ripemd160 as noble_r160 } from '@noble/hashes/legacy';\nimport { sha256 as noble_s256, sha512 as noble_s512 } from '@noble/hashes/sha2';\nexport function hash160(...input) {\n const buffer = Buff.join(input);\n const digest = noble_r160(noble_s256(buffer));\n return new Buff(digest);\n}\nexport function sha256(...input) {\n const buffer = Buff.join(input);\n const digest = noble_s256(buffer);\n return new Buff(digest);\n}\nexport function hash256(...input) {\n const buffer = Buff.join(input);\n const digest = noble_s256(noble_s256(buffer));\n return new Buff(digest);\n}\nexport function hashtag(tag) {\n const hash = sha256(Buff.str(tag));\n return Buff.join([hash, hash]);\n}\nexport function hash340(tag, ...input) {\n const htag = hashtag(tag);\n const data = input.map(e => new Buff(e));\n const pimg = Buff.join([htag, ...data]);\n return sha256(pimg);\n}\nexport function hmac256(key, ...input) {\n const mask = new Buff(key);\n const buffer = Buff.join(input);\n const digest = noble_hmac(noble_s256, mask, buffer);\n return new Buff(digest);\n}\nexport function hmac512(key, ...input) {\n const mask = new Buff(key);\n const buffer = Buff.join(input);\n const digest = noble_hmac(noble_s512, mask, buffer);\n return new Buff(digest);\n}\nexport function pkdf256(secret, salt, options) {\n const { c = 1, dk_len = 32 } = options ?? {};\n const sec_u8 = new Buff(secret);\n const salt_u8 = new Buff(salt);\n const digest = noble_pbkdf2(noble_s256, sec_u8, salt_u8, { c, dkLen: dk_len });\n return new Buff(digest);\n}\nexport function pkdf512(secret, salt, options) {\n const { c = 1, dk_len = 32 } = options ?? {};\n const sec_u8 = new Buff(secret);\n const salt_u8 = new Buff(salt);\n const digest = noble_pbkdf2(noble_s512, sec_u8, salt_u8, { c, dkLen: dk_len });\n return new Buff(digest);\n}\n","export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n","import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n","import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\nexport default errorMap;\n","import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n overrideErrorMap = map;\n}\nexport function getErrorMap() {\n return overrideErrorMap;\n}\n","import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexport const INVALID = Object.freeze({\n status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n","export var errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n","import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nexport class ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nexport class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nexport class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nexport class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nexport class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nexport class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nexport class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nexport class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nexport class ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nexport class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nexport class ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nexport class ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexport class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nexport class ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nexport class ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexport class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nexport class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nexport class ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nexport class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nexport class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!isValid(base))\n return INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nexport class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nexport class ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nexport class ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nexport class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexport class ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexport class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n","import { z } from 'zod';\nexport const big = z.bigint();\nexport const bool = z.boolean();\nexport const date = z.date();\nexport const num = z.number().min(Number.MIN_SAFE_INTEGER).max(Number.MAX_SAFE_INTEGER);\nexport const int = num.int();\nexport const u8a = z.instanceof(Uint8Array);\nexport const str = z.string();\nexport const stamp = int.min(500_000_000);\nexport const any = z.any();\nexport const zod = z;\nexport const char = int.min(0).max(0xFF);\nexport const short = int.min(0).max(0xFFFF);\nexport const uint = int.min(0).max(0xFFFFFFFF);\nexport const float = z.number().refine((e) => String(e).includes('.'));\nexport const float2 = float.refine((e) => {\n const parts = String(e).split('.').at(1);\n return parts !== undefined && parts.length <= 2;\n});\nexport const hex = z.string()\n .regex(/^[0-9a-fA-F]*$/)\n .refine(e => e.length % 2 === 0);\nexport const literal = z.union([\n z.string(), z.number(), z.boolean(), z.null()\n]);\nexport const json = z.lazy(() => z.union([literal, z.array(json), z.record(json)]));\nexport const u8a20 = u8a.refine((e) => e.length === 20);\nexport const u8a32 = u8a.refine((e) => e.length === 32);\nexport const u8a33 = u8a.refine((e) => e.length === 33);\nexport const u8a64 = u8a.refine((e) => e.length === 64);\nexport const hex20 = hex.refine((e) => e.length === 40);\nexport const hex32 = hex.refine((e) => e.length === 64);\nexport const hex33 = hex.refine((e) => e.length === 66);\nexport const hex64 = hex.refine((e) => e.length === 128);\nexport const bytes = z.union([hex, u8a]);\nexport const byte32 = z.union([hex32, u8a32]);\nexport const byte33 = z.union([hex33, u8a33]);\nexport const byte64 = z.union([hex64, u8a64]);\nexport const base58 = z.string().regex(/^[1-9A-HJ-NP-Za-km-z]+$/);\nexport const base64 = z.string().regex(/^[a-zA-Z0-9+/]+={0,2}$/);\nexport const base64url = z.string().regex(/^[a-zA-Z0-9\\-_]+={0,2}$/);\nexport const bech32 = z.string().regex(/^[a-z]+1[023456789acdefghjklmnpqrstuvwxyz]+$/);\n","/*! scure-base - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nfunction isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n/** Asserts something is Uint8Array. */\nfunction abytes(b, ...lengths) {\n if (!isBytes(b))\n throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\nfunction isArrayOf(isString, arr) {\n if (!Array.isArray(arr))\n return false;\n if (arr.length === 0)\n return true;\n if (isString) {\n return arr.every((item) => typeof item === 'string');\n }\n else {\n return arr.every((item) => Number.isSafeInteger(item));\n }\n}\n// no abytes: seems to have 10% slowdown. Why?!\nfunction afn(input) {\n if (typeof input !== 'function')\n throw new Error('function expected');\n return true;\n}\nfunction astr(label, input) {\n if (typeof input !== 'string')\n throw new Error(`${label}: string expected`);\n return true;\n}\nfunction anumber(n) {\n if (!Number.isSafeInteger(n))\n throw new Error(`invalid integer: ${n}`);\n}\nfunction aArr(input) {\n if (!Array.isArray(input))\n throw new Error('array expected');\n}\nfunction astrArr(label, input) {\n if (!isArrayOf(true, input))\n throw new Error(`${label}: array of strings expected`);\n}\nfunction anumArr(label, input) {\n if (!isArrayOf(false, input))\n throw new Error(`${label}: array of numbers expected`);\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction chain(...args) {\n const id = (a) => a;\n // Wrap call in closure so JIT can inline calls\n const wrap = (a, b) => (c) => 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/**\n * Encodes integer radix representation to array of strings using alphabet and back.\n * Could also be array of strings.\n * @__NO_SIDE_EFFECTS__\n */\nfunction alphabet(letters) {\n // mapping 1 to \"b\"\n const lettersA = typeof letters === 'string' ? letters.split('') : letters;\n const len = lettersA.length;\n astrArr('alphabet', lettersA);\n // mapping \"b\" to 1\n const indexes = new Map(lettersA.map((l, i) => [l, i]));\n return {\n encode: (digits) => {\n aArr(digits);\n return digits.map((i) => {\n if (!Number.isSafeInteger(i) || i < 0 || i >= len)\n throw new Error(`alphabet.encode: digit index outside alphabet \"${i}\". Allowed: ${letters}`);\n return lettersA[i];\n });\n },\n decode: (input) => {\n aArr(input);\n return input.map((letter) => {\n astr('alphabet.decode', letter);\n const i = indexes.get(letter);\n if (i === undefined)\n throw new Error(`Unknown letter: \"${letter}\". Allowed: ${letters}`);\n return i;\n });\n },\n };\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction join(separator = '') {\n astr('join', separator);\n return {\n encode: (from) => {\n astrArr('join.decode', from);\n return from.join(separator);\n },\n decode: (to) => {\n astr('join.decode', to);\n return to.split(separator);\n },\n };\n}\n/**\n * Pad strings array so it has integer number of bits\n * @__NO_SIDE_EFFECTS__\n */\nfunction padding(bits, chr = '=') {\n anumber(bits);\n astr('padding', chr);\n return {\n encode(data) {\n astrArr('padding.encode', data);\n while ((data.length * bits) % 8)\n data.push(chr);\n return data;\n },\n decode(input) {\n astrArr('padding.decode', input);\n let end = input.length;\n if ((end * bits) % 8)\n throw new Error('padding: invalid, string should have whole number of bytes');\n for (; end > 0 && input[end - 1] === chr; end--) {\n const last = end - 1;\n const byte = last * bits;\n if (byte % 8 === 0)\n throw new Error('padding: invalid, string has too much padding');\n }\n return input.slice(0, end);\n },\n };\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction normalize(fn) {\n afn(fn);\n return { encode: (from) => from, decode: (to) => fn(to) };\n}\n/**\n * Slow: O(n^2) time complexity\n */\nfunction convertRadix(data, from, to) {\n // base 1 is impossible\n if (from < 2)\n throw new Error(`convertRadix: invalid from=${from}, base cannot be less than 2`);\n if (to < 2)\n throw new Error(`convertRadix: invalid to=${to}, base cannot be less than 2`);\n aArr(data);\n if (!data.length)\n return [];\n let pos = 0;\n const res = [];\n const digits = Array.from(data, (d) => {\n anumber(d);\n if (d < 0 || d >= from)\n throw new Error(`invalid integer: ${d}`);\n return d;\n });\n const dlen = digits.length;\n while (true) {\n let carry = 0;\n let done = true;\n for (let i = pos; i < dlen; i++) {\n const digit = digits[i];\n const fromCarry = from * carry;\n const digitBase = fromCarry + digit;\n if (!Number.isSafeInteger(digitBase) ||\n fromCarry / from !== carry ||\n digitBase - digit !== fromCarry) {\n throw new Error('convertRadix: carry overflow');\n }\n const div = digitBase / to;\n carry = digitBase % to;\n const rounded = Math.floor(div);\n digits[i] = rounded;\n if (!Number.isSafeInteger(rounded) || rounded * to + carry !== digitBase)\n throw new Error('convertRadix: carry overflow');\n if (!done)\n continue;\n else if (!rounded)\n pos = i;\n else\n done = false;\n }\n res.push(carry);\n if (done)\n break;\n }\n for (let i = 0; i < data.length - 1 && data[i] === 0; i++)\n res.push(0);\n return res.reverse();\n}\nconst gcd = (a, b) => (b === 0 ? a : gcd(b, a % b));\nconst radix2carry = /* @__NO_SIDE_EFFECTS__ */ (from, to) => from + (to - gcd(from, to));\nconst powers = /* @__PURE__ */ (() => {\n let res = [];\n for (let i = 0; i < 40; i++)\n res.push(2 ** i);\n return res;\n})();\n/**\n * Implemented with numbers, because BigInt is 5x slower\n */\nfunction convertRadix2(data, from, to, padding) {\n aArr(data);\n if (from <= 0 || from > 32)\n throw new Error(`convertRadix2: wrong from=${from}`);\n if (to <= 0 || to > 32)\n throw new Error(`convertRadix2: wrong to=${to}`);\n if (radix2carry(from, to) > 32) {\n throw new Error(`convertRadix2: carry overflow from=${from} to=${to} carryBits=${radix2carry(from, to)}`);\n }\n let carry = 0;\n let pos = 0; // bitwise position in current element\n const max = powers[from];\n const mask = powers[to] - 1;\n const res = [];\n for (const n of data) {\n anumber(n);\n if (n >= max)\n throw new Error(`convertRadix2: invalid data word=${n} from=${from}`);\n carry = (carry << from) | n;\n if (pos + from > 32)\n throw new Error(`convertRadix2: carry overflow pos=${pos} from=${from}`);\n pos += from;\n for (; pos >= to; pos -= to)\n res.push(((carry >> (pos - to)) & mask) >>> 0);\n const pow = powers[pos];\n if (pow === undefined)\n throw new Error('invalid carry');\n carry &= pow - 1; // clean carry, otherwise it will cause overflow\n }\n carry = (carry << (to - pos)) & mask;\n if (!padding && pos >= from)\n throw new Error('Excess padding');\n if (!padding && carry > 0)\n throw new Error(`Non-zero padding: ${carry}`);\n if (padding && pos > 0)\n res.push(carry >>> 0);\n return res;\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction radix(num) {\n anumber(num);\n const _256 = 2 ** 8;\n return {\n encode: (bytes) => {\n if (!isBytes(bytes))\n throw new Error('radix.encode input should be Uint8Array');\n return convertRadix(Array.from(bytes), _256, num);\n },\n decode: (digits) => {\n anumArr('radix.decode', digits);\n return Uint8Array.from(convertRadix(digits, num, _256));\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, revPadding = false) {\n anumber(bits);\n if (bits <= 0 || bits > 32)\n 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) => {\n if (!isBytes(bytes))\n throw new Error('radix2.encode input should be Uint8Array');\n return convertRadix2(Array.from(bytes), 8, bits, !revPadding);\n },\n decode: (digits) => {\n anumArr('radix2.decode', digits);\n return Uint8Array.from(convertRadix2(digits, bits, 8, revPadding));\n },\n };\n}\nfunction unsafeWrapper(fn) {\n afn(fn);\n return function (...args) {\n try {\n return fn.apply(null, args);\n }\n catch (e) { }\n };\n}\nfunction checksum(len, fn) {\n anumber(len);\n afn(fn);\n return {\n encode(data) {\n if (!isBytes(data))\n throw new Error('checksum.encode: input should be Uint8Array');\n const sum = fn(data).slice(0, len);\n const res = new Uint8Array(data.length + len);\n res.set(data);\n res.set(sum, data.length);\n return res;\n },\n decode(data) {\n if (!isBytes(data))\n throw new Error('checksum.decode: input should be Uint8Array');\n const payload = data.slice(0, -len);\n const oldChecksum = data.slice(-len);\n const newChecksum = fn(payload).slice(0, len);\n for (let i = 0; i < len; i++)\n if (newChecksum[i] !== oldChecksum[i])\n throw new Error('Invalid checksum');\n return payload;\n },\n };\n}\n// prettier-ignore\nexport const utils = {\n alphabet, chain, checksum, convertRadix, convertRadix2, radix, radix2, join, padding,\n};\n// RFC 4648 aka RFC 3548\n// ---------------------\n/**\n * base16 encoding from RFC 4648.\n * @example\n * ```js\n * base16.encode(Uint8Array.from([0x12, 0xab]));\n * // => '12AB'\n * ```\n */\nexport const base16 = chain(radix2(4), alphabet('0123456789ABCDEF'), join(''));\n/**\n * base32 encoding from RFC 4648. Has padding.\n * Use `base32nopad` for unpadded version.\n * Also check out `base32hex`, `base32hexnopad`, `base32crockford`.\n * @example\n * ```js\n * base32.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'CKVQ===='\n * base32.decode('CKVQ====');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32 = chain(radix2(5), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'), padding(5), join(''));\n/**\n * base32 encoding from RFC 4648. No padding.\n * Use `base32` for padded version.\n * Also check out `base32hex`, `base32hexnopad`, `base32crockford`.\n * @example\n * ```js\n * base32nopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'CKVQ'\n * base32nopad.decode('CKVQ');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32nopad = chain(radix2(5), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'), join(''));\n/**\n * base32 encoding from RFC 4648. Padded. Compared to ordinary `base32`, slightly different alphabet.\n * Use `base32hexnopad` for unpadded version.\n * @example\n * ```js\n * base32hex.encode(Uint8Array.from([0x12, 0xab]));\n * // => '2ALG===='\n * base32hex.decode('2ALG====');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32hex = chain(radix2(5), alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'), padding(5), join(''));\n/**\n * base32 encoding from RFC 4648. No padding. Compared to ordinary `base32`, slightly different alphabet.\n * Use `base32hex` for padded version.\n * @example\n * ```js\n * base32hexnopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => '2ALG'\n * base32hexnopad.decode('2ALG');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32hexnopad = chain(radix2(5), alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'), join(''));\n/**\n * base32 encoding from RFC 4648. Doug Crockford's version.\n * https://www.crockford.com/base32.html\n * @example\n * ```js\n * base32crockford.encode(Uint8Array.from([0x12, 0xab]));\n * // => '2ANG'\n * base32crockford.decode('2ANG');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32crockford = chain(radix2(5), alphabet('0123456789ABCDEFGHJKMNPQRSTVWXYZ'), join(''), normalize((s) => s.toUpperCase().replace(/O/g, '0').replace(/[IL]/g, '1')));\n// Built-in base64 conversion https://caniuse.com/mdn-javascript_builtins_uint8array_frombase64\n// prettier-ignore\nconst hasBase64Builtin = /* @__PURE__ */ (() => typeof Uint8Array.from([]).toBase64 === 'function' &&\n typeof Uint8Array.fromBase64 === 'function')();\nconst decodeBase64Builtin = (s, isUrl) => {\n astr('base64', s);\n const re = isUrl ? /^[A-Za-z0-9=_-]+$/ : /^[A-Za-z0-9=+/]+$/;\n const alphabet = isUrl ? 'base64url' : 'base64';\n if (s.length > 0 && !re.test(s))\n throw new Error('invalid base64');\n return Uint8Array.fromBase64(s, { alphabet, lastChunkHandling: 'strict' });\n};\n/**\n * base64 from RFC 4648. Padded.\n * Use `base64nopad` for unpadded version.\n * Also check out `base64url`, `base64urlnopad`.\n * Falls back to built-in function, when available.\n * @example\n * ```js\n * base64.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs='\n * base64.decode('Eqs=');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\n// prettier-ignore\nexport const base64 = hasBase64Builtin ? {\n encode(b) { abytes(b); return b.toBase64(); },\n decode(s) { return decodeBase64Builtin(s, false); },\n} : chain(radix2(6), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'), padding(6), join(''));\n/**\n * base64 from RFC 4648. No padding.\n * Use `base64` for padded version.\n * @example\n * ```js\n * base64nopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs'\n * base64nopad.decode('Eqs');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base64nopad = chain(radix2(6), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'), join(''));\n/**\n * base64 from RFC 4648, using URL-safe alphabet. Padded.\n * Use `base64urlnopad` for unpadded version.\n * Falls back to built-in function, when available.\n * @example\n * ```js\n * base64url.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs='\n * base64url.decode('Eqs=');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\n// prettier-ignore\nexport const base64url = hasBase64Builtin ? {\n encode(b) { abytes(b); return b.toBase64({ alphabet: 'base64url' }); },\n decode(s) { return decodeBase64Builtin(s, true); },\n} : chain(radix2(6), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'), padding(6), join(''));\n/**\n * base64 from RFC 4648, using URL-safe alphabet. No padding.\n * Use `base64url` for padded version.\n * @example\n * ```js\n * base64urlnopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs'\n * base64urlnopad.decode('Eqs');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base64urlnopad = chain(radix2(6), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'), join(''));\n// base58 code\n// -----------\nconst genBase58 = /* @__NO_SIDE_EFFECTS__ */ (abc) => chain(radix(58), alphabet(abc), join(''));\n/**\n * base58: base64 without ambigous characters +, /, 0, O, I, l.\n * Quadratic (O(n^2)) - so, can't be used on large inputs.\n * @example\n * ```js\n * base58.decode('01abcdef');\n * // => '3UhJW'\n * ```\n */\nexport const base58 = genBase58('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz');\n/**\n * base58: flickr version. Check out `base58`.\n */\nexport const base58flickr = genBase58('123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ');\n/**\n * base58: XRP version. Check out `base58`.\n */\nexport const base58xrp = genBase58('rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz');\n// Data len (index) -> encoded block len\nconst XMR_BLOCK_LEN = [0, 2, 3, 5, 6, 7, 9, 10, 11];\n/**\n * base58: XMR version. Check out `base58`.\n * 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 */\nexport const base58xmr = {\n encode(data) {\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) {\n let res = [];\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)\n 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/**\n * Method, which creates base58check encoder.\n * Requires function, calculating sha256.\n */\nexport const createBase58check = (sha256) => chain(checksum(4, (data) => sha256(sha256(data))), base58);\n/**\n * Use `createBase58check` instead.\n * @deprecated\n */\nexport const base58check = createBase58check;\nconst BECH_ALPHABET = chain(alphabet('qpzry9x8gf2tvdw0s3jn54khce6mua7l'), join(''));\nconst POLYMOD_GENERATORS = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3];\nfunction bech32Polymod(pre) {\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)\n chk ^= POLYMOD_GENERATORS[i];\n }\n return chk;\n}\nfunction bechChecksum(prefix, words, encodingConst = 1) {\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)\n 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++)\n chk = bech32Polymod(chk) ^ (prefix.charCodeAt(i) & 0x1f);\n for (let v of words)\n chk = bech32Polymod(chk) ^ v;\n for (let i = 0; i < 6; i++)\n chk = bech32Polymod(chk);\n chk ^= encodingConst;\n return BECH_ALPHABET.encode(convertRadix2([chk % powers[30]], 30, 5, false));\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction genBech32(encoding) {\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 function encode(prefix, words, limit = 90) {\n astr('bech32.encode prefix', prefix);\n if (isBytes(words))\n words = Array.from(words);\n anumArr('bech32.encode', words);\n const plen = prefix.length;\n if (plen === 0)\n throw new TypeError(`Invalid prefix length ${plen}`);\n const actualLength = plen + 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}`;\n }\n function decode(str, limit = 90) {\n astr('bech32.decode input', str);\n const slen = str.length;\n if (slen < 8 || (limit !== false && slen > limit))\n throw new TypeError(`invalid string length: ${slen} (${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)\n 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))\n throw new Error(`Invalid checksum in ${str}: expected \"${sum}\"`);\n return { prefix, words };\n }\n const decodeUnsafe = unsafeWrapper(decode);\n function decodeToBytes(str) {\n const { prefix, words } = decode(str, false);\n return { prefix, words, bytes: fromWords(words) };\n }\n function encodeFromBytes(prefix, bytes) {\n return encode(prefix, toWords(bytes));\n }\n return {\n encode,\n decode,\n encodeFromBytes,\n decodeToBytes,\n decodeUnsafe,\n fromWords,\n fromWordsUnsafe,\n toWords,\n };\n}\n/**\n * bech32 from BIP 173. Operates on words.\n * For high-level, check out scure-btc-signer:\n * https://github.com/paulmillr/scure-btc-signer.\n */\nexport const bech32 = genBech32('bech32');\n/**\n * bech32m from BIP 350. Operates on words.\n * It was to mitigate `bech32` weaknesses.\n * For high-level, check out scure-btc-signer:\n * https://github.com/paulmillr/scure-btc-signer.\n */\nexport const bech32m = genBech32('bech32m');\n/**\n * UTF-8-to-byte decoder. Uses built-in TextDecoder / TextEncoder.\n * @example\n * ```js\n * const b = utf8.decode(\"hey\"); // => new Uint8Array([ 104, 101, 121 ])\n * const str = utf8.encode(b); // \"hey\"\n * ```\n */\nexport const utf8 = {\n encode: (data) => new TextDecoder().decode(data),\n decode: (str) => new TextEncoder().encode(str),\n};\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\n// prettier-ignore\nconst hasHexBuiltin = /* @__PURE__ */ (() => typeof Uint8Array.from([]).toHex === 'function' &&\n typeof Uint8Array.fromHex === 'function')();\n// prettier-ignore\nconst hexBuiltin = {\n encode(data) { abytes(data); return data.toHex(); },\n decode(s) { astr('hex', s); return Uint8Array.fromHex(s); },\n};\n/**\n * hex string decoder. Uses built-in function, when available.\n * @example\n * ```js\n * const b = hex.decode(\"0102ff\"); // => new Uint8Array([ 1, 2, 255 ])\n * const str = hex.encode(b); // \"0102ff\"\n * ```\n */\nexport const hex = hasHexBuiltin\n ? hexBuiltin\n : chain(radix2(4), alphabet('0123456789abcdef'), join(''), normalize((s) => {\n if (typeof s !== 'string' || s.length % 2 !== 0)\n throw new TypeError(`hex.decode: expected string, got ${typeof s} with length ${s.length}`);\n return s.toLowerCase();\n }));\n// prettier-ignore\nconst CODERS = {\n utf8, hex, base16, base32, base64, base64url, base58, base58xmr\n};\nconst coderTypeError = 'Invalid encoding type. Available types: utf8, hex, base16, base32, base64, base64url, base58, base58xmr';\n/** @deprecated */\nexport const bytesToString = (type, bytes) => {\n if (typeof type !== 'string' || !CODERS.hasOwnProperty(type))\n throw new TypeError(coderTypeError);\n if (!isBytes(bytes))\n throw new TypeError('bytesToString() expects Uint8Array');\n return CODERS[type].encode(bytes);\n};\n/** @deprecated */\nexport const str = bytesToString; // as in python, but for bytes only\n/** @deprecated */\nexport const stringToBytes = (type, str) => {\n if (!CODERS.hasOwnProperty(type))\n throw new TypeError(coderTypeError);\n if (typeof str !== 'string')\n throw new TypeError('stringToBytes() expects string');\n return CODERS[type].decode(str);\n};\n/** @deprecated */\nexport const bytes = stringToBytes;\n//# sourceMappingURL=index.js.map","import { sha256 } from '@noble/hashes/sha2';\nimport { Assert } from './assert.js';\nimport { createBase58check, base64, base64urlnopad, bech32, bech32m } from '@scure/base';\nexport var B58chk;\n(function (B58chk) {\n B58chk.encode = (data) => {\n Assert.is_u8a(data);\n return createBase58check(sha256).encode(data);\n };\n B58chk.decode = (data) => {\n Assert.is_base58(data);\n return createBase58check(sha256).decode(data);\n };\n})(B58chk || (B58chk = {}));\nexport var Base64;\n(function (Base64) {\n Base64.encode = (data) => {\n Assert.is_u8a(data);\n return base64.encode(data);\n };\n Base64.decode = (data) => {\n Assert.is_base64(data);\n return base64.decode(data);\n };\n})(Base64 || (Base64 = {}));\nexport var B64url;\n(function (B64url) {\n B64url.encode = (data) => {\n Assert.is_u8a(data);\n return base64urlnopad.encode(data);\n };\n B64url.decode = (data) => {\n Assert.is_b64url(data);\n return base64urlnopad.decode(data);\n };\n})(B64url || (B64url = {}));\nexport var Bech32;\n(function (Bech32) {\n Bech32.to_words = bech32.toWords;\n Bech32.to_bytes = bech32.fromWords;\n Bech32.encode = (prefix, words, limit = false) => {\n assert_prefix(prefix);\n assert_words(words);\n return bech32.encode(prefix, words, limit);\n };\n Bech32.decode = (data, limit = false) => {\n Assert.is_bech32(data);\n return bech32.decode(data, limit);\n };\n})(Bech32 || (Bech32 = {}));\nexport var Bech32m;\n(function (Bech32m) {\n Bech32m.to_words = bech32m.toWords;\n Bech32m.to_bytes = bech32m.fromWords;\n Bech32m.encode = (prefix, words, limit = false) => {\n assert_prefix(prefix);\n assert_words(words);\n return bech32m.encode(prefix, words, limit);\n };\n Bech32m.decode = (data, limit = false) => {\n Assert.is_bech32(data);\n return bech32m.decode(data, limit);\n };\n})(Bech32m || (Bech32m = {}));\nfunction assert_prefix(value) {\n if (typeof value !== 'string' || value.length === 0) {\n throw new Error(`invalid prefix: ${String(value)}`);\n }\n}\nfunction assert_words(value) {\n if (!(Array.isArray(value) &&\n value.every(word => typeof word === 'number'))) {\n throw new Error(`invalid words: ${String(value)}`);\n }\n}\n","import { Buff } from '@vbyte/buff'\n\nimport { Assert, B58chk, Bech32, Bech32m } from '@vbyte/micro-lib'\n\nimport type {\n AddressFormat,\n DecodedAddress,\n} from '@/types/address.js'\n\nconst ENCODING_REGEX = {\n base58 : /^[13mn2][a-km-zA-HJ-NP-Z1-9]{25,34}$/,\n bech32 : /^(bc|tb|bcrt)1q[ac-hj-np-z02-9]{6,87}$/,\n bech32m : /^(bc|tb|bcrt)1p[ac-hj-np-z02-9]{6,87}$/\n}\n\nconst VERSION = {\n bech32 : 0,\n bech32m : 1\n}\n\n/**\n * Decode an address.\n * \n * @param address - The address to decode.\n * @returns The decoded address.\n */\nexport function decode_address (address : string) : DecodedAddress {\n // Get the address format.\n const format = get_address_format(address)\n // If the format is not found, throw an error.\n if (format === null) throw new Error('unrecognized address format: ' + format)\n // Decode the address based on the format.\n if (format === 'base58') return base58_decode(address)\n if (format === 'bech32') return bech32_decode(address)\n if (format === 'bech32m') return bech32m_decode(address)\n // If we didn't find a matching decoder, throw.\n throw new Error('unable to find a matching address configuration')\n}\n\n/**\n * Encode an address.\n * \n * @param address - The address to encode.\n * @returns The encoded address as a string, or null if the address is not\n * recognized.\n */\nexport function encode_address (\n config : DecodedAddress\n) : string {\n // Encode the address based on the format.\n if (config.format === 'base58') return base58_encode(config)\n if (config.format === 'bech32') return bech32_encode(config)\n if (config.format === 'bech32m') return bech32m_encode(config)\n // If the format is not recognized, throw an error.\n throw new Error('unrecognized encoding format: ' + config.format)\n}\n\n/**\n * Get the encoding type for a given address.\n * \n * @param address - The address to get the encoding type for.\n * @returns The encoding type, or null if the address is not recognized.\n */\nfunction get_address_format (address : string) : AddressFormat | null {\n // For each encoding type, check if the address matches the regex.\n for (const [ format, regex ] of Object.entries(ENCODING_REGEX)) {\n // If the address matches the regex, return the format.\n if (regex.test(address)) return format as AddressFormat\n // If the address does not match the regex, continue to the next encoding type.\n }\n // If no encoding type matches the address, return null.\n return null\n}\n\n/**\n * Encode data as a base58 string.\n * \n * @param config - The encoder configuration.\n * @returns The encoded base58 string.\n */\nfunction base58_encode (config : DecodedAddress) : string {\n // Assert the format is correct.\n Assert.ok(config.format === 'base58', 'encoding mismatch')\n // Assert the version is specified.\n Assert.exists(config.version, 'must specify a version')\n // Convert the data into bytes with a version prefix.\n const bytes = Buff.join([ config.version, config.data ])\n // Encode the data as a base58 string.\n return B58chk.encode(bytes)\n}\n\n/**\n * Decode data as a base58 string.\n * \n * @param encoded - The base58 string to decode.\n * @returns The decoded data.\n */\nfunction base58_decode (encoded : string) : DecodedAddress {\n // Decode the encoded data.\n const bytes = B58chk.decode(encoded)\n // Get the data from the decoded bytes.\n const data = bytes.slice(1)\n // Get the version from the decoded bytes.\n const version = bytes[0]\n // Return the decoded address.\n return { data, format: 'base58', version }\n}\n\n/**\n * Encode data as a bech32 string.\n * \n * @param config - The encoder configuration.\n * @returns The encoded bech32 string.\n */\nfunction bech32_encode (config : DecodedAddress) : string {\n // Assert the format is correct.\n Assert.ok(config.format === 'bech32', 'encoding mismatch')\n // Assert the prefix is specified.\n Assert.exists(config.prefix, 'prefix is required')\n // Convert the data into bytes.\n const bytes = Buff.bytes(config.data)\n // Convert the bytes into words.\n const words = Bech32.to_words(bytes)\n // Encode the data as a bech32 string.\n return Bech32.encode(config.prefix, [ VERSION.bech32, ...words ])\n}\n\n/**\n * Decode data as a bech32 string.\n * \n * @param encoded - The bech32 string to decode.\n * @returns The decoded data.\n */\nfunction bech32_decode (encoded : string) : DecodedAddress {\n // Decode the encoded data.\n const { prefix, words } = Bech32.decode(encoded)\n // Get the version and rest of the words.\n const [ version, ...rest ] = words\n // Assert the version is correct.\n Assert.ok(version === VERSION.bech32, 'bech32 version mismatch')\n // Convert the rest of the words into bytes.\n const data = Bech32.to_bytes(rest)\n // Return the decoded address.\n return { data, format: 'bech32', prefix, version }\n}\n\n/**\n * Encode data as a bech32 string.\n * \n * @param config - The encoder configuration.\n * @returns The encoded bech32 string.\n */\nfunction bech32m_encode (config : DecodedAddress) : string {\n // Assert the format is correct.\n Assert.ok(config.format === 'bech32m', 'encoding mismatch')\n // Assert the prefix is specified.\n Assert.exists(config.prefix, 'prefix is required')\n // Convert the data into bytes.\n const bytes = Buff.bytes(config.data)\n // Convert the bytes into words.\n const words = Bech32m.to_words(bytes)\n // Encode the data as a bech32m string.\n return Bech32m.encode(config.prefix, [ VERSION.bech32m, ...words ])\n}\n\n/**\n * Decode data as a bech32 string.\n * \n * @param encoded - The bech32 string to decode.\n * @returns The decoded data.\n */\nfunction bech32m_decode (encoded : string) : DecodedAddress {\n // Decode the encoded data.\n const { prefix, words } = Bech32m.decode(encoded)\n // Get the version and rest of the words.\n const [ version, ...rest ] = words\n // Assert the version is correct.\n Assert.ok(version === VERSION.bech32m, 'bech32m version mismatch')\n // Convert the rest of the words into bytes.\n const data = Bech32m.to_bytes(rest)\n // Return the decoded address.\n return { data, format: 'bech32m', prefix, version }\n}\n","import { Buff } from '@vbyte/buff'\nimport { decode_address } from './encode.js'\nimport { get_address_script } from './script.js'\n\nimport type {\n AddressConfig,\n AddressConfigEntry,\n AddressType,\n ChainNetwork,\n AddressContext,\n AddressData\n} from '@/types/index.js'\n\nconst CONFIG_TABLE : AddressConfigEntry[] = [\n [ '1', 'p2pkh', 'main', 20, 'base58', 0x00 ],\n [ '3', 'p2sh', 'main', 20, 'base58', 0x05 ],\n [ 'm', 'p2pkh', 'testnet', 20, 'base58', 0x6F ],\n [ 'n', 'p2pkh', 'testnet', 20, 'base58', 0x6F ],\n [ '2', 'p2sh', 'testnet', 20, 'base58', 0xC4 ],\n [ 'm', 'p2pkh', 'regtest', 20, 'base58', 0x6F ],\n [ 'n', 'p2pkh', 'regtest', 20, 'base58', 0x6F ],\n [ '2', 'p2sh', 'regtest', 20, 'base58', 0xC4 ],\n [ 'bc', 'p2w-pkh', 'main', 20, 'bech32', 0 ],\n [ 'tb', 'p2w-pkh', 'testnet', 20, 'bech32', 0 ],\n [ 'bcrt', 'p2w-pkh', 'regtest', 20, 'bech32', 0 ],\n [ 'bc', 'p2w-sh', 'main', 32, 'bech32', 0 ],\n [ 'tb', 'p2w-sh', 'testnet', 32, 'bech32', 0 ],\n [ 'bcrt', 'p2w-sh', 'regtest', 32, 'bech32', 0 ],\n [ 'bc', 'p2tr', 'main', 32, 'bech32m', 1 ],\n [ 'tb', 'p2tr', 'testnet', 32, 'bech32m', 1 ],\n [ 'bcrt', 'p2tr', 'regtest', 32, 'bech32m', 1 ]\n]\n\n/**\n * Lookup an address configuration by its type and network.\n * \n * @param address_network - The network of the address.\n * @param address_type - The type of the address.\n * @returns The address information, or null if the address is not recognized.\n */\nexport function get_address_config (\n address_network : ChainNetwork,\n address_type : AddressType\n) : AddressConfig | null {\n // For each configuration in the table,\n for (const [ prefix, type, network, size, format, version ] of CONFIG_TABLE) {\n // Check if the address matches the configuration\n if (type === address_type && network === address_network) {\n // Return the address configuration.\n return { type, prefix, network, size, format, version }\n }\n }\n // If no configuration matches the address, return null.\n return null\n}\n\n/**\n * Get the address context.\n * \n * @param address - The address to get the context for.\n * @returns The address context.\n */\nexport function get_address_ctx (address : string) : AddressContext {\n // Decode the address.\n const dec = decode_address(address)\n // For each configuration in the table,\n for (const [ prefix, type, network, size, format, version ] of CONFIG_TABLE) {\n\n // Check if the address matches the configuration\n if (format !== dec.format) continue\n if (size !== dec.data.length) continue\n if (version !== dec.version) continue\n\n if (dec.prefix) {\n if (prefix !== dec.prefix) continue\n } else {\n if (!address.startsWith(prefix)) continue\n }\n\n // Convert the decoded data into a hex string.\n const hex = Buff.uint(dec.data).hex\n // Return the address configuration and data.\n return { data: dec.data, hex, type, prefix, network, size, format, version }\n }\n // Otherwise, throw an error\n throw new Error('address configuration is invalid')\n}\n\n/**\n * Parse an address into its data and script.\n * \n * @param address - The address to parse.\n * @returns The address data and script.\n */\nexport function parse_address (address : string) : AddressData {\n // Get the address context.\n const ctx = get_address_ctx(address)\n // Get the address script.\n const script = get_address_script(ctx.hex, ctx.type)\n // Return the address data.\n return { ...ctx, ...script }\n}\n","import type { AddressType } from '@/types/index.js'\n\n/**\n * Get the address script.\n * \n * @param script_key - The script key.\n * @param script_type - The script type.\n * @returns The address script.\n */\nexport function get_address_script (\n script_key : string,\n script_type : AddressType\n) {\n switch (script_type) {\n case 'p2pkh':\n return get_p2pkh_script(script_key)\n case 'p2sh':\n return get_p2sh_script(script_key)\n case 'p2w-pkh':\n return get_p2w_pkh_script(script_key)\n case 'p2w-sh':\n return get_p2w_sh_script(script_key)\n case 'p2tr':\n return get_p2tr_script(script_key)\n default:\n throw new Error('unrecognized script type: ' + script_type)\n }\n}\n\nfunction get_p2pkh_script (script_key : string) {\n return {\n script_hex : '76a914' + script_key + '88ac',\n script_asm : [ 'OP_DUP', 'OP_HASH160', script_key, 'OP_EQUALVERIFY', 'OP_CHECKSIG' ]\n }\n}\n\nfunction get_p2sh_script (script_key : string) {\n return {\n script_hex : 'a914' + script_key + '87',\n script_asm : [ 'OP_HASH160', script_key, 'OP_EQUAL' ]\n }\n}\n\nfunction get_p2w_pkh_script (script_key : string) {\n return {\n script_hex : '0014' + script_key,\n script_asm : [ 'OP_0', script_key ]\n }\n}\n\nfunction get_p2w_sh_script (script_key : string) {\n return {\n script_hex : '0020' + script_key,\n script_asm : [ 'OP_0', script_key ]\n }\n}\n\nfunction get_p2tr_script (script_key : string) {\n return {\n script_hex : '5120' + script_key,\n script_asm : [ 'OP_1', script_key ]\n }\n}\n","import { Buff } from '@vbyte/buff'\nimport { Assert } from '@vbyte/micro-lib'\nimport { hash160 } from '@vbyte/micro-lib/hash'\nimport { encode_address } from './encode.js'\n\nimport {\n get_address_config,\n parse_address\n} from './util.js'\n\nimport type {\n AddressData,\n ChainNetwork\n} from '@/types/index.js'\n\nconst ADDR_TYPE = 'p2pkh'\n\nexport namespace P2PKH {\n export const create = create_p2pkh_address\n export const encode = encode_p2pkh_address\n export const decode = decode_p2pkh_address\n}\n\nfunction create_p2pkh_address (\n script : string | Uint8Array,\n network : ChainNetwork = 'main',\n) : string {\n // Convert the script into bytes.\n const bytes = Buff.bytes(script)\n // Convert the bytes into a hash.\n const hash = hash160(bytes)\n // Encode the hash as an address.\n return encode_p2pkh_address(hash, network)\n}\n\nfunction encode_p2pkh_address (\n pk_hash : string | Uint8Array,\n network : ChainNetwork = 'main',\n) : string {\n // Convert the public key hash into bytes.\n const bytes = Buff.bytes(pk_hash)\n // Get the address configuration.\n const config = get_address_config(network, ADDR_TYPE)\n // Assert the configuration exists.\n Assert.exists(config, `unrecognized address config: ${ADDR_TYPE} on ${network}` )\n // Assert the payload size is correct.\n Assert.size(bytes, config.size, `invalid payload size: ${bytes.length} !== ${config.size}` )\n // Encode the address.\n return encode_address({\n data : bytes,\n format : 'base58',\n version : config.version\n })\n}\n\nfunction decode_p2pkh_address (\n address : string\n) : AddressData {\n // Parse the address.\n const parsed = parse_address(address)\n // Assert the address type is correct.\n Assert.ok(parsed.type === 'p2pkh', `address type mismatch: ${parsed.type} !== ${ADDR_TYPE}`)\n // Return the parsed address.\n return parsed\n}\n","import { Buff } from '@vbyte/buff'\nimport { Assert } from '@vbyte/micro-lib'\nimport { hash160 } from '@vbyte/micro-lib/hash'\nimport { encode_address } from './encode.js'\n\nimport {\n get_address_config,\n parse_address\n} from './util.js'\n\nimport type {\n ChainNetwork,\n AddressData\n} from '@/types/index.js'\n\nconst ADDR_TYPE = 'p2sh'\n\nexport namespace P2SH {\n export const create = create_p2sh_address\n export const encode = encode_p2sh_address\n export const decode = decode_p2sh_address\n}\n\nfunction create_p2sh_address (\n script : string | Uint8Array,\n network : ChainNetwork = 'main',\n) : string {\n // Convert the script into bytes.\n const bytes = Buff.bytes(script)\n // Convert the bytes into a hash.\n const hash = hash160(bytes)\n // Encode the address.\n return encode_p2sh_address(hash, network)\n}\n\nfunction encode_p2sh_address (\n script_hash : string | Uint8Array,\n network : ChainNetwork = 'main',\n) : string {\n // Convert the script hash into bytes.\n const bytes = Buff.bytes(script_hash)\n // Get the address configuration.\n const config = get_address_config(network, ADDR_TYPE)\n // Assert the configuration exists.\n Assert.exists(config, `unrecognized address config: ${ADDR_TYPE} on ${network}` )\n // Assert the payload size is correct.\n Assert.size(bytes, config.size, `invalid payload size: ${bytes.length} !== ${config.size}` )\n // Encode the address.\n return encode_address({\n data : bytes,\n format : 'base58',\n version : config.version\n })\n}\n\nfunction decode_p2sh_address (\n address : string\n) : AddressData {\n // Parse the address.\n const parsed = parse_address(address)\n // Assert the address type is correct.\n Assert.ok(parsed.type === 'p2sh', `address type mismatch: ${parsed.type} !== ${ADDR_TYPE}`)\n // Return the parsed address.\n return parsed\n}\n","import { Buff } from '@vbyte/buff'\nimport { Assert } from '@vbyte/micro-lib'\nimport { hash160 } from '@vbyte/micro-lib/hash'\nimport { encode_address } from './encode.js'\n\nimport {\n get_address_config,\n parse_address\n} from './util.js'\n\nimport type {\n AddressData,\n ChainNetwork\n} from '@/types/index.js'\n\nconst ADDR_TYPE = 'p2w-pkh'\n\nexport namespace P2WPKH {\n export const create = create_p2wpkh_address\n export const encode = encode_p2wpkh_address\n export const decode = decode_p2wpkh_address\n}\n\nfunction create_p2wpkh_address (\n pubkey : string | Uint8Array,\n network : ChainNetwork = 'main',\n) : string {\n // Convert the public key into bytes.\n const bytes = Buff.bytes(pubkey)\n // Assert the payload size is correct.\n Assert.size(bytes, 33, `invalid payload size: ${bytes.length} !== 33` )\n // Convert the bytes into a hash.\n const hash = hash160(bytes)\n // Encode the address.\n return encode_p2wpkh_address(hash, network)\n}\n\nfunction encode_p2wpkh_address (\n pk_hash : string | Uint8Array,\n network : ChainNetwork = 'main',\n) : string {\n // Convert the public key hash into bytes.\n const bytes = Buff.bytes(pk_hash)\n // Get the address configuration.\n const config = get_address_config(network, ADDR_TYPE)\n // Assert the configuration exists.\n Assert.exists(config, `unrecognized address config: ${ADDR_TYPE} on ${network}` )\n // Assert the payload size is correct.\n Assert.size(bytes, config.size, `invalid payload size: ${bytes.length} !== ${config.size}` )\n // Encode the address.\n return encode_address({\n data : bytes,\n format : 'bech32',\n prefix : config.prefix\n })\n}\n\nfunction decode_p2wpkh_address (\n address : string\n) : AddressData {\n // Parse the address.\n const parsed = parse_address(address)\n // Assert the address type is correct.\n Assert.ok(parsed.type === 'p2w-pkh', `address type mismatch: ${parsed.type} !== ${ADDR_TYPE}`)\n // Return the parsed address.\n return parsed\n}\n","import { Buff } from '@vbyte/buff'\nimport { Assert } from '@vbyte/micro-lib'\nimport { sha256 } from '@vbyte/micro-lib/hash'\nimport { encode_address } from './encode.js'\n\nimport {\n get_address_config,\n parse_address\n} from './util.js'\n\nimport type {\n ChainNetwork,\n AddressData\n} from '@/types/index.js'\n\nconst ADDR_TYPE = 'p2w-sh'\n\nexport namespace P2WSH {\n export const create = create_p2wsh_address\n export const encode = encode_p2wsh_address\n export const decode = decode_p2wsh_address\n}\n\nfunction create_p2wsh_address (\n script : string | Uint8Array,\n network : ChainNetwork = 'main',\n) : string {\n // Convert the script into bytes.\n const bytes = Buff.bytes(script)\n // Convert the bytes into a hash.\n const hash = sha256(bytes)\n // Encode the address.\n return encode_p2wsh_address(hash, network)\n}\n\nfunction encode_p2wsh_address (\n script_hash : string | Uint8Array,\n network : ChainNetwork = 'main',\n) : string {\n // Convert the script hash into bytes.\n const bytes = Buff.bytes(script_hash)\n // Get the address configuration.\n const config = get_address_config(network, ADDR_TYPE)\n // Assert the configuration exists.\n Assert.exists(config, `unrecognized address config: ${ADDR_TYPE} on ${network}` )\n // Assert the payload size is correct.\n Assert.size(bytes, config.size, `invalid payload size: ${bytes.length} !== ${config.size}` )\n // Encode the address.\n return encode_address({\n data : bytes,\n format : 'bech32',\n prefix : config.prefix\n })\n}\n\nfunction decode_p2wsh_address (\n address : string\n) : AddressData {\n // Parse the address.\n const parsed = parse_address(address)\n // Assert the address type is correct.\n Assert.ok(parsed.type === 'p2w-sh', `address type mismatch: ${parsed.type} !== ${ADDR_TYPE}`)\n // Return the parsed address.\n return parsed\n}\n","import { Buff } from '@vbyte/buff'\nimport { Assert } from '@vbyte/micro-lib'\nimport { encode_address } from './encode.js'\n\nimport {\n get_address_config,\n parse_address\n} from './util.js'\n\nimport type {\n ChainNetwork,\n AddressData\n} from '@/types/index.js'\n\nconst ADDR_TYPE = 'p2tr'\n\nexport namespace P2TR {\n export const encode = encode_p2tr_address\n export const decode = decode_p2tr_address\n}\n\nfunction encode_p2tr_address (\n pubkey : string | Uint8Array,\n network : ChainNetwork = 'main'\n) : string {\n // Convert the public key into bytes.\n const bytes = Buff.bytes(pubkey)\n // Get the address configuration.\n const config = get_address_config(network, ADDR_TYPE)\n // Assert the configuration exists.\n Assert.exists(config, `unrecognized address config: ${ADDR_TYPE} on ${network}` )\n // Assert the payload size is correct.\n Assert.size(bytes, config.size, `invalid payload size: ${bytes.length} !== ${config.size}` )\n // Encode the address.\n return encode_address({\n data : bytes,\n format : 'bech32m',\n prefix : config.prefix\n })\n}\n\nfunction decode_p2tr_address (\n address : string\n) : AddressData {\n // Parse the address.\n const parsed = parse_address(address)\n // Assert the address type is correct.\n Assert.ok(parsed.type === 'p2tr', `address type mismatch: ${parsed.type} !== ${ADDR_TYPE}`)\n // Return the parsed address.\n return parsed\n}\n","import { P2PKH as P2PKH_TOOL } from './p2pkh.js'\nimport { P2SH as P2SH_TOOL } from './p2sh.js'\nimport { P2WPKH as P2WPKH_TOOL } from './p2wpkh.js'\nimport { P2WSH as P2WSH_TOOL } from './p2wsh.js'\nimport { P2TR as P2TR_TOOL } from './p2tr.js'\n\nimport { parse_address } from './util.js'\n\nexport { P2PKH } from './p2pkh.js'\nexport { P2SH } from './p2sh.js'\nexport { P2WPKH } from './p2wpkh.js'\nexport { P2WSH } from './p2wsh.js'\nexport { P2TR } from './p2tr.js'\n\nexport { parse_address } from './util.js'\n\nexport namespace AddressTool {\n export const P2PKH = P2PKH_TOOL\n export const P2SH = P2SH_TOOL\n export const P2WPKH = P2WPKH_TOOL\n export const P2WSH = P2WSH_TOOL\n export const P2TR = P2TR_TOOL\n export const parse = parse_address\n}\n","import { Assert } from '@vbyte/micro-lib'\n\nimport type { LocktimeData } from '@/types/index.js'\n\n// The threshold between block height and timestamp.\nconst LOCKTIME_THRESHOLD = 500000000\n\nexport namespace LocktimeUtil {\n export const encode = encode_locktime\n export const decode = decode_locktime\n}\n\n/**\n * Encodes a LockTimeData object into a string representation.\n * According to BIP-65, the value is simply the numeric value as a string.\n */\nexport function encode_locktime (\n locktime : LocktimeData\n) : number {\n switch (locktime.type) {\n case 'timelock':\n Assert.ok(locktime.stamp >= LOCKTIME_THRESHOLD, 'Invalid timestamp')\n return locktime.stamp\n case 'heightlock':\n Assert.ok(locktime.height > 0, 'height must be greater than 0')\n Assert.ok(locktime.height < LOCKTIME_THRESHOLD, 'invalid block height')\n return locktime.height\n default:\n throw new Error('Invalid locktime type')\n }\n}\n\n/**\n * Parses a string or number into a LockTimeData object.\n * According to BIP-65, values below LOCKTIME_THRESHOLD are interpreted as block heights,\n * while values at or above this threshold are interpreted as timestamps.\n */\nexport function decode_locktime (\n locktime : number\n) : LocktimeData | null {\n // Check if the value is valid (non-negative)\n if (isNaN(locktime) || locktime <= 0) {\n return null\n }\n // Return the appropriate locktime type.\n if (locktime < LOCKTIME_THRESHOLD) {\n return {\n type : 'heightlock',\n height : locktime\n }\n } else {\n return {\n type : 'timelock',\n stamp : locktime\n }\n }\n}","export namespace RefEncoder {\n export const outpoint = {\n encode : encode_outpoint,\n decode : decode_outpoint,\n verify : verify_outpoint, \n assert : assert_outpoint,\n }\n export const record_id = {\n encode : encode_inscription_id,\n decode : decode_inscription_id,\n verify : verify_inscription_id,\n assert : assert_inscription_id,\n }\n export const rune_id = {\n encode : encode_rune_id,\n decode : decode_rune_id,\n verify : verify_rune_id,\n assert : assert_rune_id,\n }\n}\n\nfunction encode_inscription_id (\n txid : string,\n order : number = 0\n) : string {\n return `${txid}i${order}`\n}\n\nfunction decode_inscription_id (\n inscription_id : string\n) : { txid : string, order : number } {\n assert_inscription_id(inscription_id)\n const [ txid, order ] = inscription_id.split('i')\n return { txid, order : parseInt(order) }\n}\n\nfunction verify_inscription_id (\n inscription_id : string\n) : boolean {\n return inscription_id.match(/^[a-f0-9]{64}i\\d+$/) !== null\n}\n\nfunction assert_inscription_id (\n inscription_id : string\n) : void {\n if (!verify_inscription_id(inscription_id)) {\n throw new Error(`invalid inscription id: ${inscription_id}`)\n }\n}\n\nfunction encode_rune_id (\n block_height : number,\n block_index : number\n) : string {\n return `${block_height}:${block_index}`\n}\n\nfunction decode_rune_id (\n rune_id : string\n) : { block_height : number, block_index : number } {\n assert_rune_id(rune_id)\n const [ block_height, block_index ] = rune_id.split(':')\n return { block_height : parseInt(block_height), block_index : parseInt(block_index) }\n}\n\nfunction verify_rune_id (\n rune_id : string\n) : boolean {\n return rune_id.match(/^\\d+:\\d+$/) !== null\n}\n\nfunction assert_rune_id (\n rune_id : string\n) : void {\n if (!verify_rune_id(rune_id)) {\n throw new Error(`invalid rune id: ${rune_id}`)\n }\n}\n\nfunction encode_outpoint (\n txid : string,\n vout : number\n) : string {\n return `${txid}:${vout}`\n}\n\nfunction decode_outpoint (\n outpoint : string\n) : { txid : string, vout : number } {\n assert_outpoint(outpoint)\n const [ txid, vout ] = outpoint.split(':')\n return { txid, vout : parseInt(vout) }\n}\n\nfunction verify_outpoint (\n outpoint : string\n) : boolean {\n return outpoint.match(/^[a-f0-9]{64}:[0-9]+$/) !== null\n}\n\nfunction assert_outpoint (\n outpoint : string\n) : void {\n if (!verify_outpoint(outpoint)) {\n throw new Error(`invalid outpoint: ${outpoint}`)\n }\n}\n","export const OPCODE_MAP = {\n OP_0 : 0,\n OP_PUSHDATA1 : 76,\n OP_PUSHDATA2 : 77,\n OP_PUSHDATA4 : 78,\n OP_1NEGATE : 79,\n OP_SUCCESS80 : 80,\n OP_1 : 81,\n OP_2 : 82,\n OP_3 : 83,\n OP_4 : 84,\n OP_5 : 85,\n OP_6 : 86,\n OP_7 : 87,\n OP_8 : 88,\n OP_9 : 89,\n OP_10 : 90,\n OP_11 : 91,\n OP_12 : 92,\n OP_13 : 93,\n OP_14 : 94,\n OP_15 : 95,\n OP_16 : 96,\n OP_NOP : 97,\n OP_SUCCESS98 : 98,\n OP_IF : 99,\n OP_NOTIF : 100,\n OP_ELSE : 103,\n OP_ENDIF : 104,\n OP_VERIFY : 105,\n OP_RETURN : 106,\n OP_TOALTSTACK : 107,\n OP_FROMALTSTACK : 108,\n OP_2DROP : 109,\n OP_2DUP : 110,\n OP_3DUP : 111,\n OP_2OVER : 112,\n OP_2ROT : 113,\n OP_2SWAP : 114,\n OP_IFDUP : 115,\n OP_DEPTH : 116,\n OP_DROP : 117,\n OP_DUP : 118,\n OP_NIP : 119,\n OP_OVER : 120,\n OP_PICK : 121,\n OP_ROLL : 122,\n OP_ROT : 123,\n OP_SWAP : 124,\n OP_TUCK : 125,\n OP_SUCCESS126 : 126,\n OP_SUCCESS127 : 127,\n OP_SUCCESS128 : 128,\n OP_SUCCESS129 : 129,\n OP_SIZE : 130,\n OP_SUCCESS131 : 131,\n OP_SUCCESS132 : 132,\n OP_SUCCESS133 : 133,\n OP_SUCCESS134 : 134,\n OP_EQUAL : 135,\n OP_EQUALVERIFY : 136,\n OP_SUCCESS137 : 137,\n OP_SUCCESS138 : 138,\n OP_1ADD : 139,\n OP_1SUB : 140,\n OP_SUCCESS141 : 141,\n OP_SUCCESS142 : 142,\n OP_NEGATE : 143,\n OP_ABS : 144,\n OP_NOT : 145,\n OP_0NOTEQUAL : 146,\n OP_ADD : 147,\n OP_SUB : 148,\n OP_SUCCESS149 : 149,\n OP_SUCCESS150 : 150,\n OP_SUCCESS151 : 151,\n OP_SUCCESS152 : 152,\n OP_SUCCESS153 : 153,\n OP_BOOLAND : 154,\n OP_BOOLOR : 155,\n OP_NUMEQUAL : 156,\n OP_NUMEQUALVERIFY : 157,\n OP_NUMNOTEQUAL : 158,\n OP_LESSTHAN : 159,\n OP_GREATERTHAN : 160,\n OP_LESSTHANOREQUAL : 161,\n OP_GREATERTHANOREQUAL : 162,\n OP_MIN : 163,\n OP_MAX : 164,\n OP_WITHIN : 165,\n OP_RIPEMD160 : 166,\n OP_SHA1 : 167,\n OP_SHA256 : 168,\n OP_HASH160 : 169,\n OP_HASH256 : 170,\n OP_CODESEPARATOR : 171,\n OP_CHECKSIG : 172,\n OP_CHECKSIGVERIFY : 173,\n OP_CHECKMULTISIG : 174,\n OP_CHECKMULTISIGVERIFY : 175,\n OP_NOP1 : 176,\n OP_CHECKLOCKTIMEVERIFY : 177,\n OP_CHECKSEQUENCEVERIFY : 178,\n OP_NOP4 : 179,\n OP_NOP5 : 180,\n OP_NOP6 : 181,\n OP_NOP7 : 182,\n OP_NOP8 : 183,\n OP_NOP9 : 184,\n OP_NOP10 : 185,\n OP_CHECKSIGADD : 186\n}\n\n/** \n * Get the sting-representation of an opcode\n * based on its number value.\n */\nexport function get_op_code (num : number) : string {\n if (num > 186 && num < 255) {\n return 'OP_SUCCESS' + String(num)\n }\n for (const [ k, v ] of Object.entries(OPCODE_MAP)) {\n if (v === num) return k\n }\n throw new Error('OPCODE not found:' + String(num))\n}\n\n/** \n * Get the number-representation of an opcode\n * based on its asm string value.\n */\nexport function get_asm_code (string : string) : number {\n for (const [ k, v ] of Object.entries(OPCODE_MAP)) {\n if (k === string) return Number(v)\n }\n throw new Error('OPCODE not found:' + string)\n}\n\n/** \n * Get the type of word based on its number value.\n */\nexport function get_op_type (word : number) : string {\n switch (true) {\n case (word === 0):\n return 'opcode'\n case (word >= 1 && word <= 75):\n return 'varint'\n case (word === 76):\n return 'pushdata1'\n case (word === 77):\n return 'pushdata2'\n case (word === 78):\n return 'pushdata4'\n case (word <= 254):\n return 'opcode'\n default:\n throw new Error(`Invalid word range: ${word}`)\n }\n}\n\n/** \n * Check if the provided value is a valid script opcode.\n */\nexport function is_valid_op (word : number) : boolean {\n const MIN_RANGE = 75\n const MAX_RANGE = 254\n\n const DISABLED_OPCODES : number[] = []\n\n switch (true) {\n case (typeof (word) !== 'number'):\n return false\n case (word === 0):\n return true\n case (DISABLED_OPCODES.includes(word)):\n return false\n case (MIN_RANGE < word && word < MAX_RANGE):\n return true\n default:\n return false\n }\n}\n","import { Buff, Stream } from '@vbyte/buff'\nimport { get_asm_code, } from './words.js'\n\n// The maximum size of a word in bytes.\nconst MAX_WORD_SIZE = 520\n\n/**\n * Encode script asm instructions into a hex string.\n */\nexport function encode_script (\n words : (string | number | Uint8Array)[],\n varint = false\n) : string {\n if (words.length === 0) return '00'\n\n const bytes = []\n\n for (const word of words) {\n\n bytes.push(encode_script_word(word))\n }\n\n const buffer = Buff.join(bytes)\n\n return (varint)\n ? buffer.prepend(Buff.varint(buffer.length, 'le')).hex\n : buffer.hex\n}\n\n\n/** Check if the word is a valid opcode,\n * and return its integer value.\n */\nexport function encode_script_word (word : string | number | Uint8Array) : Uint8Array {\n let buff : Buff\n\n // If word is a string:\n if (typeof (word) === 'string') {\n // If word is an opcode:\n if (word.startsWith('OP_')) {\n // Get the opcode number value.\n const asm_code = get_asm_code(word)\n // Return the opcode as a single byte.\n return Buff.num(asm_code, 1)\n // If word is valid hex:\n } else if (Buff.is_hex(word)) {\n // Encode as hex.\n buff = Buff.hex(word)\n } else {\n // Encode as UTF8 string.\n buff = Buff.str(word)\n }\n // If word is a number:\n } else if (typeof (word) === 'number') {\n // Encode the number value.\n buff = Buff.num(word)\n // If word is a Uint8Array:\n } else if (word instanceof Uint8Array) {\n // Encode as bytes.\n buff = new Buff(word)\n } else {\n // If word is not a string, number, or Uint8Array, throw an error.\n throw new Error('invalid word type:' + typeof (word))\n }\n\n // Format and return the word based on its size.\n if (buff.length === 1 && buff[0] <= 16) {\n // Number values 0-16 must be treated as opcodes.\n if (buff[0] !== 0) buff[0] += 0x50\n } else if (buff.length > MAX_WORD_SIZE) {\n // Number values larger than max size must be split into chunks.\n let words : Buff[]\n // Split bytes into chunks, based on max word size.\n words = split_script_word(buff)\n // Prefix a varint length byte for each chunk.\n words = words.map(e => prefix_word_size(e))\n // Concatenate the chunks\n buff = Buff.join(words)\n } else {\n // Else, return the word with a varint prefix.\n buff = prefix_word_size(buff)\n }\n // Return the final result.\n return buff\n}\n\n/**\n * Split a word into smaller chunks.\n */\nexport function split_script_word (\n word : Uint8Array\n) : Buff[] {\n const words = []\n const buff = new Stream(word)\n while (buff.size > MAX_WORD_SIZE) {\n // Push a word chunk to the array.\n words.push(buff.read(MAX_WORD_SIZE))\n }\n // Push the remainder to the array.\n words.push(buff.read(buff.size))\n return words\n}\n\n/**\n * Prefix a word with its size, encoded as a varint.\n */\nexport function prefix_word_size (\n word : Uint8Array\n) : Buff {\n const varint = get_size_varint(word.length)\n return Buff.join([ varint, word ])\n}\n\n/**\n * Return a varint that encodes a size value.\n */\nexport function get_size_varint (size : number) : Buff {\n const OP_PUSHDATA1 = Buff.num(0x4c, 1)\n const OP_PUSHDATA2 = Buff.num(0x4d, 1)\n switch (true) {\n case (size <= 0x4b):\n return Buff.num(size)\n case (size > 0x4b && size < 0x100):\n return Buff.join([ OP_PUSHDATA1, Buff.num(size, 1, 'le') ])\n case (size >= 0x100 && size <= MAX_WORD_SIZE):\n return Buff.join([ OP_PUSHDATA2, Buff.num(size, 2, 'le') ])\n default:\n throw new Error('Invalid word size:' + size.toString())\n }\n}\n","import { Stream } from '@vbyte/buff'\n\nimport {\n get_op_code,\n get_op_type,\n is_valid_op\n} from './words.js'\n\n/**\n * Decode a bitcoin script into asm instructions.\n */\nexport function decode_script (\n script : string | Uint8Array\n) : string[] {\n const stream = new Stream(script)\n\n const stack : string[] = []\n const stack_size = stream.size\n\n let word : number\n let word_type : string\n let word_size : number\n\n let count = 0\n\n while (count < stack_size) {\n word = stream.read(1).num\n word_type = get_op_type(word)\n count++\n switch (word_type) {\n case 'varint':\n stack.push(stream.read(word).hex)\n count += word\n break\n case 'pushdata1':\n word_size = stream.read(1).reverse().num\n stack.push(stream.read(word_size).hex)\n count += word_size + 1\n break\n case 'pushdata2':\n word_size = stream.read(2).reverse().num\n stack.push(stream.read(word_size).hex)\n count += word_size + 2\n break\n case 'pushdata4':\n word_size = stream.read(4).reverse().num\n stack.push(stream.read(word_size).hex)\n count += word_size + 4\n break\n case 'opcode':\n if (!is_valid_op(word)) {\n throw new Error(`Invalid OPCODE: ${word}`)\n }\n stack.push(get_op_code(word))\n break\n default:\n throw new Error(`Word type undefined: ${word}`)\n }\n }\n return stack\n}\n\n/**\n * Check if a script is valid.\n */\nexport function is_valid_script (\n script : string | Uint8Array\n) : boolean {\n try {\n const stack = decode_script(script)\n return stack.length > 0\n } catch {\n return false\n }\n}\n","import { Buff, Stream } from '@vbyte/buff'\nimport { Assert } from '@vbyte/micro-lib'\nimport { encode_script } from '@/lib/script/encode.js'\nimport { decode_script } from '@/lib/script/decode.js'\n\nimport type { InscriptionData } from '@/types/index.js'\n\nconst _0n = BigInt(0)\nconst _1n = BigInt(1)\nconst _26n = BigInt(26)\n\nexport namespace ScribeEncoder {\n export const encode = encode_inscription\n export const decode = decode_inscription\n}\n\nexport function decode_inscription (\n script : string\n) : InscriptionData[] {\n const envelopes = parse_envelopes(script)\n return envelopes.map(parse_record)\n}\n\nexport function encode_inscription (data : InscriptionData[]) : string {\n return data.map(create_envelope).join('')\n}\n\nfunction create_envelope (data : InscriptionData) : string {\n let asm : string[] = [ 'OP_0', 'OP_IF', '6f7264' ]\n\n if (typeof data.delegate === 'string') {\n const id = encode_id(data.delegate)\n asm.push('OP_11', id)\n }\n\n if (typeof data.ref === 'string') {\n asm.push('OP_WITHIN', data.ref)\n }\n\n if (typeof data.parent === 'string') {\n const id = encode_id(data.parent)\n asm.push('OP_3', id)\n }\n\n if (typeof data.opcode === 'number') {\n const code = encode_pointer(data.opcode)\n asm.push('OP_NOP', code)\n }\n\n if (typeof data.pointer === 'number') {\n const ptr = encode_pointer(data.pointer)\n asm.push('OP_2', ptr)\n }\n\n if (typeof data.rune === 'string') {\n const label = encode_rune_label(data.rune)\n asm.push('OP_13', label)\n }\n\n if (typeof data.mimetype === 'string') {\n const label = encode_label(data.mimetype)\n asm.push('OP_1', label)\n }\n\n if (typeof data.content === 'string') {\n const chunks = encode_content(data.content)\n asm.push('OP_0', ...chunks)\n }\n\n asm.push('OP_ENDIF')\n\n return encode_script(asm)\n}\n\nfunction parse_envelopes (\n script : string\n) : string[][] {\n\n const words = decode_script(script)\n const start_idx = words.findIndex(e => e === 'OP_0')\n\n Assert.ok(start_idx !== -1, 'inscription envelope not found')\n\n const envelopes = []\n\n for (let idx = start_idx; idx < words.length; idx++) {\n Assert.ok(words[idx + 1] === 'OP_IF', 'OP_IF missing from envelope')\n Assert.ok(words[idx + 2] === '6f7264', 'magic bytes missing from envelope')\n\n const stop_idx = words.findIndex(e => e === 'OP_ENDIF')\n Assert.ok(stop_idx !== -1, 'inscription envelope missing END_IF statement')\n\n const env = words.slice(idx + 3, stop_idx)\n envelopes.push(env)\n idx += stop_idx\n }\n\n return envelopes\n}\n\nfunction parse_record (envelope : string[]) {\n const record : InscriptionData = {}\n\n for (let i = 0; i < envelope.length; i++) {\n switch (envelope[i]) {\n case 'OP_1':\n record.mimetype = decode_label(envelope[i+1])\n i += 1\n break\n case 'OP_2':\n record.pointer = decode_pointer(envelope[i+1])\n i += 1\n break\n case 'OP_3':\n record.parent = decode_id(envelope[i+1])\n i += 1\n break\n case 'OP_11':\n record.delegate = decode_id(envelope[i+1])\n i += 1\n break\n case 'OP_13':\n record.rune = decode_rune_label(envelope[i+1])\n i += 1\n break\n case 'OP_WITHIN':\n record.ref = envelope[i+1]\n i += 1\n break;\n case 'OP_NOP':\n record.opcode = decode_pointer(envelope[i+1])\n i += 1\n break;\n case 'OP_0':\n record.content = decode_content(envelope.slice(i+1))\n return record\n }\n }\n return record\n}\n\nfunction encode_id (\n identifier : string\n) : string {\n Assert.ok(identifier.includes('i'), 'identifier must include an index')\n const parts = identifier.split('i')\n const bytes = Buff.hex(parts[0])\n const idx = Number(parts[1])\n const txid = bytes.reverse().hex\n return (idx !== 0) ? txid + Buff.num(idx).hex : txid\n}\n\nfunction decode_id (\n hexstr : string\n) : string {\n const bytes = Buff.hex(hexstr)\n const idx = bytes.at(-1) ?? 0\n const txid = bytes.slice(0, -1).reverse().hex\n return txid + 'i' + String(idx)\n}\n\nfunction encode_pointer (\n pointer : number\n) : string {\n return Buff.num(pointer).reverse().hex\n}\n\nfunction decode_pointer (\n hexstr : string\n) : number {\n return Buff.hex(hexstr).reverse().num\n}\n\nfunction encode_label (\n label : string\n) : string {\n return Buff.str(label).hex\n}\n\nfunction decode_label (\n hexstr : string\n) : string {\n return Buff.hex(hexstr).str\n}\n\nfunction encode_content (\n content : string\n) : string[] {\n const bytes = Buff.is_hex(content)\n ? Buff.hex(content)\n : Buff.str(content)\n const stream = new Stream(bytes)\n const chunks : string[]= []\n while (stream.size > 0) {\n if (stream.size > 520) {\n const chunk = stream.read(520)\n chunks.push(chunk.hex)\n } else {\n const chunk = stream.read(stream.size)\n chunks.push(chunk.hex)\n }\n }\n return chunks\n}\n\nfunction decode_content (\n hexstrs : string[],\n type : 'hex' | 'utf8' = 'hex'\n) : string {\n const data = Buff.join(hexstrs)\n return (type === 'hex')\n ? data.hex\n : data.str\n}\n\nfunction encode_rune_label (label : string) : string {\n const str = label.toUpperCase()\n let big = _0n\n for (const char of str) {\n if (char >= 'A' && char <= 'Z') {\n big = big * _26n + BigInt(char.charCodeAt(0) - ('A'.charCodeAt(0) - 1))\n } else { continue }\n }\n big = big - _1n\n return Buff.big(big).reverse().hex\n}\n\nfunction decode_rune_label (hex: string): string {\n // Convert hex to BigInt, with byte order reversed\n let big = Buff.hex(hex).reverse().big\n // Add 1 as per the encoding algorithm\n big = big + _1n\n // Initialize result string\n let result = ''\n // Convert the BigInt back to a string of alphabet characters\n while (big > _0n) {\n // Get remainder after division by 26\n const mod = big % _26n\n // Convert remainder to character (0 maps to 'Z', 1 to 'A', 2 to 'B', etc.)\n if (mod === _0n) {\n result = 'Z' + result\n big = big / _26n - _1n // Adjust for special case of 'Z'\n } else {\n // Map 1 to 'A', 2 to 'B', etc.\n const charCode = Number(mod) + 'A'.charCodeAt(0) - 1\n result = String.fromCharCode(charCode) + result\n big = big / _26n\n }\n }\n return result\n}\n","/**\n * Bitcoin Transaction Sequence Field Manipulation\n * \n * This module provides functionality for encoding and decoding the sequence field in Bitcoin transactions.\n * The sequence field is a 32-bit integer that can be used for various purposes:\n * \n * 1. Relative timelocks (BIP-68).\n * 2. Custom protocol data.\n * \n * The implementation follows BIP-68 for timelock functionality, and extends it with a custom protocol\n * that allows additional metadata to be encoded in the sequence field (to be used by on-chain indexers).\n */\n\nimport type { SequenceConfig, SequenceData } from '@/types/index.js'\n\n/* ===== [ Constants ] ===================================================== */\n\nconst TIMELOCK_DISABLE = 0x80000000 // Bit 31: When set, disables relative timelock per BIP-68.\nconst TIMELOCK_TYPE = 0x00400000 // Bit 22: When set, indicates timestamp-based lock; when clear, indicates block-height-based lock.\nconst TIMELOCK_VALUE_MASK = 0x0000FFFF // Bits 0-15: Mask for extracting timelock value (16 bits).\nconst TIMELOCK_VALUE_MAX = 0xFFFF // Maximum value for timelock (2^16 - 1).\nconst TIMELOCK_GRANULARITY = 512 // Seconds per timestamp unit (BIP-68 specification).\n\n/* ===== [ API ] ============================================================ */\n\nexport namespace SequenceUtil {\n export const encode = encode_sequence\n export const decode = decode_sequence\n}\n\n/* ===== [ Encoder ] ======================================================== */\n\n/**\n * Encodes a SequenceData object into a 32-bit integer sequence value\n * \n * @param data - The sequence data to encode\n * @returns A 32-bit integer representing the encoded sequence\n * @throws Error if the input data is invalid or exceeds maximum values\n */\nexport function encode_sequence (data : SequenceConfig): number {\n // If the timelock is based on a block height,\n if (data.mode === 'height') {\n // Validate the height value.\n const height = parse_height(data.height)\n // For heightlock, only encode the height value (TIMELOCK_TYPE bit remains clear)\n return (height & TIMELOCK_VALUE_MASK) >>> 0\n }\n // If the timelock is based on a timestamp,\n if (data.mode === 'stamp') {\n // Convert timestamp to 512-second granularity units as per BIP-68.\n const stamp = parse_stamp(data.stamp)\n // Set the TIMELOCK_TYPE bit and encode the timestamp value.\n return (TIMELOCK_TYPE | (stamp & TIMELOCK_VALUE_MASK)) >>> 0\n }\n // Throw an error if the mode is unrecognized.\n throw new Error('invalid timelock mode: ' + data.mode)\n}\n\n/* ===== [ Decoder ] ========================================================= */\n\n/**\n * Decodes a 32-bit sequence value into a SequenceData object\n * \n * @param sequence - The 32-bit sequence value to decode\n * @returns A SequenceData object or null if the sequence doesn't represent special data\n * @throws Error if the sequence value is invalid or exceeds maximum values\n */\nexport function decode_sequence (sequence: number | string) : SequenceData | null {\n // Parse and validate the sequence value.\n const seq = parse_sequence(sequence)\n // If the sequence is disabled, return null.\n if (seq & TIMELOCK_DISABLE) return null\n // Extract the value.\n const value = seq & TIMELOCK_VALUE_MASK\n // Check for timestamp-based lock (TIMELOCK_TYPE bit is set).\n if (seq & TIMELOCK_TYPE) {\n // Convert granularity units back to seconds for timestamp.\n const stamp = value * TIMELOCK_GRANULARITY\n // Validate the timestamp value.\n if (stamp > 0xFFFFFFFF) {\n throw new Error('Decoded timestamp exceeds 32-bit limit')\n }\n // Return the decoded timelock.\n return { mode: 'stamp', stamp }\n } else {\n // Validate the height value.\n if (value > TIMELOCK_VALUE_MAX) {\n throw new Error('Decoded height exceeds maximum')\n }\n // Return the decoded heightlock.\n return { mode: 'height', height: value }\n }\n}\n\n/* ===== [ Helpers ] ========================================================= */\n\n/**\n * Parses a sequence value into a number.\n * \n * @param sequence - The sequence value to parse.\n * @returns The parsed sequence value.\n * @throws Error if the sequence value is invalid.\n */\nfunction parse_sequence (sequence: number | string): number {\n const seq = (typeof sequence === 'string')\n ? parseInt(sequence, 16)\n : sequence\n if (!Number.isInteger(seq) || seq < 0 || seq > 0xFFFFFFFF) {\n throw new Error(`invalid sequence value: ${seq}`)\n }\n return seq\n}\n\n/**\n * Parses a timestamp value into a 512-second granularity units.\n * \n * @param stamp - The timestamp value to parse.\n * @returns The parsed timestamp value.\n * @throws Error if the timestamp value is invalid.\n */\nfunction parse_stamp (stamp? : number) : number {\n if (stamp === undefined || !Number.isInteger(stamp)) {\n throw new Error(`timestamp must be a number`)\n }\n // Convert timestamp to 512-second granularity units as per BIP-68.\n const ts = Math.floor(stamp / TIMELOCK_GRANULARITY)\n // Validate the timestamp value.\n if (!Number.isInteger(ts) || ts < 0 || ts > TIMELOCK_VALUE_MAX) {\n throw new Error(`timelock value must be an integer between 0 and ${TIMELOCK_VALUE_MAX} (in 512-second increments)`)\n }\n return ts\n}\n\n/**\n * Parses a height value into a number.\n * \n * @param height - The height value to parse.\n * @returns The parsed height value.\n * @throws Error if the height value is invalid.\n */\nfunction parse_height (height? : number) : number {\n if (height === undefined || !Number.isInteger(height) || height < 0 || height > TIMELOCK_VALUE_MAX) {\n throw new Error(`Heightlock value must be an integer between 0 and ${TIMELOCK_VALUE_MAX}`)\n }\n return height\n}\n","import { OPCODE_MAP } from './words.js'\nimport { encode_script } from './encode.js'\n\nimport {\n decode_script,\n is_valid_script\n} from './decode.js'\n\nimport {\n parse_script_pubkeys,\n prefix_script_size\n} from './util.js'\n\nexport * from './decode.js'\nexport * from './encode.js'\nexport * from './util.js'\nexport * from './words.js'\n\nexport namespace ScriptUtil {\n export const prefix_size = prefix_script_size\n export const decode = decode_script\n export const encode = encode_script\n export const is_valid = is_valid_script\n export const get_pubkeys = parse_script_pubkeys\n export const OPCODES = OPCODE_MAP\n}\n","import { Buff } from '@vbyte/buff'\n\nexport function prefix_script_size (script: string | Uint8Array): string {\n return Buff.bytes(script).prefix_varint('le').hex\n}\n\nexport function parse_script_pubkeys (script: string | Uint8Array): string[] {\n // Convert the script to a string if it's a Uint8Array\n const scriptHex = typeof script === 'string' ? script : Buff.bytes(script).hex\n \n // Define the regex pattern to match the specified pattern\n // 20 = pushdata byte for 32 bytes (0x20)\n // [0-9a-f]{64} = 32-byte hex string (64 hex characters)\n // (ac|ad|ba) = OP_CHECKSIG (0xac), OP_CHECKSIGVERIFY (0xad), or OP_CHECKSIGADD (0xba)\n const pubkeyPattern = /20([0-9a-f]{64})(ac|ad|ba)/gi\n \n // Find all matches in the script\n const matches = [...scriptHex.matchAll(pubkeyPattern)]\n \n // Extract the public keys from the matches\n return matches.map(match => match[1])\n}\n\n// export function parse_witness_pubkeys (\n// witness : string[] | TxWitnessData\n// ) : string[] {\n// // Parse the witness data if it is an array.\n// if (witness instanceof Array) {\n// witness = parse_witness_data(witness)\n// }\n// // Define the set of pubkeys.\n// const pubkeys = new Set<string>()\n// // Get the witness type.\n// const type = witness.type\n// // If the witness type is a p2tr-ts:\n// if (type === 'p2tr-ts') {\n// // Parse the internal pubkey from the cblock.\n// const int_pk = witness.cblock?.slice(2, 66)\n// // If the internal pubkey is present, add it to the list.\n// if (int_pk !== undefined) pubkeys.add(int_pk)\n// // Parse any pubkeys witness parameters.\n// witness.params\n// .filter(p => p.length === 64)\n// .forEach(p => pubkeys.add(p))\n// // Parse any pubkeys from the script.\n// parse_taproot_pubkeys(witness.script!)\n// .forEach(p => pubkeys.add(p))\n// // If the witness type is a p2w-pkh:\n// } else if (type === 'p2w-pkh') {\n// // Parse the witness parameter pubkey.\n// const params_pk = witness.params.find(p => p.length === 66)\n// // If the parameter pubkey is present, add it to the list.\n// if (params_pk !== undefined) pubkeys.add(params_pk)\n// // If the witness type is a p2w-sh:\n// } else if (type === 'p2w-sh') {\n// // Parse any witness parameter pubkeys.\n// witness.params\n// .filter(p => p.length === 66)\n// .forEach(p => pubkeys.add(p))\n// // Parse any script pubkeys.\n// parse_segwit_pubkeys(witness.script!)\n// .forEach(p => pubkeys.add(p))\n// }\n// // Return the list of pubkeys.\n// return Array.from(pubkeys)\n// }\n\n// function parse_segwit_pubkeys (script : string) : string[] {\n// const regex = /21([0-9a-f]{66})(ac|ad)/gi\n// const matches = [...script.matchAll(regex)]\n// return matches.map(match => match[1])\n// }\n\n// function parse_taproot_pubkeys (script : string) : string[] {\n// const regex = /20([0-9a-f]{64})(ac|ad|ba)/gi\n// const matches = [...script.matchAll(regex)]\n// return matches.map(match => match[1])\n// }\n","import { Buff } from '@vbyte/buff'\nimport { Assert } from '@vbyte/micro-lib'\nimport { sha256 } from '@vbyte/micro-lib/hash'\n\nimport type {\n SigHashOptions,\n TxInput,\n TxData,\n TxOutput,\n} from '@/types/index.js'\n\nexport function get_prevout (vin : TxInput) : TxOutput {\n Assert.exists(vin.prevout, 'Prevout data missing for input: ' + String(vin.txid))\n return vin.prevout\n}\n\nexport function parse_txinput (\n txdata : TxData,\n config ?: SigHashOptions\n) : TxInput {\n let { txindex, txinput } = config ?? {}\n if (txindex !== undefined) {\n if (txindex >= txdata.vin.length) {\n // If index is out of bounds, throw error.\n throw new Error('Input index out of bounds: ' + String(txindex))\n }\n txinput = txdata.vin.at(txindex)\n }\n Assert.ok(txinput !== undefined)\n return txinput\n}\n\nexport function get_annex_data (\n witness ?: string[]\n) : Buff | undefined {\n // If no witness exists, return undefined.\n if (witness === undefined) return\n // If there are less than two elements, return undefined.\n if (witness.length < 2) return\n // Define the last element as the annex.\n const annex = witness.at(-1)\n // If the annex is a string and starts with '50',\n if (typeof annex === 'string' && annex.startsWith('50')) {\n // Convert the annex to a buffer with a varint prefix.\n const bytes = Buff.hex(annex).prefix_varint('be')\n // Return the sha256 of the annex.\n return sha256(bytes)\n }\n // Else, return undefined.\n return undefined\n}\n","export const COINBASE = {\n TXID : '00'.repeat(32),\n VOUT : 0xFFFFFFFF,\n}\n\nexport const DEFAULT = {\n LOCKTIME : 0,\n SEQUENCE : 0xFFFFFFFF,\n VERSION : 2,\n}\n\nexport const TAPLEAF_VERSIONS = [\n 0xc0, 0xc2, 0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce,\n 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde,\n 0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee,\n 0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc, 0xfe,\n 0x66, 0x7e, 0x80, 0x84, 0x96, 0x98, 0xba, 0xbc,\n 0xbe\n]\n\nexport const TAPLEAF_DEFAULT_VERSION = 0xc0\n\nexport const LOCK_SCRIPT_REGEX : Record<string, RegExp> = {\n 'p2pkh' : /^76a914[0-9a-f]{40}88ac$/i,\n 'p2sh' : /^a914[0-9a-f]{40}87$/i,\n 'p2wpkh' : /^0014[0-9a-f]{40}$/i,\n 'p2wsh' : /^0020[0-9a-f]{64}$/i,\n 'p2tr' : /^5120[0-9a-f]{64}$/i,\n 'opreturn' : /^6a[0-9a-f]{2,}$/i,\n}\n\nexport const SCRIPT_INT_KEY = ''\n\nexport const TX_SIZE = {\n GLOBAL_BASE : 8,\n GLOBAL_WIT : 10,\n TXIN_BASE : 32 + 4 + 4,\n TXOUT_BASE : 8,\n}\n\nexport const SIGHASH_DEFAULT = 0x01\nexport const SIGHASH_SEGWIT = [ 0x01, 0x02, 0x03, 0x81, 0x82, 0x83 ]\nexport const SIGHASH_TAPROOT = [ 0x00, ...SIGHASH_SEGWIT ]\n","import { z } from 'zod'\n\nimport { byte32, uint } from '@vbyte/micro-lib/schema'\n\nexport const taptree = z.union([ z.array(byte32), byte32 ])\n\nexport const config = z.object({\n pubkey : byte32,\n leaves : taptree.array().optional(),\n target : byte32.optional(),\n version : uint.optional(),\n})\n","import { z } from 'zod'\n\nimport { hex, hex32, uint } from '@vbyte/micro-lib/schema'\n\nimport type { TxOutput, TxOutputTemplate } from '@/types/index.js'\n\nconst sats = z.bigint().min(0n).max(2_100_000_000_000_000n)\n\nexport const tx_output = z.object({\n value : sats,\n script_pk : hex,\n}) satisfies z.ZodType<TxOutput>\n\nexport const tx_input = z.object({\n coinbase : hex.nullable(),\n txid : hex32,\n vout : uint,\n prevout : tx_output.nullable(),\n script_sig : hex.nullable(),\n sequence : uint,\n witness : z.array(hex)\n})\n\nexport const tx_data = z.object({\n version : uint,\n vin : z.array(tx_input),\n vout : z.array(tx_output),\n locktime : uint,\n})\n\nexport const vout_template = tx_output.extend({\n value : z.union([ uint, sats ])\n}) satisfies z.ZodType<TxOutputTemplate>\n\nexport const vin_template = tx_input.extend({\n coinbase : hex.nullable().optional(),\n prevout : vout_template.nullable().optional(),\n script_sig : hex.nullable().optional(),\n sequence : z.union([ hex, uint ]).optional(),\n witness : z.array(hex).optional(),\n})\n\nexport const tx_template = z.object({\n version : uint.optional(),\n vin : z.array(vin_template),\n vout : z.array(vout_template),\n locktime : uint.optional(),\n})\n","import * as Schema from '@/schema/index.js'\n\nimport {\n TxSpendInput,\n TxData,\n TxInput,\n TxInputTemplate,\n TxOutput,\n TxTemplate,\n TxOutputTemplate,\n TxSpendData,\n} from '@/types/index.js'\n\nexport function assert_tx_template (txdata : unknown) : asserts txdata is TxTemplate {\n Schema.tx.tx_template.parse(txdata)\n}\n\nexport function assert_has_prevouts (vin : TxInput[]) : asserts vin is TxSpendInput[] {\n if (vin.some(txin => txin.prevout === null)) {\n throw new Error('transaction missing prevouts')\n }\n}\n\nexport function assert_tx_data (txdata : unknown) : asserts txdata is TxData {\n Schema.tx.tx_data.parse(txdata)\n}\n\nexport function assert_tx_spend_data (txdata : unknown) : asserts txdata is TxSpendData {\n // Assert the txdata is a valid tx data object.\n assert_tx_data(txdata)\n // Assert the txdata has prevouts.\n assert_has_prevouts(txdata.vin)\n}\n\nexport function assert_tx_input (tx_input : unknown) : asserts tx_input is TxInput {\n Schema.tx.tx_input.parse(tx_input)\n}\n\nexport function assert_tx_output (tx_output : unknown) : asserts tx_output is TxOutput {\n Schema.tx.tx_output.parse(tx_output)\n}\n\nexport function assert_vin_template (vin : unknown) : asserts vin is TxInputTemplate {\n Schema.tx.vin_template.parse(vin)\n}\n\nexport function assert_vout_template (vout : unknown) : asserts vout is TxOutputTemplate {\n Schema.tx.vout_template.parse(vout)\n}\n","import { Buff } from '@vbyte/buff'\nimport { Assert } from '@vbyte/micro-lib'\nimport { assert_tx_data } from './validate.js'\nimport { COINBASE } from '@/const.js'\n\nimport {\n TxInput,\n TxOutput,\n TxData\n} from '@/types/index.js'\n\nexport function encode_tx (\n txdata : TxData,\n use_segwit = true\n) : Buff {\n // Assert the txdata is a valid tx data object.\n assert_tx_data(txdata)\n // Unpack the transaction data.\n const { version, vin, vout, locktime } = txdata\n // Create a buffer for the transaction.\n const buffer : Buff[] = [ encode_tx_version(version) ]\n // If the transaction is a segwit transaction,\n if (use_segwit) {\n // Add the segwit marker to the buffer.\n buffer.push(Buff.hex('0001'))\n }\n // Add the inputs to the buffer.\n buffer.push(encode_tx_inputs(vin))\n // Add the outputs to the buffer.\n buffer.push(encode_tx_outputs(vout))\n // If the transaction is a segwit transaction,\n if (use_segwit) {\n // For each input in the transaction,\n for (const input of vin) {\n // Add the witness data to the buffer.\n buffer.push(encode_vin_witness(input.witness))\n }\n }\n // Add the locktime to the buffer.\n buffer.push(encode_tx_locktime(locktime))\n // Return the buffer as a single payload. \n return Buff.join(buffer)\n}\n\nexport function encode_tx_version (num : number) : Buff {\n // Encode the transaction version as a 4-byte little-endian number.\n return Buff.num(num, 4).reverse()\n}\n\nexport function encode_txin_txid (txid : string) : Buff {\n // Encode the transaction ID as a 32-byte little-endian number.\n return Buff.hex(txid, 32).reverse()\n}\n\nexport function encode_txin_vout (vout : number) : Buff {\n // Encode the output index as a 4-byte little-endian number.\n return Buff.num(vout, 4).reverse()\n}\n\nexport function encode_txin_sequence (sequence : number) : Buff {\n // Encode the sequence number as a 4-byte little-endian number.\n return Buff.num(sequence, 4).reverse()\n}\n\nexport function encode_tx_inputs (vin : TxInput[]) : Buff {\n // Create a buffer for the inputs, starting with the array length.\n const raw : Buff[] = [ Buff.varint(vin.length, 'le') ]\n // For each input in the array,\n for (const input of vin) {\n // Encode the input, and add it to the buffer.\n raw.push(encode_vin(input))\n }\n // Return the buffer as a single payload.\n return Buff.join(raw)\n}\n\nexport function encode_vin (txin : TxInput) : Buff {\n // If the input is a coinbase,\n if (txin.coinbase !== null) {\n // Encode and return the coinbase as a single payload.\n return Buff.join([\n encode_txin_txid(COINBASE.TXID),\n encode_txin_vout(COINBASE.VOUT),\n encode_script_data(txin.coinbase),\n encode_txin_sequence(txin.sequence)\n ])\n } else {\n // Encode and return the input as a single payload.\n return Buff.join([\n encode_txin_txid(txin.txid),\n encode_txin_vout(txin.vout),\n encode_script_data(txin.script_sig),\n encode_txin_sequence(txin.sequence)\n ])\n }\n}\n\nexport function encode_vout_value (value : bigint) : Buff {\n // Encode the value as an 8-byte little-endian number.\n return Buff.big(value, 8).reverse()\n}\n\nexport function encode_tx_outputs (vout : TxOutput[]) : Buff {\n // Create a buffer for the outputs, starting with the array length.\n const buffer : Buff[] = [ Buff.varint(vout.length, 'le') ]\n // For each output in the array,\n for (const output of vout) {\n // Encode the output, and add it to the buffer.\n buffer.push(encode_tx_vout(output))\n }\n // Return the buffer as a single payload.\n return Buff.join(buffer)\n}\n\nexport function encode_tx_vout (txout : TxOutput) : Buff {\n // Get the value and script pubkey from the output.\n const { value, script_pk } = txout\n // Return the data encoded as a single payload.\n return Buff.join([\n encode_vout_value(value),\n encode_script_data(script_pk)\n ])\n}\n\nexport function encode_vin_witness (data : string[]) : Buff {\n // Create a buffer for the witness data, starting with the array length.\n const buffer : Buff[] = [ Buff.varint(data.length) ]\n // For each parameter in the witness array,\n for (const param of data) {\n // Encode the parameter, and add it to the buffer.\n buffer.push(encode_script_data(param))\n }\n // Return the buffer as a single payload.\n return Buff.join(buffer)\n}\n\nexport function encode_tx_locktime (locktime : number) : Buff {\n // Encode the locktime as a 4-byte little-endian number.\n return Buff.num(locktime, 4).reverse()\n}\n\nexport function encode_script_data (\n script : string | null\n) : Buff {\n // If the script is not null,\n if (script !== null) {\n // Assert that the script is a hex string.\n Assert.is_hex(script)\n // Encode the script, and add it to the buffer.\n return Buff.hex(script).prefix_varint('le')\n } else {\n // Return a single byte of zero.\n return Buff.hex('00')\n }\n}\n","import { Buff } from '@vbyte/buff'\nimport { Test } from '@vbyte/micro-lib'\nimport { Assert } from '@vbyte/micro-lib/assert'\nimport { hash256 } from '@vbyte/micro-lib/hash'\nimport { encode_tx } from './encode.js'\nimport { assert_tx_template } from './validate.js'\n\nimport { DEFAULT, LOCK_SCRIPT_REGEX } from '@/const.js'\n\nimport type {\n TxData,\n TxOutput,\n TxOutputInfo,\n TxOutputTemplate,\n TxOutputType,\n TxValue,\n WitnessVersion\n} from '@/types/index.js'\n\nexport function is_return_script (script : string) : boolean {\n return script.startsWith('6a')\n}\n\nexport function get_vout_info (txout : TxOutput) : TxOutputInfo {\n return {\n type : get_vout_type(txout.script_pk),\n version : get_vout_version(txout.script_pk)\n }\n}\n\nexport function get_vout_type (\n script : string\n) : TxOutputType {\n for (const [ type, regex ] of Object.entries(LOCK_SCRIPT_REGEX)) {\n if (regex.test(script)) return type as TxOutputType\n }\n return 'unknown'\n}\n\nexport function get_vout_version (\n script : string\n) : WitnessVersion {\n const wit_ver = script.slice(0, 4)\n switch (wit_ver) {\n case '0014' : return 0\n case '5120' : return 1\n default : return null\n }\n}\n\nexport function get_txid (\n txdata : TxData\n) : string {\n assert_tx_template(txdata)\n const data = encode_tx(txdata, false)\n return hash256(data).reverse().hex\n}\n\nexport function get_txhash (\n txdata : TxData\n) : string {\n assert_tx_template(txdata)\n const data = encode_tx(txdata, true)\n return hash256(data).reverse().hex\n}\n\nexport function get_tx_value (\n txdata : TxData\n) : TxValue {\n const vin = txdata.vin.reduce((acc, txin) => acc + (txin.prevout?.value ?? 0n), 0n)\n const vout = txdata.vout.reduce((acc, txout) => acc + txout.value, 0n)\n const fees = (vin > vout) ? (vin - vout) : 0n\n return { fees, vin, vout }\n}\n\nexport function get_prevouts (txdata : TxData) : TxOutput[] {\n // Assert the structure of the transaction data is valid.\n assert_tx_template(txdata)\n // Collect the prevouts from the transaction.\n const prevouts = txdata.vin.map(e => e.prevout)\n // Assert that all the prevouts are defined.\n Assert.ok(prevouts.every(e => e !== null), 'prevouts missing from tx')\n // Return the array of prevouts.\n return prevouts\n}\n\nexport function normalize_sequence (sequence? : number | string | null) : number {\n // If sequence is not defined, return a default sequence value.\n if (!Test.exists(sequence)) return DEFAULT.SEQUENCE\n // If sequence is a hex string, decode it and return the number value.\n if (Test.is_hex(sequence)) return Buff.hex(sequence as string, 4).reverse().num\n // If sequence is a valid unsigned integer, return the value.\n if (Test.is_uint(sequence)) return sequence\n // Else, throw an error.\n throw new Error('invalid sequence value: ' + String(sequence))\n}\n\nexport function normalize_value (value : number | bigint) : bigint {\n // If value is a unsigned integer, return it as a bigint.\n if (Test.is_uint(value)) return BigInt(value)\n // If value is a bigint, return it as-is.\n if (typeof value === 'bigint') return value\n // Else, throw an error.\n throw new TypeError('invalid output value: ' + String(value))\n}\n\nexport function normalize_prevout (prevout : TxOutputTemplate) : TxOutput {\n // Return the output with a normalized value.\n return { script_pk: prevout.script_pk, value: normalize_value(prevout.value) }\n}\n","import { Assert } from '@vbyte/micro-lib'\nimport { COINBASE, DEFAULT } from '@/const.js'\n\nimport {\n normalize_prevout,\n normalize_sequence,\n normalize_value\n} from './util.js'\n\nimport {\n assert_tx_template,\n assert_vin_template,\n assert_vout_template\n} from './validate.js'\n\nimport type {\n TxData,\n TxInput,\n TxOutput,\n TxTemplate,\n TxSpendInput,\n TxCoinbaseInput,\n TxOutputTemplate,\n TxVirtualInput,\n TxInputTemplate\n} from '@/types/index.js'\n\nexport function create_coinbase_input (\n config : TxInputTemplate\n) : TxCoinbaseInput {\n assert_vin_template(config)\n Assert.exists(config.coinbase, 'coinbase is required')\n const txid = COINBASE.TXID\n const vout = COINBASE.VOUT\n const coinbase = config.coinbase\n const witness = config.witness ?? []\n const sequence = normalize_sequence(config.sequence)\n return { coinbase, prevout: null, script_sig: null, sequence, witness, txid, vout }\n}\n\nexport function create_virtual_input (\n config : TxInputTemplate\n) : TxVirtualInput {\n assert_vin_template(config)\n Assert.is_empty(config.coinbase, 'coinbase is not allowed')\n Assert.is_empty(config.prevout, 'prevout is not allowed')\n const { txid, vout, script_sig = null, witness = [] } = config\n const sequence = normalize_sequence(config.sequence)\n return { txid, vout, coinbase: null, prevout: null, script_sig, sequence, witness }\n}\n\nexport function create_spend_input (\n config : TxInputTemplate\n) : TxSpendInput {\n assert_vin_template(config)\n Assert.exists(config.prevout, 'prevout is required')\n const { txid, vout, script_sig = null, witness = [] } = config\n const prevout = normalize_prevout(config.prevout)\n const sequence = normalize_sequence(config.sequence)\n return { txid, vout, coinbase: null, prevout, script_sig, sequence, witness }\n}\n\nexport function create_tx_input (\n config : TxInputTemplate\n) : TxInput {\n if (config.coinbase) return create_coinbase_input(config)\n if (config.prevout) return create_spend_input(config)\n return create_virtual_input(config)\n}\n\nexport function create_tx_output (\n config : TxOutputTemplate\n) : TxOutput {\n assert_vout_template(config)\n const script_pk = config.script_pk\n const value = normalize_value(config.value)\n return { script_pk, value }\n}\n\nexport function create_tx (\n config? : Partial<TxTemplate>\n) : TxData {\n assert_tx_template(config)\n const { vin = [], vout = [] } = config ?? { vin: [], vout: [] }\n const locktime = config.locktime ?? DEFAULT.LOCKTIME\n const version = config.version ?? DEFAULT.VERSION\n const inputs = vin.map(txin => create_tx_input(txin))\n const outputs = vout.map(txout => create_tx_output(txout))\n return { locktime, vin : inputs, vout : outputs, version }\n}\n","import { Stream } from '@vbyte/buff'\nimport { Assert } from '@vbyte/micro-lib/assert'\nimport { parse_error } from '@vbyte/micro-lib/util'\nimport { COINBASE } from '@/const.js'\n\nimport {\n TxInput,\n TxOutput,\n TxCoinbaseInput,\n TxVirtualInput,\n TxDecodedData\n} from '@/types/index.js'\n\nexport function decode_tx (\n txdata : string | Uint8Array,\n use_segwit = true\n) : TxDecodedData {\n // Assert the txdata is a bytes object.\n Assert.is_bytes(txdata, 'txdata must be hex or bytes')\n // Setup a byte-stream.\n const stream = new Stream(txdata)\n // Parse tx version.\n const version = read_version(stream)\n // Check and enable any flags that are set.\n const has_witness = (use_segwit)\n ? check_witness_flag(stream)\n : false\n // Parse our inputs and outputs.\n const vin = read_inputs(stream)\n const vout = read_outputs(stream)\n // If witness flag is set, parse witness data.\n if (has_witness) {\n for (const txin of vin) {\n txin.witness = read_witness(stream)\n }\n }\n // Parse locktime.\n const locktime = read_locktime(stream)\n // Return transaction object with calculated fields.\n return { version, vin, vout, locktime }\n}\n\nfunction read_version (stream : Stream) : number {\n return stream.read(4).reverse().to_num()\n}\n\nfunction check_witness_flag (stream : Stream) : boolean {\n const [ marker, flag ] : number[] = [ ...stream.peek(2) ]\n if (marker === 0) {\n stream.read(2)\n if (flag === 1) {\n return true\n } else {\n throw new Error(`Invalid witness flag: ${flag}`)\n }\n }\n return false\n}\n\nfunction read_inputs (stream : Stream) : TxInput[] {\n const inputs = []\n const vinCount = stream.varint()\n for (let i = 0; i < vinCount; i++) {\n const txinput = read_vin(stream)\n inputs.push(txinput)\n }\n return inputs\n}\n\nfunction read_vin (stream : Stream) : TxInput {\n const txid = stream.read(32).reverse().hex\n const vout = stream.read(4).reverse().num\n const script_sig = read_payload(stream)\n const sequence = stream.read(4).reverse().num\n const witness : string[] = []\n if (txid === COINBASE.TXID && vout === COINBASE.VOUT) {\n return { coinbase : script_sig, prevout: null, script_sig : null, sequence, txid, vout, witness } as TxCoinbaseInput\n } else {\n return { coinbase : null, prevout: null, script_sig, sequence, txid, vout, witness } as TxVirtualInput\n }\n}\n\nfunction read_outputs (stream : Stream) : TxOutput[] {\n const outputs = []\n const vcount = stream.varint()\n for (let i = 0; i < vcount; i++) {\n try {\n outputs.push(read_vout(stream))\n } catch (error) {\n throw new Error(`failed to decode output: ${i}: ${parse_error(error)}`)\n }\n }\n return outputs\n}\n\nfunction read_vout (stream : Stream) : TxOutput {\n const value = stream.read(8).reverse().big\n const script_pk = read_payload(stream)\n Assert.exists(script_pk, 'failed to decode script_pk')\n return { value, script_pk }\n}\n\nfunction read_witness (stream : Stream) : string[] {\n const stack = []\n const count = stream.varint()\n for (let i = 0; i < count; i++) {\n const element = read_payload(stream)\n if (element === null) {\n throw new Error('failed to decode witness element: ' + i)\n }\n stack.push(element)\n }\n return stack\n}\n\nexport function read_payload (stream : Stream) : string | null {\n const size = stream.varint('le')\n return (size > 0) ? stream.read(size).hex : null\n}\n\nfunction read_locktime (stream : Stream) : number {\n return stream.read(4).reverse().to_num()\n}\n","import { Assert } from '@vbyte/micro-lib/assert'\nimport { decode_tx } from './decode.js'\nimport { assert_tx_template } from './validate.js'\nimport { create_tx, create_tx_output } from './create.js'\n\nimport type { TxData, TxOutputTemplate } from '@/types/index.js'\n\nexport function parse_tx (\n txdata : unknown,\n prevouts? : TxOutputTemplate[]\n) : TxData {\n // Define the tx variable.\n let tx : TxData\n // If the txdata is a string or Uint8Array,\n if (typeof txdata === 'string' || txdata instanceof Uint8Array) {\n // Decode the tx.\n tx = decode_tx(txdata)\n } else {\n // Assert the txdata is a valid tx template.\n assert_tx_template(txdata)\n // Create the tx.\n tx = create_tx(txdata)\n }\n // If the prevouts are provided,\n if (prevouts) {\n // Assert the prevouts are a non-empty array.\n Assert.has_items(prevouts, 'prevouts must be a non-empty array')\n // Iterate over the inputs.\n for (const [ idx, vin ] of tx.vin.entries()) {\n // Get the prevout.\n const prevout = prevouts.at(idx)\n // Assert the prevout exists.\n Assert.exists(prevout, 'prevout not found for input index: ' + idx)\n // Create the prevout.\n vin.prevout = create_tx_output(prevout)\n }\n }\n // Return the tx.\n return tx\n}\n\nexport function serialize_tx (\n txdata : unknown\n) : Record<string, unknown> {\n const tx = parse_tx(txdata)\n const version = tx.version\n const locktime = tx.locktime\n\n const vin : Record<string, unknown>[] = []\n const vout : Record<string, unknown>[] = []\n\n for (const e of tx.vin) {\n if (e.prevout !== null) {\n vin.push({\n script_pk : e.prevout.script_pk,\n value : Number(e.prevout.value)\n })\n }\n }\n\n for (const e of tx.vout) {\n vout.push({\n script_pk : e.script_pk,\n value : Number(e.value)\n })\n }\n\n return { version, locktime, vin, vout }\n}\n","import { Buff, Bytes } from '@vbyte/buff'\nimport { parse_tx } from './parse.js'\n\nimport {\n encode_tx,\n encode_tx_inputs,\n encode_tx_outputs,\n encode_tx_vout,\n encode_vin,\n encode_vin_witness\n} from './encode.js'\n\nimport type {\n TxData,\n TxInput,\n TxOutput,\n TxSize\n} from '@/types/index.js'\n\nconst WIT_FLAG_BYTES = 2\n\nexport function get_vsize (\n bytes : Bytes\n) : number {\n const weight = Buff.bytes(bytes).length\n const remain = (weight % 4 > 0) ? 1 : 0\n return Math.ceil(weight / 4) + remain\n}\n\nexport function get_txsize (\n txdata : string | TxData\n) : TxSize {\n const json = parse_tx(txdata)\n const base = encode_tx(json, false).length\n const total = encode_tx(json, true).length\n const weight = base * 3 + total\n const remain = (weight % 4 > 0) ? 1 : 0\n const vsize = Math.ceil(weight / 4) + remain\n return { base, total, vsize, weight }\n}\n\nexport function get_vin_size (vin : TxInput[]) : number {\n const bytes = encode_tx_inputs(vin)\n return bytes.length\n}\n\nexport function get_vout_size (vout : TxOutput[]) : number {\n const bytes = encode_tx_outputs(vout)\n return bytes.length\n}\n\nexport function get_segwit_size (txinputs : TxInput[]) : number {\n const segwit_data = txinputs\n .filter(e => e.witness.length > 0)\n .map(e => e.witness)\n return WIT_FLAG_BYTES + segwit_data\n .reduce((acc, e) => acc + encode_vin_witness(e).length, 0)\n}\n\nexport function get_txin_size (txinput : TxInput) : number {\n const bytes = encode_vin(txinput)\n return bytes.length\n}\n\nexport function get_txout_size (txoutput : TxOutput) : number {\n const bytes = encode_tx_vout(txoutput)\n return bytes.length\n}\n","import { Buff } from '@vbyte/buff'\nimport { hash160, hash256 } from '@vbyte/micro-lib/hash'\nimport { Assert } from '@vbyte/micro-lib'\nimport { parse_txinput } from './util.js'\n\nimport {\n prefix_script_size,\n decode_script\n} from '@/lib/script/index.js'\n\nimport {\n encode_txin_vout,\n encode_tx_locktime,\n encode_txin_sequence,\n encode_txin_txid,\n encode_vout_value,\n encode_tx_version,\n parse_tx\n} from '@/lib/tx/index.js'\n\nimport {\n SigHashOptions,\n TxData,\n TxInput,\n TxOutput\n} from '@/types/index.js'\n\nimport * as CONST from '@/const.js'\n\nexport function hash_segwit_tx (\n txdata : TxData,\n options : SigHashOptions = {}\n) : Buff {\n // Unpack the sigflag from our config object.\n const { sigflag = 0x01, txindex } = options\n // Normalize the tx into JSON format.\n const tx = parse_tx(txdata)\n // Check if the ANYONECANPAY flag is set.\n const is_anypay = (sigflag & 0x80) === 0x80\n // Save a normalized version of the sigflag.\n const flag = sigflag % 0x80\n // Check if the sigflag exists as a valid type.\n if (!CONST.SIGHASH_SEGWIT.includes(flag)) {\n throw new Error('Invalid hash type: ' + String(sigflag))\n }\n // Unpack the tx object.\n const { version, vin, vout, locktime } = tx\n // Parse the input we are signing from the config.\n const txinput = parse_txinput(tx, options)\n // Unpack the chosen input for signing.\n const { txid, vout: prevIdx, prevout, sequence } = txinput\n // Unpack the prevout for the chosen input.\n const { value } = prevout ?? {}\n // Check if a prevout value is provided.\n if (value === undefined) {\n throw new Error('Prevout value is empty!')\n }\n // Initialize our script variable from the config.\n let { pubkey, script } = options\n // Check if a pubkey is provided (instead of a script).\n if (script === undefined && pubkey !== undefined) {\n const pkhash = hash160(pubkey).hex\n script = `76a914${String(pkhash)}88ac`\n }\n // Make sure that some form of script has been provided.\n if (script === undefined) {\n throw new Error('No pubkey / script has been set!')\n }\n // Throw if OP_CODESEPARATOR is used in a script.\n if (decode_script(script).includes('OP_CODESEPARATOR')) {\n throw new Error('This library does not currently support the use of OP_CODESEPARATOR in segwit scripts.')\n }\n\n const sighash = [\n encode_tx_version(version),\n bip143_hash_prevouts(vin, is_anypay),\n bip143_hash_sequence(vin, flag, is_anypay),\n encode_txin_txid(txid),\n encode_txin_vout(prevIdx),\n prefix_script_size(script),\n encode_vout_value(value),\n encode_txin_sequence(sequence),\n bip143_hash_outputs(vout, flag, txindex),\n encode_tx_locktime(locktime),\n Buff.num(sigflag, 4).reverse()\n ]\n\n return hash256(Buff.join(sighash))\n}\n\nexport function bip143_hash_prevouts (\n vin : TxInput[],\n isAnypay ?: boolean\n) : Uint8Array {\n if (isAnypay === true) {\n return Buff.num(0, 32)\n }\n\n const stack = []\n\n for (const { txid, vout } of vin) {\n stack.push(encode_txin_txid(txid))\n stack.push(encode_txin_vout(vout))\n }\n\n return hash256(Buff.join(stack))\n}\n\nexport function bip143_hash_sequence (\n vin : TxInput[],\n sigflag : number,\n isAnyPay : boolean\n) : Uint8Array {\n if (isAnyPay || sigflag !== 0x01) {\n return Buff.num(0, 32)\n }\n\n const stack = []\n\n for (const { sequence } of vin) {\n stack.push(encode_txin_sequence(sequence))\n }\n return hash256(Buff.join(stack))\n}\n\nexport function bip143_hash_outputs (\n vout : TxOutput[],\n sigflag : number,\n idx ?: number\n) : Uint8Array {\n const stack = []\n\n if (sigflag === 0x01) {\n for (const { value, script_pk } of vout) {\n stack.push(encode_vout_value(value))\n stack.push(prefix_script_size(script_pk))\n }\n return hash256(Buff.join(stack))\n }\n\n if (sigflag === 0x03) {\n Assert.ok(idx !== undefined)\n if (idx < vout.length) {\n const { value, script_pk } = vout[idx]\n stack.push(encode_vout_value(value))\n stack.push(prefix_script_size(script_pk))\n return hash256(Buff.join(stack))\n }\n }\n\n return Buff.num(0, 32)\n}\n","import { Buff } from '@vbyte/buff'\nimport { hash340 } from '@vbyte/micro-lib/hash'\nimport { Assert } from '@vbyte/micro-lib'\nimport { prefix_script_size } from '@/lib/script/index.js'\n\nimport { TAPLEAF_DEFAULT_VERSION } from '@/const.js'\n\nconst DEFAULT_VERSION = TAPLEAF_DEFAULT_VERSION\n\nexport function encode_tapscript (\n script : string | Uint8Array,\n version = DEFAULT_VERSION\n) : Buff {\n const preimg = prefix_script_size(script)\n return encode_tapleaf(preimg, version)\n}\n\nexport function encode_tapleaf (\n data : string | Uint8Array,\n version = DEFAULT_VERSION\n) : Buff {\n const vbyte = encode_leaf_version(version)\n return hash340('TapLeaf', vbyte, data)\n}\n\nexport function encode_tapbranch (\n leaf_a : string,\n leaf_b : string\n) : Buff {\n // Compare leaves in lexical order.\n if (leaf_b < leaf_a) {\n // Swap leaves if needed.\n [ leaf_a, leaf_b ] = [ leaf_b, leaf_a ]\n }\n // Return digest of leaves as a branch hash.\n return hash340('TapBranch', leaf_a, leaf_b)\n}\n\nexport function encode_leaf_version (version = 0xc0) : number {\n return version & 0xfe\n}\n\nexport function encode_taptweak (\n pubkey : string | Uint8Array,\n data : string | Uint8Array = new Uint8Array()\n) : Buff {\n Assert.size(pubkey, 32)\n return hash340('TapTweak', pubkey, data)\n}\n","import { Buff } from '@vbyte/buff'\nimport { Assert } from '@vbyte/micro-lib'\nimport { hash340, sha256 } from '@vbyte/micro-lib/hash'\nimport { encode_tapscript } from '@/lib/taproot/encode.js'\nimport { parse_tx } from '@/lib/tx/parse.js'\nimport * as CONST from '@/const.js'\n\nimport {\n parse_txinput,\n get_annex_data,\n get_prevout\n} from './util.js'\n\nimport {\n encode_txin_vout,\n encode_tx_locktime,\n encode_txin_sequence,\n encode_txin_txid,\n encode_vout_value,\n encode_tx_version,\n encode_script_data\n} from '@/lib/tx/encode.js'\n\nimport type {\n SigHashOptions,\n TxData,\n TxInput,\n TxOutput\n} from '@/types/index.js'\n\nexport function hash_taproot_tx (\n template : TxData | string,\n config : SigHashOptions = {}\n) : Buff {\n const preimage = get_taproot_tx_preimage(template, config)\n return hash340('TapSighash', preimage)\n}\n\nexport function get_taproot_tx_preimage (\n template : TxData | string,\n config : SigHashOptions = {}\n) : Buff {\n // Unpack configuration.\n const {\n script,\n txindex,\n sigflag = 0x00,\n extflag = 0x00,\n key_version = 0x00,\n separator_pos = 0xFFFFFFFF\n } = config\n\n // Normalize the txdata object.\n const tx = parse_tx(template)\n // Unpack the txdata object.\n const { version, vin: input, vout: output, locktime } = tx\n // Parse the input we are signing from the config.\n const txinput = parse_txinput(tx, config)\n // Unpack the txinput object.\n const { txid, vout, sequence, witness = [] } = txinput\n // Check if we are using a valid hash type.\n if (!CONST.SIGHASH_TAPROOT.includes(sigflag)) {\n // If the sigflag is an invalid type, throw error.\n throw new Error('Invalid hash type: ' + String(sigflag))\n }\n if (extflag < 0 || extflag > 127) {\n // If the extflag is out of range, throw error.\n throw new Error('Extention flag out of range: ' + String(extflag))\n }\n\n let { extension } = config\n\n if (script !== undefined) {\n extension = encode_tapscript(script).hex\n }\n\n // Define the parameters of the transaction.\n const is_anypay = (sigflag & 0x80) === 0x80\n const annex = get_annex_data(witness)\n const annexBit = (annex !== undefined) ? 1 : 0\n const extendBit = (extension !== undefined) ? 1 : 0\n const spendType = ((extflag + extendBit) * 2) + annexBit\n\n // Begin building our preimage.\n const preimage : (string | Uint8Array)[] = [\n Buff.num(0x00, 1), // Add zero-byte.\n Buff.num(sigflag, 1), // Commit to signature flag.\n encode_tx_version(version), // Commit to tx version.\n encode_tx_locktime(locktime) // Commit to tx locktime.\n ]\n\n if (!is_anypay) {\n // If flag ANYONE_CAN_PAY is not set,\n // then commit to all inputs.\n const prevouts = input.map(e => get_prevout(e))\n preimage.push(\n bip341_hash_outpoints(input), // Commit to txid/vout for each input.\n bip341_hash_amounts(prevouts), // Commit to prevout amount for each input.\n bip341_hash_scripts(prevouts), // Commit to prevout script for each input.\n bip341_hash_sequence(input) // Commit to sequence value for each input.\n )\n }\n\n if ((sigflag & 0x03) < 2 || (sigflag & 0x03) > 3) {\n // If neither SINGLE or NONE flags are set,\n // include a commitment to all outputs.\n preimage.push(bip341_hash_outputs(output))\n }\n\n // At this step, we include the spend type.\n preimage.push(Buff.num(spendType, 1))\n\n if (is_anypay) {\n // If ANYONE_CAN_PAY flag is set, then we will\n // provide a commitment to the input being signed.\n const { value, script_pk } = get_prevout(txinput)\n preimage.push(\n encode_txin_txid(txid), // Commit to the input txid.\n encode_txin_vout(vout), // Commit to the input vout index.\n encode_vout_value(value), // Commit to the input's prevout value.\n encode_script_data(script_pk), // Commit to the input's prevout script.\n encode_txin_sequence(sequence) // Commit to the input's sequence value.\n )\n } else {\n // Otherwise, we must have already included a commitment\n // to all inputs in the tx, so simply add a commitment to\n // the index of the input we are signing for.\n Assert.ok(typeof txindex === 'number')\n preimage.push(Buff.num(txindex, 4).reverse())\n }\n\n if (annex !== undefined) {\n // If an annex has been set, include it here.\n preimage.push(annex)\n }\n\n if ((sigflag & 0x03) === 0x03) {\n // If the SINGLE flag is set, then include a\n // commitment to the output which is adjacent\n // to the input that we are signing for.\n Assert.ok(typeof txindex === 'number')\n preimage.push(bip341_hash_output(output[txindex]))\n }\n\n if (extension !== undefined) {\n // If we are extending this signature to include\n // other commitments (such as a tapleaf), then we\n // will add it to the preimage here.\n preimage.push(\n Buff.bytes(extension), // Extention data (in bytes).\n Buff.num(key_version), // Key version (reserved for future upgrades).\n Buff.num(separator_pos, 4,'le') // If OP_CODESEPARATOR is used, this must be set.\n )\n }\n\n return Buff.join(preimage)\n}\n\nexport function bip341_hash_outpoints (\n vin : TxInput[]\n) : Buff {\n const stack = []\n for (const { txid, vout } of vin) {\n stack.push(encode_txin_txid(txid))\n stack.push(encode_txin_vout(vout))\n }\n return sha256(Buff.join(stack))\n}\n\nexport function bip341_hash_sequence (\n vin : TxInput[]\n) : Buff {\n return sha256(...vin.map(vin => encode_txin_sequence(vin.sequence)))\n}\n\nexport function bip341_hash_amounts (\n prevouts : TxOutput[]\n) : Buff {\n return sha256(...prevouts.map(prevout => encode_vout_value(prevout.value)))\n}\n\nexport function bip341_hash_scripts (\n prevouts : TxOutput[]\n) : Buff {\n return sha256(...prevouts.map(prevout => encode_script_data(prevout.script_pk)))\n}\n\nexport function bip341_hash_outputs (\n vout : TxOutput[]\n) : Buff {\n const stack = []\n for (const { value, script_pk } of vout) {\n stack.push(encode_vout_value(value))\n stack.push(encode_script_data(script_pk))\n }\n return sha256(...stack)\n}\n\nexport function bip341_hash_output (\n vout : TxOutput\n) : Buff {\n return sha256(\n encode_vout_value(vout.value),\n encode_script_data(vout.script_pk)\n )\n}\n","import { Buff } from '@vbyte/buff'\nimport { ECC } from '@vbyte/micro-lib'\nimport { parse_tx } from '@/lib/tx/parse.js'\nimport { SIGHASH_DEFAULT } from '@/const.js'\nimport { hash_segwit_tx } from '@/lib/sighash/segwit.js'\nimport { hash_taproot_tx } from '@/lib/sighash/taproot.js'\n\nimport type {\n SigHashOptions,\n TxData\n} from '@/types/index.js'\n\nexport function sign_segwit_tx (\n seckey : string,\n txdata : TxData,\n options : SigHashOptions,\n) {\n const tx = parse_tx(txdata)\n const msg = hash_segwit_tx(tx, options)\n const sig = ECC.get_ecdsa_sig(seckey, msg).hex\n const flag = format_sigflag(options.sigflag ?? SIGHASH_DEFAULT)\n return sig + flag\n}\n\nexport function sign_taproot_tx (\n seckey : string,\n txdata : TxData,\n options : SigHashOptions,\n) {\n const tx = parse_tx(txdata)\n const msg = hash_taproot_tx(tx, options)\n const sig = ECC.get_bip340_sig(seckey, msg).hex\n const flag = format_sigflag(options.sigflag ?? 0)\n return sig + flag\n}\n\nfunction format_sigflag (flag : number) {\n return (flag !== 0) ? Buff.num(flag, 1).hex : ''\n}\n","import { Bytes } from '@vbyte/buff'\n\nimport type {\n SigHashOptions,\n TxData\n} from '@/types/index.js'\n\nexport function verify_tx (\n _txdata : TxData | Bytes,\n _config : SigHashOptions = {}\n) : boolean {\n console.warn('verify_segwit_tx is not implemented')\n return true\n}\n\n// export function verify_signature (\n// txdata : TxData | Bytes,\n// index : number,\n// config : HashConfig = {}\n// ) : boolean {\n// const tx = Tx.fmt.toJson(txdata)\n// const { throws = false } = config\n// const { prevout, witness = [] } = tx.vin[index]\n// const witnessData = Tx.util.readWitness(witness)\n// const { cblock, script, params } = witnessData\n\n// let pub : Buff\n\n// if (params.length < 1) {\n// return safeThrow('Invalid witness data: ' + String(witness), throws)\n// }\n\n// const { scriptPubKey } = prevout ?? {}\n\n// if (scriptPubKey === undefined) {\n// return safeThrow('Prevout scriptPubKey is empty!', throws)\n// }\n\n// const { type, data: tapkey } = Tx.util.readScriptPubKey(scriptPubKey)\n\n// if (type !== 'p2tr') {\n// return safeThrow('Prevout script is not a valid taproot output:' + tapkey.hex, throws)\n// }\n\n// if (tapkey.length !== 32) {\n// return safeThrow('Invalid tapkey length: ' + String(tapkey.length), throws)\n// }\n\n// if (\n// cblock !== null &&\n// script !== null\n// ) {\n// const version = cblock[0] & 0xfe\n// const target = getTapLeaf(script, version)\n// config.extension = target\n\n// if (!checkPath(tapkey, target, cblock, { throws })) {\n// return safeThrow('cblock verification failed!', throws)\n// }\n// }\n\n// if (config.pubkey !== undefined) {\n// pub = Buff.bytes(config.pubkey)\n// } else if (params.length > 1 && params[1].length === 32) {\n// pub = Buff.bytes(params[1])\n// } else {\n// pub = Buff.bytes(tapkey)\n// }\n\n// const rawsig = Script.fmt.toParam(params[0])\n// const stream = new Stream(rawsig)\n// const signature = stream.read(64).raw\n\n// if (stream.size === 1) {\n// config.sigflag = stream.read(1).num\n// if (config.sigflag === 0x00) {\n// return safeThrow('0x00 is not a valid appended sigflag!', throws)\n// }\n// }\n\n// const hash = hashTx(tx, index, config)\n\n// if (!verify(signature, hash, pub, throws)) {\n// return safeThrow('Invalid signature!', throws)\n// }\n\n// return true\n// }\n","import { Buff } from '@vbyte/buff'\nimport { encode_tapbranch } from './encode.js'\n\nimport type { TapTree, MerkleProof } from '@/types/index.js'\n\n/**\n * Get the root of a taproot tree.\n * @param leaves - The leaves of the tree.\n * @returns The root of the tree.\n */\nexport function get_merkle_root (leaves : TapTree) {\n // Process the merkle tree, and return the root.\n return merkleize(leaves)[0]\n}\n\n/**\n * Process a taproot tree into a merkle proof.\n * @param taptree - The leaves of the tree.\n * @param target - The target leaf of the tree.\n * @param path - The recursive path of the tree.\n * @returns The root of the tree.\n */\nexport function merkleize (\n taptree : TapTree,\n target ?: string,\n path : string[] = []\n) : MerkleProof {\n // Initialize the leaves and tree arrays.\n const leaves : string[] = []\n const tree : string[] = []\n // If there are no leaves, throw an error.\n if (taptree.length < 1) {\n throw new Error('Tree is empty!')\n }\n // Crawl through the tree, and find each leaf.\n for (let i = 0; i < taptree.length; i++) {\n // Get the current leaf as bytes.\n const bytes = taptree[i]\n // If the leaf is an array,\n if (Array.isArray(bytes)) {\n // Recursively process the nested tree.\n let [ tapleaf, new_target, branches ] = merkleize(bytes, target)\n // Update the target leaf.\n target = new_target\n // Add the nested tapleaf to the leaves array.\n leaves.push(tapleaf)\n // For each branch node,\n for (const branch of branches) {\n // Add the branch to the path.\n path.push(branch)\n }\n } else {\n // Convert the leaf to a hex string.\n const leaf = Buff.bytes(bytes).hex\n // Add the leaf to the leaves array.\n leaves.push(leaf)\n }\n }\n\n // If there is only one leaf,\n if (leaves.length === 1) {\n // Return the leaf as the root.\n return [ leaves[0], target, path ]\n }\n // Ensure the tree is sorted at this point.\n leaves.sort()\n // Ensure the tree is balanced evenly.\n if (leaves.length % 2 !== 0) {\n // If uneven, duplicate the last leaf.\n leaves.push(leaves[leaves.length - 1])\n }\n // Sort through the leaves (two at a time).\n for (let i = 0; i < leaves.length - 1; i += 2) {\n // Compute two leaves into a branch.\n const branch = encode_tapbranch(leaves[i], leaves[i + 1]).hex\n // Push our branch to the tree.\n tree.push(branch)\n // Check if a proof target is specified.\n if (typeof target === 'string') {\n // Check if this branch is part of our proofs.\n if (target === leaves[i]) {\n // If so, include right-side of branch.\n path.push(leaves[i + 1])\n target = branch\n } else if (target === leaves[i + 1]) {\n // If so, include left-side of branch.\n path.push(leaves[i])\n target = branch\n }\n }\n }\n // Recursively process the tree.\n return merkleize(tree, target, path)\n}\n","import { Buff, Bytes } from '@vbyte/buff'\nimport { is_valid_script } from '@/lib/script/decode.js'\nimport { TAPLEAF_VERSIONS } from '@/const.js'\n\nimport type {\n WitnessData,\n WitnessType\n} from '@/types/index.js'\n\nexport function parse_witness (\n witness : Bytes[]\n) : WitnessData {\n // Parse the witness data.\n const elems = witness.map(e => Buff.bytes(e))\n const stack = witness.map(e => Buff.bytes(e).hex)\n const annex = parse_annex_data(elems)\n if (annex !== null) elems.pop()\n const cblock = parse_cblock_data(elems)\n if (cblock !== null) elems.pop()\n const type = parse_witness_type(elems, cblock)\n const version = parse_witness_version(type)\n const script = parse_witness_script(elems, type)\n if (script !== null) elems.pop()\n const params = elems.map(e => e.hex)\n return { annex, cblock, params, script, stack, type, version }\n}\n\nfunction parse_annex_data (\n data : Uint8Array[]\n) : string | null {\n // Get the last element of the array.\n let elem = data.at(-1)\n // Check if the element fits the annex format.\n if (\n data.length > 1 &&\n elem instanceof Uint8Array &&\n elem[0] === 0x50\n ) {\n // Return the element.\n return new Buff(elem).hex\n } else {\n // Return null.\n return null\n }\n}\n\nfunction parse_cblock_data (\n data : Uint8Array[]\n) : string | null {\n let elem = data.at(-1)\n if (\n data.length > 1 &&\n elem instanceof Uint8Array &&\n elem.length > 32 &&\n TAPLEAF_VERSIONS.includes(elem[0] & 0xfe)\n ) {\n // Return the element.\n return new Buff(elem).hex\n } else {\n // Return null.\n return null\n }\n}\n\nfunction parse_witness_script (\n elems : Uint8Array[],\n type : WitnessType\n) {\n let script : Uint8Array | undefined\n switch (type) {\n case 'p2tr-ts':\n script = elems.at(-1)\n case 'p2w-sh':\n script = elems.at(-1)\n }\n return (script !== undefined) ? new Buff(script).hex : null\n}\n\nfunction parse_witness_type (\n elems : Uint8Array[],\n cblock : string | null\n) : WitnessType {\n // Get the important elements of the witness.\n let param_0 = elems.at(0),\n param_1 = elems.at(1),\n param_x = elems.at(-1)\n // If the cblock is present and the last element exists:\n if (cblock !== null && param_x !== undefined) {\n return 'p2tr-ts'\n // If the witness elements match the profile of a p2w-pkh:\n } else if (\n elems.length === 2 &&\n param_0 !== undefined &&\n param_1 !== undefined &&\n param_0.length >= 64 &&\n param_1.length === 33\n ) {\n return 'p2w-pkh'\n // If the witness elements match the profile of a p2tr-pk:\n } else if (\n elems.length === 1 &&\n param_0 !== undefined &&\n param_0.length === 64\n ) {\n return 'p2tr-pk'\n // If there is at least two witness elements:\n } else if (\n elems.length > 1 && \n param_x !== undefined &&\n is_valid_script(param_x)\n ) {\n return 'p2w-sh'\n // If the witness elements don't match any known profile:\n } else {\n return 'unknown'\n }\n}\n\nfunction parse_witness_version (type : WitnessType) : number | null {\n if (type.startsWith('p2tr')) return 1\n if (type.startsWith('p2w')) return 0\n return null\n}\n","import { Buff, Stream } from '@vbyte/buff'\nimport { Assert, ECC } from '@vbyte/micro-lib'\nimport { parse_witness } from '@/lib/witness/parse.js'\n\nimport {\n encode_tapbranch,\n encode_tapscript,\n encode_taptweak,\n} from './encode.js'\n\nimport type { ControlBlock } from '@/types/index.js'\n\nexport function parse_taproot_witness (witness : string[]) {\n const { cblock, params, script } = parse_witness(witness)\n\n Assert.exists(cblock, 'cblock is null')\n Assert.exists(script, 'script is null')\n\n const cblk = parse_cblock(cblock)\n const target = encode_tapscript(script, cblk.version)\n\n let branch = target.hex\n\n for (const leaf of cblk.path) {\n branch = encode_tapbranch(branch, leaf).hex\n }\n\n const tweak = encode_taptweak(cblk.int_key, branch)\n const tapkey = ECC.tweak_pubkey(cblk.int_key, tweak, 'bip340')\n\n params.map(e => Buff.bytes(e).hex)\n\n return { cblock: cblk, params, script, tapkey: tapkey.hex, tweak: tweak.hex }\n}\n\nexport function parse_cblock (cblock : string | Uint8Array) : ControlBlock {\n const buffer = new Stream(cblock)\n const cbyte = buffer.read(1).num\n const int_key = buffer.read(32).hex\n const [ version, parity ] = parse_cblock_parity(cbyte)\n const path = []\n while (buffer.size >= 32) {\n path.push(buffer.read(32).hex)\n }\n if (buffer.size !== 0) {\n throw new Error('Non-empty buffer on control block: ' + String(buffer))\n }\n return { int_key, path, parity, version }\n}\n\nexport function parse_cblock_parity (cbits : number) {\n return (cbits % 2 === 0)\n ? [ cbits - 0, 0x02 ]\n : [ cbits - 1, 0x03 ]\n}\n\nexport function parse_pubkey_parity (\n pubkey : string | Uint8Array\n) : number {\n Assert.size(pubkey, 33, 'invalid pubkey size')\n const [ parity ] = Buff.bytes(pubkey)\n if (parity === 0x02) return 0\n if (parity === 0x03) return 1\n throw new Error('Invalid parity bit: ' + String(parity))\n}\n","import { Buff, Bytes } from '@vbyte/buff'\nimport { Assert, ECC } from '@vbyte/micro-lib'\nimport { merkleize } from './tree.js'\nimport { TAPLEAF_DEFAULT_VERSION } from '@/const.js'\nimport * as Schema from '@/schema/index.js'\n\nimport {\n encode_tapbranch,\n encode_taptweak\n} from './encode.js'\n\nimport {\n parse_pubkey_parity,\n parse_cblock\n} from './parse.js'\n\nimport {\n TaprootConfig,\n TaprootContext\n} from '@/types/index.js'\n\nconst DEFAULT_VERSION = TAPLEAF_DEFAULT_VERSION\n\nexport function create_taproot (config : TaprootConfig) : TaprootContext {\n Schema.taproot.config.parse(config)\n\n const { pubkey, version = DEFAULT_VERSION } = config\n\n const leaves = config.leaves ?? []\n\n const target = (config.target !== undefined)\n ? Buff.bytes(config.target).hex \n : undefined\n\n let path : string[] = [],\n taproot : string | undefined\n\n if (leaves.length > 0) {\n // Merkelize the leaves into a root hash (with proof).\n const [ root, _, proofs ] = merkleize(leaves, target)\n // Get the control path from the merkelized output.\n path = proofs\n // Get the tapped key from the internal key.\n taproot = root\n } else {\n // Get the tapped key from the single tapleaf.\n taproot = target\n }\n\n const taptweak = encode_taptweak(pubkey, taproot)\n const twk_key = ECC.tweak_pubkey(pubkey, taptweak, 'ecdsa')\n const parity = parse_pubkey_parity(twk_key)\n const tapkey = ECC.serialize_pubkey(twk_key, 'bip340')\n // Get the block version / parity bit.\n const cbit = Buff.num(version + parity)\n // Stack the initial control block data.\n const block : Bytes[] = [ cbit, Buff.bytes(pubkey) ]\n // If there is more than one path, add to block.\n if (path.length > 0) {\n path.forEach(e => block.push(e))\n }\n // Merge the data together into one array.\n const cblock = Buff.join(block)\n\n return {\n int_key : Buff.bytes(pubkey).hex,\n path,\n parity,\n taproot : taproot ?? null,\n cblock : cblock.hex,\n tapkey : tapkey.hex,\n taptweak : taptweak.hex\n }\n}\n\nexport function verify_taproot (\n tapkey : string,\n target : string,\n cblock : string\n) : boolean {\n Assert.size(tapkey, 32)\n const { parity, path, int_key } = parse_cblock(cblock)\n\n const ext_key = Buff.join([ parity, tapkey ])\n\n let branch = Buff.bytes(target).hex\n\n for (const leaf of path) {\n branch = encode_tapbranch(branch, leaf).hex\n }\n\n const tap_tweak = encode_taptweak(int_key, branch)\n const tweaked_key = ECC.tweak_pubkey(int_key, tap_tweak, 'ecdsa')\n\n return (ext_key.hex === tweaked_key.hex)\n}\n","import { Buff, Bytes } from '@vbyte/buff'\nimport { Assert } from '@vbyte/micro-lib'\n\nimport type { WitnessSize } from '@/types/index.js'\n\nconst WIT_LENGTH_BYTE = 1\n\nexport function get_witness_size (witness : Bytes[]) : WitnessSize {\n const stack = witness.map(e => Buff.bytes(e))\n const size = stack.reduce((prev, next) => prev + next.length, 0)\n const vsize = Math.ceil(WIT_LENGTH_BYTE + size / 4) \n return { total: size, vsize }\n}\n\nexport function assert_witness (witness : unknown) : asserts witness is Bytes[] {\n Assert.ok(Array.isArray(witness), 'witness must be an array')\n Assert.ok(witness.every(e => Buff.is_bytes(e)), 'witness must be an array of strings or bytes')\n}\n"],"names":["Check","Assert","is_hex","input","match","length","is_bytes","Uint8Array","Array","isArray","every","e","within_size","data","size","TypeError","hex","Error","bytes","String","is_json","str","JSON","parse","is_safe_int","num","Number","MAX_SAFE_INTEGER","_0n","BigInt","_255n","_256n","big_to_bytes","big","endian","undefined","get_big_size","use_le","buffer","ArrayBuffer","dataView","DataView","offset","byte","setUint8","bigint_replacer","_","v","bigint_reviver","test","slice","num_to_bytes","get_num_size","hex_to_bytes","hexstr","len","get_hex_size","use_be","i","char","substring","parseInt","fill","set","create_bytes","ec","TextEncoder","dc","TextDecoder","str_to_bytes","encode","bytes_to_str","decode","Buff","this","number","bigint","bin","uint","binary","bins","split","map","ct","j","Lib.bin_to_bytes","Lib.str_to_bytes","json","replacer","Lib.bigint_replacer","stringify","blob","payload","chunk_size","total_size","chunks","data_blob","count","idx","subarray","Lib.split_bytes","Lib.buffer","is_equal","a","b","random","crypto","getRandomValues","pcrypto","randomBytes","Lib.get_random_bytes","now","stamp","Math","floor","Date","constructor","super","arr","to_arr","to_big","to_bin","to_hex","to_num","to_str","to_uint","Lib.bytes_to_big","reverse","chars","toString","padStart","Lib.bytes_to_hex","to_json","reviver","Lib.bigint_reviver","Lib.bytes_to_str","Lib.bytes_to_num","join","Lib.bytes_to_bin","append","equals","prepend","prefix_varint","varint","array","start","end","begin","toJSON","from","of","args","joined","reduce","buff","Lib.join_bytes","sort","Stream","peek","read","chunk","sort_obj","obj","Map","Object","keys","filter","value","sorted","key","parse_error","err","message","Test","is_object","is_string","is_number","isInteger","isNaN","exists","is_deep_equal","has_items","is_bigint","is_uchar","is_ushort","is_uint","is_u8a","is_base58","is_base64","is_b64url","is_bech32","is_hash","ok","msg","is_empty","is_instance","type","name","err_msg","globalThis","isBytes","isView","anumber","n","isSafeInteger","abytes","lengths","includes","aexists","instance","checkFinished","destroyed","finished","clean","arrays","createView","byteOffset","byteLength","rotr","word","shift","rotl","hasHexBuiltin","toHex","fromHex","hexes","bytesToHex","asciis","asciiToBase16","ch","hexToBytes","hl","al","ai","hi","n1","charCodeAt","n2","toBytes","utf8ToBytes","concatBytes","sum","res","pad","Hash","createHasher","hashCons","hashC","update","digest","tmp","outputLen","blockLen","create","bytesLength","Chi","c","Maj","HashMD","padOffset","isLE","pos","view","take","min","process","roundClean","digestInto","out","aoutput","setBigUint64","_32n","_u32_max","wh","wl","h","l","setUint32","oview","outLen","state","get","destroy","_cloneInto","to","clone","SHA256_IV","Uint32Array","SHA256_K","SHA256_W","SHA256","A","B","C","D","E","F","G","H","getUint32","W15","W2","s0","s1","T1","T2","sha256","HMAC","hash","_key","ahash","iHash","oHash","buf","getPrototypeOf","hmac","_1n","abool","title","numberToHexUnpadded","hexToNumber","bytesToNumberBE","bytesToHex_","bytesToNumberLE","abytes_","numberToBytesBE","hexToBytes_","numberToBytesLE","ensureBytes","expectedLength","isBytes_","isPosBig","inRange","max","aInRange","bitMask","_validateObject","object","fields","optFields","checkField","fieldName","expectedType","isOpt","val","current","entries","forEach","k","memoized","fn","WeakMap","arg","computed","_2n","_3n","_4n","_5n","_8n","mod","result","pow2","x","power","modulo","invert","u","r","m","sqrt3mod4","Fp","p1div4","ORDER","root","pow","eql","sqr","sqrt5mod8","p5div8","mul","nv","sub","ONE","FpSqrt","P","Q","S","Z","_Fp","Field","FpLegendre","cc","Q1div2","is0","M","t","R","ZERO","t_tmp","exponent","tonelliShanks","FIELD_FIELDS","FpInvertBatch","nums","passZero","inverted","multipliedAcc","acc","invertedAcc","inv","reduceRight","p1mod2","powered","yes","zero","no","neg","bitLenOrOpts","opts","_nbitLength","_sqrt","sqrt","_opts","BITS","nBitLength","nByteLength","BYTES","_nBitLength","ceil","nLength","sqrtP","f","freeze","MASK","isValid","isValidNot0","isOdd","lhs","rhs","add","p","d","FpPow","div","sqrN","addN","subN","mulN","fromBytes","invertBatch","lst","cmov","getFieldBytesLength","fieldOrder","bitLength","getMinHashLength","negateCt","condition","item","negate","validateW","W","bits","calcWOpts","scalarBits","maxNumber","windows","windowSize","mask","shiftBy","calcOffsets","window","wOpts","wbits","nextN","offsetStart","abs","isZero","isNeg","isNegF","offsetF","pointPrecomputes","pointWindowSizes","getW","assert0","pippenger","fieldN","points","scalars","validateMSMPoints","field","s","validateMSMScalars","plength","slength","bitLen","buckets","scalar","resI","sumI","double","createField","order","validateField","validateSigVerOpts","lowS","prehash","DERErr","DER","Err","_tlv","tag","dataLen","lenLen","first","lengthBytes","_int","toSig","int","tlv","seqBytes","seqLeftBytes","rBytes","rLeftBytes","sBytes","sLeftBytes","hexFromSig","sig","seq","_legacyHelperNormPriv","Fn","allowedPrivateKeyLengths","wrapPrivateKey","expected","padded","error","weierstrassN","CURVE","curveOpts","params","_createCurveFields","cofactor","CURVE_ORDER","allowInfinityPoint","clearCofactor","isTorsionFree","endo","beta","splitScalar","assertCompressionIsSupported","_c","point","isCompressed","y","toAffine","bx","pprefix","L","LC","LU","head","tail","isValidXY","y2","weierstrassEquation","sqrtError","x2","x3","_legacyHelperEquat","left","right","Gx","Gy","_4a3","_27b2","acoord","banZero","aprjpoint","other","Point","toAffineMemo","iz","px","py","pz","z","ax","ay","zz","assertValidMemo","finishEndo","endoBeta","k1p","k2p","k1neg","k2neg","fromAffine","normalizeZ","property","toInv","assertValidity","fromPrivateKey","privateKey","normPrivateKeyToScalar","BASE","multiply","msm","precompute","isLazy","wnaf","setWindowSize","_setWindowSize","hasEvenY","X1","Y1","Z1","X2","Y2","Z2","U1","U2","b3","X3","Y3","Z3","t0","t1","t2","t3","t4","t5","subtract","fake","wNAFCached","k1","k2","k1f","k2f","multiplyUnsafe","sc","hasPrecomputes","p1","p2","mulEndoUnsafe","wNAFCachedUnsafe","multiplyAndAddUnsafe","invertedZ","toRawBytes","constTimeNegate","elm","unsafeLadder","precomputeWindow","base","push","wNAF","precomputes","wo","wNAFUnsafe","getPrecomputes","transform","comp","prev","delete","ecdsa","ecdsaOpts","bits2int","bits2int_modN","randomBytes_","hmac_","msgs","fnBits","isBiggerThanHalfOrder","aValidRS","Signature","recovery","fromCompact","fromDER","addRecoveryBit","recoverPublicKey","msgHash","FIELD_ORDER","rec","radj","ir","u1","u2","hasHighS","normalizeS","format","toDERRawBytes","toDERHex","toCompactRawBytes","toCompactHex","utils","isValidPrivateKey","randomPrivateKey","fieldLen","minLen","reduced","mapHashToField","isProbPub","delta","ORDER_MASK","int2octets","prepSig","defaultSigOpts","some","extraEntropy","ent","h1int","seedArgs","seed","k2sig","kBytes","ik","q","normS","defaultVerOpts","getPublicKey","getSharedSecret","privateA","publicB","sign","privKey","hashLen","qByteLen","hmacFn","u8n","u8of","reset","reseed","gen","sl","concatBytes_","pred","createHmacDrbg","drbg","verify","signature","publicKey","sg","isHex","isObj","_sig","derError","is","_ecdsa_legacy_opts_to_new","_weierstrass_legacy_opts_to_new","weierstrass","assign","ProjectivePoint","_ecdsa_new_output_to_legacy","secp256k1_CURVE","divNearest","sqrtMod","_6n","_11n","_22n","_23n","_44n","_88n","b2","b6","b9","b11","b22","b44","b88","b176","b220","b223","Fpk1","secp256k1","curveDef","defHash","createCurve","a1","b1","a2","POW_2_128","c1","c2","TAGGED_HASH_PREFIXES","taggedHash","messages","tagP","tagH","pointToBytes","numTo32b","modP","modN","hasEven","schnorrGetExtPubKey","priv","d_","lift_x","xx","challenge","schnorrGetPublicKey","schnorrSign","auxRand","rand","k_","rx","schnorrVerify","pub","schnorr","GP","tweak_pubkey","pubkey","tweak","even_y","twk_big","serialize_bytes","pub_pt","pk","serialize_pubkey","lift_point","tweak_pt","tweaked_pt","prefix","Rho160","Id160","Pi160","idxLR","idxL","idxR","shifts160","shiftsL160","shiftsR160","Kl160","Kr160","ripemd_f","group","BUF_160","RIPEMD160","h0","h1","h2","h3","h4","ar","bl","br","cl","cr","dl","dr","el","er","rGroup","hbl","hbr","rl","rr","sr","tl","tr","ripemd160","hash160","noble_r160","noble_s256","hash256","hash340","htag","hashtag","util","objectUtil","assertEqual","assertIs","_arg","assertNever","_x","arrayToEnum","items","getValidEnumValues","validKeys","objectKeys","filtered","objectValues","prototype","hasOwnProperty","call","find","checker","isFinite","joinValues","separator","jsonStringifyReplacer","mergeShapes","second","ZodParsedType","getParsedType","string","nan","boolean","function","symbol","null","then","catch","promise","Set","date","unknown","ZodIssueCode","ZodError","errors","issues","addIssue","addIssues","subs","actualProto","setPrototypeOf","__proto__","_mapper","mapper","issue","fieldErrors","_errors","processError","code","unionErrors","returnTypeError","argumentsError","path","curr","assert","isEmpty","flatten","formErrors","firstEl","errorMap","_ctx","invalid_type","received","invalid_literal","unrecognized_keys","invalid_union","invalid_union_discriminator","options","invalid_enum_value","invalid_arguments","invalid_return_type","invalid_date","invalid_string","validation","position","startsWith","endsWith","too_small","exact","inclusive","minimum","too_big","maximum","custom","invalid_intersection_types","not_multiple_of","multipleOf","not_finite","defaultError","overrideErrorMap","defaultErrorMap","addIssueToContext","ctx","issueData","overrideMap","errorMaps","fullPath","fullIssue","errorMessage","maps","makeIssue","common","contextualErrorMap","schemaErrorMap","ParseStatus","dirty","abort","mergeArray","status","results","arrayValue","INVALID","mergeObjectAsync","pairs","syncPairs","pair","mergeObjectSync","finalObject","alwaysSet","DIRTY","OK","isAborted","isDirty","isAsync","Promise","errorUtil","errToObj","ParseInputLazyPath","parent","_cachedPath","_path","handleResult","success","_error","processCreateParams","invalid_type_error","required_error","description","iss","ZodType","_def","_getType","_getOrReturnCtx","parsedType","_processInputParams","_parseSync","_parse","_parseAsync","resolve","safeParse","async","toLowerCase","parseAsync","safeParseAsync","maybeAsyncResult","refine","check","getIssueProperties","_refinement","setError","refinement","refinementData","ZodEffects","schema","typeName","ZodFirstPartyTypeKind","effect","superRefine","def","spa","bind","optional","nullable","nullish","or","and","brand","default","describe","pipe","readonly","isNullable","isOptional","version","vendor","validate","ZodOptional","ZodNullable","ZodArray","ZodPromise","option","ZodUnion","incoming","ZodIntersection","defaultValueFunc","ZodDefault","innerType","defaultValue","ZodBranded","catchValueFunc","ZodCatch","catchValue","This","target","ZodPipeline","ZodReadonly","cuidRegex","cuid2Regex","ulidRegex","uuidRegex","nanoidRegex","jwtRegex","durationRegex","emailRegex","emojiRegex","ipv4Regex","ipv4CidrRegex","ipv6Regex","ipv6CidrRegex","base64Regex","base64urlRegex","dateRegexSource","dateRegex","RegExp","timeRegexSource","secondsRegexSource","precision","timeRegex","datetimeRegex","regex","local","isValidIP","ip","isValidJWT","jwt","alg","header","base64","replace","padEnd","decoded","atob","typ","isValidCidr","ZodString","coerce","checks","kind","tooBig","tooSmall","URL","lastIndex","trim","toUpperCase","_regex","_addCheck","email","url","emoji","uuid","nanoid","cuid","cuid2","ulid","base64url","cidr","datetime","time","duration","minLength","maxLength","nonempty","isDatetime","isDate","isTime","isDuration","isEmail","isURL","isEmoji","isUUID","isNANOID","isCUID","isCUID2","isULID","isIP","isCIDR","isBase64","isBase64url","floatSafeRemainder","step","valDecCount","stepDecCount","decCount","toFixed","ZodNumber","arguments","gte","lte","setLimit","gt","lt","positive","negative","nonpositive","nonnegative","finite","safe","MIN_SAFE_INTEGER","minValue","maxValue","isInt","ZodBigInt","_getInvalidInput","ZodBoolean","Boolean","ZodDate","getTime","minDate","maxDate","ZodSymbol","ZodUndefined","ZodNull","ZodAny","_any","ZodUnknown","_unknown","ZodNever","never","ZodVoid","void","exactLength","all","element","deepPartialify","ZodObject","newShape","shape","fieldSchema","unwrap","ZodTuple","_cached","nonstrict","passthrough","augment","extend","_getCached","shapeKeys","extraKeys","catchall","unknownKeys","keyValidator","strict","strip","augmentation","merge","merging","setKey","index","pick","omit","deepPartial","partial","required","newField","keyof","createZodEnum","strictCreate","lazycreate","childCtx","mergeValues","aType","bType","valid","bKeys","sharedKeys","indexOf","newObj","sharedValue","newArray","types","handleParsed","parsedLeft","parsedRight","merged","rest","itemIndex","schemas","ZodRecord","keySchema","keyType","valueSchema","valueType","third","ZodMap","finalMap","ZodSet","minSize","maxSize","finalizeSet","elements","parsedSet","values","ZodLazy","getter","ZodLiteral","ZodEnum","expectedValues","_cache","has","enum","enumValues","Values","Enum","extract","newDef","exclude","opt","ZodNativeEnum","nativeEnumValues","promisified","sourceType","checkCtx","fatal","processed","executeRefinement","inner","createWithPreprocess","preprocess","removeDefault","newCtx","removeCatch","ZodNaN","inResult","in","handleAsync","cleanParams","stringType","numberType","bigIntType","booleanType","dateType","nullType","anyType","arrayType","objectType","unionType","recordType","lazyType","z.bigint","z.boolean","z.date","z.number","u8a","cls","_params","_fatal","z.instanceof","z.string","z.any","parts","at","literal","z.union","z.null","z.lazy","z.array","z.record","u8a32","u8a33","u8a64","hex32","hex33","hex64","byte32","isArrayOf","isString","afn","astr","label","aArr","astrArr","anumArr","chain","id","wrap","alphabet","letters","lettersA","indexes","digits","letter","convertRadix","dlen","carry","done","digit","fromCarry","digitBase","rounded","gcd","radix2carry","powers","convertRadix2","padding","radix2","revPadding","unsafeWrapper","apply","toBase64","fromBase64","lastChunkHandling","decodeBase64Builtin","chr","base64urlnopad","base58","abc","radix","createBase58check","oldChecksum","newChecksum","BECH_ALPHABET","POLYMOD_GENERATORS","bech32Polymod","pre","chk","bechChecksum","words","encodingConst","genBech32","encoding","ENCODING_CONST","_words","fromWords","toWords","fromWordsUnsafe","limit","plen","actualLength","lowered","slen","sepIndex","lastIndexOf","encodeFromBytes","decodeToBytes","decodeUnsafe","bech32","bech32m","B58chk","Base64","B64url","Bech32","Bech32m","assert_prefix","assert_words","to_words","to_bytes","ENCODING_REGEX","VERSION","decode_address","address","get_address_format","encoded","base58_decode","bech32_decode","bech32m_decode","encode_address","config","base58_encode","bech32_encode","bech32m_encode","CONFIG_TABLE","get_address_config","address_network","address_type","network","parse_address","dec","get_address_ctx","script","script_key","script_type","script_hex","script_asm","get_p2pkh_script","get_p2sh_script","get_p2w_pkh_script","get_p2w_sh_script","get_p2tr_script","get_address_script","ADDR_TYPE","P2PKH","create_p2pkh_address","encode_p2pkh_address","pk_hash","decode_p2pkh_address","parsed","P2SH","create_p2sh_address","encode_p2sh_address","script_hash","decode_p2sh_address","P2WPKH","create_p2wpkh_address","encode_p2wpkh_address","decode_p2wpkh_address","P2WSH","create_p2wsh_address","encode_p2wsh_address","decode_p2wsh_address","P2TR","AddressTool","encode_p2tr_address","decode_p2tr_address","P2PKH_TOOL","P2SH_TOOL","P2WPKH_TOOL","P2WSH_TOOL","P2TR_TOOL","LOCKTIME_THRESHOLD","LocktimeUtil","RefEncoder","encode_locktime","locktime","height","decode_locktime","encode_inscription_id","txid","decode_inscription_id","inscription_id","assert_inscription_id","verify_inscription_id","encode_rune_id","block_height","block_index","decode_rune_id","rune_id","assert_rune_id","verify_rune_id","encode_outpoint","vout","decode_outpoint","outpoint","assert_outpoint","verify_outpoint","record_id","OPCODE_MAP","OP_0","OP_PUSHDATA1","OP_PUSHDATA2","OP_PUSHDATA4","OP_1NEGATE","OP_SUCCESS80","OP_1","OP_2","OP_3","OP_4","OP_5","OP_6","OP_7","OP_8","OP_9","OP_10","OP_11","OP_12","OP_13","OP_14","OP_15","OP_16","OP_NOP","OP_SUCCESS98","OP_IF","OP_NOTIF","OP_ELSE","OP_ENDIF","OP_VERIFY","OP_RETURN","OP_TOALTSTACK","OP_FROMALTSTACK","OP_2DROP","OP_2DUP","OP_3DUP","OP_2OVER","OP_2ROT","OP_2SWAP","OP_IFDUP","OP_DEPTH","OP_DROP","OP_DUP","OP_NIP","OP_OVER","OP_PICK","OP_ROLL","OP_ROT","OP_SWAP","OP_TUCK","OP_SUCCESS126","OP_SUCCESS127","OP_SUCCESS128","OP_SUCCESS129","OP_SIZE","OP_SUCCESS131","OP_SUCCESS132","OP_SUCCESS133","OP_SUCCESS134","OP_EQUAL","OP_EQUALVERIFY","OP_SUCCESS137","OP_SUCCESS138","OP_1ADD","OP_1SUB","OP_SUCCESS141","OP_SUCCESS142","OP_NEGATE","OP_ABS","OP_NOT","OP_0NOTEQUAL","OP_ADD","OP_SUB","OP_SUCCESS149","OP_SUCCESS150","OP_SUCCESS151","OP_SUCCESS152","OP_SUCCESS153","OP_BOOLAND","OP_BOOLOR","OP_NUMEQUAL","OP_NUMEQUALVERIFY","OP_NUMNOTEQUAL","OP_LESSTHAN","OP_GREATERTHAN","OP_LESSTHANOREQUAL","OP_GREATERTHANOREQUAL","OP_MIN","OP_MAX","OP_WITHIN","OP_RIPEMD160","OP_SHA1","OP_SHA256","OP_HASH160","OP_HASH256","OP_CODESEPARATOR","OP_CHECKSIG","OP_CHECKSIGVERIFY","OP_CHECKMULTISIG","OP_CHECKMULTISIGVERIFY","OP_NOP1","OP_CHECKLOCKTIMEVERIFY","OP_CHECKSEQUENCEVERIFY","OP_NOP4","OP_NOP5","OP_NOP6","OP_NOP7","OP_NOP8","OP_NOP9","OP_NOP10","OP_CHECKSIGADD","get_op_code","get_asm_code","get_op_type","is_valid_op","MAX_WORD_SIZE","encode_script","encode_script_word","asm_code","split_script_word","prefix_word_size","get_size_varint","decode_script","stream","stack","stack_size","word_type","word_size","is_valid_script","_26n","ScribeEncoder","decode_inscription","envelopes","start_idx","findIndex","stop_idx","env","parse_envelopes","parse_record","encode_inscription","create_envelope","asm","delegate","encode_id","ref","opcode","encode_pointer","pointer","ptr","rune","encode_rune_label","mimetype","encode_label","content","encode_content","envelope","record","decode_label","decode_pointer","decode_id","decode_rune_label","decode_content","identifier","hexstrs","charCode","fromCharCode","TIMELOCK_TYPE","TIMELOCK_VALUE_MASK","TIMELOCK_VALUE_MAX","SequenceUtil","encode_sequence","mode","parse_height","ts","parse_stamp","decode_sequence","sequence","parse_sequence","ScriptUtil","prefix_script_size","parse_script_pubkeys","matchAll","prefix_size","is_valid","get_pubkeys","OPCODES","get_prevout","vin","prevout","parse_txinput","txdata","txindex","txinput","get_annex_data","witness","annex","COINBASE","TXID","repeat","VOUT","DEFAULT","LOCKTIME","SEQUENCE","TAPLEAF_VERSIONS","LOCK_SCRIPT_REGEX","p2pkh","p2sh","p2wpkh","p2wsh","p2tr","opreturn","SIGHASH_SEGWIT","SIGHASH_TAPROOT","GLOBAL_BASE","GLOBAL_WIT","TXIN_BASE","TXOUT_BASE","taptree","z.object","leaves","sats","tx_output","script_pk","tx_input","coinbase","script_sig","tx_data","vout_template","vin_template","tx_template","assert_tx_template","Schema.tx.tx_template","assert_has_prevouts","txin","assert_tx_data","Schema.tx.tx_data","assert_vin_template","Schema.tx.vin_template","assert_vout_template","Schema.tx.vout_template","encode_tx","use_segwit","encode_tx_version","encode_tx_inputs","encode_tx_outputs","encode_vin_witness","encode_tx_locktime","encode_txin_txid","encode_txin_vout","encode_txin_sequence","raw","encode_vin","encode_script_data","encode_vout_value","output","encode_tx_vout","txout","param","get_vout_type","get_vout_version","normalize_sequence","normalize_value","normalize_prevout","create_coinbase_input","create_virtual_input","create_spend_input","create_tx_input","create_tx_output","create_tx","decode_tx","read_version","has_witness","marker","flag","check_witness_flag","inputs","vinCount","read_vin","read_inputs","outputs","vcount","read_vout","read_outputs","read_witness","read_locktime","read_payload","parse_tx","prevouts","tx","Schema.tx.tx_input","Schema.tx.tx_output","txinputs","fees","txoutput","total","weight","remain","vsize","hash_segwit_tx","sigflag","is_anypay","CONST.SIGHASH_SEGWIT","prevIdx","pkhash","sighash","bip143_hash_prevouts","bip143_hash_sequence","bip143_hash_outputs","isAnypay","isAnyPay","encode_tapscript","encode_tapleaf","encode_leaf_version","encode_tapbranch","leaf_a","leaf_b","encode_taptweak","hash_taproot_tx","template","get_taproot_tx_preimage","extflag","key_version","separator_pos","CONST.SIGHASH_TAPROOT","extension","spendType","preimage","bip341_hash_outpoints","bip341_hash_amounts","bip341_hash_scripts","bip341_hash_sequence","bip341_hash_outputs","bip341_hash_output","format_sigflag","seckey","ECC.get_ecdsa_sig","ECC.get_bip340_sig","_txdata","_config","console","warn","merkleize","tree","tapleaf","new_target","branches","branch","leaf","parse_witness","elems","elem","parse_annex_data","pop","cblock","parse_cblock_data","param_0","param_1","param_x","parse_witness_type","parse_witness_version","parse_witness_script","parse_cblock","cbyte","int_key","parity","parse_cblock_parity","cbits","parse_pubkey_parity","DEFAULT_VERSION","Schema.taproot.config","taproot","proofs","taptweak","twk_key","ECC.tweak_pubkey","tapkey","ECC.serialize_pubkey","block","cblk","ext_key","tweaked_key","next"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37]}
|