@vbyte/btc-dev 1.1.5 → 1.1.6
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/lib/address/api.d.ts +1 -1
- package/dist/lib/address/api.js +8 -8
- package/dist/main.cjs +9 -9
- package/dist/main.cjs.map +1 -1
- package/dist/module.mjs +9 -9
- package/dist/module.mjs.map +1 -1
- package/dist/package.json +1 -1
- package/dist/script.js +6 -6
- package/dist/script.js.map +1 -1
- package/package.json +1 -1
- package/src/lib/address/api.ts +13 -13
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/v4/core/core.js","../node_modules/zod/v4/core/util.js","../node_modules/zod/v4/core/errors.js","../node_modules/zod/v4/core/parse.js","../node_modules/zod/v4/core/regexes.js","../node_modules/zod/v4/core/checks.js","../node_modules/zod/v4/core/doc.js","../node_modules/zod/v4/core/versions.js","../node_modules/zod/v4/core/schemas.js","../node_modules/zod/v4/core/registries.js","../node_modules/zod/v4/core/api.js","../node_modules/zod/v4/classic/iso.js","../node_modules/zod/v4/classic/errors.js","../node_modules/zod/v4/classic/parse.js","../node_modules/zod/v4/classic/schemas.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/const.ts","../src/lib/script/lock.ts","../src/lib/address/script.ts","../src/lib/address/util.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/api.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/schema/taproot.ts","../src/schema/tx.ts","../src/lib/tx/validate.ts","../src/lib/tx/encode.ts","../src/lib/tx/decode.ts","../src/lib/tx/parse.ts","../src/lib/tx/util.ts","../src/lib/tx/create.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. 'secret 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), _7n = /* @__PURE__ */ BigInt(7);\n// prettier-ignore\nconst _8n = /* @__PURE__ */ BigInt(8), _9n = /* @__PURE__ */ BigInt(9), _16n = /* @__PURE__ */ BigInt(16);\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}\nfunction assertIsSquare(Fp, root, n) {\n if (!Fp.eql(Fp.sqr(root), n))\n throw new Error('Cannot find square root');\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 assertIsSquare(Fp, root, n);\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 assertIsSquare(Fp, root, n);\n return root;\n}\n// Based on RFC9380, Kong algorithm\n// prettier-ignore\nfunction sqrt9mod16(P) {\n const Fp_ = Field(P);\n const tn = tonelliShanks(P);\n const c1 = tn(Fp_, Fp_.neg(Fp_.ONE)); // 1. c1 = sqrt(-1) in F, i.e., (c1^2) == -1 in F\n const c2 = tn(Fp_, c1); // 2. c2 = sqrt(c1) in F, i.e., (c2^2) == c1 in F\n const c3 = tn(Fp_, Fp_.neg(c1)); // 3. c3 = sqrt(-c1) in F, i.e., (c3^2) == -c1 in F\n const c4 = (P + _7n) / _16n; // 4. c4 = (q + 7) / 16 # Integer arithmetic\n return (Fp, n) => {\n let tv1 = Fp.pow(n, c4); // 1. tv1 = x^c4\n let tv2 = Fp.mul(tv1, c1); // 2. tv2 = c1 * tv1\n const tv3 = Fp.mul(tv1, c2); // 3. tv3 = c2 * tv1\n const tv4 = Fp.mul(tv1, c3); // 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 const root = Fp.cmov(tv1, tv2, e3); // 10. z = CMOV(tv1, tv2, e3) # Select sqrt from tv1 & tv2\n assertIsSquare(Fp, root, n);\n return root;\n };\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 < _3n)\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. P ≡ 9 (mod 16)\n * 4. 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) => Kong algorithm, page 11 of https://eprint.iacr.org/2012/685.pdf (algorithm 4)\n if (P % _16n === _9n)\n return sqrt9mod16(P);\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, // TODO: use opts only in v2?\nisLE = 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 let modOnDecode = false;\n let allowedLengths = 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 if (typeof _opts.modOnDecode === 'boolean')\n modOnDecode = _opts.modOnDecode;\n allowedLengths = _opts.allowedLengths;\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 allowedLengths: allowedLengths,\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, skipValidation = true) => {\n if (allowedLengths) {\n if (!allowedLengths.includes(bytes.length) || bytes.length > BYTES) {\n throw new Error('Field.fromBytes: expected ' + allowedLengths + ' bytes, got ' + bytes.length);\n }\n const padded = new Uint8Array(BYTES);\n // isLE add 0 to right, !isLE to the left.\n padded.set(bytes, isLE ? 0 : padded.length - bytes.length);\n bytes = padded;\n }\n if (bytes.length !== BYTES)\n throw new Error('Field.fromBytes: expected ' + BYTES + ' bytes, got ' + bytes.length);\n let scalar = isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n if (modOnDecode)\n scalar = mod(scalar, ORDER);\n if (!skipValidation)\n if (!f.isValid(scalar))\n throw new Error('invalid field element: outside of range 0..ORDER');\n // NOTE: we don't validate scalar here, please use isValid. This done such way because some\n // protocol may allow non-reduced scalar that reduced later or changed some other way.\n return scalar;\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}\n// Generic random scalar, we can do same for other fields if via Fp2.mul(Fp2.ONE, Fp2.random)?\n// This allows unsafe methods like ignore bias or zero. These unsafe, but often used in different protocols (if deterministic RNG).\n// which mean we cannot force this via opts.\n// Not sure what to do with randomBytes, we can accept it inside opts if wanted.\n// Probably need to export getMinHashLength somewhere?\n// random(bytes?: Uint8Array, unsafeAllowZero = false, unsafeAllowBias = false) {\n// const LEN = !unsafeAllowBias ? getMinHashLength(ORDER) : BYTES;\n// if (bytes === undefined) bytes = randomBytes(LEN); // _opts.randomBytes?\n// const num = isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n// // `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0\n// const reduced = unsafeAllowZero ? mod(num, ORDER) : mod(num, ORDER - _1n) + _1n;\n// return reduced;\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, points) {\n const invertedZs = FpInvertBatch(c.Fp, points.map((p) => p.Z));\n return points.map((p, i) => c.fromAffine(p.toAffine(invertedZs[i])));\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 // To disable precomputes:\n // return 1;\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 * Table generation takes **30MB of ram and 10ms on high-end CPU**,\n * but may take much longer on slow devices. Actual generation will happen on\n * first call of `multiply()`. By default, `BASE` point is precomputed.\n *\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 class wNAF {\n // Parametrized with a given Point class (not individual point)\n constructor(Point, bits) {\n this.BASE = Point.BASE;\n this.ZERO = Point.ZERO;\n this.Fn = Point.Fn;\n this.bits = bits;\n }\n // non-const time multiplication ladder\n _unsafeLadder(elm, n, p = this.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 point Point instance\n * @param W window size\n * @returns precomputed point tables flattened to a single array\n */\n precomputeWindow(point, W) {\n const { windows, windowSize } = calcWOpts(W, this.bits);\n const points = [];\n let p = point;\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 * More compact implementation:\n * https://github.com/paulmillr/noble-secp256k1/blob/47cb1669b6e506ad66b35fe7d76132ae97465da2/index.ts#L502-L541\n * @returns real and fake (for const-time) points\n */\n wNAF(W, precomputes, n) {\n // Scalar should be smaller than field order\n if (!this.Fn.isValid(n))\n throw new Error('invalid scalar');\n // Accumulators\n let p = this.ZERO;\n let f = this.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, this.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 acc accumulator point to add result of multiplication\n * @returns point\n */\n wNAFUnsafe(W, precomputes, n, acc = this.ZERO) {\n const wo = calcWOpts(W, this.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, point, transform) {\n // Calculate precomputes on a first run, reuse them after\n let comp = pointPrecomputes.get(point);\n if (!comp) {\n comp = this.precomputeWindow(point, 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(point, comp);\n }\n }\n return comp;\n }\n cached(point, scalar, transform) {\n const W = getW(point);\n return this.wNAF(W, this.getPrecomputes(W, point, transform), scalar);\n }\n unsafe(point, scalar, transform, prev) {\n const W = getW(point);\n if (W === 1)\n return this._unsafeLadder(point, scalar, prev); // For W=1 ladder is ~x2 faster\n return this.wNAFUnsafe(W, this.getPrecomputes(W, point, transform), scalar, 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 createCache(P, W) {\n validateW(W, this.bits);\n pointWindowSizes.set(P, W);\n pointPrecomputes.delete(P);\n }\n hasCache(elm) {\n return getW(elm) !== 1;\n }\n}\n/**\n * Endomorphism-specific multiplication for Koblitz curves.\n * Cost: 128 dbl, 0-256 adds.\n */\nexport function mulEndoUnsafe(Point, point, k1, k2) {\n let acc = point;\n let p1 = Point.ZERO;\n let p2 = Point.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 secret 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 { ahash } from '@noble/hashes/utils';\nimport { _validateObject, abool, abytes, aInRange, bitLen, 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\";\n// We construct basis in such way that den is always positive and equals n, but num sign depends on basis (not on secret value)\nconst divNearest = (num, den) => (num + (num >= 0 ? den : -den) / _2n) / den;\n/**\n * Splits scalar for GLV endomorphism.\n */\nexport function _splitEndoScalar(k, basis, n) {\n // Split scalar into two such that part is ~half bits: `abs(part) < sqrt(N)`\n // Since part can be negative, we need to do this on point.\n // TODO: verifyScalar function which consumes lambda\n const [[a1, b1], [a2, b2]] = basis;\n const c1 = divNearest(b2 * k, n);\n const c2 = divNearest(-b1 * k, n);\n // |k1|/|k2| is < sqrt(N), but can be negative.\n // If we do `k1 mod N`, we'll get big scalar (`> sqrt(N)`): so, we do cheaper negation instead.\n let k1 = k - c1 * a1 - c2 * a2;\n let k2 = -c1 * b1 - c2 * b2;\n const k1neg = k1 < _0n;\n const k2neg = k2 < _0n;\n if (k1neg)\n k1 = -k1;\n if (k2neg)\n k2 = -k2;\n // Double check that resulting scalar less than half bits of N: otherwise wNAF will fail.\n // This should only happen on wrong basises. Also, math inside is too complex and I don't trust it.\n const MAX_NUM = bitMask(Math.ceil(bitLen(n) / 2)) + _1n; // Half bits of N\n if (k1 < _0n || k1 >= MAX_NUM || k2 < _0n || k2 >= MAX_NUM) {\n throw new Error('splitScalar (endomorphism): failed, k=' + k);\n }\n return { k1neg, k1, k2neg, k2 };\n}\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 _normFnElement(Fn, key) {\n const { BYTES: expected } = Fn;\n let num;\n if (typeof key === 'bigint') {\n num = key;\n }\n else {\n let bytes = ensureBytes('private key', key);\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 (!Fn.isValidNot0(num))\n throw new Error('invalid private key: out of range [1..N-1]');\n return num;\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) || typeof endo.beta !== 'bigint' || !Array.isArray(endo.basises)) {\n throw new Error('invalid endo: expected \"beta\": bigint and \"basises\": array');\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 function splitEndoScalarN(k) {\n if (!endo || !endo.basises)\n throw new Error('no endo');\n return _splitEndoScalar(k, endo.basises, Fn.ORDER);\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 { X, Y, Z } = p;\n // Fast-path for normalized points\n if (Fp.eql(Z, Fp.ONE))\n return { x: X, y: 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 x = Fp.mul(X, iz);\n const y = 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, y };\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.Y))\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.X, endoBeta), k2p.Y, k2p.Z);\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(X, Y, Z) {\n this.X = acoord('x', X);\n this.Y = acoord('y', Y, true);\n this.Z = acoord('z', Z);\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 // TODO: remove\n get px() {\n return this.X;\n }\n get py() {\n return this.X;\n }\n get pz() {\n return this.Z;\n }\n static normalizeZ(points) {\n return normalizeZ(Point, 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 return Point.BASE.multiply(_normFnElement(Fn, privateKey));\n }\n // TODO: remove\n static msm(points, scalars) {\n return pippenger(Point, Fn, points, scalars);\n }\n _setWindowSize(windowSize) {\n this.precompute(windowSize);\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.createCache(this, windowSize);\n if (!isLazy)\n this.multiply(_3n); // random number\n return this;\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 { X: X1, Y: Y1, Z: Z1 } = this;\n const { X: X2, Y: Y2, Z: 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.X, Fp.neg(this.Y), this.Z);\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 { X: X1, Y: Y1, Z: 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 { X: X1, Y: Y1, Z: Z1 } = this;\n const { X: X2, Y: Y2, Z: 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.cached(this, n, (p) => normalizeZ(Point, p));\n /** See docs for {@link EndomorphismOpts} */\n if (endo) {\n const { k1neg, k1, k2neg, k2 } = splitEndoScalarN(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 normalizeZ(Point, [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 secret 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.hasCache(this))\n return this.multiply(sc);\n if (endo) {\n const { k1neg, k1, k2neg, k2 } = splitEndoScalarN(sc);\n const { p1, p2 } = mulEndoUnsafe(Point, p, k1, k2); // 30% faster vs wnaf.unsafe\n return finishEndo(endo.beta, p1, p2, k1neg, k2neg);\n }\n else {\n return wnaf.unsafe(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.unsafe(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 isSmallOrder() {\n // can we use this.clearCofactor()?\n return this.multiplyUnsafe(cofactor).is0();\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 = new wNAF(Point, curveOpts.endo ? Math.ceil(bits / 2) : bits);\n return Point;\n}\n// _legacyWeierstrass\n// TODO: remove\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}\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/**\n * Creates ECDSA for given elliptic curve Point and hash function.\n */\nexport function ecdsa(Point, hash, ecdsaOpts = {}) {\n ahash(hash);\n _validateObject(ecdsaOpts, {}, {\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(hash, key, concatBytes(...msgs)));\n const { Fp, Fn } = Point;\n const { ORDER: CURVE_ORDER, BITS: fnBits } = Fn;\n const seedLen = getMinHashLength(CURVE_ORDER);\n const lengths = {\n secret: Fn.BYTES,\n public: 1 + Fp.BYTES,\n publicUncompressed: 1 + 2 * Fp.BYTES,\n signature: 2 * Fn.BYTES,\n seed: seedLen,\n };\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 static fromBytes(bytes, format = 'compact') {\n if (format === 'compact') {\n const L = Fn.BYTES;\n abytes(bytes, L * 2);\n const r = bytes.subarray(0, L);\n const s = bytes.subarray(L, L * 2);\n return new Signature(Fn.fromBytes(r), Fn.fromBytes(s));\n }\n if (format === 'der') {\n abytes(bytes);\n const { r, s } = DER.toSig(bytes);\n return new Signature(r, s);\n }\n throw new Error('invalid format');\n }\n static fromHex(hex, format) {\n return this.fromBytes(hexToBytes(hex), format);\n }\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 = 'compact') {\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 toHex(format) {\n return bytesToHex(this.toBytes(format));\n }\n // TODO: remove\n assertValidity() { }\n static fromCompact(hex) {\n return Signature.fromBytes(ensureBytes('sig', hex), 'compact');\n }\n static fromDER(hex) {\n return Signature.fromBytes(ensureBytes('sig', hex), 'der');\n }\n toDERRawBytes() {\n return this.toBytes('der');\n }\n toDERHex() {\n return bytesToHex(this.toBytes('der'));\n }\n toCompactRawBytes() {\n return this.toBytes('compact');\n }\n toCompactHex() {\n return bytesToHex(this.toBytes('compact'));\n }\n }\n function isValidSecretKey(privateKey) {\n try {\n return !!_normFnElement(Fn, privateKey);\n }\n catch (error) {\n return false;\n }\n }\n function isValidPublicKey(publicKey, isCompressed) {\n try {\n const l = publicKey.length;\n if (isCompressed === true && l !== lengths.public)\n return false;\n if (isCompressed === false && l !== lengths.publicUncompressed)\n return false;\n return !!Point.fromBytes(publicKey);\n }\n catch (error) {\n return false;\n }\n }\n /**\n * Produces cryptographically secure secret key from random of size\n * (groupLen + ceil(groupLen / 2)) with modulo bias being negligible.\n */\n function randomSecretKey(seed = randomBytes_(seedLen)) {\n return mapHashToField(seed, CURVE_ORDER);\n }\n const utils = {\n isValidSecretKey,\n isValidPublicKey,\n randomSecretKey,\n // TODO: remove\n isValidPrivateKey: isValidSecretKey,\n randomPrivateKey: randomSecretKey,\n normPrivateKeyToScalar: (key) => _normFnElement(Fn, key),\n precompute(windowSize = 8, point = Point.BASE) {\n return point.precompute(windowSize, false);\n },\n };\n /**\n * Computes public key for a secret key. Checks for validity of the secret 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(secretKey, isCompressed = true) {\n return Point.BASE.multiply(_normFnElement(Fn, secretKey)).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 // TODO: remove\n if (typeof item === 'bigint')\n return false;\n // TODO: remove\n if (item instanceof Point)\n return true;\n if (Fn.allowedLengths || lengths.secret === lengths.public)\n return undefined;\n const l = ensureBytes('key', item).length;\n return l === lengths.public || l === lengths.publicUncompressed;\n }\n /**\n * ECDH (Elliptic Curve Diffie Hellman).\n * Computes shared public key from secret key A and public key B.\n * Checks: 1) secret key validity 2) shared key is on-curve.\n * Does NOT hash the result.\n * @param isCompressed whether to return compact (default), or full key\n * @returns shared public key\n */\n function getSharedSecret(secretKeyA, publicKeyB, isCompressed = true) {\n if (isProbPub(secretKeyA) === true)\n throw new Error('first arg must be private key');\n if (isProbPub(publicKeyB) === false)\n throw new Error('second arg must be public key');\n const s = _normFnElement(Fn, secretKeyA);\n const b = Point.fromHex(publicKeyB); // checks for being on-curve\n return b.multiply(s).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 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 = _normFnElement(Fn, privateKey); // validate secret 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_(lengths.secret) : ent; // gen 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 // To transform k => Signature:\n // q = k⋅G\n // r = q.x mod n\n // s = k^-1(m + rd) mod n\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 = k⋅G\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 secret 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 */\n function sign(msgHash, secretKey, opts = defaultSigOpts) {\n const { seed, k2sig } = prepSig(msgHash, secretKey, opts); // Steps A, D of RFC6979 3.2.\n const drbg = createHmacDrbg(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 let _sig = undefined;\n let P;\n if (format === undefined) {\n // Try to deduce format\n const isHex = typeof sg === 'string' || isBytes(sg);\n const isObj = !isHex &&\n sg !== null &&\n typeof sg === 'object' &&\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 if (isObj) {\n _sig = new Signature(sg.r, sg.s);\n }\n else 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 _sig = Signature.fromDER(sg);\n }\n catch (derError) {\n if (!(derError instanceof DER.Err))\n throw derError;\n }\n if (!_sig) {\n try {\n _sig = Signature.fromCompact(sg);\n }\n catch (error) {\n return false;\n }\n }\n }\n }\n else {\n if (format === 'compact' || format === 'der') {\n if (typeof sg !== 'string' && !isBytes(sg))\n throw new Error('\"der\" / \"compact\" format expects Uint8Array signature');\n _sig = Signature.fromBytes(ensureBytes('sig', sg), format);\n }\n else if (format === 'js') {\n if (!(sg instanceof Signature))\n throw new Error('\"js\" format expects Signature instance');\n _sig = sg;\n }\n else {\n throw new Error('format must be \"compact\", \"der\" or \"js\"');\n }\n }\n if (!_sig)\n return false;\n try {\n P = Point.fromHex(publicKey);\n if (lowS && _sig.hasHighS())\n return false;\n // todo: optional.hash => hash\n if (prehash)\n msgHash = 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 catch (e) {\n return false;\n }\n }\n function keygen(seed) {\n const secretKey = utils.randomSecretKey(seed);\n return { secretKey, publicKey: getPublicKey(secretKey) };\n }\n return Object.freeze({\n keygen,\n getPublicKey,\n sign,\n verify,\n getSharedSecret,\n utils,\n Point,\n Signature,\n info: { type: 'weierstrass', lengths, publicKeyHasPrefix: true },\n });\n}\n// TODO: remove\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 let allowedLengths = c.allowedPrivateKeyLengths\n ? Array.from(new Set(c.allowedPrivateKeyLengths.map((l) => Math.ceil(l / 2))))\n : undefined;\n const Fn = Field(CURVE.n, {\n BITS: c.nBitLength,\n allowedLengths: allowedLengths,\n modOnDecode: c.wrapPrivateKey,\n });\n const curveOpts = {\n Fp,\n Fn,\n allowInfinityPoint: c.allowInfinityPoint,\n endo: c.endo,\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 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, hash: c.hash, ecdsaOpts };\n}\n// TODO: remove\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 return Object.assign({}, {\n CURVE: c,\n Point: Point,\n ProjectivePoint: Point,\n normPrivateKeyToScalar: (key) => _normFnElement(Fn, key),\n weierstrassEquation,\n isWithinCurveOrder,\n });\n}\n// TODO: remove\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, hash, ecdsaOpts } = _ecdsa_legacy_opts_to_new(c);\n const Point = weierstrassN(CURVE, curveOpts);\n const signs = ecdsa(Point, hash, ecdsaOpts);\n return _ecdsa_new_output_to_legacy(c, signs);\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, mapHashToField, mod, pow2 } from \"./abstract/modular.js\";\nimport { _normFnElement, 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 secp256k1_ENDO = {\n beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'),\n basises: [\n [BigInt('0x3086d221a7d46bcde86c90e49284eb15'), -BigInt('0xe4437ed6010e88286f547fa90abfe4c3')],\n [BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8'), BigInt('0x3086d221a7d46bcde86c90e49284eb15')],\n ],\n};\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nconst _2n = /* @__PURE__ */ BigInt(2);\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 { secretKey, publicKey } = secp256k1.keygen();\n * const msg = new TextEncoder().encode('hello');\n * const sig = secp256k1.sign(msg, secretKey);\n * const isValid = secp256k1.verify(sig, msg, publicKey) === true;\n * ```\n */\nexport const secp256k1 = createCurve({ ...secp256k1_CURVE, Fp: Fpk1, lowS: true, endo: secp256k1_ENDO }, 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 // TODO: replace with Point.Fn.fromBytes(priv)\n let d_ = _normFnElement(Point.Fn, priv);\n let p = Point.BASE.multiply(d_); // P = d'⋅G; 0 < d' < n check is done inside\n const scalar = hasEven(p.y) ? d_ : modN(-d_);\n return { 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(secretKey) {\n return schnorrGetExtPubKey(secretKey).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, secretKey, auxRand = randomBytes(32)) {\n const m = ensureBytes('message', message);\n const { bytes: px, scalar: d } = schnorrGetExtPubKey(secretKey); // 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 { secretKey, publicKey } = schnorr.keygen();\n * // const publicKey = schnorr.getPublicKey(secretKey);\n * const msg = new TextEncoder().encode('hello');\n * const sig = schnorr.sign(msg, secretKey);\n * const isValid = schnorr.verify(sig, msg, publicKey);\n * ```\n */\nexport const schnorr = /* @__PURE__ */ (() => {\n const size = 32;\n const seedLength = 48;\n const randomSecretKey = (seed = randomBytes(seedLength)) => {\n return mapHashToField(seed, secp256k1_CURVE.n);\n };\n // TODO: remove\n secp256k1.utils.randomSecretKey;\n function keygen(seed) {\n const secretKey = randomSecretKey(seed);\n return { secretKey, publicKey: schnorrGetPublicKey(secretKey) };\n }\n return {\n keygen,\n getPublicKey: schnorrGetPublicKey,\n sign: schnorrSign,\n verify: schnorrVerify,\n Point,\n utils: {\n randomSecretKey: randomSecretKey,\n randomPrivateKey: randomSecretKey,\n taggedHash,\n // TODO: remove\n lift_x,\n pointToBytes,\n numberToBytesBE,\n bytesToNumberBE,\n mod,\n },\n info: {\n type: 'weierstrass',\n publicKeyHasPrefix: false,\n lengths: {\n secret: size,\n public: size,\n signature: size * 2,\n seed: seedLength,\n },\n },\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}))();\n/** @deprecated use `import { secp256k1_hasher } from '@noble/curves/secp256k1.js';` */\nexport const hashToCurve = /* @__PURE__ */ (() => secp256k1_hasher.hashToCurve)();\n/** @deprecated use `import { secp256k1_hasher } from '@noble/curves/secp256k1.js';` */\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}\n/** @deprecated use new `weierstrass()` and `ecdsa()` methods */\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.y % _2n !== _0n) {\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 sign_ecdsa(seckey, message) {\n const msg = serialize_bytes(message);\n const sig = secp256k1.sign(msg, seckey).toDERRawBytes();\n return Buff.bytes(sig);\n}\nexport function sign_bip340(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(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(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","/** A special constant with type `never` */\nexport const NEVER = Object.freeze({\n status: \"aborted\",\n});\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, params) {\n function init(inst, def) {\n var _a;\n Object.defineProperty(inst, \"_zod\", {\n value: inst._zod ?? {},\n enumerable: false,\n });\n (_a = inst._zod).traits ?? (_a.traits = new Set());\n inst._zod.traits.add(name);\n initializer(inst, def);\n // support prototype modifications\n for (const k in _.prototype) {\n if (!(k in inst))\n Object.defineProperty(inst, k, { value: _.prototype[k].bind(inst) });\n }\n inst._zod.constr = _;\n inst._zod.def = def;\n }\n // doesn't work if Parent has a constructor with arguments\n const Parent = params?.Parent ?? Object;\n class Definition extends Parent {\n }\n Object.defineProperty(Definition, \"name\", { value: name });\n function _(def) {\n var _a;\n const inst = params?.Parent ? new Definition() : this;\n init(inst, def);\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n for (const fn of inst._zod.deferred) {\n fn();\n }\n return inst;\n }\n Object.defineProperty(_, \"init\", { value: init });\n Object.defineProperty(_, Symbol.hasInstance, {\n value: (inst) => {\n if (params?.Parent && inst instanceof params.Parent)\n return true;\n return inst?._zod?.traits?.has(name);\n },\n });\n Object.defineProperty(_, \"name\", { value: name });\n return _;\n}\n////////////////////////////// UTILITIES ///////////////////////////////////////\nexport const $brand = Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n constructor() {\n super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n }\n}\nexport const globalConfig = {};\nexport function config(newConfig) {\n if (newConfig)\n Object.assign(globalConfig, newConfig);\n return globalConfig;\n}\n","// functions\nexport function assertEqual(val) {\n return val;\n}\nexport function assertNotEqual(val) {\n return val;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n throw new Error();\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n const values = Object.entries(entries)\n .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n .map(([_, v]) => v);\n return values;\n}\nexport function joinValues(array, separator = \"|\") {\n return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n if (typeof value === \"bigint\")\n return value.toString();\n return value;\n}\nexport function cached(getter) {\n const set = false;\n return {\n get value() {\n if (!set) {\n const value = getter();\n Object.defineProperty(this, \"value\", { value });\n return value;\n }\n throw new Error(\"cached value already set\");\n },\n };\n}\nexport function nullish(input) {\n return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n return source.slice(start, end);\n}\nexport function 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 function defineLazy(object, key, getter) {\n const set = false;\n Object.defineProperty(object, key, {\n get() {\n if (!set) {\n const value = getter();\n object[key] = value;\n return value;\n }\n throw new Error(\"cached value already set\");\n },\n set(v) {\n Object.defineProperty(object, key, {\n value: v,\n // configurable: true,\n });\n // object[key] = v;\n },\n configurable: true,\n });\n}\nexport function assignProp(target, prop, value) {\n Object.defineProperty(target, prop, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n}\nexport function getElementAtPath(obj, path) {\n if (!path)\n return obj;\n return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n const keys = Object.keys(promisesObj);\n const promises = keys.map((key) => promisesObj[key]);\n return Promise.all(promises).then((results) => {\n const resolvedObj = {};\n for (let i = 0; i < keys.length; i++) {\n resolvedObj[keys[i]] = results[i];\n }\n return resolvedObj;\n });\n}\nexport function randomString(length = 10) {\n const chars = \"abcdefghijklmnopqrstuvwxyz\";\n let str = \"\";\n for (let i = 0; i < length; i++) {\n str += chars[Math.floor(Math.random() * chars.length)];\n }\n return str;\n}\nexport function esc(str) {\n return JSON.stringify(str);\n}\nexport const captureStackTrace = Error.captureStackTrace\n ? Error.captureStackTrace\n : (..._args) => { };\nexport function isObject(data) {\n return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = cached(() => {\n if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n return false;\n }\n try {\n const F = Function;\n new F(\"\");\n return true;\n }\n catch (_) {\n return false;\n }\n});\nexport function isPlainObject(o) {\n if (isObject(o) === false)\n return false;\n // modified constructor\n const ctor = o.constructor;\n if (ctor === undefined)\n return true;\n // modified prototype\n const prot = ctor.prototype;\n if (isObject(prot) === false)\n return false;\n // ctor doesn't have static `isPrototypeOf`\n if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n return false;\n }\n return true;\n}\nexport function numKeys(data) {\n let keyCount = 0;\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n keyCount++;\n }\n }\n return keyCount;\n}\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return \"undefined\";\n case \"string\":\n return \"string\";\n case \"number\":\n return Number.isNaN(data) ? \"nan\" : \"number\";\n case \"boolean\":\n return \"boolean\";\n case \"function\":\n return \"function\";\n case \"bigint\":\n return \"bigint\";\n case \"symbol\":\n return \"symbol\";\n case \"object\":\n if (Array.isArray(data)) {\n return \"array\";\n }\n if (data === null) {\n return \"null\";\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return \"promise\";\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return \"map\";\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return \"set\";\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return \"date\";\n }\n if (typeof File !== \"undefined\" && data instanceof File) {\n return \"file\";\n }\n return \"object\";\n default:\n throw new Error(`Unknown data type: ${t}`);\n }\n};\nexport const propertyKeyTypes = new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = new Set([\"string\", \"number\", \"bigint\", \"boolean\", \"symbol\", \"undefined\"]);\nexport function escapeRegex(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n const cl = new inst._zod.constr(def ?? inst._zod.def);\n if (!def || params?.parent)\n cl._zod.parent = inst;\n return cl;\n}\nexport function normalizeParams(_params) {\n const params = _params;\n if (!params)\n return {};\n if (typeof params === \"string\")\n return { error: () => params };\n if (params?.message !== undefined) {\n if (params?.error !== undefined)\n throw new Error(\"Cannot specify both `message` and `error` params\");\n params.error = params.message;\n }\n delete params.message;\n if (typeof params.error === \"string\")\n return { ...params, error: () => params.error };\n return params;\n}\nexport function createTransparentProxy(getter) {\n let target;\n return new Proxy({}, {\n get(_, prop, receiver) {\n target ?? (target = getter());\n return Reflect.get(target, prop, receiver);\n },\n set(_, prop, value, receiver) {\n target ?? (target = getter());\n return Reflect.set(target, prop, value, receiver);\n },\n has(_, prop) {\n target ?? (target = getter());\n return Reflect.has(target, prop);\n },\n deleteProperty(_, prop) {\n target ?? (target = getter());\n return Reflect.deleteProperty(target, prop);\n },\n ownKeys(_) {\n target ?? (target = getter());\n return Reflect.ownKeys(target);\n },\n getOwnPropertyDescriptor(_, prop) {\n target ?? (target = getter());\n return Reflect.getOwnPropertyDescriptor(target, prop);\n },\n defineProperty(_, prop, descriptor) {\n target ?? (target = getter());\n return Reflect.defineProperty(target, prop, descriptor);\n },\n });\n}\nexport function stringifyPrimitive(value) {\n if (typeof value === \"bigint\")\n return value.toString() + \"n\";\n if (typeof value === \"string\")\n return `\"${value}\"`;\n return `${value}`;\n}\nexport function optionalKeys(shape) {\n return Object.keys(shape).filter((k) => {\n return shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n });\n}\nexport const NUMBER_FORMAT_RANGES = {\n safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n int32: [-2147483648, 2147483647],\n uint32: [0, 4294967295],\n float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n};\nexport const BIGINT_FORMAT_RANGES = {\n int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n const newShape = {};\n const currDef = schema._zod.def; //.shape;\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // pick key\n newShape[key] = currDef.shape[key];\n }\n return clone(schema, {\n ...schema._zod.def,\n shape: newShape,\n checks: [],\n });\n}\nexport function omit(schema, mask) {\n const newShape = { ...schema._zod.def.shape };\n const currDef = schema._zod.def; //.shape;\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n delete newShape[key];\n }\n return clone(schema, {\n ...schema._zod.def,\n shape: newShape,\n checks: [],\n });\n}\nexport function extend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to extend: expected a plain object\");\n }\n const def = {\n ...schema._zod.def,\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n checks: [], // delete existing checks\n };\n return clone(schema, def);\n}\nexport function merge(a, b) {\n return clone(a, {\n ...a._zod.def,\n get shape() {\n const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n catchall: b._zod.def.catchall,\n checks: [], // delete existing checks\n });\n}\nexport function partial(Class, schema, mask) {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in oldShape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n else {\n for (const key in oldShape) {\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n return clone(schema, {\n ...schema._zod.def,\n shape,\n checks: [],\n });\n}\nexport function required(Class, schema, mask) {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n else {\n for (const key in oldShape) {\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n return clone(schema, {\n ...schema._zod.def,\n shape,\n // optional: [],\n checks: [],\n });\n}\nexport function aborted(x, startIndex = 0) {\n for (let i = startIndex; i < x.issues.length; i++) {\n if (x.issues[i]?.continue !== true)\n return true;\n }\n return false;\n}\nexport function prefixIssues(path, issues) {\n return issues.map((iss) => {\n var _a;\n (_a = iss).path ?? (_a.path = []);\n iss.path.unshift(path);\n return iss;\n });\n}\nexport function unwrapMessage(message) {\n return typeof message === \"string\" ? message : message?.message;\n}\nexport function finalizeIssue(iss, ctx, config) {\n const full = { ...iss, path: iss.path ?? [] };\n // for backwards compatibility\n if (!iss.message) {\n const message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n unwrapMessage(ctx?.error?.(iss)) ??\n unwrapMessage(config.customError?.(iss)) ??\n unwrapMessage(config.localeError?.(iss)) ??\n \"Invalid input\";\n full.message = message;\n }\n // delete (full as any).def;\n delete full.inst;\n delete full.continue;\n if (!ctx?.reportInput) {\n delete full.input;\n }\n return full;\n}\nexport function getSizableOrigin(input) {\n if (input instanceof Set)\n return \"set\";\n if (input instanceof Map)\n return \"map\";\n if (input instanceof File)\n return \"file\";\n return \"unknown\";\n}\nexport function getLengthableOrigin(input) {\n if (Array.isArray(input))\n return \"array\";\n if (typeof input === \"string\")\n return \"string\";\n return \"unknown\";\n}\nexport function issue(...args) {\n const [iss, input, inst] = args;\n if (typeof iss === \"string\") {\n return {\n message: iss,\n code: \"custom\",\n input,\n inst,\n };\n }\n return { ...iss };\n}\nexport function cleanEnum(obj) {\n return Object.entries(obj)\n .filter(([k, _]) => {\n // return true if NaN, meaning it's not a number, thus a string key\n return Number.isNaN(Number.parseInt(k, 10));\n })\n .map((el) => el[1]);\n}\n// instanceof\nexport class Class {\n constructor(..._args) { }\n}\n","import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\nconst initializer = (inst, def) => {\n inst.name = \"$ZodError\";\n Object.defineProperty(inst, \"_zod\", {\n value: inst._zod,\n enumerable: false,\n });\n Object.defineProperty(inst, \"issues\", {\n value: def,\n enumerable: false,\n });\n Object.defineProperty(inst, \"message\", {\n get() {\n return JSON.stringify(def, util.jsonStringifyReplacer, 2);\n },\n enumerable: true,\n // configurable: false,\n });\n Object.defineProperty(inst, \"toString\", {\n value: () => inst.message,\n enumerable: false,\n });\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, { Parent: Error });\nexport function flattenError(error, mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of error.issues) {\n if (sub.path.length > 0) {\n fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n fieldErrors[sub.path[0]].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n}\nexport function formatError(error, _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\" && issue.errors.length) {\n issue.errors.map((issues) => processError({ issues }));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues });\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues });\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 }\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(error);\n return fieldErrors;\n}\nexport function treeifyError(error, _mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const result = { errors: [] };\n const processError = (error, path = []) => {\n var _a, _b;\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n // regular union error\n issue.errors.map((issues) => processError({ issues }, issue.path));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues }, issue.path);\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues }, issue.path);\n }\n else {\n const fullpath = [...path, ...issue.path];\n if (fullpath.length === 0) {\n result.errors.push(mapper(issue));\n continue;\n }\n let curr = result;\n let i = 0;\n while (i < fullpath.length) {\n const el = fullpath[i];\n const terminal = i === fullpath.length - 1;\n if (typeof el === \"string\") {\n curr.properties ?? (curr.properties = {});\n (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });\n curr = curr.properties[el];\n }\n else {\n curr.items ?? (curr.items = []);\n (_b = curr.items)[el] ?? (_b[el] = { errors: [] });\n curr = curr.items[el];\n }\n if (terminal) {\n curr.errors.push(mapper(issue));\n }\n i++;\n }\n }\n }\n };\n processError(error);\n return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n * issues: [\n * {\n * expected: 'string',\n * code: 'invalid_type',\n * path: [ 'username' ],\n * message: 'Invalid input: expected string'\n * },\n * {\n * expected: 'number',\n * code: 'invalid_type',\n * path: [ 'favoriteNumbers', 1 ],\n * message: 'Invalid input: expected number'\n * }\n * ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n * ✖ Expected number, received string at \"username\n * favoriteNumbers[0]\n * ✖ Invalid input: expected number\n * ```\n */\nexport function toDotPath(path) {\n const segs = [];\n for (const seg of path) {\n if (typeof seg === \"number\")\n segs.push(`[${seg}]`);\n else if (typeof seg === \"symbol\")\n segs.push(`[${JSON.stringify(String(seg))}]`);\n else if (/[^\\w$]/.test(seg))\n segs.push(`[${JSON.stringify(seg)}]`);\n else {\n if (segs.length)\n segs.push(\".\");\n segs.push(seg);\n }\n }\n return segs.join(\"\");\n}\nexport function prettifyError(error) {\n const lines = [];\n // sort by path length\n const issues = [...error.issues].sort((a, b) => a.path.length - b.path.length);\n // Process each issue\n for (const issue of issues) {\n lines.push(`✖ ${issue.message}`);\n if (issue.path?.length)\n lines.push(` → at ${toDotPath(issue.path)}`);\n }\n // Convert Map to formatted string\n return lines.join(\"\\n\");\n}\n","import * as core from \"./core.js\";\nimport * as errors from \"./errors.js\";\nimport * as util from \"./util.js\";\nexport const _parse = (_Err) => (schema, value, _ctx, _params) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n if (result.issues.length) {\n const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, _params?.callee);\n throw e;\n }\n return result.value;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => async (schema, value, _ctx, params) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n if (result.issues.length) {\n const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, params?.callee);\n throw e;\n }\n return result.value;\n};\nexport const parseAsync = /* @__PURE__*/ _parseAsync(errors.$ZodRealError);\nexport const _safeParse = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n return result.issues.length\n ? {\n success: false,\n error: new (_Err ?? errors.$ZodError)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n }\n : { success: true, data: result.value };\n};\nexport const safeParse = /* @__PURE__*/ _safeParse(errors.$ZodRealError);\nexport const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n return result.issues.length\n ? {\n success: false,\n error: new _Err(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n }\n : { success: true, data: result.value };\n};\nexport const safeParseAsync = /* @__PURE__*/ _safeParseAsync(errors.$ZodRealError);\n","export const cuid = /^[cC][^\\s-]{8,}$/;\nexport const cuid2 = /^[0-9a-z]+$/;\nexport const ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;\nexport const xid = /^[0-9a-vA-V]{20}$/;\nexport const ksuid = /^[A-Za-z0-9]{27}$/;\nexport const nanoid = /^[a-zA-Z0-9_-]{21}$/;\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nexport const duration = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** Implements ISO 8601-2 extensions like explicit +- prefixes, mixing weeks with other units, and fractional/negative components. */\nexport const extendedDuration = /^[-+]?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/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nexport const guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 4122 UUID.\n *\n * @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nexport const uuid = (version) => {\n if (!version)\n return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$/;\n return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\nexport const uuid4 = /*@__PURE__*/ uuid(4);\nexport const uuid6 = /*@__PURE__*/ uuid(6);\nexport const uuid7 = /*@__PURE__*/ uuid(7);\n/** Practical email validation */\nexport const email = /^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\n/** Equivalent to the HTML5 input[type=email] validation implemented by browsers. Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email */\nexport const html5Email = /^[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/** The classic emailregex.com regex for RFC 5322-compliant emails */\nexport const rfc5322Email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */\nexport const unicodeEmail = /^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u;\nexport const browserEmail = /^[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// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emoji = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nexport function emoji() {\n return new RegExp(_emoji, \"u\");\n}\nexport const ipv4 = /^(?:(?: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])$/;\nexport const ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})$/;\nexport const cidrv4 = /^((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])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nexport const cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\\/(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\nexport const base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nexport const base64url = /^[A-Za-z0-9_-]*$/;\n// based on https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address\n// export const hostname: RegExp =\n// /^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)+([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\-]*[A-Za-z0-9])$/;\nexport const hostname = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexport const domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces)\nexport const e164 = /^\\+(?:[0-9]){6,14}[0-9]$/;\n// const dateSource = `((\\\\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 dateSource = `(?:(?:\\\\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])))`;\nexport const date = /*@__PURE__*/ new RegExp(`^${dateSource}$`);\nfunction timeSource(args) {\n const hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n const regex = typeof args.precision === \"number\"\n ? args.precision === -1\n ? `${hhmm}`\n : args.precision === 0\n ? `${hhmm}:[0-5]\\\\d`\n : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}`\n : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n return regex;\n}\nexport function time(args) {\n return new RegExp(`^${timeSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetime(args) {\n const time = timeSource({ precision: args.precision });\n const opts = [\"Z\"];\n if (args.local)\n opts.push(\"\");\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n const timeRegex = `${time}(?:${opts.join(\"|\")})`;\n return new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\nexport const string = (params) => {\n const regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n return new RegExp(`^${regex}$`);\n};\nexport const bigint = /^\\d+n?$/;\nexport const integer = /^\\d+$/;\nexport const number = /^-?\\d+(?:\\.\\d+)?/i;\nexport const boolean = /true|false/i;\nconst _null = /null/i;\nexport { _null as null };\nconst _undefined = /undefined/i;\nexport { _undefined as undefined };\n// regex for string with no uppercase letters\nexport const lowercase = /^[^A-Z]*$/;\n// regex for string with no lowercase letters\nexport const uppercase = /^[^a-z]*$/;\n","// import { $ZodType } from \"./schemas.js\";\nimport * as core from \"./core.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nexport const $ZodCheck = /*@__PURE__*/ core.$constructor(\"$ZodCheck\", (inst, def) => {\n var _a;\n inst._zod ?? (inst._zod = {});\n inst._zod.def = def;\n (_a = inst._zod).onattach ?? (_a.onattach = []);\n});\nconst numericOriginMap = {\n number: \"number\",\n bigint: \"bigint\",\n object: \"date\",\n};\nexport const $ZodCheckLessThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckLessThan\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const origin = numericOriginMap[typeof def.value];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;\n if (def.value < curr) {\n if (def.inclusive)\n bag.maximum = def.value;\n else\n bag.exclusiveMaximum = def.value;\n }\n });\n inst._zod.check = (payload) => {\n if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {\n return;\n }\n payload.issues.push({\n origin,\n code: \"too_big\",\n maximum: def.value,\n input: payload.value,\n inclusive: def.inclusive,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckGreaterThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const origin = numericOriginMap[typeof def.value];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;\n if (def.value > curr) {\n if (def.inclusive)\n bag.minimum = def.value;\n else\n bag.exclusiveMinimum = def.value;\n }\n });\n inst._zod.check = (payload) => {\n if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {\n return;\n }\n payload.issues.push({\n origin,\n code: \"too_small\",\n minimum: def.value,\n input: payload.value,\n inclusive: def.inclusive,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMultipleOf = \n/*@__PURE__*/ core.$constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.onattach.push((inst) => {\n var _a;\n (_a = inst._zod.bag).multipleOf ?? (_a.multipleOf = def.value);\n });\n inst._zod.check = (payload) => {\n if (typeof payload.value !== typeof def.value)\n throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n const isMultiple = typeof payload.value === \"bigint\"\n ? payload.value % def.value === BigInt(0)\n : util.floatSafeRemainder(payload.value, def.value) === 0;\n if (isMultiple)\n return;\n payload.issues.push({\n origin: typeof payload.value,\n code: \"not_multiple_of\",\n divisor: def.value,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n $ZodCheck.init(inst, def); // no format checks\n def.format = def.format || \"float64\";\n const isInt = def.format?.includes(\"int\");\n const origin = isInt ? \"int\" : \"number\";\n const [minimum, maximum] = util.NUMBER_FORMAT_RANGES[def.format];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n bag.minimum = minimum;\n bag.maximum = maximum;\n if (isInt)\n bag.pattern = regexes.integer;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n if (isInt) {\n if (!Number.isInteger(input)) {\n // invalid_format issue\n // payload.issues.push({\n // expected: def.format,\n // format: def.format,\n // code: \"invalid_format\",\n // input,\n // inst,\n // });\n // invalid_type issue\n payload.issues.push({\n expected: origin,\n format: def.format,\n code: \"invalid_type\",\n input,\n inst,\n });\n return;\n // not_multiple_of issue\n // payload.issues.push({\n // code: \"not_multiple_of\",\n // origin: \"number\",\n // input,\n // inst,\n // divisor: 1,\n // });\n }\n if (!Number.isSafeInteger(input)) {\n if (input > 0) {\n // too_big\n payload.issues.push({\n input,\n code: \"too_big\",\n maximum: Number.MAX_SAFE_INTEGER,\n note: \"Integers must be within the safe integer range.\",\n inst,\n origin,\n continue: !def.abort,\n });\n }\n else {\n // too_small\n payload.issues.push({\n input,\n code: \"too_small\",\n minimum: Number.MIN_SAFE_INTEGER,\n note: \"Integers must be within the safe integer range.\",\n inst,\n origin,\n continue: !def.abort,\n });\n }\n return;\n }\n }\n if (input < minimum) {\n payload.issues.push({\n origin: \"number\",\n input,\n code: \"too_small\",\n minimum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n if (input > maximum) {\n payload.issues.push({\n origin: \"number\",\n input,\n code: \"too_big\",\n maximum,\n inst,\n });\n }\n };\n});\nexport const $ZodCheckBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckBigIntFormat\", (inst, def) => {\n $ZodCheck.init(inst, def); // no format checks\n const [minimum, maximum] = util.BIGINT_FORMAT_RANGES[def.format];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n bag.minimum = minimum;\n bag.maximum = maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n if (input < minimum) {\n payload.issues.push({\n origin: \"bigint\",\n input,\n code: \"too_small\",\n minimum: minimum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n if (input > maximum) {\n payload.issues.push({\n origin: \"bigint\",\n input,\n code: \"too_big\",\n maximum,\n inst,\n });\n }\n };\n});\nexport const $ZodCheckMaxSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxSize\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n if (def.maximum < curr)\n inst._zod.bag.maximum = def.maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size <= def.maximum)\n return;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n code: \"too_big\",\n maximum: def.maximum,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMinSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinSize\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n if (def.minimum > curr)\n inst._zod.bag.minimum = def.minimum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size >= def.minimum)\n return;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n code: \"too_small\",\n minimum: def.minimum,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckSizeEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckSizeEquals\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.minimum = def.size;\n bag.maximum = def.size;\n bag.size = def.size;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size === def.size)\n return;\n const tooBig = size > def.size;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n ...(tooBig ? { code: \"too_big\", maximum: def.size } : { code: \"too_small\", minimum: def.size }),\n inclusive: true,\n exact: true,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMaxLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n if (def.maximum < curr)\n inst._zod.bag.maximum = def.maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length <= def.maximum)\n return;\n const origin = util.getLengthableOrigin(input);\n payload.issues.push({\n origin,\n code: \"too_big\",\n maximum: def.maximum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMinLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinLength\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n if (def.minimum > curr)\n inst._zod.bag.minimum = def.minimum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length >= def.minimum)\n return;\n const origin = util.getLengthableOrigin(input);\n payload.issues.push({\n origin,\n code: \"too_small\",\n minimum: def.minimum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckLengthEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.minimum = def.length;\n bag.maximum = def.length;\n bag.length = def.length;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length === def.length)\n return;\n const origin = util.getLengthableOrigin(input);\n const tooBig = length > def.length;\n payload.issues.push({\n origin,\n ...(tooBig ? { code: \"too_big\", maximum: def.length } : { code: \"too_small\", minimum: def.length }),\n inclusive: true,\n exact: true,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n var _a, _b;\n $ZodCheck.init(inst, def);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n if (def.pattern) {\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(def.pattern);\n }\n });\n if (def.pattern)\n (_a = inst._zod).check ?? (_a.check = (payload) => {\n def.pattern.lastIndex = 0;\n if (def.pattern.test(payload.value))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: def.format,\n input: payload.value,\n ...(def.pattern ? { pattern: def.pattern.toString() } : {}),\n inst,\n continue: !def.abort,\n });\n });\n else\n (_b = inst._zod).check ?? (_b.check = () => { });\n});\nexport const $ZodCheckRegex = /*@__PURE__*/ core.$constructor(\"$ZodCheckRegex\", (inst, def) => {\n $ZodCheckStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n def.pattern.lastIndex = 0;\n if (def.pattern.test(payload.value))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"regex\",\n input: payload.value,\n pattern: def.pattern.toString(),\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckLowerCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.lowercase);\n $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckUpperCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.uppercase);\n $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckIncludes = /*@__PURE__*/ core.$constructor(\"$ZodCheckIncludes\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const escapedRegex = util.escapeRegex(def.includes);\n const pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position}}${escapedRegex}` : escapedRegex);\n def.pattern = pattern;\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.includes(def.includes, def.position))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"includes\",\n includes: def.includes,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckStartsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const pattern = new RegExp(`^${util.escapeRegex(def.prefix)}.*`);\n def.pattern ?? (def.pattern = pattern);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.startsWith(def.prefix))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"starts_with\",\n prefix: def.prefix,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckEndsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const pattern = new RegExp(`.*${util.escapeRegex(def.suffix)}$`);\n def.pattern ?? (def.pattern = pattern);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.endsWith(def.suffix))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"ends_with\",\n suffix: def.suffix,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n///////////////////////////////////\n///// $ZodCheckProperty /////\n///////////////////////////////////\nfunction handleCheckPropertyResult(result, payload, property) {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(property, result.issues));\n }\n}\nexport const $ZodCheckProperty = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperty\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n const result = def.schema._zod.run({\n value: payload.value[def.property],\n issues: [],\n }, {});\n if (result instanceof Promise) {\n return result.then((result) => handleCheckPropertyResult(result, payload, def.property));\n }\n handleCheckPropertyResult(result, payload, def.property);\n return;\n };\n});\nexport const $ZodCheckMimeType = /*@__PURE__*/ core.$constructor(\"$ZodCheckMimeType\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const mimeSet = new Set(def.mime);\n inst._zod.onattach.push((inst) => {\n inst._zod.bag.mime = def.mime;\n });\n inst._zod.check = (payload) => {\n if (mimeSet.has(payload.value.type))\n return;\n payload.issues.push({\n code: \"invalid_value\",\n values: def.mime,\n input: payload.value.type,\n inst,\n });\n };\n});\nexport const $ZodCheckOverwrite = /*@__PURE__*/ core.$constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n payload.value = def.tx(payload.value);\n };\n});\n","export class Doc {\n constructor(args = []) {\n this.content = [];\n this.indent = 0;\n if (this)\n this.args = args;\n }\n indented(fn) {\n this.indent += 1;\n fn(this);\n this.indent -= 1;\n }\n write(arg) {\n if (typeof arg === \"function\") {\n arg(this, { execution: \"sync\" });\n arg(this, { execution: \"async\" });\n return;\n }\n const content = arg;\n const lines = content.split(\"\\n\").filter((x) => x);\n const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));\n const dedented = lines.map((x) => x.slice(minIndent)).map((x) => \" \".repeat(this.indent * 2) + x);\n for (const line of dedented) {\n this.content.push(line);\n }\n }\n compile() {\n const F = Function;\n const args = this?.args;\n const content = this?.content ?? [``];\n const lines = [...content.map((x) => ` ${x}`)];\n // console.log(lines.join(\"\\n\"));\n return new F(...args, lines.join(\"\\n\"));\n }\n}\n","export const version = {\n major: 4,\n minor: 0,\n patch: 5,\n};\n","import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { safeParse, safeParseAsync } from \"./parse.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nimport { version } from \"./versions.js\";\nexport const $ZodType = /*@__PURE__*/ core.$constructor(\"$ZodType\", (inst, def) => {\n var _a;\n inst ?? (inst = {});\n inst._zod.def = def; // set _def property\n inst._zod.bag = inst._zod.bag || {}; // initialize _bag object\n inst._zod.version = version;\n const checks = [...(inst._zod.def.checks ?? [])];\n // if inst is itself a checks.$ZodCheck, run it as a check\n if (inst._zod.traits.has(\"$ZodCheck\")) {\n checks.unshift(inst);\n }\n //\n for (const ch of checks) {\n for (const fn of ch._zod.onattach) {\n fn(inst);\n }\n }\n if (checks.length === 0) {\n // deferred initializer\n // inst._zod.parse is not yet defined\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n inst._zod.deferred?.push(() => {\n inst._zod.run = inst._zod.parse;\n });\n }\n else {\n const runChecks = (payload, checks, ctx) => {\n let isAborted = util.aborted(payload);\n let asyncResult;\n for (const ch of checks) {\n if (ch._zod.def.when) {\n const shouldRun = ch._zod.def.when(payload);\n if (!shouldRun)\n continue;\n }\n else if (isAborted) {\n continue;\n }\n const currLen = payload.issues.length;\n const _ = ch._zod.check(payload);\n if (_ instanceof Promise && ctx?.async === false) {\n throw new core.$ZodAsyncError();\n }\n if (asyncResult || _ instanceof Promise) {\n asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n await _;\n const nextLen = payload.issues.length;\n if (nextLen === currLen)\n return;\n if (!isAborted)\n isAborted = util.aborted(payload, currLen);\n });\n }\n else {\n const nextLen = payload.issues.length;\n if (nextLen === currLen)\n continue;\n if (!isAborted)\n isAborted = util.aborted(payload, currLen);\n }\n }\n if (asyncResult) {\n return asyncResult.then(() => {\n return payload;\n });\n }\n return payload;\n };\n inst._zod.run = (payload, ctx) => {\n const result = inst._zod.parse(payload, ctx);\n if (result instanceof Promise) {\n if (ctx.async === false)\n throw new core.$ZodAsyncError();\n return result.then((result) => runChecks(result, checks, ctx));\n }\n return runChecks(result, checks, ctx);\n };\n }\n inst[\"~standard\"] = {\n validate: (value) => {\n try {\n const r = safeParse(inst, value);\n return r.success ? { value: r.data } : { issues: r.error?.issues };\n }\n catch (_) {\n return safeParseAsync(inst, value).then((r) => (r.success ? { value: r.data } : { issues: r.error?.issues }));\n }\n },\n vendor: \"zod\",\n version: 1,\n };\n});\nexport { clone } from \"./util.js\";\nexport const $ZodString = /*@__PURE__*/ core.$constructor(\"$ZodString\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = [...(inst?._zod.bag?.patterns ?? [])].pop() ?? regexes.string(inst._zod.bag);\n inst._zod.parse = (payload, _) => {\n if (def.coerce)\n try {\n payload.value = String(payload.value);\n }\n catch (_) { }\n if (typeof payload.value === \"string\")\n return payload;\n payload.issues.push({\n expected: \"string\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodStringFormat\", (inst, def) => {\n // check initialization must come first\n checks.$ZodCheckStringFormat.init(inst, def);\n $ZodString.init(inst, def);\n});\nexport const $ZodGUID = /*@__PURE__*/ core.$constructor(\"$ZodGUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.guid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodUUID = /*@__PURE__*/ core.$constructor(\"$ZodUUID\", (inst, def) => {\n if (def.version) {\n const versionMap = {\n v1: 1,\n v2: 2,\n v3: 3,\n v4: 4,\n v5: 5,\n v6: 6,\n v7: 7,\n v8: 8,\n };\n const v = versionMap[def.version];\n if (v === undefined)\n throw new Error(`Invalid UUID version: \"${def.version}\"`);\n def.pattern ?? (def.pattern = regexes.uuid(v));\n }\n else\n def.pattern ?? (def.pattern = regexes.uuid());\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodEmail = /*@__PURE__*/ core.$constructor(\"$ZodEmail\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.email);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodURL = /*@__PURE__*/ core.$constructor(\"$ZodURL\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n try {\n const orig = payload.value;\n const url = new URL(orig);\n const href = url.href;\n if (def.hostname) {\n def.hostname.lastIndex = 0;\n if (!def.hostname.test(url.hostname)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid hostname\",\n pattern: regexes.hostname.source,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n }\n if (def.protocol) {\n def.protocol.lastIndex = 0;\n if (!def.protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid protocol\",\n pattern: def.protocol.source,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n }\n // payload.value = url.href;\n if (!orig.endsWith(\"/\") && href.endsWith(\"/\")) {\n payload.value = href.slice(0, -1);\n }\n else {\n payload.value = href;\n }\n return;\n }\n catch (_) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodEmoji = /*@__PURE__*/ core.$constructor(\"$ZodEmoji\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.emoji());\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodNanoID = /*@__PURE__*/ core.$constructor(\"$ZodNanoID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.nanoid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID = /*@__PURE__*/ core.$constructor(\"$ZodCUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cuid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID2 = /*@__PURE__*/ core.$constructor(\"$ZodCUID2\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cuid2);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodULID = /*@__PURE__*/ core.$constructor(\"$ZodULID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ulid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodXID = /*@__PURE__*/ core.$constructor(\"$ZodXID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.xid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodKSUID = /*@__PURE__*/ core.$constructor(\"$ZodKSUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ksuid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODateTime = /*@__PURE__*/ core.$constructor(\"$ZodISODateTime\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.datetime(def));\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODate = /*@__PURE__*/ core.$constructor(\"$ZodISODate\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.date);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISOTime = /*@__PURE__*/ core.$constructor(\"$ZodISOTime\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.time(def));\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODuration = /*@__PURE__*/ core.$constructor(\"$ZodISODuration\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.duration);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodIPv4 = /*@__PURE__*/ core.$constructor(\"$ZodIPv4\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ipv4);\n $ZodStringFormat.init(inst, def);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = `ipv4`;\n });\n});\nexport const $ZodIPv6 = /*@__PURE__*/ core.$constructor(\"$ZodIPv6\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ipv6);\n $ZodStringFormat.init(inst, def);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = `ipv6`;\n });\n inst._zod.check = (payload) => {\n try {\n new URL(`http://[${payload.value}]`);\n // return;\n }\n catch {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"ipv6\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv4\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cidrv4);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv6\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cidrv6); // not used for validation\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n const [address, prefix] = payload.value.split(\"/\");\n try {\n if (!prefix)\n throw new Error();\n const prefixNum = Number(prefix);\n if (`${prefixNum}` !== prefix)\n throw new Error();\n if (prefixNum < 0 || prefixNum > 128)\n throw new Error();\n new URL(`http://[${address}]`);\n }\n catch {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"cidrv6\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\n////////////////////////////// ZodBase64 //////////////////////////////\nexport function isValidBase64(data) {\n if (data === \"\")\n return true;\n if (data.length % 4 !== 0)\n return false;\n try {\n atob(data);\n return true;\n }\n catch {\n return false;\n }\n}\nexport const $ZodBase64 = /*@__PURE__*/ core.$constructor(\"$ZodBase64\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.base64);\n $ZodStringFormat.init(inst, def);\n inst._zod.onattach.push((inst) => {\n inst._zod.bag.contentEncoding = \"base64\";\n });\n inst._zod.check = (payload) => {\n if (isValidBase64(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"base64\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n////////////////////////////// ZodBase64 //////////////////////////////\nexport function isValidBase64URL(data) {\n if (!regexes.base64url.test(data))\n return false;\n const base64 = data.replace(/[-_]/g, (c) => (c === \"-\" ? \"+\" : \"/\"));\n const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n return isValidBase64(padded);\n}\nexport const $ZodBase64URL = /*@__PURE__*/ core.$constructor(\"$ZodBase64URL\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.base64url);\n $ZodStringFormat.init(inst, def);\n inst._zod.onattach.push((inst) => {\n inst._zod.bag.contentEncoding = \"base64url\";\n });\n inst._zod.check = (payload) => {\n if (isValidBase64URL(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"base64url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodE164 = /*@__PURE__*/ core.$constructor(\"$ZodE164\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.e164);\n $ZodStringFormat.init(inst, def);\n});\n////////////////////////////// ZodJWT //////////////////////////////\nexport function isValidJWT(token, algorithm = null) {\n try {\n const tokensParts = token.split(\".\");\n if (tokensParts.length !== 3)\n return false;\n const [header] = tokensParts;\n if (!header)\n return false;\n const parsedHeader = JSON.parse(atob(header));\n if (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\")\n return false;\n if (!parsedHeader.alg)\n return false;\n if (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm))\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nexport const $ZodJWT = /*@__PURE__*/ core.$constructor(\"$ZodJWT\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (isValidJWT(payload.value, def.alg))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"jwt\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCustomStringFormat\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (def.fn(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: def.format,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodNumber = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = inst._zod.bag.pattern ?? regexes.number;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = Number(payload.value);\n }\n catch (_) { }\n const input = payload.value;\n if (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) {\n return payload;\n }\n const received = typeof input === \"number\"\n ? Number.isNaN(input)\n ? \"NaN\"\n : !Number.isFinite(input)\n ? \"Infinity\"\n : undefined\n : undefined;\n payload.issues.push({\n expected: \"number\",\n code: \"invalid_type\",\n input,\n inst,\n ...(received ? { received } : {}),\n });\n return payload;\n };\n});\nexport const $ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n checks.$ZodCheckNumberFormat.init(inst, def);\n $ZodNumber.init(inst, def); // no format checksp\n});\nexport const $ZodBoolean = /*@__PURE__*/ core.$constructor(\"$ZodBoolean\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.boolean;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = Boolean(payload.value);\n }\n catch (_) { }\n const input = payload.value;\n if (typeof input === \"boolean\")\n return payload;\n payload.issues.push({\n expected: \"boolean\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodBigInt = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.bigint;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = BigInt(payload.value);\n }\n catch (_) { }\n if (typeof payload.value === \"bigint\")\n return payload;\n payload.issues.push({\n expected: \"bigint\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n checks.$ZodCheckBigIntFormat.init(inst, def);\n $ZodBigInt.init(inst, def); // no format checks\n});\nexport const $ZodSymbol = /*@__PURE__*/ core.$constructor(\"$ZodSymbol\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"symbol\")\n return payload;\n payload.issues.push({\n expected: \"symbol\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodUndefined = /*@__PURE__*/ core.$constructor(\"$ZodUndefined\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.undefined;\n inst._zod.values = new Set([undefined]);\n inst._zod.optin = \"optional\";\n inst._zod.optout = \"optional\";\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"undefined\")\n return payload;\n payload.issues.push({\n expected: \"undefined\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodNull = /*@__PURE__*/ core.$constructor(\"$ZodNull\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.null;\n inst._zod.values = new Set([null]);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (input === null)\n return payload;\n payload.issues.push({\n expected: \"null\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodAny = /*@__PURE__*/ core.$constructor(\"$ZodAny\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload) => payload;\n});\nexport const $ZodUnknown = /*@__PURE__*/ core.$constructor(\"$ZodUnknown\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload) => payload;\n});\nexport const $ZodNever = /*@__PURE__*/ core.$constructor(\"$ZodNever\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n payload.issues.push({\n expected: \"never\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodVoid = /*@__PURE__*/ core.$constructor(\"$ZodVoid\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"undefined\")\n return payload;\n payload.issues.push({\n expected: \"void\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodDate = /*@__PURE__*/ core.$constructor(\"$ZodDate\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce) {\n try {\n payload.value = new Date(payload.value);\n }\n catch (_err) { }\n }\n const input = payload.value;\n const isDate = input instanceof Date;\n const isValidDate = isDate && !Number.isNaN(input.getTime());\n if (isValidDate)\n return payload;\n payload.issues.push({\n expected: \"date\",\n code: \"invalid_type\",\n input,\n ...(isDate ? { received: \"Invalid Date\" } : {}),\n inst,\n });\n return payload;\n };\n});\nfunction handleArrayResult(result, final, index) {\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(index, result.issues));\n }\n final.value[index] = result.value;\n}\nexport const $ZodArray = /*@__PURE__*/ core.$constructor(\"$ZodArray\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!Array.isArray(input)) {\n payload.issues.push({\n expected: \"array\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n payload.value = Array(input.length);\n const proms = [];\n for (let i = 0; i < input.length; i++) {\n const item = input[i];\n const result = def.element._zod.run({\n value: item,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleArrayResult(result, payload, i)));\n }\n else {\n handleArrayResult(result, payload, i);\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => payload);\n }\n return payload; //handleArrayResultsAsync(parseResults, final);\n };\n});\nfunction handleObjectResult(result, final, key) {\n // if(isOptional)\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(key, result.issues));\n }\n final.value[key] = result.value;\n}\nfunction handleOptionalObjectResult(result, final, key, input) {\n if (result.issues.length) {\n // validation failed against value schema\n if (input[key] === undefined) {\n // if input was undefined, ignore the error\n if (key in input) {\n final.value[key] = undefined;\n }\n else {\n final.value[key] = result.value;\n }\n }\n else {\n final.issues.push(...util.prefixIssues(key, result.issues));\n }\n }\n else if (result.value === undefined) {\n // validation returned `undefined`\n if (key in input)\n final.value[key] = undefined;\n }\n else {\n // non-undefined value\n final.value[key] = result.value;\n }\n}\nexport const $ZodObject = /*@__PURE__*/ core.$constructor(\"$ZodObject\", (inst, def) => {\n // requires cast because technically $ZodObject doesn't extend\n $ZodType.init(inst, def);\n const _normalized = util.cached(() => {\n const keys = Object.keys(def.shape);\n for (const k of keys) {\n if (!(def.shape[k] instanceof $ZodType)) {\n throw new Error(`Invalid element at key \"${k}\": expected a Zod schema`);\n }\n }\n const okeys = util.optionalKeys(def.shape);\n return {\n shape: def.shape,\n keys,\n keySet: new Set(keys),\n numKeys: keys.length,\n optionalKeys: new Set(okeys),\n };\n });\n util.defineLazy(inst._zod, \"propValues\", () => {\n const shape = def.shape;\n const propValues = {};\n for (const key in shape) {\n const field = shape[key]._zod;\n if (field.values) {\n propValues[key] ?? (propValues[key] = new Set());\n for (const v of field.values)\n propValues[key].add(v);\n }\n }\n return propValues;\n });\n const generateFastpass = (shape) => {\n const doc = new Doc([\"shape\", \"payload\", \"ctx\"]);\n const normalized = _normalized.value;\n const parseStr = (key) => {\n const k = util.esc(key);\n return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n };\n doc.write(`const input = payload.value;`);\n const ids = Object.create(null);\n let counter = 0;\n for (const key of normalized.keys) {\n ids[key] = `key_${counter++}`;\n }\n // A: preserve key order {\n doc.write(`const newResult = {}`);\n for (const key of normalized.keys) {\n if (normalized.optionalKeys.has(key)) {\n const id = ids[key];\n doc.write(`const ${id} = ${parseStr(key)};`);\n const k = util.esc(key);\n doc.write(`\n if (${id}.issues.length) {\n if (input[${k}] === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n payload.issues = payload.issues.concat(\n ${id}.issues.map((iss) => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}],\n }))\n );\n }\n } else if (${id}.value === undefined) {\n if (${k} in input) newResult[${k}] = undefined;\n } else {\n newResult[${k}] = ${id}.value;\n }\n `);\n }\n else {\n const id = ids[key];\n // const id = ids[key];\n doc.write(`const ${id} = ${parseStr(key)};`);\n doc.write(`\n if (${id}.issues.length) payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${util.esc(key)}, ...iss.path] : [${util.esc(key)}]\n })));`);\n doc.write(`newResult[${util.esc(key)}] = ${id}.value`);\n }\n }\n doc.write(`payload.value = newResult;`);\n doc.write(`return payload;`);\n const fn = doc.compile();\n return (payload, ctx) => fn(shape, payload, ctx);\n };\n let fastpass;\n const isObject = util.isObject;\n const jit = !core.globalConfig.jitless;\n const allowsEval = util.allowsEval;\n const fastEnabled = jit && allowsEval.value; // && !def.catchall;\n const catchall = def.catchall;\n let value;\n inst._zod.parse = (payload, ctx) => {\n value ?? (value = _normalized.value);\n const input = payload.value;\n if (!isObject(input)) {\n payload.issues.push({\n expected: \"object\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n // always synchronous\n if (!fastpass)\n fastpass = generateFastpass(def.shape);\n payload = fastpass(payload, ctx);\n }\n else {\n payload.value = {};\n const shape = value.shape;\n for (const key of value.keys) {\n const el = shape[key];\n // do not add omitted optional keys\n // if (!(key in input)) {\n // if (optionalKeys.has(key)) continue;\n // payload.issues.push({\n // code: \"invalid_type\",\n // path: [key],\n // expected: \"nonoptional\",\n // note: `Missing required key: \"${key}\"`,\n // input,\n // inst,\n // });\n // }\n const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n const isOptional = el._zod.optin === \"optional\" && el._zod.optout === \"optional\";\n if (r instanceof Promise) {\n proms.push(r.then((r) => isOptional ? handleOptionalObjectResult(r, payload, key, input) : handleObjectResult(r, payload, key)));\n }\n else if (isOptional) {\n handleOptionalObjectResult(r, payload, key, input);\n }\n else {\n handleObjectResult(r, payload, key);\n }\n }\n }\n if (!catchall) {\n // return payload;\n return proms.length ? Promise.all(proms).then(() => payload) : payload;\n }\n const unrecognized = [];\n // iterate over input keys\n const keySet = value.keySet;\n const _catchall = catchall._zod;\n const t = _catchall.def.type;\n for (const key of Object.keys(input)) {\n if (keySet.has(key))\n continue;\n if (t === \"never\") {\n unrecognized.push(key);\n continue;\n }\n const r = _catchall.run({ value: input[key], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((r) => handleObjectResult(r, payload, key)));\n }\n else {\n handleObjectResult(r, payload, key);\n }\n }\n if (unrecognized.length) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n keys: unrecognized,\n input,\n inst,\n });\n }\n if (!proms.length)\n return payload;\n return Promise.all(proms).then(() => {\n return payload;\n });\n };\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n for (const result of results) {\n if (result.issues.length === 0) {\n final.value = result.value;\n return final;\n }\n }\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n });\n return final;\n}\nexport const $ZodUnion = /*@__PURE__*/ core.$constructor(\"$ZodUnion\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.options.some((o) => o._zod.optin === \"optional\") ? \"optional\" : undefined);\n util.defineLazy(inst._zod, \"optout\", () => def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n util.defineLazy(inst._zod, \"values\", () => {\n if (def.options.every((o) => o._zod.values)) {\n return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));\n }\n return undefined;\n });\n util.defineLazy(inst._zod, \"pattern\", () => {\n if (def.options.every((o) => o._zod.pattern)) {\n const patterns = def.options.map((o) => o._zod.pattern);\n return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join(\"|\")})$`);\n }\n return undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n let async = false;\n const results = [];\n for (const option of def.options) {\n const result = option._zod.run({\n value: payload.value,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n results.push(result);\n async = true;\n }\n else {\n if (result.issues.length === 0)\n return result;\n results.push(result);\n }\n }\n if (!async)\n return handleUnionResults(results, payload, inst, ctx);\n return Promise.all(results).then((results) => {\n return handleUnionResults(results, payload, inst, ctx);\n });\n };\n});\nexport const $ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n $ZodUnion.init(inst, def);\n const _super = inst._zod.parse;\n util.defineLazy(inst._zod, \"propValues\", () => {\n const propValues = {};\n for (const option of def.options) {\n const pv = option._zod.propValues;\n if (!pv || Object.keys(pv).length === 0)\n throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n for (const [k, v] of Object.entries(pv)) {\n if (!propValues[k])\n propValues[k] = new Set();\n for (const val of v) {\n propValues[k].add(val);\n }\n }\n }\n return propValues;\n });\n const disc = util.cached(() => {\n const opts = def.options;\n const map = new Map();\n for (const o of opts) {\n const values = o._zod.propValues?.[def.discriminator];\n if (!values || values.size === 0)\n throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(o)}\"`);\n for (const v of values) {\n if (map.has(v)) {\n throw new Error(`Duplicate discriminator value \"${String(v)}\"`);\n }\n map.set(v, o);\n }\n }\n return map;\n });\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!util.isObject(input)) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"object\",\n input,\n inst,\n });\n return payload;\n }\n const opt = disc.value.get(input?.[def.discriminator]);\n if (opt) {\n return opt._zod.run(payload, ctx);\n }\n if (def.unionFallback) {\n return _super(payload, ctx);\n }\n // no matching discriminator\n payload.issues.push({\n code: \"invalid_union\",\n errors: [],\n note: \"No matching discriminator\",\n input,\n path: [def.discriminator],\n inst,\n });\n return payload;\n };\n});\nexport const $ZodIntersection = /*@__PURE__*/ core.$constructor(\"$ZodIntersection\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n const left = def.left._zod.run({ value: input, issues: [] }, ctx);\n const right = def.right._zod.run({ value: input, issues: [] }, ctx);\n const async = left instanceof Promise || right instanceof Promise;\n if (async) {\n return Promise.all([left, right]).then(([left, right]) => {\n return handleIntersectionResults(payload, left, right);\n });\n }\n return handleIntersectionResults(payload, left, right);\n };\n});\nfunction mergeValues(a, b) {\n // const aType = parse.t(a);\n // const bType = parse.t(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n if (a instanceof Date && b instanceof Date && +a === +b) {\n return { valid: true, data: a };\n }\n if (util.isPlainObject(a) && util.isPlainObject(b)) {\n const bKeys = Object.keys(b);\n const sharedKeys = Object.keys(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 {\n valid: false,\n mergeErrorPath: [key, ...sharedValue.mergeErrorPath],\n };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) {\n return { valid: false, mergeErrorPath: [] };\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 {\n valid: false,\n mergeErrorPath: [index, ...sharedValue.mergeErrorPath],\n };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n return { valid: false, mergeErrorPath: [] };\n}\nfunction handleIntersectionResults(result, left, right) {\n if (left.issues.length) {\n result.issues.push(...left.issues);\n }\n if (right.issues.length) {\n result.issues.push(...right.issues);\n }\n if (util.aborted(result))\n return result;\n const merged = mergeValues(left.value, right.value);\n if (!merged.valid) {\n throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);\n }\n result.value = merged.data;\n return result;\n}\nexport const $ZodTuple = /*@__PURE__*/ core.$constructor(\"$ZodTuple\", (inst, def) => {\n $ZodType.init(inst, def);\n const items = def.items;\n const optStart = items.length - [...items].reverse().findIndex((item) => item._zod.optin !== \"optional\");\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!Array.isArray(input)) {\n payload.issues.push({\n input,\n inst,\n expected: \"tuple\",\n code: \"invalid_type\",\n });\n return payload;\n }\n payload.value = [];\n const proms = [];\n if (!def.rest) {\n const tooBig = input.length > items.length;\n const tooSmall = input.length < optStart - 1;\n if (tooBig || tooSmall) {\n payload.issues.push({\n input,\n inst,\n origin: \"array\",\n ...(tooBig ? { code: \"too_big\", maximum: items.length } : { code: \"too_small\", minimum: items.length }),\n });\n return payload;\n }\n }\n let i = -1;\n for (const item of items) {\n i++;\n if (i >= input.length)\n if (i >= optStart)\n continue;\n const result = item._zod.run({\n value: input[i],\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n }\n else {\n handleTupleResult(result, payload, i);\n }\n }\n if (def.rest) {\n const rest = input.slice(items.length);\n for (const el of rest) {\n i++;\n const result = def.rest._zod.run({\n value: el,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n }\n else {\n handleTupleResult(result, payload, i);\n }\n }\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleTupleResult(result, final, index) {\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(index, result.issues));\n }\n final.value[index] = result.value;\n}\nexport const $ZodRecord = /*@__PURE__*/ core.$constructor(\"$ZodRecord\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!util.isPlainObject(input)) {\n payload.issues.push({\n expected: \"record\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n if (def.keyType._zod.values) {\n const values = def.keyType._zod.values;\n payload.value = {};\n for (const key of values) {\n if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[key] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[key] = result.value;\n }\n }\n }\n let unrecognized;\n for (const key in input) {\n if (!values.has(key)) {\n unrecognized = unrecognized ?? [];\n unrecognized.push(key);\n }\n }\n if (unrecognized && unrecognized.length > 0) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n input,\n inst,\n keys: unrecognized,\n });\n }\n }\n else {\n payload.value = {};\n for (const key of Reflect.ownKeys(input)) {\n if (key === \"__proto__\")\n continue;\n const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n if (keyResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n if (keyResult.issues.length) {\n payload.issues.push({\n origin: \"record\",\n code: \"invalid_key\",\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n input: key,\n path: [key],\n inst,\n });\n payload.value[keyResult.value] = keyResult.value;\n continue;\n }\n const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[keyResult.value] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[keyResult.value] = result.value;\n }\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => payload);\n }\n return payload;\n };\n});\nexport const $ZodMap = /*@__PURE__*/ core.$constructor(\"$ZodMap\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!(input instanceof Map)) {\n payload.issues.push({\n expected: \"map\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n payload.value = new Map();\n for (const [key, value] of input) {\n const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);\n if (keyResult instanceof Promise || valueResult instanceof Promise) {\n proms.push(Promise.all([keyResult, valueResult]).then(([keyResult, valueResult]) => {\n handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n }));\n }\n else {\n handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n }\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {\n if (keyResult.issues.length) {\n if (util.propertyKeyTypes.has(typeof key)) {\n final.issues.push(...util.prefixIssues(key, keyResult.issues));\n }\n else {\n final.issues.push({\n origin: \"map\",\n code: \"invalid_key\",\n input,\n inst,\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n });\n }\n }\n if (valueResult.issues.length) {\n if (util.propertyKeyTypes.has(typeof key)) {\n final.issues.push(...util.prefixIssues(key, valueResult.issues));\n }\n else {\n final.issues.push({\n origin: \"map\",\n code: \"invalid_element\",\n input,\n inst,\n key: key,\n issues: valueResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n });\n }\n }\n final.value.set(keyResult.value, valueResult.value);\n}\nexport const $ZodSet = /*@__PURE__*/ core.$constructor(\"$ZodSet\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!(input instanceof Set)) {\n payload.issues.push({\n input,\n inst,\n expected: \"set\",\n code: \"invalid_type\",\n });\n return payload;\n }\n const proms = [];\n payload.value = new Set();\n for (const item of input) {\n const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleSetResult(result, payload)));\n }\n else\n handleSetResult(result, payload);\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleSetResult(result, final) {\n if (result.issues.length) {\n final.issues.push(...result.issues);\n }\n final.value.add(result.value);\n}\nexport const $ZodEnum = /*@__PURE__*/ core.$constructor(\"$ZodEnum\", (inst, def) => {\n $ZodType.init(inst, def);\n const values = util.getEnumValues(def.entries);\n inst._zod.values = new Set(values);\n inst._zod.pattern = new RegExp(`^(${values\n .filter((k) => util.propertyKeyTypes.has(typeof k))\n .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o.toString()))\n .join(\"|\")})$`);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (inst._zod.values.has(input)) {\n return payload;\n }\n payload.issues.push({\n code: \"invalid_value\",\n values,\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodLiteral = /*@__PURE__*/ core.$constructor(\"$ZodLiteral\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.values = new Set(def.values);\n inst._zod.pattern = new RegExp(`^(${def.values\n .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o ? o.toString() : String(o)))\n .join(\"|\")})$`);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (inst._zod.values.has(input)) {\n return payload;\n }\n payload.issues.push({\n code: \"invalid_value\",\n values: def.values,\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodFile = /*@__PURE__*/ core.$constructor(\"$ZodFile\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (input instanceof File)\n return payload;\n payload.issues.push({\n expected: \"file\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodTransform = /*@__PURE__*/ core.$constructor(\"$ZodTransform\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const _out = def.transform(payload.value, payload);\n if (_ctx.async) {\n const output = _out instanceof Promise ? _out : Promise.resolve(_out);\n return output.then((output) => {\n payload.value = output;\n return payload;\n });\n }\n if (_out instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n payload.value = _out;\n return payload;\n };\n});\nexport const $ZodOptional = /*@__PURE__*/ core.$constructor(\"$ZodOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n inst._zod.optout = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => {\n return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined;\n });\n util.defineLazy(inst._zod, \"pattern\", () => {\n const pattern = def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n if (def.innerType._zod.optin === \"optional\") {\n return def.innerType._zod.run(payload, ctx);\n }\n if (payload.value === undefined) {\n return payload;\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodNullable = /*@__PURE__*/ core.$constructor(\"$ZodNullable\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n util.defineLazy(inst._zod, \"pattern\", () => {\n const pattern = def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;\n });\n util.defineLazy(inst._zod, \"values\", () => {\n return def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n if (payload.value === null)\n return payload;\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodDefault = /*@__PURE__*/ core.$constructor(\"$ZodDefault\", (inst, def) => {\n $ZodType.init(inst, def);\n // inst._zod.qin = \"true\";\n inst._zod.optin = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n /**\n * $ZodDefault always returns the default value immediately.\n * It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe. */\n return payload;\n }\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleDefaultResult(result, def));\n }\n return handleDefaultResult(result, def);\n };\n});\nfunction handleDefaultResult(payload, def) {\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n }\n return payload;\n}\nexport const $ZodPrefault = /*@__PURE__*/ core.$constructor(\"$ZodPrefault\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodNonOptional = /*@__PURE__*/ core.$constructor(\"$ZodNonOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => {\n const v = def.innerType._zod.values;\n return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleNonOptionalResult(result, inst));\n }\n return handleNonOptionalResult(result, inst);\n };\n});\nfunction handleNonOptionalResult(payload, inst) {\n if (!payload.issues.length && payload.value === undefined) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"nonoptional\",\n input: payload.value,\n inst,\n });\n }\n return payload;\n}\nexport const $ZodSuccess = /*@__PURE__*/ core.$constructor(\"$ZodSuccess\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => {\n payload.value = result.issues.length === 0;\n return payload;\n });\n }\n payload.value = result.issues.length === 0;\n return payload;\n };\n});\nexport const $ZodCatch = /*@__PURE__*/ core.$constructor(\"$ZodCatch\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => {\n payload.value = result.value;\n if (result.issues.length) {\n payload.value = def.catchValue({\n ...payload,\n error: {\n issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n },\n input: payload.value,\n });\n payload.issues = [];\n }\n return payload;\n });\n }\n payload.value = result.value;\n if (result.issues.length) {\n payload.value = def.catchValue({\n ...payload,\n error: {\n issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n },\n input: payload.value,\n });\n payload.issues = [];\n }\n return payload;\n };\n});\nexport const $ZodNaN = /*@__PURE__*/ core.$constructor(\"$ZodNaN\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"number\" || !Number.isNaN(payload.value)) {\n payload.issues.push({\n input: payload.value,\n inst,\n expected: \"nan\",\n code: \"invalid_type\",\n });\n return payload;\n }\n return payload;\n };\n});\nexport const $ZodPipe = /*@__PURE__*/ core.$constructor(\"$ZodPipe\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n inst._zod.parse = (payload, ctx) => {\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handlePipeResult(left, def, ctx));\n }\n return handlePipeResult(left, def, ctx);\n };\n});\nfunction handlePipeResult(left, def, ctx) {\n if (util.aborted(left)) {\n return left;\n }\n return def.out._zod.run({ value: left.value, issues: left.issues }, ctx);\n}\nexport const $ZodReadonly = /*@__PURE__*/ core.$constructor(\"$ZodReadonly\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"propValues\", () => def.innerType._zod.propValues);\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n inst._zod.parse = (payload, ctx) => {\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then(handleReadonlyResult);\n }\n return handleReadonlyResult(result);\n };\n});\nfunction handleReadonlyResult(payload) {\n payload.value = Object.freeze(payload.value);\n return payload;\n}\nexport const $ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"$ZodTemplateLiteral\", (inst, def) => {\n $ZodType.init(inst, def);\n const regexParts = [];\n for (const part of def.parts) {\n if (part instanceof $ZodType) {\n if (!part._zod.pattern) {\n // if (!source)\n throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);\n }\n const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;\n if (!source)\n throw new Error(`Invalid template literal part: ${part._zod.traits}`);\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n regexParts.push(source.slice(start, end));\n }\n else if (part === null || util.primitiveTypes.has(typeof part)) {\n regexParts.push(util.escapeRegex(`${part}`));\n }\n else {\n throw new Error(`Invalid template literal part: ${part}`);\n }\n }\n inst._zod.pattern = new RegExp(`^${regexParts.join(\"\")}$`);\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"string\") {\n payload.issues.push({\n input: payload.value,\n inst,\n expected: \"template_literal\",\n code: \"invalid_type\",\n });\n return payload;\n }\n inst._zod.pattern.lastIndex = 0;\n if (!inst._zod.pattern.test(payload.value)) {\n payload.issues.push({\n input: payload.value,\n inst,\n code: \"invalid_format\",\n format: def.format ?? \"template_literal\",\n pattern: inst._zod.pattern.source,\n });\n return payload;\n }\n return payload;\n };\n});\nexport const $ZodPromise = /*@__PURE__*/ core.$constructor(\"$ZodPromise\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));\n };\n});\nexport const $ZodLazy = /*@__PURE__*/ core.$constructor(\"$ZodLazy\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"innerType\", () => def.getter());\n util.defineLazy(inst._zod, \"pattern\", () => inst._zod.innerType._zod.pattern);\n util.defineLazy(inst._zod, \"propValues\", () => inst._zod.innerType._zod.propValues);\n util.defineLazy(inst._zod, \"optin\", () => inst._zod.innerType._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => inst._zod.innerType._zod.optout);\n inst._zod.parse = (payload, ctx) => {\n const inner = inst._zod.innerType;\n return inner._zod.run(payload, ctx);\n };\n});\nexport const $ZodCustom = /*@__PURE__*/ core.$constructor(\"$ZodCustom\", (inst, def) => {\n checks.$ZodCheck.init(inst, def);\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _) => {\n return payload;\n };\n inst._zod.check = (payload) => {\n const input = payload.value;\n const r = def.fn(input);\n if (r instanceof Promise) {\n return r.then((r) => handleRefineResult(r, payload, input, inst));\n }\n handleRefineResult(r, payload, input, inst);\n return;\n };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n if (!result) {\n const _iss = {\n code: \"custom\",\n input,\n inst, // incorporates params.error into issue reporting\n path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n continue: !inst._zod.def.abort,\n // params: inst._zod.def.params,\n };\n if (inst._zod.def.params)\n _iss.params = inst._zod.def.params;\n payload.issues.push(util.issue(_iss));\n }\n}\n","export const $output = Symbol(\"ZodOutput\");\nexport const $input = Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n constructor() {\n this._map = new Map();\n this._idmap = new Map();\n }\n add(schema, ..._meta) {\n const meta = _meta[0];\n this._map.set(schema, meta);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n if (this._idmap.has(meta.id)) {\n throw new Error(`ID ${meta.id} already exists in the registry`);\n }\n this._idmap.set(meta.id, schema);\n }\n return this;\n }\n clear() {\n this._map = new Map();\n this._idmap = new Map();\n return this;\n }\n remove(schema) {\n const meta = this._map.get(schema);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.delete(meta.id);\n }\n this._map.delete(schema);\n return this;\n }\n get(schema) {\n // return this._map.get(schema) as any;\n // inherit metadata\n const p = schema._zod.parent;\n if (p) {\n const pm = { ...(this.get(p) ?? {}) };\n delete pm.id; // do not inherit id\n return { ...pm, ...this._map.get(schema) };\n }\n return this._map.get(schema);\n }\n has(schema) {\n return this._map.has(schema);\n }\n}\n// registries\nexport function registry() {\n return new $ZodRegistry();\n}\nexport const globalRegistry = /*@__PURE__*/ registry();\n","import * as checks from \"./checks.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\nexport function _string(Class, params) {\n return new Class({\n type: \"string\",\n ...util.normalizeParams(params),\n });\n}\nexport function _coercedString(Class, params) {\n return new Class({\n type: \"string\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\nexport function _email(Class, params) {\n return new Class({\n type: \"string\",\n format: \"email\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _guid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"guid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _uuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _uuidv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v4\",\n ...util.normalizeParams(params),\n });\n}\nexport function _uuidv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v6\",\n ...util.normalizeParams(params),\n });\n}\nexport function _uuidv7(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v7\",\n ...util.normalizeParams(params),\n });\n}\nexport function _url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _emoji(Class, params) {\n return new Class({\n type: \"string\",\n format: \"emoji\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _nanoid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"nanoid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _cuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _cuid2(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid2\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _ulid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ulid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _xid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"xid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _ksuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ksuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _ipv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _ipv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _cidrv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _cidrv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _base64(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _base64url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _e164(Class, params) {\n return new Class({\n type: \"string\",\n format: \"e164\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _jwt(Class, params) {\n return new Class({\n type: \"string\",\n format: \"jwt\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport const TimePrecision = {\n Any: null,\n Minute: -1,\n Second: 0,\n Millisecond: 3,\n Microsecond: 6,\n};\nexport function _isoDateTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"datetime\",\n check: \"string_format\",\n offset: false,\n local: false,\n precision: null,\n ...util.normalizeParams(params),\n });\n}\nexport function _isoDate(Class, params) {\n return new Class({\n type: \"string\",\n format: \"date\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\nexport function _isoTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"time\",\n check: \"string_format\",\n precision: null,\n ...util.normalizeParams(params),\n });\n}\nexport function _isoDuration(Class, params) {\n return new Class({\n type: \"string\",\n format: \"duration\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\nexport function _number(Class, params) {\n return new Class({\n type: \"number\",\n checks: [],\n ...util.normalizeParams(params),\n });\n}\nexport function _coercedNumber(Class, params) {\n return new Class({\n type: \"number\",\n coerce: true,\n checks: [],\n ...util.normalizeParams(params),\n });\n}\nexport function _int(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"safeint\",\n ...util.normalizeParams(params),\n });\n}\nexport function _float32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float32\",\n ...util.normalizeParams(params),\n });\n}\nexport function _float64(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float64\",\n ...util.normalizeParams(params),\n });\n}\nexport function _int32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"int32\",\n ...util.normalizeParams(params),\n });\n}\nexport function _uint32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"uint32\",\n ...util.normalizeParams(params),\n });\n}\nexport function _boolean(Class, params) {\n return new Class({\n type: \"boolean\",\n ...util.normalizeParams(params),\n });\n}\nexport function _coercedBoolean(Class, params) {\n return new Class({\n type: \"boolean\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\nexport function _bigint(Class, params) {\n return new Class({\n type: \"bigint\",\n ...util.normalizeParams(params),\n });\n}\nexport function _coercedBigint(Class, params) {\n return new Class({\n type: \"bigint\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\nexport function _int64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"int64\",\n ...util.normalizeParams(params),\n });\n}\nexport function _uint64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"uint64\",\n ...util.normalizeParams(params),\n });\n}\nexport function _symbol(Class, params) {\n return new Class({\n type: \"symbol\",\n ...util.normalizeParams(params),\n });\n}\nexport function _undefined(Class, params) {\n return new Class({\n type: \"undefined\",\n ...util.normalizeParams(params),\n });\n}\nexport function _null(Class, params) {\n return new Class({\n type: \"null\",\n ...util.normalizeParams(params),\n });\n}\nexport function _any(Class) {\n return new Class({\n type: \"any\",\n });\n}\nexport function _unknown(Class) {\n return new Class({\n type: \"unknown\",\n });\n}\nexport function _never(Class, params) {\n return new Class({\n type: \"never\",\n ...util.normalizeParams(params),\n });\n}\nexport function _void(Class, params) {\n return new Class({\n type: \"void\",\n ...util.normalizeParams(params),\n });\n}\nexport function _date(Class, params) {\n return new Class({\n type: \"date\",\n ...util.normalizeParams(params),\n });\n}\nexport function _coercedDate(Class, params) {\n return new Class({\n type: \"date\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\nexport function _nan(Class, params) {\n return new Class({\n type: \"nan\",\n ...util.normalizeParams(params),\n });\n}\nexport function _lt(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\nexport function _lte(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.lte()` instead. */\n_lte as _max, };\nexport function _gt(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\nexport function _gte(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.gte()` instead. */\n_gte as _min, };\nexport function _positive(params) {\n return _gt(0, params);\n}\n// negative\nexport function _negative(params) {\n return _lt(0, params);\n}\n// nonpositive\nexport function _nonpositive(params) {\n return _lte(0, params);\n}\n// nonnegative\nexport function _nonnegative(params) {\n return _gte(0, params);\n}\nexport function _multipleOf(value, params) {\n return new checks.$ZodCheckMultipleOf({\n check: \"multiple_of\",\n ...util.normalizeParams(params),\n value,\n });\n}\nexport function _maxSize(maximum, params) {\n return new checks.$ZodCheckMaxSize({\n check: \"max_size\",\n ...util.normalizeParams(params),\n maximum,\n });\n}\nexport function _minSize(minimum, params) {\n return new checks.$ZodCheckMinSize({\n check: \"min_size\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\nexport function _size(size, params) {\n return new checks.$ZodCheckSizeEquals({\n check: \"size_equals\",\n ...util.normalizeParams(params),\n size,\n });\n}\nexport function _maxLength(maximum, params) {\n const ch = new checks.$ZodCheckMaxLength({\n check: \"max_length\",\n ...util.normalizeParams(params),\n maximum,\n });\n return ch;\n}\nexport function _minLength(minimum, params) {\n return new checks.$ZodCheckMinLength({\n check: \"min_length\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\nexport function _length(length, params) {\n return new checks.$ZodCheckLengthEquals({\n check: \"length_equals\",\n ...util.normalizeParams(params),\n length,\n });\n}\nexport function _regex(pattern, params) {\n return new checks.$ZodCheckRegex({\n check: \"string_format\",\n format: \"regex\",\n ...util.normalizeParams(params),\n pattern,\n });\n}\nexport function _lowercase(params) {\n return new checks.$ZodCheckLowerCase({\n check: \"string_format\",\n format: \"lowercase\",\n ...util.normalizeParams(params),\n });\n}\nexport function _uppercase(params) {\n return new checks.$ZodCheckUpperCase({\n check: \"string_format\",\n format: \"uppercase\",\n ...util.normalizeParams(params),\n });\n}\nexport function _includes(includes, params) {\n return new checks.$ZodCheckIncludes({\n check: \"string_format\",\n format: \"includes\",\n ...util.normalizeParams(params),\n includes,\n });\n}\nexport function _startsWith(prefix, params) {\n return new checks.$ZodCheckStartsWith({\n check: \"string_format\",\n format: \"starts_with\",\n ...util.normalizeParams(params),\n prefix,\n });\n}\nexport function _endsWith(suffix, params) {\n return new checks.$ZodCheckEndsWith({\n check: \"string_format\",\n format: \"ends_with\",\n ...util.normalizeParams(params),\n suffix,\n });\n}\nexport function _property(property, schema, params) {\n return new checks.$ZodCheckProperty({\n check: \"property\",\n property,\n schema,\n ...util.normalizeParams(params),\n });\n}\nexport function _mime(types, params) {\n return new checks.$ZodCheckMimeType({\n check: \"mime_type\",\n mime: types,\n ...util.normalizeParams(params),\n });\n}\nexport function _overwrite(tx) {\n return new checks.$ZodCheckOverwrite({\n check: \"overwrite\",\n tx,\n });\n}\n// normalize\nexport function _normalize(form) {\n return _overwrite((input) => input.normalize(form));\n}\n// trim\nexport function _trim() {\n return _overwrite((input) => input.trim());\n}\n// toLowerCase\nexport function _toLowerCase() {\n return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\nexport function _toUpperCase() {\n return _overwrite((input) => input.toUpperCase());\n}\nexport function _array(Class, element, params) {\n return new Class({\n type: \"array\",\n element,\n // get element() {\n // return element;\n // },\n ...util.normalizeParams(params),\n });\n}\nexport function _union(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n ...util.normalizeParams(params),\n });\n}\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n return new Class({\n type: \"union\",\n options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\nexport function _intersection(Class, left, right) {\n return new Class({\n type: \"intersection\",\n left,\n right,\n });\n}\n// export function _tuple(\n// Class: util.SchemaClass<schemas.$ZodTuple>,\n// items: [],\n// params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\nexport function _tuple(Class, items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new Class({\n type: \"tuple\",\n items,\n rest,\n ...util.normalizeParams(params),\n });\n}\nexport function _record(Class, keyType, valueType, params) {\n return new Class({\n type: \"record\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\nexport function _map(Class, keyType, valueType, params) {\n return new Class({\n type: \"map\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\nexport function _set(Class, valueType, params) {\n return new Class({\n type: \"set\",\n valueType,\n ...util.normalizeParams(params),\n });\n}\nexport function _enum(Class, values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n // if (Array.isArray(values)) {\n // for (const value of values) {\n // entries[value] = value;\n // }\n // } else {\n // Object.assign(entries, values);\n // }\n // const entries: util.EnumLike = {};\n // for (const val of values) {\n // entries[val] = val;\n // }\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function _nativeEnum(Class, entries, params) {\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport function _literal(Class, value, params) {\n return new Class({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\nexport function _file(Class, params) {\n return new Class({\n type: \"file\",\n ...util.normalizeParams(params),\n });\n}\nexport function _transform(Class, fn) {\n return new Class({\n type: \"transform\",\n transform: fn,\n });\n}\nexport function _optional(Class, innerType) {\n return new Class({\n type: \"optional\",\n innerType,\n });\n}\nexport function _nullable(Class, innerType) {\n return new Class({\n type: \"nullable\",\n innerType,\n });\n}\nexport function _default(Class, innerType, defaultValue) {\n return new Class({\n type: \"default\",\n innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : defaultValue;\n },\n });\n}\nexport function _nonoptional(Class, innerType, params) {\n return new Class({\n type: \"nonoptional\",\n innerType,\n ...util.normalizeParams(params),\n });\n}\nexport function _success(Class, innerType) {\n return new Class({\n type: \"success\",\n innerType,\n });\n}\nexport function _catch(Class, innerType, catchValue) {\n return new Class({\n type: \"catch\",\n innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\nexport function _pipe(Class, in_, out) {\n return new Class({\n type: \"pipe\",\n in: in_,\n out,\n });\n}\nexport function _readonly(Class, innerType) {\n return new Class({\n type: \"readonly\",\n innerType,\n });\n}\nexport function _templateLiteral(Class, parts, params) {\n return new Class({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\nexport function _lazy(Class, getter) {\n return new Class({\n type: \"lazy\",\n getter,\n });\n}\nexport function _promise(Class, innerType) {\n return new Class({\n type: \"promise\",\n innerType,\n });\n}\nexport function _custom(Class, fn, _params) {\n const norm = util.normalizeParams(_params);\n norm.abort ?? (norm.abort = true); // default to abort:false\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...norm,\n });\n return schema;\n}\n// export function _refine<T>(\n// Class: util.SchemaClass<schemas.$ZodCustom>,\n// fn: (arg: NoInfer<T>) => util.MaybeAsync<unknown>,\n// _params: string | $ZodCustomParams = {}\n// ): checks.$ZodCheck<T> {\n// return _custom(Class, fn, _params);\n// }\n// same as _custom but defaults to abort:false\nexport function _refine(Class, fn, _params) {\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...util.normalizeParams(_params),\n });\n return schema;\n}\nexport function _stringbool(Classes, _params) {\n const params = util.normalizeParams(_params);\n let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n if (params.case !== \"sensitive\") {\n truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n }\n const truthySet = new Set(truthyArray);\n const falsySet = new Set(falsyArray);\n const _Pipe = Classes.Pipe ?? schemas.$ZodPipe;\n const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n const _String = Classes.String ?? schemas.$ZodString;\n const _Transform = Classes.Transform ?? schemas.$ZodTransform;\n const tx = new _Transform({\n type: \"transform\",\n transform: (input, payload) => {\n let data = input;\n if (params.case !== \"sensitive\")\n data = data.toLowerCase();\n if (truthySet.has(data)) {\n return true;\n }\n else if (falsySet.has(data)) {\n return false;\n }\n else {\n payload.issues.push({\n code: \"invalid_value\",\n expected: \"stringbool\",\n values: [...truthySet, ...falsySet],\n input: payload.value,\n inst: tx,\n });\n return {};\n }\n },\n error: params.error,\n });\n // params.error;\n const innerPipe = new _Pipe({\n type: \"pipe\",\n in: new _String({ type: \"string\", error: params.error }),\n out: tx,\n error: params.error,\n });\n const outerPipe = new _Pipe({\n type: \"pipe\",\n in: innerPipe,\n out: new _Boolean({\n type: \"boolean\",\n error: params.error,\n }),\n error: params.error,\n });\n return outerPipe;\n}\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n const params = util.normalizeParams(_params);\n const def = {\n ...util.normalizeParams(_params),\n check: \"string_format\",\n type: \"string\",\n format,\n fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n ...params,\n };\n if (fnOrRegex instanceof RegExp) {\n def.pattern = fnOrRegex;\n }\n const inst = new Class(def);\n return inst;\n}\n","import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport const ZodISODateTime = /*@__PURE__*/ core.$constructor(\"ZodISODateTime\", (inst, def) => {\n core.$ZodISODateTime.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function datetime(params) {\n return core._isoDateTime(ZodISODateTime, params);\n}\nexport const ZodISODate = /*@__PURE__*/ core.$constructor(\"ZodISODate\", (inst, def) => {\n core.$ZodISODate.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function date(params) {\n return core._isoDate(ZodISODate, params);\n}\nexport const ZodISOTime = /*@__PURE__*/ core.$constructor(\"ZodISOTime\", (inst, def) => {\n core.$ZodISOTime.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function time(params) {\n return core._isoTime(ZodISOTime, params);\n}\nexport const ZodISODuration = /*@__PURE__*/ core.$constructor(\"ZodISODuration\", (inst, def) => {\n core.$ZodISODuration.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function duration(params) {\n return core._isoDuration(ZodISODuration, params);\n}\n","import * as core from \"../core/index.js\";\nimport { $ZodError } from \"../core/index.js\";\nconst initializer = (inst, issues) => {\n $ZodError.init(inst, issues);\n inst.name = \"ZodError\";\n Object.defineProperties(inst, {\n format: {\n value: (mapper) => core.formatError(inst, mapper),\n // enumerable: false,\n },\n flatten: {\n value: (mapper) => core.flattenError(inst, mapper),\n // enumerable: false,\n },\n addIssue: {\n value: (issue) => inst.issues.push(issue),\n // enumerable: false,\n },\n addIssues: {\n value: (issues) => inst.issues.push(...issues),\n // enumerable: false,\n },\n isEmpty: {\n get() {\n return inst.issues.length === 0;\n },\n // enumerable: false,\n },\n });\n // Object.defineProperty(inst, \"isEmpty\", {\n // get() {\n // return inst.issues.length === 0;\n // },\n // });\n};\nexport const ZodError = core.$constructor(\"ZodError\", initializer);\nexport const ZodRealError = core.$constructor(\"ZodError\", initializer, {\n Parent: Error,\n});\n// /** @deprecated Use `z.core.$ZodErrorMapCtx` instead. */\n// export type ErrorMapCtx = core.$ZodErrorMapCtx;\n","import * as core from \"../core/index.js\";\nimport { ZodRealError } from \"./errors.js\";\nexport const parse = /* @__PURE__ */ core._parse(ZodRealError);\nexport const parseAsync = /* @__PURE__ */ core._parseAsync(ZodRealError);\nexport const safeParse = /* @__PURE__ */ core._safeParse(ZodRealError);\nexport const safeParseAsync = /* @__PURE__ */ core._safeParseAsync(ZodRealError);\n","import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as checks from \"./checks.js\";\nimport * as iso from \"./iso.js\";\nimport * as parse from \"./parse.js\";\nexport const ZodType = /*@__PURE__*/ core.$constructor(\"ZodType\", (inst, def) => {\n core.$ZodType.init(inst, def);\n inst.def = def;\n Object.defineProperty(inst, \"_def\", { value: def });\n // base methods\n inst.check = (...checks) => {\n return inst.clone({\n ...def,\n checks: [\n ...(def.checks ?? []),\n ...checks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n ],\n }\n // { parent: true }\n );\n };\n inst.clone = (def, params) => core.clone(inst, def, params);\n inst.brand = () => inst;\n inst.register = ((reg, meta) => {\n reg.add(inst, meta);\n return inst;\n });\n // parsing\n inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });\n inst.safeParse = (data, params) => parse.safeParse(inst, data, params);\n inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });\n inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);\n inst.spa = inst.safeParseAsync;\n // refinements\n inst.refine = (check, params) => inst.check(refine(check, params));\n inst.superRefine = (refinement) => inst.check(superRefine(refinement));\n inst.overwrite = (fn) => inst.check(checks.overwrite(fn));\n // wrappers\n inst.optional = () => optional(inst);\n inst.nullable = () => nullable(inst);\n inst.nullish = () => optional(nullable(inst));\n inst.nonoptional = (params) => nonoptional(inst, params);\n inst.array = () => array(inst);\n inst.or = (arg) => union([inst, arg]);\n inst.and = (arg) => intersection(inst, arg);\n inst.transform = (tx) => pipe(inst, transform(tx));\n inst.default = (def) => _default(inst, def);\n inst.prefault = (def) => prefault(inst, def);\n // inst.coalesce = (def, params) => coalesce(inst, def, params);\n inst.catch = (params) => _catch(inst, params);\n inst.pipe = (target) => pipe(inst, target);\n inst.readonly = () => readonly(inst);\n // meta\n inst.describe = (description) => {\n const cl = inst.clone();\n core.globalRegistry.add(cl, { description });\n return cl;\n };\n Object.defineProperty(inst, \"description\", {\n get() {\n return core.globalRegistry.get(inst)?.description;\n },\n configurable: true,\n });\n inst.meta = (...args) => {\n if (args.length === 0) {\n return core.globalRegistry.get(inst);\n }\n const cl = inst.clone();\n core.globalRegistry.add(cl, args[0]);\n return cl;\n };\n // helpers\n inst.isOptional = () => inst.safeParse(undefined).success;\n inst.isNullable = () => inst.safeParse(null).success;\n return inst;\n});\n/** @internal */\nexport const _ZodString = /*@__PURE__*/ core.$constructor(\"_ZodString\", (inst, def) => {\n core.$ZodString.init(inst, def);\n ZodType.init(inst, def);\n const bag = inst._zod.bag;\n inst.format = bag.format ?? null;\n inst.minLength = bag.minimum ?? null;\n inst.maxLength = bag.maximum ?? null;\n // validations\n inst.regex = (...args) => inst.check(checks.regex(...args));\n inst.includes = (...args) => inst.check(checks.includes(...args));\n inst.startsWith = (...args) => inst.check(checks.startsWith(...args));\n inst.endsWith = (...args) => inst.check(checks.endsWith(...args));\n inst.min = (...args) => inst.check(checks.minLength(...args));\n inst.max = (...args) => inst.check(checks.maxLength(...args));\n inst.length = (...args) => inst.check(checks.length(...args));\n inst.nonempty = (...args) => inst.check(checks.minLength(1, ...args));\n inst.lowercase = (params) => inst.check(checks.lowercase(params));\n inst.uppercase = (params) => inst.check(checks.uppercase(params));\n // transforms\n inst.trim = () => inst.check(checks.trim());\n inst.normalize = (...args) => inst.check(checks.normalize(...args));\n inst.toLowerCase = () => inst.check(checks.toLowerCase());\n inst.toUpperCase = () => inst.check(checks.toUpperCase());\n});\nexport const ZodString = /*@__PURE__*/ core.$constructor(\"ZodString\", (inst, def) => {\n core.$ZodString.init(inst, def);\n _ZodString.init(inst, def);\n inst.email = (params) => inst.check(core._email(ZodEmail, params));\n inst.url = (params) => inst.check(core._url(ZodURL, params));\n inst.jwt = (params) => inst.check(core._jwt(ZodJWT, params));\n inst.emoji = (params) => inst.check(core._emoji(ZodEmoji, params));\n inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n inst.uuid = (params) => inst.check(core._uuid(ZodUUID, params));\n inst.uuidv4 = (params) => inst.check(core._uuidv4(ZodUUID, params));\n inst.uuidv6 = (params) => inst.check(core._uuidv6(ZodUUID, params));\n inst.uuidv7 = (params) => inst.check(core._uuidv7(ZodUUID, params));\n inst.nanoid = (params) => inst.check(core._nanoid(ZodNanoID, params));\n inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n inst.cuid = (params) => inst.check(core._cuid(ZodCUID, params));\n inst.cuid2 = (params) => inst.check(core._cuid2(ZodCUID2, params));\n inst.ulid = (params) => inst.check(core._ulid(ZodULID, params));\n inst.base64 = (params) => inst.check(core._base64(ZodBase64, params));\n inst.base64url = (params) => inst.check(core._base64url(ZodBase64URL, params));\n inst.xid = (params) => inst.check(core._xid(ZodXID, params));\n inst.ksuid = (params) => inst.check(core._ksuid(ZodKSUID, params));\n inst.ipv4 = (params) => inst.check(core._ipv4(ZodIPv4, params));\n inst.ipv6 = (params) => inst.check(core._ipv6(ZodIPv6, params));\n inst.cidrv4 = (params) => inst.check(core._cidrv4(ZodCIDRv4, params));\n inst.cidrv6 = (params) => inst.check(core._cidrv6(ZodCIDRv6, params));\n inst.e164 = (params) => inst.check(core._e164(ZodE164, params));\n // iso\n inst.datetime = (params) => inst.check(iso.datetime(params));\n inst.date = (params) => inst.check(iso.date(params));\n inst.time = (params) => inst.check(iso.time(params));\n inst.duration = (params) => inst.check(iso.duration(params));\n});\nexport function string(params) {\n return core._string(ZodString, params);\n}\nexport const ZodStringFormat = /*@__PURE__*/ core.$constructor(\"ZodStringFormat\", (inst, def) => {\n core.$ZodStringFormat.init(inst, def);\n _ZodString.init(inst, def);\n});\nexport const ZodEmail = /*@__PURE__*/ core.$constructor(\"ZodEmail\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodEmail.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function email(params) {\n return core._email(ZodEmail, params);\n}\nexport const ZodGUID = /*@__PURE__*/ core.$constructor(\"ZodGUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodGUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function guid(params) {\n return core._guid(ZodGUID, params);\n}\nexport const ZodUUID = /*@__PURE__*/ core.$constructor(\"ZodUUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodUUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function uuid(params) {\n return core._uuid(ZodUUID, params);\n}\nexport function uuidv4(params) {\n return core._uuidv4(ZodUUID, params);\n}\n// ZodUUIDv6\nexport function uuidv6(params) {\n return core._uuidv6(ZodUUID, params);\n}\n// ZodUUIDv7\nexport function uuidv7(params) {\n return core._uuidv7(ZodUUID, params);\n}\nexport const ZodURL = /*@__PURE__*/ core.$constructor(\"ZodURL\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodURL.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function url(params) {\n return core._url(ZodURL, params);\n}\nexport const ZodEmoji = /*@__PURE__*/ core.$constructor(\"ZodEmoji\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodEmoji.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function emoji(params) {\n return core._emoji(ZodEmoji, params);\n}\nexport const ZodNanoID = /*@__PURE__*/ core.$constructor(\"ZodNanoID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodNanoID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function nanoid(params) {\n return core._nanoid(ZodNanoID, params);\n}\nexport const ZodCUID = /*@__PURE__*/ core.$constructor(\"ZodCUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cuid(params) {\n return core._cuid(ZodCUID, params);\n}\nexport const ZodCUID2 = /*@__PURE__*/ core.$constructor(\"ZodCUID2\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCUID2.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cuid2(params) {\n return core._cuid2(ZodCUID2, params);\n}\nexport const ZodULID = /*@__PURE__*/ core.$constructor(\"ZodULID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodULID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ulid(params) {\n return core._ulid(ZodULID, params);\n}\nexport const ZodXID = /*@__PURE__*/ core.$constructor(\"ZodXID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodXID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function xid(params) {\n return core._xid(ZodXID, params);\n}\nexport const ZodKSUID = /*@__PURE__*/ core.$constructor(\"ZodKSUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodKSUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ksuid(params) {\n return core._ksuid(ZodKSUID, params);\n}\nexport const ZodIPv4 = /*@__PURE__*/ core.$constructor(\"ZodIPv4\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodIPv4.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ipv4(params) {\n return core._ipv4(ZodIPv4, params);\n}\nexport const ZodIPv6 = /*@__PURE__*/ core.$constructor(\"ZodIPv6\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodIPv6.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ipv6(params) {\n return core._ipv6(ZodIPv6, params);\n}\nexport const ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv4\", (inst, def) => {\n core.$ZodCIDRv4.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cidrv4(params) {\n return core._cidrv4(ZodCIDRv4, params);\n}\nexport const ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv6\", (inst, def) => {\n core.$ZodCIDRv6.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cidrv6(params) {\n return core._cidrv6(ZodCIDRv6, params);\n}\nexport const ZodBase64 = /*@__PURE__*/ core.$constructor(\"ZodBase64\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodBase64.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function base64(params) {\n return core._base64(ZodBase64, params);\n}\nexport const ZodBase64URL = /*@__PURE__*/ core.$constructor(\"ZodBase64URL\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodBase64URL.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function base64url(params) {\n return core._base64url(ZodBase64URL, params);\n}\nexport const ZodE164 = /*@__PURE__*/ core.$constructor(\"ZodE164\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodE164.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function e164(params) {\n return core._e164(ZodE164, params);\n}\nexport const ZodJWT = /*@__PURE__*/ core.$constructor(\"ZodJWT\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodJWT.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function jwt(params) {\n return core._jwt(ZodJWT, params);\n}\nexport const ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodCustomStringFormat\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCustomStringFormat.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n return core._stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params);\n}\nexport const ZodNumber = /*@__PURE__*/ core.$constructor(\"ZodNumber\", (inst, def) => {\n core.$ZodNumber.init(inst, def);\n ZodType.init(inst, def);\n inst.gt = (value, params) => inst.check(checks.gt(value, params));\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.lt = (value, params) => inst.check(checks.lt(value, params));\n inst.lte = (value, params) => inst.check(checks.lte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n inst.int = (params) => inst.check(int(params));\n inst.safe = (params) => inst.check(int(params));\n inst.positive = (params) => inst.check(checks.gt(0, params));\n inst.nonnegative = (params) => inst.check(checks.gte(0, params));\n inst.negative = (params) => inst.check(checks.lt(0, params));\n inst.nonpositive = (params) => inst.check(checks.lte(0, params));\n inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n inst.step = (value, params) => inst.check(checks.multipleOf(value, params));\n // inst.finite = (params) => inst.check(core.finite(params));\n inst.finite = () => inst;\n const bag = inst._zod.bag;\n inst.minValue =\n Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;\n inst.maxValue =\n Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;\n inst.isInt = (bag.format ?? \"\").includes(\"int\") || Number.isSafeInteger(bag.multipleOf ?? 0.5);\n inst.isFinite = true;\n inst.format = bag.format ?? null;\n});\nexport function number(params) {\n return core._number(ZodNumber, params);\n}\nexport const ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodNumberFormat\", (inst, def) => {\n core.$ZodNumberFormat.init(inst, def);\n ZodNumber.init(inst, def);\n});\nexport function int(params) {\n return core._int(ZodNumberFormat, params);\n}\nexport function float32(params) {\n return core._float32(ZodNumberFormat, params);\n}\nexport function float64(params) {\n return core._float64(ZodNumberFormat, params);\n}\nexport function int32(params) {\n return core._int32(ZodNumberFormat, params);\n}\nexport function uint32(params) {\n return core._uint32(ZodNumberFormat, params);\n}\nexport const ZodBoolean = /*@__PURE__*/ core.$constructor(\"ZodBoolean\", (inst, def) => {\n core.$ZodBoolean.init(inst, def);\n ZodType.init(inst, def);\n});\nexport function boolean(params) {\n return core._boolean(ZodBoolean, params);\n}\nexport const ZodBigInt = /*@__PURE__*/ core.$constructor(\"ZodBigInt\", (inst, def) => {\n core.$ZodBigInt.init(inst, def);\n ZodType.init(inst, def);\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.gt = (value, params) => inst.check(checks.gt(value, params));\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.lt = (value, params) => inst.check(checks.lt(value, params));\n inst.lte = (value, params) => inst.check(checks.lte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n inst.positive = (params) => inst.check(checks.gt(BigInt(0), params));\n inst.negative = (params) => inst.check(checks.lt(BigInt(0), params));\n inst.nonpositive = (params) => inst.check(checks.lte(BigInt(0), params));\n inst.nonnegative = (params) => inst.check(checks.gte(BigInt(0), params));\n inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n const bag = inst._zod.bag;\n inst.minValue = bag.minimum ?? null;\n inst.maxValue = bag.maximum ?? null;\n inst.format = bag.format ?? null;\n});\nexport function bigint(params) {\n return core._bigint(ZodBigInt, params);\n}\nexport const ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodBigIntFormat\", (inst, def) => {\n core.$ZodBigIntFormat.init(inst, def);\n ZodBigInt.init(inst, def);\n});\n// int64\nexport function int64(params) {\n return core._int64(ZodBigIntFormat, params);\n}\n// uint64\nexport function uint64(params) {\n return core._uint64(ZodBigIntFormat, params);\n}\nexport const ZodSymbol = /*@__PURE__*/ core.$constructor(\"ZodSymbol\", (inst, def) => {\n core.$ZodSymbol.init(inst, def);\n ZodType.init(inst, def);\n});\nexport function symbol(params) {\n return core._symbol(ZodSymbol, params);\n}\nexport const ZodUndefined = /*@__PURE__*/ core.$constructor(\"ZodUndefined\", (inst, def) => {\n core.$ZodUndefined.init(inst, def);\n ZodType.init(inst, def);\n});\nfunction _undefined(params) {\n return core._undefined(ZodUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodNull = /*@__PURE__*/ core.$constructor(\"ZodNull\", (inst, def) => {\n core.$ZodNull.init(inst, def);\n ZodType.init(inst, def);\n});\nfunction _null(params) {\n return core._null(ZodNull, params);\n}\nexport { _null as null };\nexport const ZodAny = /*@__PURE__*/ core.$constructor(\"ZodAny\", (inst, def) => {\n core.$ZodAny.init(inst, def);\n ZodType.init(inst, def);\n});\nexport function any() {\n return core._any(ZodAny);\n}\nexport const ZodUnknown = /*@__PURE__*/ core.$constructor(\"ZodUnknown\", (inst, def) => {\n core.$ZodUnknown.init(inst, def);\n ZodType.init(inst, def);\n});\nexport function unknown() {\n return core._unknown(ZodUnknown);\n}\nexport const ZodNever = /*@__PURE__*/ core.$constructor(\"ZodNever\", (inst, def) => {\n core.$ZodNever.init(inst, def);\n ZodType.init(inst, def);\n});\nexport function never(params) {\n return core._never(ZodNever, params);\n}\nexport const ZodVoid = /*@__PURE__*/ core.$constructor(\"ZodVoid\", (inst, def) => {\n core.$ZodVoid.init(inst, def);\n ZodType.init(inst, def);\n});\nfunction _void(params) {\n return core._void(ZodVoid, params);\n}\nexport { _void as void };\nexport const ZodDate = /*@__PURE__*/ core.$constructor(\"ZodDate\", (inst, def) => {\n core.$ZodDate.init(inst, def);\n ZodType.init(inst, def);\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n const c = inst._zod.bag;\n inst.minDate = c.minimum ? new Date(c.minimum) : null;\n inst.maxDate = c.maximum ? new Date(c.maximum) : null;\n});\nexport function date(params) {\n return core._date(ZodDate, params);\n}\nexport const ZodArray = /*@__PURE__*/ core.$constructor(\"ZodArray\", (inst, def) => {\n core.$ZodArray.init(inst, def);\n ZodType.init(inst, def);\n inst.element = def.element;\n inst.min = (minLength, params) => inst.check(checks.minLength(minLength, params));\n inst.nonempty = (params) => inst.check(checks.minLength(1, params));\n inst.max = (maxLength, params) => inst.check(checks.maxLength(maxLength, params));\n inst.length = (len, params) => inst.check(checks.length(len, params));\n inst.unwrap = () => inst.element;\n});\nexport function array(element, params) {\n return core._array(ZodArray, element, params);\n}\n// .keyof\nexport function keyof(schema) {\n const shape = schema._zod.def.shape;\n return literal(Object.keys(shape));\n}\nexport const ZodObject = /*@__PURE__*/ core.$constructor(\"ZodObject\", (inst, def) => {\n core.$ZodObject.init(inst, def);\n ZodType.init(inst, def);\n util.defineLazy(inst, \"shape\", () => def.shape);\n inst.keyof = () => _enum(Object.keys(inst._zod.def.shape));\n inst.catchall = (catchall) => inst.clone({ ...inst._zod.def, catchall: catchall });\n inst.passthrough = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n // inst.nonstrict = () => inst.clone({ ...inst._zod.def, catchall: api.unknown() });\n inst.loose = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n inst.strict = () => inst.clone({ ...inst._zod.def, catchall: never() });\n inst.strip = () => inst.clone({ ...inst._zod.def, catchall: undefined });\n inst.extend = (incoming) => {\n return util.extend(inst, incoming);\n };\n inst.merge = (other) => util.merge(inst, other);\n inst.pick = (mask) => util.pick(inst, mask);\n inst.omit = (mask) => util.omit(inst, mask);\n inst.partial = (...args) => util.partial(ZodOptional, inst, args[0]);\n inst.required = (...args) => util.required(ZodNonOptional, inst, args[0]);\n});\nexport function object(shape, params) {\n const def = {\n type: \"object\",\n get shape() {\n util.assignProp(this, \"shape\", { ...shape });\n return this.shape;\n },\n ...util.normalizeParams(params),\n };\n return new ZodObject(def);\n}\n// strictObject\nexport function strictObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n get shape() {\n util.assignProp(this, \"shape\", { ...shape });\n return this.shape;\n },\n catchall: never(),\n ...util.normalizeParams(params),\n });\n}\n// looseObject\nexport function looseObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n get shape() {\n util.assignProp(this, \"shape\", { ...shape });\n return this.shape;\n },\n catchall: unknown(),\n ...util.normalizeParams(params),\n });\n}\nexport const ZodUnion = /*@__PURE__*/ core.$constructor(\"ZodUnion\", (inst, def) => {\n core.$ZodUnion.init(inst, def);\n ZodType.init(inst, def);\n inst.options = def.options;\n});\nexport function union(options, params) {\n return new ZodUnion({\n type: \"union\",\n options: options,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodDiscriminatedUnion\", (inst, def) => {\n ZodUnion.init(inst, def);\n core.$ZodDiscriminatedUnion.init(inst, def);\n});\nexport function discriminatedUnion(discriminator, options, params) {\n // const [options, params] = args;\n return new ZodDiscriminatedUnion({\n type: \"union\",\n options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodIntersection = /*@__PURE__*/ core.$constructor(\"ZodIntersection\", (inst, def) => {\n core.$ZodIntersection.init(inst, def);\n ZodType.init(inst, def);\n});\nexport function intersection(left, right) {\n return new ZodIntersection({\n type: \"intersection\",\n left: left,\n right: right,\n });\n}\nexport const ZodTuple = /*@__PURE__*/ core.$constructor(\"ZodTuple\", (inst, def) => {\n core.$ZodTuple.init(inst, def);\n ZodType.init(inst, def);\n inst.rest = (rest) => inst.clone({\n ...inst._zod.def,\n rest: rest,\n });\n});\nexport function tuple(items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof core.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new ZodTuple({\n type: \"tuple\",\n items: items,\n rest,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodRecord = /*@__PURE__*/ core.$constructor(\"ZodRecord\", (inst, def) => {\n core.$ZodRecord.init(inst, def);\n ZodType.init(inst, def);\n inst.keyType = def.keyType;\n inst.valueType = def.valueType;\n});\nexport function record(keyType, valueType, params) {\n return new ZodRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\n// type alksjf = core.output<core.$ZodRecordKey>;\nexport function partialRecord(keyType, valueType, params) {\n return new ZodRecord({\n type: \"record\",\n keyType: union([keyType, never()]),\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMap = /*@__PURE__*/ core.$constructor(\"ZodMap\", (inst, def) => {\n core.$ZodMap.init(inst, def);\n ZodType.init(inst, def);\n inst.keyType = def.keyType;\n inst.valueType = def.valueType;\n});\nexport function map(keyType, valueType, params) {\n return new ZodMap({\n type: \"map\",\n keyType: keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodSet = /*@__PURE__*/ core.$constructor(\"ZodSet\", (inst, def) => {\n core.$ZodSet.init(inst, def);\n ZodType.init(inst, def);\n inst.min = (...args) => inst.check(core._minSize(...args));\n inst.nonempty = (params) => inst.check(core._minSize(1, params));\n inst.max = (...args) => inst.check(core._maxSize(...args));\n inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function set(valueType, params) {\n return new ZodSet({\n type: \"set\",\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodEnum = /*@__PURE__*/ core.$constructor(\"ZodEnum\", (inst, def) => {\n core.$ZodEnum.init(inst, def);\n ZodType.init(inst, def);\n inst.enum = def.entries;\n inst.options = Object.values(def.entries);\n const keys = new Set(Object.keys(def.entries));\n inst.extract = (values, params) => {\n const newEntries = {};\n for (const value of values) {\n if (keys.has(value)) {\n newEntries[value] = def.entries[value];\n }\n else\n throw new Error(`Key ${value} not found in enum`);\n }\n return new ZodEnum({\n ...def,\n checks: [],\n ...util.normalizeParams(params),\n entries: newEntries,\n });\n };\n inst.exclude = (values, params) => {\n const newEntries = { ...def.entries };\n for (const value of values) {\n if (keys.has(value)) {\n delete newEntries[value];\n }\n else\n throw new Error(`Key ${value} not found in enum`);\n }\n return new ZodEnum({\n ...def,\n checks: [],\n ...util.normalizeParams(params),\n entries: newEntries,\n });\n };\n});\nfunction _enum(values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n return new ZodEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport { _enum as enum };\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n return new ZodEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodLiteral = /*@__PURE__*/ core.$constructor(\"ZodLiteral\", (inst, def) => {\n core.$ZodLiteral.init(inst, def);\n ZodType.init(inst, def);\n inst.values = new Set(def.values);\n Object.defineProperty(inst, \"value\", {\n get() {\n if (def.values.length > 1) {\n throw new Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");\n }\n return def.values[0];\n },\n });\n});\nexport function literal(value, params) {\n return new ZodLiteral({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\nexport const ZodFile = /*@__PURE__*/ core.$constructor(\"ZodFile\", (inst, def) => {\n core.$ZodFile.init(inst, def);\n ZodType.init(inst, def);\n inst.min = (size, params) => inst.check(core._minSize(size, params));\n inst.max = (size, params) => inst.check(core._maxSize(size, params));\n inst.mime = (types, params) => inst.check(core._mime(Array.isArray(types) ? types : [types], params));\n});\nexport function file(params) {\n return core._file(ZodFile, params);\n}\nexport const ZodTransform = /*@__PURE__*/ core.$constructor(\"ZodTransform\", (inst, def) => {\n core.$ZodTransform.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(util.issue(issue, payload.value, def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n _issue.input ?? (_issue.input = payload.value);\n _issue.inst ?? (_issue.inst = inst);\n _issue.continue ?? (_issue.continue = true);\n payload.issues.push(util.issue(_issue));\n }\n };\n const output = def.transform(payload.value, payload);\n if (output instanceof Promise) {\n return output.then((output) => {\n payload.value = output;\n return payload;\n });\n }\n payload.value = output;\n return payload;\n };\n});\nexport function transform(fn) {\n return new ZodTransform({\n type: \"transform\",\n transform: fn,\n });\n}\nexport const ZodOptional = /*@__PURE__*/ core.$constructor(\"ZodOptional\", (inst, def) => {\n core.$ZodOptional.init(inst, def);\n ZodType.init(inst, def);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function optional(innerType) {\n return new ZodOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nexport const ZodNullable = /*@__PURE__*/ core.$constructor(\"ZodNullable\", (inst, def) => {\n core.$ZodNullable.init(inst, def);\n ZodType.init(inst, def);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nullable(innerType) {\n return new ZodNullable({\n type: \"nullable\",\n innerType: innerType,\n });\n}\n// nullish\nexport function nullish(innerType) {\n return optional(nullable(innerType));\n}\nexport const ZodDefault = /*@__PURE__*/ core.$constructor(\"ZodDefault\", (inst, def) => {\n core.$ZodDefault.init(inst, def);\n ZodType.init(inst, def);\n inst.unwrap = () => inst._zod.def.innerType;\n inst.removeDefault = inst.unwrap;\n});\nexport function _default(innerType, defaultValue) {\n return new ZodDefault({\n type: \"default\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : defaultValue;\n },\n });\n}\nexport const ZodPrefault = /*@__PURE__*/ core.$constructor(\"ZodPrefault\", (inst, def) => {\n core.$ZodPrefault.init(inst, def);\n ZodType.init(inst, def);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function prefault(innerType, defaultValue) {\n return new ZodPrefault({\n type: \"prefault\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : defaultValue;\n },\n });\n}\nexport const ZodNonOptional = /*@__PURE__*/ core.$constructor(\"ZodNonOptional\", (inst, def) => {\n core.$ZodNonOptional.init(inst, def);\n ZodType.init(inst, def);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nonoptional(innerType, params) {\n return new ZodNonOptional({\n type: \"nonoptional\",\n innerType: innerType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodSuccess = /*@__PURE__*/ core.$constructor(\"ZodSuccess\", (inst, def) => {\n core.$ZodSuccess.init(inst, def);\n ZodType.init(inst, def);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function success(innerType) {\n return new ZodSuccess({\n type: \"success\",\n innerType: innerType,\n });\n}\nexport const ZodCatch = /*@__PURE__*/ core.$constructor(\"ZodCatch\", (inst, def) => {\n core.$ZodCatch.init(inst, def);\n ZodType.init(inst, def);\n inst.unwrap = () => inst._zod.def.innerType;\n inst.removeCatch = inst.unwrap;\n});\nfunction _catch(innerType, catchValue) {\n return new ZodCatch({\n type: \"catch\",\n innerType: innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\nexport { _catch as catch };\nexport const ZodNaN = /*@__PURE__*/ core.$constructor(\"ZodNaN\", (inst, def) => {\n core.$ZodNaN.init(inst, def);\n ZodType.init(inst, def);\n});\nexport function nan(params) {\n return core._nan(ZodNaN, params);\n}\nexport const ZodPipe = /*@__PURE__*/ core.$constructor(\"ZodPipe\", (inst, def) => {\n core.$ZodPipe.init(inst, def);\n ZodType.init(inst, def);\n inst.in = def.in;\n inst.out = def.out;\n});\nexport function pipe(in_, out) {\n return new ZodPipe({\n type: \"pipe\",\n in: in_,\n out: out,\n // ...util.normalizeParams(params),\n });\n}\nexport const ZodReadonly = /*@__PURE__*/ core.$constructor(\"ZodReadonly\", (inst, def) => {\n core.$ZodReadonly.init(inst, def);\n ZodType.init(inst, def);\n});\nexport function readonly(innerType) {\n return new ZodReadonly({\n type: \"readonly\",\n innerType: innerType,\n });\n}\nexport const ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodTemplateLiteral\", (inst, def) => {\n core.$ZodTemplateLiteral.init(inst, def);\n ZodType.init(inst, def);\n});\nexport function templateLiteral(parts, params) {\n return new ZodTemplateLiteral({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodLazy = /*@__PURE__*/ core.$constructor(\"ZodLazy\", (inst, def) => {\n core.$ZodLazy.init(inst, def);\n ZodType.init(inst, def);\n inst.unwrap = () => inst._zod.def.getter();\n});\nexport function lazy(getter) {\n return new ZodLazy({\n type: \"lazy\",\n getter: getter,\n });\n}\nexport const ZodPromise = /*@__PURE__*/ core.$constructor(\"ZodPromise\", (inst, def) => {\n core.$ZodPromise.init(inst, def);\n ZodType.init(inst, def);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function promise(innerType) {\n return new ZodPromise({\n type: \"promise\",\n innerType: innerType,\n });\n}\nexport const ZodCustom = /*@__PURE__*/ core.$constructor(\"ZodCustom\", (inst, def) => {\n core.$ZodCustom.init(inst, def);\n ZodType.init(inst, def);\n});\n// custom checks\nexport function check(fn) {\n const ch = new core.$ZodCheck({\n check: \"custom\",\n // ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\nexport function custom(fn, _params) {\n return core._custom(ZodCustom, fn ?? (() => true), _params);\n}\nexport function refine(fn, _params = {}) {\n return core._refine(ZodCustom, fn, _params);\n}\n// superRefine\nexport function superRefine(fn) {\n const ch = check((payload) => {\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n _issue.input ?? (_issue.input = payload.value);\n _issue.inst ?? (_issue.inst = ch);\n _issue.continue ?? (_issue.continue = !ch._zod.def.abort);\n payload.issues.push(util.issue(_issue));\n }\n };\n return fn(payload.value, payload);\n });\n return ch;\n}\nfunction _instanceof(cls, params = {\n error: `Input not instance of ${cls.name}`,\n}) {\n const inst = new ZodCustom({\n type: \"custom\",\n check: \"custom\",\n fn: (data) => data instanceof cls,\n abort: true,\n ...util.normalizeParams(params),\n });\n inst._zod.bag.Class = cls;\n return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n Pipe: ZodPipe,\n Boolean: ZodBoolean,\n String: ZodString,\n Transform: ZodTransform,\n}, ...args);\nexport function json(params) {\n const jsonSchema = lazy(() => {\n return union([string(params), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n });\n return jsonSchema;\n}\n// preprocess\n// /** @deprecated Use `z.pipe()` and `z.transform()` instead. */\nexport function preprocess(fn, schema) {\n return pipe(transform(fn), schema);\n}\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(str, 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 EncoderConfig,\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) : EncoderConfig {\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 : EncoderConfig\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 : EncoderConfig) : 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) : EncoderConfig {\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 : EncoderConfig) : 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) : EncoderConfig {\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 : EncoderConfig) : 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) : EncoderConfig {\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","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_TYPE = {\n P2PKH : 'p2pkh',\n P2SH : 'p2sh',\n P2WPKH : 'p2wpkh',\n P2WSH : 'p2wsh',\n P2TR : 'p2tr',\n OPRETURN : 'opreturn',\n} as const\n\nexport const SPEND_SCRIPT_TYPE = {\n P2PKH : 'p2pkh',\n P2SH : 'p2sh',\n P2WPKH : 'p2wpkh',\n P2WSH : 'p2wsh',\n P2TR : 'p2tr',\n P2TS : 'p2ts',\n} as const\n\nexport const LOCK_SCRIPT_REGEX : Record<string, RegExp> = {\n [LOCK_SCRIPT_TYPE.P2PKH] : /^76a914[0-9a-f]{40}88ac$/i,\n [LOCK_SCRIPT_TYPE.P2SH] : /^a914[0-9a-f]{40}87$/i,\n [LOCK_SCRIPT_TYPE.P2WPKH] : /^0014[0-9a-f]{40}$/i,\n [LOCK_SCRIPT_TYPE.P2WSH] : /^0020[0-9a-f]{64}$/i,\n [LOCK_SCRIPT_TYPE.P2TR] : /^5120[0-9a-f]{64}$/i,\n [LOCK_SCRIPT_TYPE.OPRETURN] : /^6a[0-9a-f]{2,}$/i,\n} as const\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 { Buff, Bytes } from '@vbyte/buff'\nimport { LOCK_SCRIPT_REGEX } from '@/const.js'\n\nimport type {\n LockScriptInfo,\n LockScriptType,\n WitnessVersion\n} from '@/types/index.js'\n\nexport function is_return_script (script : Bytes) : boolean {\n const bytes = Buff.bytes(script)\n return bytes.at(0) === 0x6a\n}\n\nexport function get_lock_script_info (script : Bytes) : LockScriptInfo {\n return {\n type : get_lock_script_type(script),\n version : get_lock_script_version(script)\n }\n}\n\nexport function get_lock_script_type (script : Bytes) : LockScriptType | null {\n // Get the hex string of the script.\n const hex = Buff.bytes(script).hex\n // Iterate over the lock script regexes.\n for (const [ type, regex ] of Object.entries(LOCK_SCRIPT_REGEX)) {\n // If the script matches the regex, return the type.\n if (regex.test(hex)) return type as LockScriptType\n }\n // If the script does not match any regex, return null.\n return null\n}\n\nexport function get_lock_script_version (script : Bytes) : WitnessVersion | null {\n // Get the version of the script.\n const version = Buff.bytes(script)\n // Return the version of the script.\n switch (version.at(0)) {\n case 0x00 : return 0\n case 0x51 : return 1\n default : return null\n }\n}\n\nexport function is_p2pkh_script (script : Bytes) : boolean {\n const hex = Buff.bytes(script).hex\n return LOCK_SCRIPT_REGEX['p2pkh'].test(hex)\n}\n\nexport function is_p2sh_script (script : Bytes) : boolean {\n const hex = Buff.bytes(script).hex\n return LOCK_SCRIPT_REGEX['p2sh'].test(hex)\n}\n\nexport function is_p2wpkh_script (script : Bytes) : boolean {\n const hex = Buff.bytes(script).hex\n return LOCK_SCRIPT_REGEX['p2wpkh'].test(hex)\n}\n\nexport function is_p2wsh_script (script : Bytes) : boolean {\n const hex = Buff.bytes(script).hex\n return LOCK_SCRIPT_REGEX['p2wsh'].test(hex)\n}\n\nexport function is_p2tr_script (script : Bytes) : boolean {\n const hex = Buff.bytes(script).hex\n return LOCK_SCRIPT_REGEX['p2tr'].test(hex)\n}\n\nexport function is_opreturn_script (script : Bytes) : boolean {\n const hex = Buff.bytes(script).hex\n return LOCK_SCRIPT_REGEX['opreturn'].test(hex)\n}\n","import type { AddressType, ScriptInfo } 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) : ScriptInfo {\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 'p2wpkh':\n return get_p2w_pkh_script(script_key)\n case 'p2wsh':\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 hex : '76a914' + script_key + '88ac',\n asm : [ 'OP_DUP', 'OP_HASH160', script_key, 'OP_EQUALVERIFY', 'OP_CHECKSIG' ]\n }\n}\n\nfunction get_p2sh_script (script_key : string) {\n return {\n hex : 'a914' + script_key + '87',\n asm : [ 'OP_HASH160', script_key, 'OP_EQUAL' ]\n }\n}\n\nfunction get_p2w_pkh_script (script_key : string) {\n return {\n hex : '0014' + script_key,\n asm : [ 'OP_0', script_key ]\n }\n}\n\nfunction get_p2w_sh_script (script_key : string) {\n return {\n hex : '0020' + script_key,\n asm : [ 'OP_0', script_key ]\n }\n}\n\nfunction get_p2tr_script (script_key : string) {\n return {\n hex : '5120' + script_key,\n asm : [ 'OP_1', script_key ]\n }\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 AddressInfo,\n ChainNetwork,\n LockScriptType,\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', 'p2wpkh', 'main', 20, 'bech32', 0 ],\n [ 'tb', 'p2wpkh', 'testnet', 20, 'bech32', 0 ],\n [ 'bcrt', 'p2wpkh', 'regtest', 20, 'bech32', 0 ],\n [ 'bc', 'p2wsh', 'main', 32, 'bech32', 0 ],\n [ 'tb', 'p2wsh', 'testnet', 32, 'bech32', 0 ],\n [ 'bcrt', 'p2wsh', '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 : LockScriptType\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 * 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 get_address_info (address : string) : AddressInfo {\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 data = Buff.uint(dec.data).hex\n const script = get_address_script(data, type)\n // Return the address configuration and data.\n return { data, script,type, prefix, network, size, format, version }\n }\n // Otherwise, throw an error\n throw new Error('address configuration is invalid')\n}\n","import { Buff, Bytes } from '@vbyte/buff'\nimport { Assert } from '@vbyte/micro-lib'\nimport { hash160 } from '@vbyte/micro-lib/hash'\nimport { encode_address } from './encode.js'\nimport { is_p2pkh_script } from '@/lib/script/lock.js'\nimport { LOCK_SCRIPT_TYPE } from '@/const.js'\n\nimport {\n get_address_config,\n get_address_info\n} from './util.js'\n\nimport type {\n AddressInfo,\n ChainNetwork\n} from '@/types/index.js'\n\nconst ADDRESS_TYPE = LOCK_SCRIPT_TYPE.P2PKH\n\nexport namespace P2PKH {\n export const create_address = create_p2pkh_address\n export const create_script = create_p2pkh_script\n export const encode_address = encode_p2pkh_address\n export const encode_script = encode_p2pkh_script\n export const decode_address = decode_p2pkh_address\n export const decode_script = decode_p2pkh_script\n}\n\nfunction create_p2pkh_address (\n pubkey : Bytes,\n network : ChainNetwork = 'main',\n) : string {\n // Create the p2pkh script.\n const script = create_p2pkh_script(pubkey)\n // Encode the script as an address.\n return encode_p2pkh_address(script, network)\n}\n\nfunction create_p2pkh_script (pubkey : Bytes) : Buff {\n // Convert the public key into bytes.\n const bytes = Buff.bytes(pubkey)\n // Assert the public key is 33 bytes.\n Assert.size(bytes, 33, 'invalid pubkey size')\n // Convert the bytes into a hash.\n const hash = hash160(bytes)\n // Return the script.\n return encode_p2pkh_script(hash)\n}\n\nfunction encode_p2pkh_script (pk_hash : Bytes) : Buff {\n return Buff.join([ '76a914', pk_hash, '88ac' ])\n}\n\nfunction encode_p2pkh_address (\n script : Bytes,\n network : ChainNetwork = 'main',\n) : string {\n // Get the public key hash from the script.\n const pk_hash = decode_p2pkh_script(script)\n // Get the address configuration.\n const config = get_address_config(network, ADDRESS_TYPE)\n // Assert the configuration exists.\n Assert.exists(config, `unrecognized address config: ${ADDRESS_TYPE} on ${network}` )\n // Assert the payload size is correct.\n Assert.size(pk_hash, config.size, `invalid payload size: ${pk_hash.length} !== ${config.size}` )\n // Encode the address.\n return encode_address({\n data : pk_hash,\n format : 'base58',\n version : config.version\n })\n}\n\nfunction decode_p2pkh_address (\n address : string\n) : AddressInfo {\n // Parse the address.\n const parsed = get_address_info(address)\n // Assert the address type is correct.\n Assert.ok(parsed.type === 'p2pkh', `address type mismatch: ${parsed.type} !== ${ADDRESS_TYPE}`)\n // Return the parsed address.\n return parsed\n}\n\nfunction decode_p2pkh_script (\n script : Bytes,\n) : Buff {\n // Convert the script into bytes.\n const bytes = Buff.bytes(script)\n // Assert the script is a p2pkh script.\n Assert.ok(is_p2pkh_script(script), `invalid p2pkh script`)\n // Return the public key hash from the script.\n return bytes.slice(3, 23)\n}\n","import { Buff, Bytes } from '@vbyte/buff'\nimport { Assert } from '@vbyte/micro-lib'\nimport { hash160 } from '@vbyte/micro-lib/hash'\nimport { encode_address } from './encode.js'\nimport { is_p2sh_script } from '@/lib/script/lock.js'\nimport { LOCK_SCRIPT_TYPE } from '@/const.js'\n\nimport {\n get_address_config,\n get_address_info\n} from './util.js'\n\nimport type {\n AddressInfo,\n ChainNetwork\n} from '@/types/index.js'\n\nconst ADDRESS_TYPE = LOCK_SCRIPT_TYPE.P2SH\n\nexport namespace P2SH {\n export const create_address = create_p2sh_address\n export const create_script = create_p2sh_script\n export const encode_address = encode_p2sh_address\n export const encode_script = encode_p2sh_script\n export const decode_address = decode_p2sh_address\n export const decode_script = decode_p2sh_script\n}\n\nfunction create_p2sh_address (\n script : Bytes,\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 // Create the p2sh script.\n const p2sh_script = encode_p2sh_script(hash)\n // Encode the address.\n return encode_p2sh_address(p2sh_script, network)\n}\n\nfunction create_p2sh_script (script : Bytes) : Buff {\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 // Return the script.\n return encode_p2sh_script(hash)\n}\n\nfunction encode_p2sh_script (script_hash : Bytes) : Buff {\n return Buff.join([ 'a914', script_hash, '87' ])\n}\n\nfunction encode_p2sh_address (\n script_pk : Bytes,\n network : ChainNetwork = 'main',\n) : string {\n // Get the script hash from the script.\n const script_hash = decode_p2sh_script(script_pk)\n // Get the address configuration.\n const config = get_address_config(network, ADDRESS_TYPE)\n // Assert the configuration exists.\n Assert.exists(config, `unrecognized address config: ${ADDRESS_TYPE} on ${network}` )\n // Assert the payload size is correct.\n Assert.size(script_hash, config.size, `invalid payload size: ${script_hash.length} !== ${config.size}` )\n // Encode the address.\n return encode_address({\n data : script_hash,\n format : 'base58',\n version : config.version\n })\n}\n\nfunction decode_p2sh_address (\n address : string\n) : AddressInfo {\n // Parse the address.\n const parsed = get_address_info(address)\n // Assert the address type is correct.\n Assert.ok(parsed.type === 'p2sh', `address type mismatch: ${parsed.type} !== ${ADDRESS_TYPE}`)\n // Return the parsed address.\n return parsed\n}\n\nfunction decode_p2sh_script (\n script : Bytes,\n) : Buff {\n // Assert the script is a p2sh script.\n Assert.ok(is_p2sh_script(script), `invalid p2sh script`)\n // Convert the script into bytes.\n const bytes = Buff.bytes(script)\n // Return the script hash from the script.\n return bytes.slice(2, 22)\n}\n","import { Buff, Bytes } from '@vbyte/buff'\nimport { Assert } from '@vbyte/micro-lib'\nimport { hash160 } from '@vbyte/micro-lib/hash'\nimport { encode_address } from './encode.js'\nimport { is_p2wpkh_script } from '@/lib/script/lock.js'\nimport { LOCK_SCRIPT_TYPE } from '@/const.js'\n\nimport {\n get_address_config,\n get_address_info\n} from './util.js'\n\nimport type {\n AddressInfo,\n ChainNetwork\n} from '@/types/index.js'\n\nconst ADDRESS_TYPE = LOCK_SCRIPT_TYPE.P2WPKH\n\nexport namespace P2WPKH {\n export const create_address = create_p2wpkh_address\n export const create_script = create_p2wpkh_script\n export const encode_address = encode_p2wpkh_address\n export const encode_script = encode_p2wpkh_script\n export const decode_address = decode_p2wpkh_address\n export const decode_script = decode_p2wpkh_script\n}\n\nfunction create_p2wpkh_address (\n pubkey : Bytes,\n network : ChainNetwork = 'main',\n) : string {\n // Create the p2wpkh script.\n const script = create_p2wpkh_script(pubkey)\n // Encode the script as an address.\n return encode_p2wpkh_address(script, network)\n}\n\nfunction create_p2wpkh_script (pubkey : Bytes) : Buff {\n // Convert the public key into bytes.\n const bytes = Buff.bytes(pubkey)\n // Assert the public key is 33 bytes.\n Assert.size(bytes, 33, 'invalid pubkey size')\n // Convert the bytes into a hash.\n const hash = hash160(bytes)\n // Return the script.\n return encode_p2wpkh_script(hash)\n}\n\nfunction encode_p2wpkh_script (pk_hash : Bytes) : Buff {\n return Buff.join([ '0014', pk_hash ])\n}\n\nfunction encode_p2wpkh_address (\n script_pk : Bytes,\n network : ChainNetwork = 'main',\n) : string {\n // Get the public key hash from the script.\n const pk_hash = decode_p2wpkh_script(script_pk)\n // Get the address configuration.\n const config = get_address_config(network, ADDRESS_TYPE)\n // Assert the configuration exists.\n Assert.exists(config, `unrecognized address config: ${ADDRESS_TYPE} on ${network}` )\n // Assert the payload size is correct.\n Assert.size(pk_hash, config.size, `invalid payload size: ${pk_hash.length} !== ${config.size}` )\n // Encode the address.\n return encode_address({\n data : pk_hash,\n format : 'bech32',\n prefix : config.prefix\n })\n}\n\nfunction decode_p2wpkh_address (\n address : string\n) : AddressInfo {\n // Parse the address.\n const parsed = get_address_info(address)\n // Assert the address type is correct.\n Assert.ok(parsed.type === 'p2wpkh', `address type mismatch: ${parsed.type} !== ${ADDRESS_TYPE}`)\n // Return the parsed address.\n return parsed\n}\n\nfunction decode_p2wpkh_script (\n script : Bytes,\n) : Buff {\n // Assert the script is a p2wpkh script.\n Assert.ok(is_p2wpkh_script(script), `invalid p2wpkh script`)\n // Convert the script into bytes.\n const bytes = Buff.bytes(script)\n // Return the public key hash from the script.\n return bytes.slice(2, 22)\n}\n","import { Buff, Bytes } from '@vbyte/buff'\nimport { Assert } from '@vbyte/micro-lib'\nimport { sha256 } from '@vbyte/micro-lib/hash'\nimport { encode_address } from './encode.js'\nimport { is_p2wsh_script } from '@/lib/script/lock.js'\nimport { LOCK_SCRIPT_TYPE } from '@/const.js'\n\nimport {\n get_address_config,\n get_address_info\n} from './util.js'\n\nimport type {\n AddressInfo,\n ChainNetwork\n} from '@/types/index.js'\n\nconst ADDRESS_TYPE = LOCK_SCRIPT_TYPE.P2WSH\n\nexport namespace P2WSH {\n export const create_address = create_p2wsh_address\n export const create_script = create_p2wsh_script\n export const encode_address = encode_p2wsh_address\n export const encode_script = encode_p2wsh_script\n export const decode_address = decode_p2wsh_address\n export const decode_script = decode_p2wsh_script\n}\n\nfunction create_p2wsh_address (\n script : Bytes,\n network : ChainNetwork = 'main',\n) : string {\n // Create the p2wsh script.\n const wsh_script = create_p2wsh_script(script)\n // Encode the script as an address.\n return encode_p2wsh_address(wsh_script, network)\n}\n\nfunction create_p2wsh_script (script : Bytes) : Buff {\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 // Return the script.\n return encode_p2wsh_script(hash)\n}\n\nfunction encode_p2wsh_script (script_hash : Bytes) : Buff {\n return Buff.join([ '0020', script_hash ])\n}\n\nfunction encode_p2wsh_address (\n script_pk : Bytes,\n network : ChainNetwork = 'main',\n) : string {\n // Get the script hash from the script.\n const script_hash = decode_p2wsh_script(script_pk)\n // Get the address configuration.\n const config = get_address_config(network, ADDRESS_TYPE)\n // Assert the configuration exists.\n Assert.exists(config, `unrecognized address config: ${ADDRESS_TYPE} on ${network}` )\n // Assert the payload size is correct.\n Assert.size(script_hash, config.size, `invalid payload size: ${script_hash.length} !== ${config.size}` )\n // Encode the address.\n return encode_address({\n data : script_hash,\n format : 'bech32',\n prefix : config.prefix\n })\n}\n\nfunction decode_p2wsh_address (\n address : string\n) : AddressInfo {\n // Parse the address.\n const parsed = get_address_info(address)\n // Assert the address type is correct.\n Assert.ok(parsed.type === 'p2wsh', `address type mismatch: ${parsed.type} !== ${ADDRESS_TYPE}`)\n // Return the parsed address.\n return parsed\n}\n\nfunction decode_p2wsh_script (\n script : Bytes,\n) : Buff {\n // Assert the script is a p2wsh script.\n Assert.ok(is_p2wsh_script(script), `invalid p2wsh script`)\n // Convert the script into bytes.\n const bytes = Buff.bytes(script)\n // Return the script hash from the script.\n return bytes.slice(2, 34)\n}\n","import { Buff, Bytes } from '@vbyte/buff'\nimport { Assert } from '@vbyte/micro-lib'\nimport { encode_address } from './encode.js'\nimport { is_p2tr_script } from '@/lib/script/lock.js'\nimport { LOCK_SCRIPT_TYPE } from '@/const.js'\n\nimport {\n get_address_config,\n get_address_info\n} from './util.js'\n\nimport type {\n AddressInfo,\n ChainNetwork\n} from '@/types/index.js'\n\nconst ADDRESS_TYPE = LOCK_SCRIPT_TYPE.P2TR\n\nexport namespace P2TR {\n export const create_address = create_p2tr_address\n export const create_script = create_p2tr_script\n export const encode_address = encode_p2tr_address\n export const encode_script = encode_p2tr_script\n export const decode_address = decode_p2tr_address\n export const decode_script = decode_p2tr_script\n}\n\nfunction create_p2tr_address (\n pubkey : Bytes,\n network : ChainNetwork = 'main',\n) : string {\n // Create the p2tr script.\n const script = create_p2tr_script(pubkey)\n // Encode the script as an address.\n return encode_p2tr_address(script, network)\n}\n\nfunction create_p2tr_script (pubkey : Bytes) : Buff {\n // Convert the public key into bytes.\n const bytes = Buff.bytes(pubkey)\n // Assert the public key is 32 bytes.\n Assert.size(bytes, 32, 'invalid pubkey size')\n // Return the script.\n return encode_p2tr_script(bytes)\n}\n\nfunction encode_p2tr_script (pubkey : Bytes) : Buff {\n return Buff.join([ '5120', pubkey ])\n}\n\nfunction encode_p2tr_address (\n script_pk : Bytes,\n network : ChainNetwork = 'main'\n) : string {\n // Get the public key from the script.\n const pubkey = decode_p2tr_script(script_pk)\n // Get the address configuration.\n const config = get_address_config(network, ADDRESS_TYPE)\n // Assert the configuration exists.\n Assert.exists(config, `unrecognized address config: ${ADDRESS_TYPE} on ${network}` )\n // Assert the payload size is correct.\n Assert.size(pubkey, config.size, `invalid payload size: ${pubkey.length} !== ${config.size}` )\n // Encode the address.\n return encode_address({\n data : pubkey,\n format : 'bech32m',\n prefix : config.prefix\n })\n}\n\nfunction decode_p2tr_address (\n address : string\n) : AddressInfo {\n // Parse the address.\n const parsed = get_address_info(address)\n // Assert the address type is correct.\n Assert.ok(parsed.type === 'p2tr', `address type mismatch: ${parsed.type} !== ${ADDRESS_TYPE}`)\n // Return the parsed address.\n return parsed\n}\n\nfunction decode_p2tr_script (\n script : Bytes,\n) : Buff {\n // Assert the script is a p2tr script.\n Assert.ok(is_p2tr_script(script), `invalid p2tr script`)\n // Convert the script into bytes.\n const bytes = Buff.bytes(script)\n // Return the public key from the script.\n return bytes.slice(2, 34)\n}\n","import { Buff, Bytes } from '@vbyte/buff'\nimport { get_lock_script_type } from '@/lib/script/lock.js'\nimport { get_address_info } from './util.js'\nimport { LOCK_SCRIPT_TYPE } from '@/const.js'\n\nimport { P2PKH } from './p2pkh.js'\nimport { P2SH } from './p2sh.js'\nimport { P2TR } from './p2tr.js'\nimport { P2WPKH } from './p2wpkh.js'\nimport { P2WSH } from './p2wsh.js'\n\nimport type { AddressInfo, ChainNetwork } from '@/types/index.js'\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 create_address (\n script : Bytes,\n network : ChainNetwork = 'main'\n) : string {\n // Convert the script into bytes.\n const bytes = Buff.bytes(script)\n // Get the address configuration.\n const type = get_lock_script_type(bytes)\n // If the script type is not recognized, throw an error.\n if (type === null) throw new Error('unrecognized script type: ' + bytes.hex)\n // Create the address based on the script type.\n switch (type) {\n case LOCK_SCRIPT_TYPE.P2PKH:\n return P2PKH.create_address(script, network)\n case LOCK_SCRIPT_TYPE.P2SH:\n return P2SH.create_address(script, network)\n case LOCK_SCRIPT_TYPE.P2WPKH:\n return P2WPKH.create_address(script, network)\n case LOCK_SCRIPT_TYPE.P2WSH:\n return P2WSH.create_address(script, network)\n case LOCK_SCRIPT_TYPE.P2TR:\n return P2TR.create_address(script, network)\n default:\n // If the script type is not recognized, throw an error.\n throw new Error('unrecognized script type: ' + type)\n }\n}\n\nexport function parse_address (address : string) : AddressInfo {\n return get_address_info(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 LocktimeField {\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 RefPointer {\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) : Buff {\n if (words.length === 0) return Buff.num(0, 1)\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'))\n : buffer\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 { Buff, Bytes, Stream } from '@vbyte/buff'\n\nimport {\n get_op_code,\n get_op_type,\n is_valid_op\n} from './words.js'\n\nimport type { ScriptInfo } from '@/types/script.js'\n\nexport function parse_script (script: Bytes): ScriptInfo {\n const bytes = Buff.bytes(script)\n return {\n asm: decode_script(bytes),\n hex: bytes.hex\n }\n}\n\n/**\n * Decode a bitcoin script into asm instructions.\n */\nexport function decode_script (\n script : Bytes\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, Bytes, 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 InscriptionUtil {\n export type Type = InscriptionData\n export const encode = encode_inscription\n export const decode = decode_inscription\n}\n\nexport function decode_inscription (\n script : Bytes\n) : InscriptionData[] {\n const envelopes = parse_envelopes(script)\n return envelopes.map(parse_record)\n}\n\nexport function encode_inscription (data : InscriptionData[]) : Buff {\n return Buff.join(data.map(create_envelope))\n}\n\nfunction create_envelope (data : InscriptionData) : Buff {\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 : Bytes\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 : Bytes[]) {\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 = decode_bytes(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 decode_bytes (bytes : Bytes) : string {\n return Buff.bytes(bytes).hex\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 identifier : Bytes\n) : string {\n const bytes = Buff.bytes(identifier)\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 bytes : Bytes\n) : number {\n return Buff.bytes(bytes).reverse().num\n}\n\nfunction encode_label (\n label : string\n) : string {\n return Buff.str(label).hex\n}\n\nfunction decode_label (\n label : Bytes\n) : string {\n return Buff.bytes(label).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 chunks : Bytes[],\n format : 'hex' | 'utf8' = 'hex'\n) : string {\n const data = Buff.join(chunks)\n return (format === '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 (label: Bytes): string {\n // Convert hex to BigInt, with byte order reversed\n let big = Buff.bytes(label).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 SequenceField {\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 { encode_script } from './encode.js'\n\nimport {\n decode_script,\n is_valid_script,\n parse_script\n} from './decode.js'\n\nexport * from './decode.js'\nexport * from './encode.js'\nexport * from './lock.js'\nexport * from './util.js'\nexport * from './words.js'\n\nexport namespace ScriptUtil {\n export const parse = parse_script\n export const decode = decode_script\n export const encode = encode_script\n export const is_valid = is_valid_script\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","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 { 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 } 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 { parse_tx } from './parse.js'\nimport { assert_tx_template } from './validate.js'\n\nimport { DEFAULT } from '@/const.js'\n\nimport type {\n TxData,\n TxOutput,\n TxOutputTemplate,\n TxValue\n} from '@/types/index.js'\n\nexport function get_txid (txdata : string | Uint8Array | TxData) : string {\n // If the transaction data is an object,\n if (typeof txdata === 'object') {\n // Assert the structure of the transaction data is valid.\n assert_tx_template(txdata)\n // Encode the transaction data.\n txdata = encode_tx(txdata, false)\n }\n // Return the txid of the transaction data.\n return hash256(txdata).reverse().hex\n}\n\nexport function get_txhash (txdata : string | Uint8Array | TxData) : string {\n // If the transaction data is an object,\n if (typeof txdata === 'object') {\n // Assert the structure of the transaction data is valid.\n assert_tx_template(txdata)\n // Encode the transaction data.\n txdata = encode_tx(txdata, true)\n }\n // Return the txhash of the transaction data.\n return hash256(txdata).reverse().hex\n}\n\nexport function get_tx_value (txdata : string | Uint8Array | TxData) : TxValue {\n // Parse the transaction data.\n const tx = parse_tx(txdata)\n // Assert the structure of the transaction data is valid.\n assert_tx_template(tx)\n // Calculate the value of the transaction.\n const vin = tx.vin.reduce((acc, txin) => acc + (txin.prevout?.value ?? 0n), 0n)\n const vout = tx.vout.reduce((acc, txout) => acc + txout.value, 0n)\n const fees = (vin > vout) ? (vin - vout) : 0n\n // Return the value of the transaction.\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 { 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.sign_ecdsa(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.sign_bip340(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 SpendScriptType,\n WitnessVersion\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 : SpendScriptType | null\n) {\n let script : Uint8Array | undefined\n switch (type) {\n case 'p2ts':\n script = elems.at(-1)\n case 'p2wsh':\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) : SpendScriptType | null{\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 'p2ts'\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 'p2wpkh'\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'\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 'p2wsh'\n // If the witness elements don't match any known profile:\n } else {\n return null\n }\n}\n\nfunction parse_witness_version (\n type : SpendScriptType | null\n) : WitnessVersion | null {\n if (type === null) return null\n if (type.startsWith('p2w')) return 0\n if (type.startsWith('p2t')) return 1\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","ahash","h","create","outputLen","blockLen","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","bytesLength","Chi","c","Maj","HashMD","padOffset","isLE","pos","view","take","min","process","roundClean","digestInto","out","aoutput","setBigUint64","_32n","_u32_max","wh","wl","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","iHash","oHash","buf","getPrototypeOf","hmac","_1n","abool","title","numberToHexUnpadded","hexToNumber","bytesToNumberBE","bytesToHex_","bytesToNumberLE","abytes_","numberToBytesBE","hexToBytes_","numberToBytesLE","ensureBytes","expectedLength","isBytes_","isPosBig","inRange","max","aInRange","bitLen","bitMask","_validateObject","object","fields","optFields","checkField","fieldName","expectedType","isOpt","val","current","entries","forEach","k","memoized","fn","WeakMap","arg","computed","_2n","_3n","_4n","_5n","_7n","_8n","_9n","_16n","mod","result","pow2","x","power","modulo","invert","u","r","m","assertIsSquare","Fp","root","eql","sqr","sqrt3mod4","p1div4","ORDER","pow","sqrt5mod8","p5div8","mul","nv","sub","ONE","tonelliShanks","P","Q","S","Z","_Fp","Field","FpLegendre","cc","Q1div2","is0","M","t","R","ZERO","t_tmp","exponent","FpSqrt","Fp_","tn","c1","neg","c2","c3","c4","tv1","tv2","tv3","tv4","e1","e2","cmov","e3","sqrt9mod16","FIELD_FIELDS","FpInvertBatch","nums","passZero","inverted","multipliedAcc","acc","invertedAcc","inv","reduceRight","p1mod2","powered","yes","zero","no","bitLenOrOpts","opts","_nbitLength","_sqrt","allowedLengths","modOnDecode","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","skipValidation","padded","scalar","invertBatch","lst","getFieldBytesLength","fieldOrder","bitLength","getMinHashLength","mapHashToField","fieldLen","minLen","reduced","negateCt","condition","item","negate","normalizeZ","points","invertedZs","fromAffine","toAffine","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","wNAF","Point","BASE","Fn","_unsafeLadder","elm","double","precomputeWindow","point","base","push","precomputes","wo","wNAFUnsafe","getPrecomputes","transform","comp","cached","unsafe","prev","createCache","delete","hasCache","pippenger","fieldN","scalars","validateMSMPoints","field","s","validateMSMScalars","plength","slength","buckets","resI","sumI","createField","order","validateField","divNearest","den","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","_normFnElement","expected","error","weierstrassN","CURVE","curveOpts","params","_createCurveFields","cofactor","CURVE_ORDER","allowInfinityPoint","clearCofactor","isTorsionFree","endo","wrapPrivateKey","beta","basises","assertCompressionIsSupported","_c","isCompressed","y","bx","pprefix","L","LC","LU","head","tail","isValidXY","y2","weierstrassEquation","sqrtError","x2","x3","_legacyHelperEquat","left","right","Gx","Gy","_4a3","_27b2","acoord","banZero","aprjpoint","other","splitEndoScalarN","basis","a1","b1","a2","b2","k1","k2","k1neg","k2neg","MAX_NUM","_splitEndoScalar","toAffineMemo","iz","X","Y","zz","assertValidMemo","finishEndo","endoBeta","k1p","k2p","px","py","pz","assertValidity","fromPrivateKey","privateKey","multiply","msm","_setWindowSize","precompute","isLazy","wnaf","hasEvenY","X1","Y1","Z1","X2","Y2","Z2","U1","U2","b3","X3","Y3","Z3","t0","t1","t2","t3","t4","t5","subtract","fake","k1f","k2f","multiplyUnsafe","sc","p1","p2","mulEndoUnsafe","multiplyAndAddUnsafe","invertedZ","isSmallOrder","toRawBytes","ecdsa","ecdsaOpts","bits2int","bits2int_modN","randomBytes_","hmac_","msgs","fnBits","seedLen","secret","public","publicUncompressed","signature","seed","isBiggerThanHalfOrder","aValidRS","Signature","recovery","format","addRecoveryBit","recoverPublicKey","msgHash","FIELD_ORDER","rec","radj","ir","u1","u2","hasHighS","normalizeS","fromCompact","fromDER","toDERRawBytes","toDERHex","toCompactRawBytes","toCompactHex","isValidSecretKey","randomSecretKey","utils","isValidPublicKey","publicKey","isValidPrivateKey","randomPrivateKey","normPrivateKeyToScalar","getPublicKey","secretKey","isProbPub","delta","ORDER_MASK","int2octets","prepSig","defaultSigOpts","some","extraEntropy","ent","h1int","seedArgs","k2sig","kBytes","ik","q","normS","defaultVerOpts","keygen","sign","hashLen","qByteLen","hmacFn","u8n","u8of","reset","reseed","gen","sl","concatBytes_","pred","createHmacDrbg","drbg","verify","sg","_sig","isHex","isObj","derError","is","getSharedSecret","secretKeyA","publicKeyB","info","publicKeyHasPrefix","_ecdsa_legacy_opts_to_new","allowedPrivateKeyLengths","Set","_weierstrass_legacy_opts_to_new","weierstrass","assign","ProjectivePoint","_ecdsa_new_output_to_legacy","secp256k1_CURVE","secp256k1_ENDO","sqrtMod","_6n","_11n","_22n","_23n","_44n","_88n","b6","b9","b11","b22","b44","b88","b176","b220","b223","Fpk1","secp256k1","curveDef","defHash","createCurve","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","z","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","$constructor","initializer","init","inst","def","_a","defineProperty","_zod","enumerable","traits","prototype","bind","constr","Parent","Definition","deferred","Symbol","hasInstance","has","$ZodAsyncError","globalConfig","config","newConfig","jsonStringifyReplacer","getter","nullish","cleanRegex","source","startsWith","endsWith","defineLazy","configurable","assignProp","target","prop","writable","esc","captureStackTrace","_args","isObject","allowsEval","navigator","userAgent","Function","isPlainObject","o","ctor","prot","hasOwnProperty","call","propertyKeyTypes","escapeRegex","replace","parent","normalizeParams","_params","NUMBER_FORMAT_RANGES","safeint","MIN_SAFE_INTEGER","int32","uint32","float32","float64","MAX_VALUE","aborted","startIndex","issues","continue","prefixIssues","path","iss","unshift","unwrapMessage","finalizeIssue","ctx","full","customError","localeError","reportInput","getLengthableOrigin","issue","code","util.jsonStringifyReplacer","$ZodError","$ZodRealError","_parse","_Err","schema","_ctx","async","run","Promise","core.$ZodAsyncError","util.finalizeIssue","core.config","util.captureStackTrace","callee","_parseAsync","_safeParse","success","errors.$ZodError","safeParse","errors.$ZodRealError","_safeParseAsync","safeParseAsync","cuid","cuid2","ulid","xid","ksuid","nanoid","duration","guid","uuid","version","RegExp","email","ipv4","ipv6","cidrv4","cidrv6","base64","base64url","hostname","e164","dateSource","date","timeSource","hhmm","precision","integer","boolean","_null","lowercase","uppercase","$ZodCheck","core.$constructor","onattach","numericOriginMap","$ZodCheckLessThan","origin","bag","curr","inclusive","maximum","exclusiveMaximum","POSITIVE_INFINITY","check","abort","$ZodCheckGreaterThan","minimum","exclusiveMinimum","NEGATIVE_INFINITY","$ZodCheckMultipleOf","multipleOf","step","valDecCount","stepDecCount","decCount","toFixed","util.floatSafeRemainder","divisor","$ZodCheckNumberFormat","isInt","util.NUMBER_FORMAT_RANGES","pattern","regexes.integer","note","$ZodCheckMaxLength","when","util.nullish","util.getLengthableOrigin","$ZodCheckMinLength","$ZodCheckLengthEquals","tooBig","exact","$ZodCheckStringFormat","_b","patterns","lastIndex","$ZodCheckRegex","$ZodCheckLowerCase","regexes.lowercase","$ZodCheckUpperCase","regexes.uppercase","$ZodCheckIncludes","escapedRegex","util.escapeRegex","position","$ZodCheckStartsWith","$ZodCheckEndsWith","suffix","$ZodCheckOverwrite","tx","Doc","content","indent","indented","write","execution","lines","minIndent","trimStart","dedented","repeat","line","compile","major","minor","patch","$ZodType","checks","runChecks","asyncResult","isAborted","util.aborted","currLen","resolve","then","validate","vendor","$ZodString","pop","coerce","$ZodStringFormat","checks.$ZodCheckStringFormat","$ZodGUID","regexes.guid","$ZodUUID","v1","v2","v3","v4","v5","v6","v7","v8","regexes.uuid","$ZodEmail","regexes.email","$ZodURL","orig","url","URL","href","regexes.hostname","protocol","$ZodEmoji","$ZodNanoID","regexes.nanoid","$ZodCUID","regexes.cuid","$ZodCUID2","regexes.cuid2","$ZodULID","regexes.ulid","$ZodXID","regexes.xid","$ZodKSUID","regexes.ksuid","$ZodISODateTime","time","local","timeRegex","regexes.datetime","$ZodISODate","regexes.date","$ZodISOTime","$ZodISODuration","regexes.duration","$ZodIPv4","regexes.ipv4","$ZodIPv6","regexes.ipv6","$ZodCIDRv4","regexes.cidrv4","$ZodCIDRv6","regexes.cidrv6","address","prefixNum","isValidBase64","atob","$ZodBase64","regexes.base64","contentEncoding","$ZodBase64URL","regexes.base64url","padEnd","isValidBase64URL","$ZodE164","regexes.e164","$ZodJWT","token","algorithm","tokensParts","header","parsedHeader","typ","alg","isValidJWT","$ZodNumber","regexes.number","isFinite","received","$ZodNumberFormat","checks.$ZodCheckNumberFormat","$ZodBoolean","regexes.boolean","Boolean","$ZodBigInt","regexes.bigint","$ZodNull","regexes.null","values","$ZodAny","$ZodUnknown","$ZodNever","$ZodDate","_err","isDate","getTime","handleArrayResult","final","index","util.prefixIssues","$ZodArray","proms","element","all","handleObjectResult","handleOptionalObjectResult","$ZodObject","_normalized","util.cached","shape","okeys","optin","optout","keySet","numKeys","optionalKeys","util.defineLazy","propValues","fastpass","util.isObject","jit","core.globalConfig","jitless","fastEnabled","util.allowsEval","catchall","doc","normalized","parseStr","util.esc","ids","counter","id","generateFastpass","isOptional","unrecognized","_catchall","handleUnionResults","results","errors","$ZodUnion","options","flatMap","option","util.cleanRegex","$ZodIntersection","handleIntersectionResults","mergeValues","valid","util.isPlainObject","bKeys","sharedKeys","indexOf","newObj","sharedValue","mergeErrorPath","newArray","merged","$ZodRecord","keyType","valueType","Reflect","ownKeys","keyResult","$ZodEnum","numericValues","util.getEnumValues","util.propertyKeyTypes","$ZodTransform","_out","output","$ZodOptional","innerType","$ZodNullable","$ZodDefault","defaultValue","handleDefaultResult","$ZodPrefault","$ZodNonOptional","handleNonOptionalResult","$ZodCatch","catchValue","$ZodPipe","in","handlePipeResult","$ZodReadonly","handleReadonlyResult","$ZodLazy","$ZodCustom","checks.$ZodCheck","handleRefineResult","_iss","util.issue","$ZodRegistry","_map","_idmap","_meta","meta","clear","remove","pm","registry","globalRegistry","_guid","Class","util.normalizeParams","_lt","checks.$ZodCheckLessThan","_lte","_gt","checks.$ZodCheckGreaterThan","_gte","_multipleOf","checks.$ZodCheckMultipleOf","_maxLength","checks.$ZodCheckMaxLength","_minLength","checks.$ZodCheckMinLength","_length","checks.$ZodCheckLengthEquals","_overwrite","checks.$ZodCheckOverwrite","ZodISODateTime","core.$ZodISODateTime","schemas.ZodStringFormat","datetime","core._isoDateTime","ZodISODate","core.$ZodISODate","core._isoDate","ZodISOTime","core.$ZodISOTime","core._isoTime","ZodISODuration","core.$ZodISODuration","core._isoDuration","ZodRealError","defineProperties","mapper","_mapper","fieldErrors","_errors","processError","core.formatError","flatten","formErrors","core.flattenError","addIssue","addIssues","isEmpty","core._parse","parseAsync","core._parseAsync","core._safeParse","core._safeParseAsync","ZodType","core.$ZodType","core.clone","brand","register","reg","parse.parse","parse.safeParse","parse.parseAsync","parse.safeParseAsync","spa","refine","core._refine","ZodCustom","superRefine","refinement","core.$ZodCheck","_issue","fatal","overwrite","checks.overwrite","optional","nullable","nonoptional","ZodNonOptional","or","union","and","ZodIntersection","pipe","ZodTransform","default","_default","ZodDefault","prefault","ZodPrefault","catch","_catch","ZodCatch","readonly","ZodReadonly","describe","description","core.globalRegistry","isNullable","_ZodString","core.$ZodString","minLength","maxLength","regex","checks.$ZodCheckRegex","checks.regex","checks.$ZodCheckIncludes","checks.includes","checks.$ZodCheckStartsWith","checks.startsWith","checks.$ZodCheckEndsWith","checks.endsWith","checks.minLength","checks.maxLength","checks.length","nonempty","checks.$ZodCheckLowerCase","checks.lowercase","checks.$ZodCheckUpperCase","checks.uppercase","trim","normalize","form","checks.normalize","toLowerCase","toUpperCase","ZodString","core._email","ZodEmail","core._url","ZodURL","jwt","core._jwt","ZodJWT","emoji","core._emoji","ZodEmoji","core._guid","ZodGUID","core._uuid","ZodUUID","uuidv4","core._uuidv4","uuidv6","core._uuidv6","uuidv7","core._uuidv7","core._nanoid","ZodNanoID","core._cuid","ZodCUID","core._cuid2","ZodCUID2","core._ulid","ZodULID","core._base64","ZodBase64","core._base64url","ZodBase64URL","core._xid","ZodXID","core._ksuid","ZodKSUID","core._ipv4","ZodIPv4","core._ipv6","ZodIPv6","core._cidrv4","ZodCIDRv4","core._cidrv6","ZodCIDRv6","core._e164","ZodE164","iso.datetime","iso.date","iso.time","iso.duration","string","core._string","ZodStringFormat","core.$ZodStringFormat","core.$ZodEmail","core.$ZodGUID","core.$ZodUUID","core.$ZodURL","core.$ZodEmoji","core.$ZodNanoID","core.$ZodCUID","core.$ZodCUID2","core.$ZodULID","core.$ZodXID","core.$ZodKSUID","core.$ZodIPv4","core.$ZodIPv6","core.$ZodCIDRv4","core.$ZodCIDRv6","core.$ZodBase64","core.$ZodBase64URL","core.$ZodE164","core.$ZodJWT","ZodNumber","core.$ZodNumber","gt","checks.gt","gte","checks.gte","lt","checks.lt","lte","checks.lte","safe","positive","nonnegative","negative","nonpositive","checks.multipleOf","finite","minValue","maxValue","core._number","ZodNumberFormat","core.$ZodNumberFormat","core._int","ZodBoolean","core.$ZodBoolean","core._boolean","ZodBigInt","core.$ZodBigInt","core._bigint","ZodNull","core.$ZodNull","ZodAny","core.$ZodAny","ZodUnknown","core.$ZodUnknown","unknown","ZodNever","core.$ZodNever","never","core._never","ZodDate","core.$ZodDate","minDate","maxDate","ZodArray","core.$ZodArray","unwrap","core._array","ZodObject","core.$ZodObject","keyof","fromEntries","ZodEnum","_enum","passthrough","loose","strict","strip","extend","incoming","_shape","util.extend","merge","util.merge","pick","newShape","currDef","util.pick","omit","util.omit","partial","oldShape","util.partial","ZodOptional","required","util.required","util.assignProp","ZodUnion","core.$ZodUnion","core.$ZodIntersection","ZodRecord","core.$ZodRecord","record","core.$ZodEnum","enum","extract","newEntries","exclude","core.$ZodTransform","core.$ZodOptional","ZodNullable","core.$ZodNullable","core.$ZodDefault","removeDefault","core.$ZodPrefault","core.$ZodNonOptional","core.$ZodCatch","removeCatch","ZodPipe","core.$ZodPipe","in_","core.$ZodReadonly","ZodLazy","core.$ZodLazy","core.$ZodCustom","z.bigint","z.boolean","core._date","z.number","u8a","cls","z.instanceof","z.string","parts","at","literal","z.union","core._null","z.null","z.array","z.record","u8a32","u8a33","u8a64","hex32","hex33","hex64","byte32","isArrayOf","isString","afn","astr","label","aArr","astrArr","anumArr","chain","wrap","alphabet","letters","lettersA","indexes","digits","letter","separator","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","get_address_format","encoded","base58_decode","rest","bech32_decode","bech32m_decode","encode_address","base58_encode","bech32_encode","bech32m_encode","COINBASE","TXID","VOUT","DEFAULT","LOCKTIME","SEQUENCE","TAPLEAF_VERSIONS","LOCK_SCRIPT_TYPE","P2PKH","P2SH","P2WPKH","P2WSH","P2TR","OPRETURN","LOCK_SCRIPT_REGEX","SIGHASH_SEGWIT","SIGHASH_TAPROOT","P2TS","GLOBAL_BASE","GLOBAL_WIT","TXIN_BASE","TXOUT_BASE","get_lock_script_type","script","get_lock_script_version","is_p2pkh_script","is_p2sh_script","is_p2wpkh_script","is_p2wsh_script","is_p2tr_script","get_address_script","script_key","script_type","asm","get_p2pkh_script","get_p2sh_script","get_p2w_pkh_script","get_p2w_sh_script","get_p2tr_script","CONFIG_TABLE","get_address_config","address_network","address_type","network","get_address_info","dec","ADDRESS_TYPE","create_p2pkh_address","encode_p2pkh_address","create_p2pkh_script","encode_p2pkh_script","pk_hash","decode_p2pkh_script","decode_p2pkh_address","parsed","create_address","create_script","encode_script","decode_script","create_p2sh_address","encode_p2sh_address","encode_p2sh_script","create_p2sh_script","script_hash","script_pk","decode_p2sh_script","decode_p2sh_address","create_p2wpkh_address","encode_p2wpkh_address","create_p2wpkh_script","encode_p2wpkh_script","decode_p2wpkh_script","decode_p2wpkh_address","create_p2wsh_address","encode_p2wsh_address","create_p2wsh_script","encode_p2wsh_script","decode_p2wsh_script","decode_p2wsh_address","create_p2tr_address","encode_p2tr_address","create_p2tr_script","encode_p2tr_script","decode_p2tr_script","decode_p2tr_address","LOCKTIME_THRESHOLD","LocktimeField","RefPointer","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","assert","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_word","asm_code","split_script_word","prefix_word_size","get_size_varint","parse_script","stream","stack","stack_size","word_type","word_size","is_valid_script","_26n","InscriptionUtil","decode_inscription","envelopes","start_idx","findIndex","stop_idx","env","parse_envelopes","parse_record","encode_inscription","create_envelope","delegate","encode_id","ref","opcode","encode_pointer","pointer","ptr","rune","encode_rune_label","mimetype","encode_label","encode_content","envelope","decode_label","decode_pointer","decode_id","decode_rune_label","decode_bytes","decode_content","identifier","charCode","fromCharCode","TIMELOCK_TYPE","TIMELOCK_VALUE_MASK","TIMELOCK_VALUE_MAX","SequenceField","encode_sequence","mode","parse_height","ts","parse_stamp","decode_sequence","sequence","parse_sequence","ScriptUtil","prefix_script_size","is_valid","matchAll","get_prevout","vin","prevout","parse_txinput","txdata","txindex","txinput","get_annex_data","witness","annex","taptree","z.object","leaves","sats","tx_output","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","encode_tx_vout","txout","param","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","create_tx","create_tx_output","normalize_sequence","normalize_value","normalize_prevout","create_coinbase_input","create_virtual_input","create_spend_input","create_tx_input","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.sign_ecdsa","ECC.sign_bip340","_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","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,38,39,40,41,42,43,44,45]}
|
|
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/v4/core/core.js","../node_modules/zod/v4/core/util.js","../node_modules/zod/v4/core/errors.js","../node_modules/zod/v4/core/parse.js","../node_modules/zod/v4/core/regexes.js","../node_modules/zod/v4/core/checks.js","../node_modules/zod/v4/core/doc.js","../node_modules/zod/v4/core/versions.js","../node_modules/zod/v4/core/schemas.js","../node_modules/zod/v4/core/registries.js","../node_modules/zod/v4/core/api.js","../node_modules/zod/v4/classic/iso.js","../node_modules/zod/v4/classic/errors.js","../node_modules/zod/v4/classic/parse.js","../node_modules/zod/v4/classic/schemas.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/const.ts","../src/lib/script/lock.ts","../src/lib/address/script.ts","../src/lib/address/util.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/api.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/schema/taproot.ts","../src/schema/tx.ts","../src/lib/tx/validate.ts","../src/lib/tx/encode.ts","../src/lib/tx/decode.ts","../src/lib/tx/parse.ts","../src/lib/tx/util.ts","../src/lib/tx/create.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. 'secret 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), _7n = /* @__PURE__ */ BigInt(7);\n// prettier-ignore\nconst _8n = /* @__PURE__ */ BigInt(8), _9n = /* @__PURE__ */ BigInt(9), _16n = /* @__PURE__ */ BigInt(16);\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}\nfunction assertIsSquare(Fp, root, n) {\n if (!Fp.eql(Fp.sqr(root), n))\n throw new Error('Cannot find square root');\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 assertIsSquare(Fp, root, n);\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 assertIsSquare(Fp, root, n);\n return root;\n}\n// Based on RFC9380, Kong algorithm\n// prettier-ignore\nfunction sqrt9mod16(P) {\n const Fp_ = Field(P);\n const tn = tonelliShanks(P);\n const c1 = tn(Fp_, Fp_.neg(Fp_.ONE)); // 1. c1 = sqrt(-1) in F, i.e., (c1^2) == -1 in F\n const c2 = tn(Fp_, c1); // 2. c2 = sqrt(c1) in F, i.e., (c2^2) == c1 in F\n const c3 = tn(Fp_, Fp_.neg(c1)); // 3. c3 = sqrt(-c1) in F, i.e., (c3^2) == -c1 in F\n const c4 = (P + _7n) / _16n; // 4. c4 = (q + 7) / 16 # Integer arithmetic\n return (Fp, n) => {\n let tv1 = Fp.pow(n, c4); // 1. tv1 = x^c4\n let tv2 = Fp.mul(tv1, c1); // 2. tv2 = c1 * tv1\n const tv3 = Fp.mul(tv1, c2); // 3. tv3 = c2 * tv1\n const tv4 = Fp.mul(tv1, c3); // 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 const root = Fp.cmov(tv1, tv2, e3); // 10. z = CMOV(tv1, tv2, e3) # Select sqrt from tv1 & tv2\n assertIsSquare(Fp, root, n);\n return root;\n };\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 < _3n)\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. P ≡ 9 (mod 16)\n * 4. 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) => Kong algorithm, page 11 of https://eprint.iacr.org/2012/685.pdf (algorithm 4)\n if (P % _16n === _9n)\n return sqrt9mod16(P);\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, // TODO: use opts only in v2?\nisLE = 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 let modOnDecode = false;\n let allowedLengths = 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 if (typeof _opts.modOnDecode === 'boolean')\n modOnDecode = _opts.modOnDecode;\n allowedLengths = _opts.allowedLengths;\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 allowedLengths: allowedLengths,\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, skipValidation = true) => {\n if (allowedLengths) {\n if (!allowedLengths.includes(bytes.length) || bytes.length > BYTES) {\n throw new Error('Field.fromBytes: expected ' + allowedLengths + ' bytes, got ' + bytes.length);\n }\n const padded = new Uint8Array(BYTES);\n // isLE add 0 to right, !isLE to the left.\n padded.set(bytes, isLE ? 0 : padded.length - bytes.length);\n bytes = padded;\n }\n if (bytes.length !== BYTES)\n throw new Error('Field.fromBytes: expected ' + BYTES + ' bytes, got ' + bytes.length);\n let scalar = isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n if (modOnDecode)\n scalar = mod(scalar, ORDER);\n if (!skipValidation)\n if (!f.isValid(scalar))\n throw new Error('invalid field element: outside of range 0..ORDER');\n // NOTE: we don't validate scalar here, please use isValid. This done such way because some\n // protocol may allow non-reduced scalar that reduced later or changed some other way.\n return scalar;\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}\n// Generic random scalar, we can do same for other fields if via Fp2.mul(Fp2.ONE, Fp2.random)?\n// This allows unsafe methods like ignore bias or zero. These unsafe, but often used in different protocols (if deterministic RNG).\n// which mean we cannot force this via opts.\n// Not sure what to do with randomBytes, we can accept it inside opts if wanted.\n// Probably need to export getMinHashLength somewhere?\n// random(bytes?: Uint8Array, unsafeAllowZero = false, unsafeAllowBias = false) {\n// const LEN = !unsafeAllowBias ? getMinHashLength(ORDER) : BYTES;\n// if (bytes === undefined) bytes = randomBytes(LEN); // _opts.randomBytes?\n// const num = isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n// // `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0\n// const reduced = unsafeAllowZero ? mod(num, ORDER) : mod(num, ORDER - _1n) + _1n;\n// return reduced;\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, points) {\n const invertedZs = FpInvertBatch(c.Fp, points.map((p) => p.Z));\n return points.map((p, i) => c.fromAffine(p.toAffine(invertedZs[i])));\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 // To disable precomputes:\n // return 1;\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 * Table generation takes **30MB of ram and 10ms on high-end CPU**,\n * but may take much longer on slow devices. Actual generation will happen on\n * first call of `multiply()`. By default, `BASE` point is precomputed.\n *\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 class wNAF {\n // Parametrized with a given Point class (not individual point)\n constructor(Point, bits) {\n this.BASE = Point.BASE;\n this.ZERO = Point.ZERO;\n this.Fn = Point.Fn;\n this.bits = bits;\n }\n // non-const time multiplication ladder\n _unsafeLadder(elm, n, p = this.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 point Point instance\n * @param W window size\n * @returns precomputed point tables flattened to a single array\n */\n precomputeWindow(point, W) {\n const { windows, windowSize } = calcWOpts(W, this.bits);\n const points = [];\n let p = point;\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 * More compact implementation:\n * https://github.com/paulmillr/noble-secp256k1/blob/47cb1669b6e506ad66b35fe7d76132ae97465da2/index.ts#L502-L541\n * @returns real and fake (for const-time) points\n */\n wNAF(W, precomputes, n) {\n // Scalar should be smaller than field order\n if (!this.Fn.isValid(n))\n throw new Error('invalid scalar');\n // Accumulators\n let p = this.ZERO;\n let f = this.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, this.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 acc accumulator point to add result of multiplication\n * @returns point\n */\n wNAFUnsafe(W, precomputes, n, acc = this.ZERO) {\n const wo = calcWOpts(W, this.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, point, transform) {\n // Calculate precomputes on a first run, reuse them after\n let comp = pointPrecomputes.get(point);\n if (!comp) {\n comp = this.precomputeWindow(point, 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(point, comp);\n }\n }\n return comp;\n }\n cached(point, scalar, transform) {\n const W = getW(point);\n return this.wNAF(W, this.getPrecomputes(W, point, transform), scalar);\n }\n unsafe(point, scalar, transform, prev) {\n const W = getW(point);\n if (W === 1)\n return this._unsafeLadder(point, scalar, prev); // For W=1 ladder is ~x2 faster\n return this.wNAFUnsafe(W, this.getPrecomputes(W, point, transform), scalar, 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 createCache(P, W) {\n validateW(W, this.bits);\n pointWindowSizes.set(P, W);\n pointPrecomputes.delete(P);\n }\n hasCache(elm) {\n return getW(elm) !== 1;\n }\n}\n/**\n * Endomorphism-specific multiplication for Koblitz curves.\n * Cost: 128 dbl, 0-256 adds.\n */\nexport function mulEndoUnsafe(Point, point, k1, k2) {\n let acc = point;\n let p1 = Point.ZERO;\n let p2 = Point.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 secret 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 { ahash } from '@noble/hashes/utils';\nimport { _validateObject, abool, abytes, aInRange, bitLen, 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\";\n// We construct basis in such way that den is always positive and equals n, but num sign depends on basis (not on secret value)\nconst divNearest = (num, den) => (num + (num >= 0 ? den : -den) / _2n) / den;\n/**\n * Splits scalar for GLV endomorphism.\n */\nexport function _splitEndoScalar(k, basis, n) {\n // Split scalar into two such that part is ~half bits: `abs(part) < sqrt(N)`\n // Since part can be negative, we need to do this on point.\n // TODO: verifyScalar function which consumes lambda\n const [[a1, b1], [a2, b2]] = basis;\n const c1 = divNearest(b2 * k, n);\n const c2 = divNearest(-b1 * k, n);\n // |k1|/|k2| is < sqrt(N), but can be negative.\n // If we do `k1 mod N`, we'll get big scalar (`> sqrt(N)`): so, we do cheaper negation instead.\n let k1 = k - c1 * a1 - c2 * a2;\n let k2 = -c1 * b1 - c2 * b2;\n const k1neg = k1 < _0n;\n const k2neg = k2 < _0n;\n if (k1neg)\n k1 = -k1;\n if (k2neg)\n k2 = -k2;\n // Double check that resulting scalar less than half bits of N: otherwise wNAF will fail.\n // This should only happen on wrong basises. Also, math inside is too complex and I don't trust it.\n const MAX_NUM = bitMask(Math.ceil(bitLen(n) / 2)) + _1n; // Half bits of N\n if (k1 < _0n || k1 >= MAX_NUM || k2 < _0n || k2 >= MAX_NUM) {\n throw new Error('splitScalar (endomorphism): failed, k=' + k);\n }\n return { k1neg, k1, k2neg, k2 };\n}\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 _normFnElement(Fn, key) {\n const { BYTES: expected } = Fn;\n let num;\n if (typeof key === 'bigint') {\n num = key;\n }\n else {\n let bytes = ensureBytes('private key', key);\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 (!Fn.isValidNot0(num))\n throw new Error('invalid private key: out of range [1..N-1]');\n return num;\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) || typeof endo.beta !== 'bigint' || !Array.isArray(endo.basises)) {\n throw new Error('invalid endo: expected \"beta\": bigint and \"basises\": array');\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 function splitEndoScalarN(k) {\n if (!endo || !endo.basises)\n throw new Error('no endo');\n return _splitEndoScalar(k, endo.basises, Fn.ORDER);\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 { X, Y, Z } = p;\n // Fast-path for normalized points\n if (Fp.eql(Z, Fp.ONE))\n return { x: X, y: 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 x = Fp.mul(X, iz);\n const y = 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, y };\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.Y))\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.X, endoBeta), k2p.Y, k2p.Z);\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(X, Y, Z) {\n this.X = acoord('x', X);\n this.Y = acoord('y', Y, true);\n this.Z = acoord('z', Z);\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 // TODO: remove\n get px() {\n return this.X;\n }\n get py() {\n return this.X;\n }\n get pz() {\n return this.Z;\n }\n static normalizeZ(points) {\n return normalizeZ(Point, 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 return Point.BASE.multiply(_normFnElement(Fn, privateKey));\n }\n // TODO: remove\n static msm(points, scalars) {\n return pippenger(Point, Fn, points, scalars);\n }\n _setWindowSize(windowSize) {\n this.precompute(windowSize);\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.createCache(this, windowSize);\n if (!isLazy)\n this.multiply(_3n); // random number\n return this;\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 { X: X1, Y: Y1, Z: Z1 } = this;\n const { X: X2, Y: Y2, Z: 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.X, Fp.neg(this.Y), this.Z);\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 { X: X1, Y: Y1, Z: 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 { X: X1, Y: Y1, Z: Z1 } = this;\n const { X: X2, Y: Y2, Z: 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.cached(this, n, (p) => normalizeZ(Point, p));\n /** See docs for {@link EndomorphismOpts} */\n if (endo) {\n const { k1neg, k1, k2neg, k2 } = splitEndoScalarN(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 normalizeZ(Point, [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 secret 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.hasCache(this))\n return this.multiply(sc);\n if (endo) {\n const { k1neg, k1, k2neg, k2 } = splitEndoScalarN(sc);\n const { p1, p2 } = mulEndoUnsafe(Point, p, k1, k2); // 30% faster vs wnaf.unsafe\n return finishEndo(endo.beta, p1, p2, k1neg, k2neg);\n }\n else {\n return wnaf.unsafe(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.unsafe(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 isSmallOrder() {\n // can we use this.clearCofactor()?\n return this.multiplyUnsafe(cofactor).is0();\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 = new wNAF(Point, curveOpts.endo ? Math.ceil(bits / 2) : bits);\n return Point;\n}\n// _legacyWeierstrass\n// TODO: remove\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}\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/**\n * Creates ECDSA for given elliptic curve Point and hash function.\n */\nexport function ecdsa(Point, hash, ecdsaOpts = {}) {\n ahash(hash);\n _validateObject(ecdsaOpts, {}, {\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(hash, key, concatBytes(...msgs)));\n const { Fp, Fn } = Point;\n const { ORDER: CURVE_ORDER, BITS: fnBits } = Fn;\n const seedLen = getMinHashLength(CURVE_ORDER);\n const lengths = {\n secret: Fn.BYTES,\n public: 1 + Fp.BYTES,\n publicUncompressed: 1 + 2 * Fp.BYTES,\n signature: 2 * Fn.BYTES,\n seed: seedLen,\n };\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 static fromBytes(bytes, format = 'compact') {\n if (format === 'compact') {\n const L = Fn.BYTES;\n abytes(bytes, L * 2);\n const r = bytes.subarray(0, L);\n const s = bytes.subarray(L, L * 2);\n return new Signature(Fn.fromBytes(r), Fn.fromBytes(s));\n }\n if (format === 'der') {\n abytes(bytes);\n const { r, s } = DER.toSig(bytes);\n return new Signature(r, s);\n }\n throw new Error('invalid format');\n }\n static fromHex(hex, format) {\n return this.fromBytes(hexToBytes(hex), format);\n }\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 = 'compact') {\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 toHex(format) {\n return bytesToHex(this.toBytes(format));\n }\n // TODO: remove\n assertValidity() { }\n static fromCompact(hex) {\n return Signature.fromBytes(ensureBytes('sig', hex), 'compact');\n }\n static fromDER(hex) {\n return Signature.fromBytes(ensureBytes('sig', hex), 'der');\n }\n toDERRawBytes() {\n return this.toBytes('der');\n }\n toDERHex() {\n return bytesToHex(this.toBytes('der'));\n }\n toCompactRawBytes() {\n return this.toBytes('compact');\n }\n toCompactHex() {\n return bytesToHex(this.toBytes('compact'));\n }\n }\n function isValidSecretKey(privateKey) {\n try {\n return !!_normFnElement(Fn, privateKey);\n }\n catch (error) {\n return false;\n }\n }\n function isValidPublicKey(publicKey, isCompressed) {\n try {\n const l = publicKey.length;\n if (isCompressed === true && l !== lengths.public)\n return false;\n if (isCompressed === false && l !== lengths.publicUncompressed)\n return false;\n return !!Point.fromBytes(publicKey);\n }\n catch (error) {\n return false;\n }\n }\n /**\n * Produces cryptographically secure secret key from random of size\n * (groupLen + ceil(groupLen / 2)) with modulo bias being negligible.\n */\n function randomSecretKey(seed = randomBytes_(seedLen)) {\n return mapHashToField(seed, CURVE_ORDER);\n }\n const utils = {\n isValidSecretKey,\n isValidPublicKey,\n randomSecretKey,\n // TODO: remove\n isValidPrivateKey: isValidSecretKey,\n randomPrivateKey: randomSecretKey,\n normPrivateKeyToScalar: (key) => _normFnElement(Fn, key),\n precompute(windowSize = 8, point = Point.BASE) {\n return point.precompute(windowSize, false);\n },\n };\n /**\n * Computes public key for a secret key. Checks for validity of the secret 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(secretKey, isCompressed = true) {\n return Point.BASE.multiply(_normFnElement(Fn, secretKey)).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 // TODO: remove\n if (typeof item === 'bigint')\n return false;\n // TODO: remove\n if (item instanceof Point)\n return true;\n if (Fn.allowedLengths || lengths.secret === lengths.public)\n return undefined;\n const l = ensureBytes('key', item).length;\n return l === lengths.public || l === lengths.publicUncompressed;\n }\n /**\n * ECDH (Elliptic Curve Diffie Hellman).\n * Computes shared public key from secret key A and public key B.\n * Checks: 1) secret key validity 2) shared key is on-curve.\n * Does NOT hash the result.\n * @param isCompressed whether to return compact (default), or full key\n * @returns shared public key\n */\n function getSharedSecret(secretKeyA, publicKeyB, isCompressed = true) {\n if (isProbPub(secretKeyA) === true)\n throw new Error('first arg must be private key');\n if (isProbPub(publicKeyB) === false)\n throw new Error('second arg must be public key');\n const s = _normFnElement(Fn, secretKeyA);\n const b = Point.fromHex(publicKeyB); // checks for being on-curve\n return b.multiply(s).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 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 = _normFnElement(Fn, privateKey); // validate secret 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_(lengths.secret) : ent; // gen 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 // To transform k => Signature:\n // q = k⋅G\n // r = q.x mod n\n // s = k^-1(m + rd) mod n\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 = k⋅G\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 secret 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 */\n function sign(msgHash, secretKey, opts = defaultSigOpts) {\n const { seed, k2sig } = prepSig(msgHash, secretKey, opts); // Steps A, D of RFC6979 3.2.\n const drbg = createHmacDrbg(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 let _sig = undefined;\n let P;\n if (format === undefined) {\n // Try to deduce format\n const isHex = typeof sg === 'string' || isBytes(sg);\n const isObj = !isHex &&\n sg !== null &&\n typeof sg === 'object' &&\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 if (isObj) {\n _sig = new Signature(sg.r, sg.s);\n }\n else 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 _sig = Signature.fromDER(sg);\n }\n catch (derError) {\n if (!(derError instanceof DER.Err))\n throw derError;\n }\n if (!_sig) {\n try {\n _sig = Signature.fromCompact(sg);\n }\n catch (error) {\n return false;\n }\n }\n }\n }\n else {\n if (format === 'compact' || format === 'der') {\n if (typeof sg !== 'string' && !isBytes(sg))\n throw new Error('\"der\" / \"compact\" format expects Uint8Array signature');\n _sig = Signature.fromBytes(ensureBytes('sig', sg), format);\n }\n else if (format === 'js') {\n if (!(sg instanceof Signature))\n throw new Error('\"js\" format expects Signature instance');\n _sig = sg;\n }\n else {\n throw new Error('format must be \"compact\", \"der\" or \"js\"');\n }\n }\n if (!_sig)\n return false;\n try {\n P = Point.fromHex(publicKey);\n if (lowS && _sig.hasHighS())\n return false;\n // todo: optional.hash => hash\n if (prehash)\n msgHash = 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 catch (e) {\n return false;\n }\n }\n function keygen(seed) {\n const secretKey = utils.randomSecretKey(seed);\n return { secretKey, publicKey: getPublicKey(secretKey) };\n }\n return Object.freeze({\n keygen,\n getPublicKey,\n sign,\n verify,\n getSharedSecret,\n utils,\n Point,\n Signature,\n info: { type: 'weierstrass', lengths, publicKeyHasPrefix: true },\n });\n}\n// TODO: remove\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 let allowedLengths = c.allowedPrivateKeyLengths\n ? Array.from(new Set(c.allowedPrivateKeyLengths.map((l) => Math.ceil(l / 2))))\n : undefined;\n const Fn = Field(CURVE.n, {\n BITS: c.nBitLength,\n allowedLengths: allowedLengths,\n modOnDecode: c.wrapPrivateKey,\n });\n const curveOpts = {\n Fp,\n Fn,\n allowInfinityPoint: c.allowInfinityPoint,\n endo: c.endo,\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 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, hash: c.hash, ecdsaOpts };\n}\n// TODO: remove\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 return Object.assign({}, {\n CURVE: c,\n Point: Point,\n ProjectivePoint: Point,\n normPrivateKeyToScalar: (key) => _normFnElement(Fn, key),\n weierstrassEquation,\n isWithinCurveOrder,\n });\n}\n// TODO: remove\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, hash, ecdsaOpts } = _ecdsa_legacy_opts_to_new(c);\n const Point = weierstrassN(CURVE, curveOpts);\n const signs = ecdsa(Point, hash, ecdsaOpts);\n return _ecdsa_new_output_to_legacy(c, signs);\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, mapHashToField, mod, pow2 } from \"./abstract/modular.js\";\nimport { _normFnElement, 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 secp256k1_ENDO = {\n beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'),\n basises: [\n [BigInt('0x3086d221a7d46bcde86c90e49284eb15'), -BigInt('0xe4437ed6010e88286f547fa90abfe4c3')],\n [BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8'), BigInt('0x3086d221a7d46bcde86c90e49284eb15')],\n ],\n};\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nconst _2n = /* @__PURE__ */ BigInt(2);\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 { secretKey, publicKey } = secp256k1.keygen();\n * const msg = new TextEncoder().encode('hello');\n * const sig = secp256k1.sign(msg, secretKey);\n * const isValid = secp256k1.verify(sig, msg, publicKey) === true;\n * ```\n */\nexport const secp256k1 = createCurve({ ...secp256k1_CURVE, Fp: Fpk1, lowS: true, endo: secp256k1_ENDO }, 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 // TODO: replace with Point.Fn.fromBytes(priv)\n let d_ = _normFnElement(Point.Fn, priv);\n let p = Point.BASE.multiply(d_); // P = d'⋅G; 0 < d' < n check is done inside\n const scalar = hasEven(p.y) ? d_ : modN(-d_);\n return { 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(secretKey) {\n return schnorrGetExtPubKey(secretKey).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, secretKey, auxRand = randomBytes(32)) {\n const m = ensureBytes('message', message);\n const { bytes: px, scalar: d } = schnorrGetExtPubKey(secretKey); // 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 { secretKey, publicKey } = schnorr.keygen();\n * // const publicKey = schnorr.getPublicKey(secretKey);\n * const msg = new TextEncoder().encode('hello');\n * const sig = schnorr.sign(msg, secretKey);\n * const isValid = schnorr.verify(sig, msg, publicKey);\n * ```\n */\nexport const schnorr = /* @__PURE__ */ (() => {\n const size = 32;\n const seedLength = 48;\n const randomSecretKey = (seed = randomBytes(seedLength)) => {\n return mapHashToField(seed, secp256k1_CURVE.n);\n };\n // TODO: remove\n secp256k1.utils.randomSecretKey;\n function keygen(seed) {\n const secretKey = randomSecretKey(seed);\n return { secretKey, publicKey: schnorrGetPublicKey(secretKey) };\n }\n return {\n keygen,\n getPublicKey: schnorrGetPublicKey,\n sign: schnorrSign,\n verify: schnorrVerify,\n Point,\n utils: {\n randomSecretKey: randomSecretKey,\n randomPrivateKey: randomSecretKey,\n taggedHash,\n // TODO: remove\n lift_x,\n pointToBytes,\n numberToBytesBE,\n bytesToNumberBE,\n mod,\n },\n info: {\n type: 'weierstrass',\n publicKeyHasPrefix: false,\n lengths: {\n secret: size,\n public: size,\n signature: size * 2,\n seed: seedLength,\n },\n },\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}))();\n/** @deprecated use `import { secp256k1_hasher } from '@noble/curves/secp256k1.js';` */\nexport const hashToCurve = /* @__PURE__ */ (() => secp256k1_hasher.hashToCurve)();\n/** @deprecated use `import { secp256k1_hasher } from '@noble/curves/secp256k1.js';` */\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}\n/** @deprecated use new `weierstrass()` and `ecdsa()` methods */\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.y % _2n !== _0n) {\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 sign_ecdsa(seckey, message) {\n const msg = serialize_bytes(message);\n const sig = secp256k1.sign(msg, seckey).toDERRawBytes();\n return Buff.bytes(sig);\n}\nexport function sign_bip340(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(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(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","/** A special constant with type `never` */\nexport const NEVER = Object.freeze({\n status: \"aborted\",\n});\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, params) {\n function init(inst, def) {\n var _a;\n Object.defineProperty(inst, \"_zod\", {\n value: inst._zod ?? {},\n enumerable: false,\n });\n (_a = inst._zod).traits ?? (_a.traits = new Set());\n inst._zod.traits.add(name);\n initializer(inst, def);\n // support prototype modifications\n for (const k in _.prototype) {\n if (!(k in inst))\n Object.defineProperty(inst, k, { value: _.prototype[k].bind(inst) });\n }\n inst._zod.constr = _;\n inst._zod.def = def;\n }\n // doesn't work if Parent has a constructor with arguments\n const Parent = params?.Parent ?? Object;\n class Definition extends Parent {\n }\n Object.defineProperty(Definition, \"name\", { value: name });\n function _(def) {\n var _a;\n const inst = params?.Parent ? new Definition() : this;\n init(inst, def);\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n for (const fn of inst._zod.deferred) {\n fn();\n }\n return inst;\n }\n Object.defineProperty(_, \"init\", { value: init });\n Object.defineProperty(_, Symbol.hasInstance, {\n value: (inst) => {\n if (params?.Parent && inst instanceof params.Parent)\n return true;\n return inst?._zod?.traits?.has(name);\n },\n });\n Object.defineProperty(_, \"name\", { value: name });\n return _;\n}\n////////////////////////////// UTILITIES ///////////////////////////////////////\nexport const $brand = Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n constructor() {\n super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n }\n}\nexport const globalConfig = {};\nexport function config(newConfig) {\n if (newConfig)\n Object.assign(globalConfig, newConfig);\n return globalConfig;\n}\n","// functions\nexport function assertEqual(val) {\n return val;\n}\nexport function assertNotEqual(val) {\n return val;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n throw new Error();\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n const values = Object.entries(entries)\n .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n .map(([_, v]) => v);\n return values;\n}\nexport function joinValues(array, separator = \"|\") {\n return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n if (typeof value === \"bigint\")\n return value.toString();\n return value;\n}\nexport function cached(getter) {\n const set = false;\n return {\n get value() {\n if (!set) {\n const value = getter();\n Object.defineProperty(this, \"value\", { value });\n return value;\n }\n throw new Error(\"cached value already set\");\n },\n };\n}\nexport function nullish(input) {\n return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n return source.slice(start, end);\n}\nexport function 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 function defineLazy(object, key, getter) {\n const set = false;\n Object.defineProperty(object, key, {\n get() {\n if (!set) {\n const value = getter();\n object[key] = value;\n return value;\n }\n throw new Error(\"cached value already set\");\n },\n set(v) {\n Object.defineProperty(object, key, {\n value: v,\n // configurable: true,\n });\n // object[key] = v;\n },\n configurable: true,\n });\n}\nexport function assignProp(target, prop, value) {\n Object.defineProperty(target, prop, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n}\nexport function getElementAtPath(obj, path) {\n if (!path)\n return obj;\n return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n const keys = Object.keys(promisesObj);\n const promises = keys.map((key) => promisesObj[key]);\n return Promise.all(promises).then((results) => {\n const resolvedObj = {};\n for (let i = 0; i < keys.length; i++) {\n resolvedObj[keys[i]] = results[i];\n }\n return resolvedObj;\n });\n}\nexport function randomString(length = 10) {\n const chars = \"abcdefghijklmnopqrstuvwxyz\";\n let str = \"\";\n for (let i = 0; i < length; i++) {\n str += chars[Math.floor(Math.random() * chars.length)];\n }\n return str;\n}\nexport function esc(str) {\n return JSON.stringify(str);\n}\nexport const captureStackTrace = Error.captureStackTrace\n ? Error.captureStackTrace\n : (..._args) => { };\nexport function isObject(data) {\n return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = cached(() => {\n if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n return false;\n }\n try {\n const F = Function;\n new F(\"\");\n return true;\n }\n catch (_) {\n return false;\n }\n});\nexport function isPlainObject(o) {\n if (isObject(o) === false)\n return false;\n // modified constructor\n const ctor = o.constructor;\n if (ctor === undefined)\n return true;\n // modified prototype\n const prot = ctor.prototype;\n if (isObject(prot) === false)\n return false;\n // ctor doesn't have static `isPrototypeOf`\n if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n return false;\n }\n return true;\n}\nexport function numKeys(data) {\n let keyCount = 0;\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n keyCount++;\n }\n }\n return keyCount;\n}\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return \"undefined\";\n case \"string\":\n return \"string\";\n case \"number\":\n return Number.isNaN(data) ? \"nan\" : \"number\";\n case \"boolean\":\n return \"boolean\";\n case \"function\":\n return \"function\";\n case \"bigint\":\n return \"bigint\";\n case \"symbol\":\n return \"symbol\";\n case \"object\":\n if (Array.isArray(data)) {\n return \"array\";\n }\n if (data === null) {\n return \"null\";\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return \"promise\";\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return \"map\";\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return \"set\";\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return \"date\";\n }\n if (typeof File !== \"undefined\" && data instanceof File) {\n return \"file\";\n }\n return \"object\";\n default:\n throw new Error(`Unknown data type: ${t}`);\n }\n};\nexport const propertyKeyTypes = new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = new Set([\"string\", \"number\", \"bigint\", \"boolean\", \"symbol\", \"undefined\"]);\nexport function escapeRegex(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n const cl = new inst._zod.constr(def ?? inst._zod.def);\n if (!def || params?.parent)\n cl._zod.parent = inst;\n return cl;\n}\nexport function normalizeParams(_params) {\n const params = _params;\n if (!params)\n return {};\n if (typeof params === \"string\")\n return { error: () => params };\n if (params?.message !== undefined) {\n if (params?.error !== undefined)\n throw new Error(\"Cannot specify both `message` and `error` params\");\n params.error = params.message;\n }\n delete params.message;\n if (typeof params.error === \"string\")\n return { ...params, error: () => params.error };\n return params;\n}\nexport function createTransparentProxy(getter) {\n let target;\n return new Proxy({}, {\n get(_, prop, receiver) {\n target ?? (target = getter());\n return Reflect.get(target, prop, receiver);\n },\n set(_, prop, value, receiver) {\n target ?? (target = getter());\n return Reflect.set(target, prop, value, receiver);\n },\n has(_, prop) {\n target ?? (target = getter());\n return Reflect.has(target, prop);\n },\n deleteProperty(_, prop) {\n target ?? (target = getter());\n return Reflect.deleteProperty(target, prop);\n },\n ownKeys(_) {\n target ?? (target = getter());\n return Reflect.ownKeys(target);\n },\n getOwnPropertyDescriptor(_, prop) {\n target ?? (target = getter());\n return Reflect.getOwnPropertyDescriptor(target, prop);\n },\n defineProperty(_, prop, descriptor) {\n target ?? (target = getter());\n return Reflect.defineProperty(target, prop, descriptor);\n },\n });\n}\nexport function stringifyPrimitive(value) {\n if (typeof value === \"bigint\")\n return value.toString() + \"n\";\n if (typeof value === \"string\")\n return `\"${value}\"`;\n return `${value}`;\n}\nexport function optionalKeys(shape) {\n return Object.keys(shape).filter((k) => {\n return shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n });\n}\nexport const NUMBER_FORMAT_RANGES = {\n safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n int32: [-2147483648, 2147483647],\n uint32: [0, 4294967295],\n float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n};\nexport const BIGINT_FORMAT_RANGES = {\n int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n const newShape = {};\n const currDef = schema._zod.def; //.shape;\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // pick key\n newShape[key] = currDef.shape[key];\n }\n return clone(schema, {\n ...schema._zod.def,\n shape: newShape,\n checks: [],\n });\n}\nexport function omit(schema, mask) {\n const newShape = { ...schema._zod.def.shape };\n const currDef = schema._zod.def; //.shape;\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n delete newShape[key];\n }\n return clone(schema, {\n ...schema._zod.def,\n shape: newShape,\n checks: [],\n });\n}\nexport function extend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to extend: expected a plain object\");\n }\n const def = {\n ...schema._zod.def,\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n checks: [], // delete existing checks\n };\n return clone(schema, def);\n}\nexport function merge(a, b) {\n return clone(a, {\n ...a._zod.def,\n get shape() {\n const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n catchall: b._zod.def.catchall,\n checks: [], // delete existing checks\n });\n}\nexport function partial(Class, schema, mask) {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in oldShape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n else {\n for (const key in oldShape) {\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n return clone(schema, {\n ...schema._zod.def,\n shape,\n checks: [],\n });\n}\nexport function required(Class, schema, mask) {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n else {\n for (const key in oldShape) {\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n return clone(schema, {\n ...schema._zod.def,\n shape,\n // optional: [],\n checks: [],\n });\n}\nexport function aborted(x, startIndex = 0) {\n for (let i = startIndex; i < x.issues.length; i++) {\n if (x.issues[i]?.continue !== true)\n return true;\n }\n return false;\n}\nexport function prefixIssues(path, issues) {\n return issues.map((iss) => {\n var _a;\n (_a = iss).path ?? (_a.path = []);\n iss.path.unshift(path);\n return iss;\n });\n}\nexport function unwrapMessage(message) {\n return typeof message === \"string\" ? message : message?.message;\n}\nexport function finalizeIssue(iss, ctx, config) {\n const full = { ...iss, path: iss.path ?? [] };\n // for backwards compatibility\n if (!iss.message) {\n const message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n unwrapMessage(ctx?.error?.(iss)) ??\n unwrapMessage(config.customError?.(iss)) ??\n unwrapMessage(config.localeError?.(iss)) ??\n \"Invalid input\";\n full.message = message;\n }\n // delete (full as any).def;\n delete full.inst;\n delete full.continue;\n if (!ctx?.reportInput) {\n delete full.input;\n }\n return full;\n}\nexport function getSizableOrigin(input) {\n if (input instanceof Set)\n return \"set\";\n if (input instanceof Map)\n return \"map\";\n if (input instanceof File)\n return \"file\";\n return \"unknown\";\n}\nexport function getLengthableOrigin(input) {\n if (Array.isArray(input))\n return \"array\";\n if (typeof input === \"string\")\n return \"string\";\n return \"unknown\";\n}\nexport function issue(...args) {\n const [iss, input, inst] = args;\n if (typeof iss === \"string\") {\n return {\n message: iss,\n code: \"custom\",\n input,\n inst,\n };\n }\n return { ...iss };\n}\nexport function cleanEnum(obj) {\n return Object.entries(obj)\n .filter(([k, _]) => {\n // return true if NaN, meaning it's not a number, thus a string key\n return Number.isNaN(Number.parseInt(k, 10));\n })\n .map((el) => el[1]);\n}\n// instanceof\nexport class Class {\n constructor(..._args) { }\n}\n","import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\nconst initializer = (inst, def) => {\n inst.name = \"$ZodError\";\n Object.defineProperty(inst, \"_zod\", {\n value: inst._zod,\n enumerable: false,\n });\n Object.defineProperty(inst, \"issues\", {\n value: def,\n enumerable: false,\n });\n Object.defineProperty(inst, \"message\", {\n get() {\n return JSON.stringify(def, util.jsonStringifyReplacer, 2);\n },\n enumerable: true,\n // configurable: false,\n });\n Object.defineProperty(inst, \"toString\", {\n value: () => inst.message,\n enumerable: false,\n });\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, { Parent: Error });\nexport function flattenError(error, mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of error.issues) {\n if (sub.path.length > 0) {\n fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n fieldErrors[sub.path[0]].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n}\nexport function formatError(error, _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\" && issue.errors.length) {\n issue.errors.map((issues) => processError({ issues }));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues });\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues });\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 }\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(error);\n return fieldErrors;\n}\nexport function treeifyError(error, _mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const result = { errors: [] };\n const processError = (error, path = []) => {\n var _a, _b;\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n // regular union error\n issue.errors.map((issues) => processError({ issues }, issue.path));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues }, issue.path);\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues }, issue.path);\n }\n else {\n const fullpath = [...path, ...issue.path];\n if (fullpath.length === 0) {\n result.errors.push(mapper(issue));\n continue;\n }\n let curr = result;\n let i = 0;\n while (i < fullpath.length) {\n const el = fullpath[i];\n const terminal = i === fullpath.length - 1;\n if (typeof el === \"string\") {\n curr.properties ?? (curr.properties = {});\n (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });\n curr = curr.properties[el];\n }\n else {\n curr.items ?? (curr.items = []);\n (_b = curr.items)[el] ?? (_b[el] = { errors: [] });\n curr = curr.items[el];\n }\n if (terminal) {\n curr.errors.push(mapper(issue));\n }\n i++;\n }\n }\n }\n };\n processError(error);\n return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n * issues: [\n * {\n * expected: 'string',\n * code: 'invalid_type',\n * path: [ 'username' ],\n * message: 'Invalid input: expected string'\n * },\n * {\n * expected: 'number',\n * code: 'invalid_type',\n * path: [ 'favoriteNumbers', 1 ],\n * message: 'Invalid input: expected number'\n * }\n * ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n * ✖ Expected number, received string at \"username\n * favoriteNumbers[0]\n * ✖ Invalid input: expected number\n * ```\n */\nexport function toDotPath(path) {\n const segs = [];\n for (const seg of path) {\n if (typeof seg === \"number\")\n segs.push(`[${seg}]`);\n else if (typeof seg === \"symbol\")\n segs.push(`[${JSON.stringify(String(seg))}]`);\n else if (/[^\\w$]/.test(seg))\n segs.push(`[${JSON.stringify(seg)}]`);\n else {\n if (segs.length)\n segs.push(\".\");\n segs.push(seg);\n }\n }\n return segs.join(\"\");\n}\nexport function prettifyError(error) {\n const lines = [];\n // sort by path length\n const issues = [...error.issues].sort((a, b) => a.path.length - b.path.length);\n // Process each issue\n for (const issue of issues) {\n lines.push(`✖ ${issue.message}`);\n if (issue.path?.length)\n lines.push(` → at ${toDotPath(issue.path)}`);\n }\n // Convert Map to formatted string\n return lines.join(\"\\n\");\n}\n","import * as core from \"./core.js\";\nimport * as errors from \"./errors.js\";\nimport * as util from \"./util.js\";\nexport const _parse = (_Err) => (schema, value, _ctx, _params) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n if (result.issues.length) {\n const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, _params?.callee);\n throw e;\n }\n return result.value;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => async (schema, value, _ctx, params) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n if (result.issues.length) {\n const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, params?.callee);\n throw e;\n }\n return result.value;\n};\nexport const parseAsync = /* @__PURE__*/ _parseAsync(errors.$ZodRealError);\nexport const _safeParse = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n return result.issues.length\n ? {\n success: false,\n error: new (_Err ?? errors.$ZodError)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n }\n : { success: true, data: result.value };\n};\nexport const safeParse = /* @__PURE__*/ _safeParse(errors.$ZodRealError);\nexport const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n return result.issues.length\n ? {\n success: false,\n error: new _Err(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n }\n : { success: true, data: result.value };\n};\nexport const safeParseAsync = /* @__PURE__*/ _safeParseAsync(errors.$ZodRealError);\n","export const cuid = /^[cC][^\\s-]{8,}$/;\nexport const cuid2 = /^[0-9a-z]+$/;\nexport const ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;\nexport const xid = /^[0-9a-vA-V]{20}$/;\nexport const ksuid = /^[A-Za-z0-9]{27}$/;\nexport const nanoid = /^[a-zA-Z0-9_-]{21}$/;\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nexport const duration = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** Implements ISO 8601-2 extensions like explicit +- prefixes, mixing weeks with other units, and fractional/negative components. */\nexport const extendedDuration = /^[-+]?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/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nexport const guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 4122 UUID.\n *\n * @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nexport const uuid = (version) => {\n if (!version)\n return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$/;\n return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\nexport const uuid4 = /*@__PURE__*/ uuid(4);\nexport const uuid6 = /*@__PURE__*/ uuid(6);\nexport const uuid7 = /*@__PURE__*/ uuid(7);\n/** Practical email validation */\nexport const email = /^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\n/** Equivalent to the HTML5 input[type=email] validation implemented by browsers. Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email */\nexport const html5Email = /^[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/** The classic emailregex.com regex for RFC 5322-compliant emails */\nexport const rfc5322Email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */\nexport const unicodeEmail = /^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u;\nexport const browserEmail = /^[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// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emoji = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nexport function emoji() {\n return new RegExp(_emoji, \"u\");\n}\nexport const ipv4 = /^(?:(?: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])$/;\nexport const ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})$/;\nexport const cidrv4 = /^((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])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nexport const cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\\/(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\nexport const base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nexport const base64url = /^[A-Za-z0-9_-]*$/;\n// based on https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address\n// export const hostname: RegExp =\n// /^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)+([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\-]*[A-Za-z0-9])$/;\nexport const hostname = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexport const domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces)\nexport const e164 = /^\\+(?:[0-9]){6,14}[0-9]$/;\n// const dateSource = `((\\\\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 dateSource = `(?:(?:\\\\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])))`;\nexport const date = /*@__PURE__*/ new RegExp(`^${dateSource}$`);\nfunction timeSource(args) {\n const hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n const regex = typeof args.precision === \"number\"\n ? args.precision === -1\n ? `${hhmm}`\n : args.precision === 0\n ? `${hhmm}:[0-5]\\\\d`\n : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}`\n : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n return regex;\n}\nexport function time(args) {\n return new RegExp(`^${timeSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetime(args) {\n const time = timeSource({ precision: args.precision });\n const opts = [\"Z\"];\n if (args.local)\n opts.push(\"\");\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n const timeRegex = `${time}(?:${opts.join(\"|\")})`;\n return new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\nexport const string = (params) => {\n const regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n return new RegExp(`^${regex}$`);\n};\nexport const bigint = /^\\d+n?$/;\nexport const integer = /^\\d+$/;\nexport const number = /^-?\\d+(?:\\.\\d+)?/i;\nexport const boolean = /true|false/i;\nconst _null = /null/i;\nexport { _null as null };\nconst _undefined = /undefined/i;\nexport { _undefined as undefined };\n// regex for string with no uppercase letters\nexport const lowercase = /^[^A-Z]*$/;\n// regex for string with no lowercase letters\nexport const uppercase = /^[^a-z]*$/;\n","// import { $ZodType } from \"./schemas.js\";\nimport * as core from \"./core.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nexport const $ZodCheck = /*@__PURE__*/ core.$constructor(\"$ZodCheck\", (inst, def) => {\n var _a;\n inst._zod ?? (inst._zod = {});\n inst._zod.def = def;\n (_a = inst._zod).onattach ?? (_a.onattach = []);\n});\nconst numericOriginMap = {\n number: \"number\",\n bigint: \"bigint\",\n object: \"date\",\n};\nexport const $ZodCheckLessThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckLessThan\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const origin = numericOriginMap[typeof def.value];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;\n if (def.value < curr) {\n if (def.inclusive)\n bag.maximum = def.value;\n else\n bag.exclusiveMaximum = def.value;\n }\n });\n inst._zod.check = (payload) => {\n if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {\n return;\n }\n payload.issues.push({\n origin,\n code: \"too_big\",\n maximum: def.value,\n input: payload.value,\n inclusive: def.inclusive,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckGreaterThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const origin = numericOriginMap[typeof def.value];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;\n if (def.value > curr) {\n if (def.inclusive)\n bag.minimum = def.value;\n else\n bag.exclusiveMinimum = def.value;\n }\n });\n inst._zod.check = (payload) => {\n if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {\n return;\n }\n payload.issues.push({\n origin,\n code: \"too_small\",\n minimum: def.value,\n input: payload.value,\n inclusive: def.inclusive,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMultipleOf = \n/*@__PURE__*/ core.$constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.onattach.push((inst) => {\n var _a;\n (_a = inst._zod.bag).multipleOf ?? (_a.multipleOf = def.value);\n });\n inst._zod.check = (payload) => {\n if (typeof payload.value !== typeof def.value)\n throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n const isMultiple = typeof payload.value === \"bigint\"\n ? payload.value % def.value === BigInt(0)\n : util.floatSafeRemainder(payload.value, def.value) === 0;\n if (isMultiple)\n return;\n payload.issues.push({\n origin: typeof payload.value,\n code: \"not_multiple_of\",\n divisor: def.value,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n $ZodCheck.init(inst, def); // no format checks\n def.format = def.format || \"float64\";\n const isInt = def.format?.includes(\"int\");\n const origin = isInt ? \"int\" : \"number\";\n const [minimum, maximum] = util.NUMBER_FORMAT_RANGES[def.format];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n bag.minimum = minimum;\n bag.maximum = maximum;\n if (isInt)\n bag.pattern = regexes.integer;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n if (isInt) {\n if (!Number.isInteger(input)) {\n // invalid_format issue\n // payload.issues.push({\n // expected: def.format,\n // format: def.format,\n // code: \"invalid_format\",\n // input,\n // inst,\n // });\n // invalid_type issue\n payload.issues.push({\n expected: origin,\n format: def.format,\n code: \"invalid_type\",\n input,\n inst,\n });\n return;\n // not_multiple_of issue\n // payload.issues.push({\n // code: \"not_multiple_of\",\n // origin: \"number\",\n // input,\n // inst,\n // divisor: 1,\n // });\n }\n if (!Number.isSafeInteger(input)) {\n if (input > 0) {\n // too_big\n payload.issues.push({\n input,\n code: \"too_big\",\n maximum: Number.MAX_SAFE_INTEGER,\n note: \"Integers must be within the safe integer range.\",\n inst,\n origin,\n continue: !def.abort,\n });\n }\n else {\n // too_small\n payload.issues.push({\n input,\n code: \"too_small\",\n minimum: Number.MIN_SAFE_INTEGER,\n note: \"Integers must be within the safe integer range.\",\n inst,\n origin,\n continue: !def.abort,\n });\n }\n return;\n }\n }\n if (input < minimum) {\n payload.issues.push({\n origin: \"number\",\n input,\n code: \"too_small\",\n minimum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n if (input > maximum) {\n payload.issues.push({\n origin: \"number\",\n input,\n code: \"too_big\",\n maximum,\n inst,\n });\n }\n };\n});\nexport const $ZodCheckBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckBigIntFormat\", (inst, def) => {\n $ZodCheck.init(inst, def); // no format checks\n const [minimum, maximum] = util.BIGINT_FORMAT_RANGES[def.format];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n bag.minimum = minimum;\n bag.maximum = maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n if (input < minimum) {\n payload.issues.push({\n origin: \"bigint\",\n input,\n code: \"too_small\",\n minimum: minimum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n if (input > maximum) {\n payload.issues.push({\n origin: \"bigint\",\n input,\n code: \"too_big\",\n maximum,\n inst,\n });\n }\n };\n});\nexport const $ZodCheckMaxSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxSize\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n if (def.maximum < curr)\n inst._zod.bag.maximum = def.maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size <= def.maximum)\n return;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n code: \"too_big\",\n maximum: def.maximum,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMinSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinSize\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n if (def.minimum > curr)\n inst._zod.bag.minimum = def.minimum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size >= def.minimum)\n return;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n code: \"too_small\",\n minimum: def.minimum,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckSizeEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckSizeEquals\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.minimum = def.size;\n bag.maximum = def.size;\n bag.size = def.size;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size === def.size)\n return;\n const tooBig = size > def.size;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n ...(tooBig ? { code: \"too_big\", maximum: def.size } : { code: \"too_small\", minimum: def.size }),\n inclusive: true,\n exact: true,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMaxLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n if (def.maximum < curr)\n inst._zod.bag.maximum = def.maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length <= def.maximum)\n return;\n const origin = util.getLengthableOrigin(input);\n payload.issues.push({\n origin,\n code: \"too_big\",\n maximum: def.maximum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMinLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinLength\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n if (def.minimum > curr)\n inst._zod.bag.minimum = def.minimum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length >= def.minimum)\n return;\n const origin = util.getLengthableOrigin(input);\n payload.issues.push({\n origin,\n code: \"too_small\",\n minimum: def.minimum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckLengthEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.minimum = def.length;\n bag.maximum = def.length;\n bag.length = def.length;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length === def.length)\n return;\n const origin = util.getLengthableOrigin(input);\n const tooBig = length > def.length;\n payload.issues.push({\n origin,\n ...(tooBig ? { code: \"too_big\", maximum: def.length } : { code: \"too_small\", minimum: def.length }),\n inclusive: true,\n exact: true,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n var _a, _b;\n $ZodCheck.init(inst, def);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n if (def.pattern) {\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(def.pattern);\n }\n });\n if (def.pattern)\n (_a = inst._zod).check ?? (_a.check = (payload) => {\n def.pattern.lastIndex = 0;\n if (def.pattern.test(payload.value))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: def.format,\n input: payload.value,\n ...(def.pattern ? { pattern: def.pattern.toString() } : {}),\n inst,\n continue: !def.abort,\n });\n });\n else\n (_b = inst._zod).check ?? (_b.check = () => { });\n});\nexport const $ZodCheckRegex = /*@__PURE__*/ core.$constructor(\"$ZodCheckRegex\", (inst, def) => {\n $ZodCheckStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n def.pattern.lastIndex = 0;\n if (def.pattern.test(payload.value))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"regex\",\n input: payload.value,\n pattern: def.pattern.toString(),\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckLowerCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.lowercase);\n $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckUpperCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.uppercase);\n $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckIncludes = /*@__PURE__*/ core.$constructor(\"$ZodCheckIncludes\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const escapedRegex = util.escapeRegex(def.includes);\n const pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position}}${escapedRegex}` : escapedRegex);\n def.pattern = pattern;\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.includes(def.includes, def.position))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"includes\",\n includes: def.includes,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckStartsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const pattern = new RegExp(`^${util.escapeRegex(def.prefix)}.*`);\n def.pattern ?? (def.pattern = pattern);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.startsWith(def.prefix))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"starts_with\",\n prefix: def.prefix,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckEndsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const pattern = new RegExp(`.*${util.escapeRegex(def.suffix)}$`);\n def.pattern ?? (def.pattern = pattern);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.endsWith(def.suffix))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"ends_with\",\n suffix: def.suffix,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n///////////////////////////////////\n///// $ZodCheckProperty /////\n///////////////////////////////////\nfunction handleCheckPropertyResult(result, payload, property) {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(property, result.issues));\n }\n}\nexport const $ZodCheckProperty = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperty\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n const result = def.schema._zod.run({\n value: payload.value[def.property],\n issues: [],\n }, {});\n if (result instanceof Promise) {\n return result.then((result) => handleCheckPropertyResult(result, payload, def.property));\n }\n handleCheckPropertyResult(result, payload, def.property);\n return;\n };\n});\nexport const $ZodCheckMimeType = /*@__PURE__*/ core.$constructor(\"$ZodCheckMimeType\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const mimeSet = new Set(def.mime);\n inst._zod.onattach.push((inst) => {\n inst._zod.bag.mime = def.mime;\n });\n inst._zod.check = (payload) => {\n if (mimeSet.has(payload.value.type))\n return;\n payload.issues.push({\n code: \"invalid_value\",\n values: def.mime,\n input: payload.value.type,\n inst,\n });\n };\n});\nexport const $ZodCheckOverwrite = /*@__PURE__*/ core.$constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n payload.value = def.tx(payload.value);\n };\n});\n","export class Doc {\n constructor(args = []) {\n this.content = [];\n this.indent = 0;\n if (this)\n this.args = args;\n }\n indented(fn) {\n this.indent += 1;\n fn(this);\n this.indent -= 1;\n }\n write(arg) {\n if (typeof arg === \"function\") {\n arg(this, { execution: \"sync\" });\n arg(this, { execution: \"async\" });\n return;\n }\n const content = arg;\n const lines = content.split(\"\\n\").filter((x) => x);\n const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));\n const dedented = lines.map((x) => x.slice(minIndent)).map((x) => \" \".repeat(this.indent * 2) + x);\n for (const line of dedented) {\n this.content.push(line);\n }\n }\n compile() {\n const F = Function;\n const args = this?.args;\n const content = this?.content ?? [``];\n const lines = [...content.map((x) => ` ${x}`)];\n // console.log(lines.join(\"\\n\"));\n return new F(...args, lines.join(\"\\n\"));\n }\n}\n","export const version = {\n major: 4,\n minor: 0,\n patch: 5,\n};\n","import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { safeParse, safeParseAsync } from \"./parse.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nimport { version } from \"./versions.js\";\nexport const $ZodType = /*@__PURE__*/ core.$constructor(\"$ZodType\", (inst, def) => {\n var _a;\n inst ?? (inst = {});\n inst._zod.def = def; // set _def property\n inst._zod.bag = inst._zod.bag || {}; // initialize _bag object\n inst._zod.version = version;\n const checks = [...(inst._zod.def.checks ?? [])];\n // if inst is itself a checks.$ZodCheck, run it as a check\n if (inst._zod.traits.has(\"$ZodCheck\")) {\n checks.unshift(inst);\n }\n //\n for (const ch of checks) {\n for (const fn of ch._zod.onattach) {\n fn(inst);\n }\n }\n if (checks.length === 0) {\n // deferred initializer\n // inst._zod.parse is not yet defined\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n inst._zod.deferred?.push(() => {\n inst._zod.run = inst._zod.parse;\n });\n }\n else {\n const runChecks = (payload, checks, ctx) => {\n let isAborted = util.aborted(payload);\n let asyncResult;\n for (const ch of checks) {\n if (ch._zod.def.when) {\n const shouldRun = ch._zod.def.when(payload);\n if (!shouldRun)\n continue;\n }\n else if (isAborted) {\n continue;\n }\n const currLen = payload.issues.length;\n const _ = ch._zod.check(payload);\n if (_ instanceof Promise && ctx?.async === false) {\n throw new core.$ZodAsyncError();\n }\n if (asyncResult || _ instanceof Promise) {\n asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n await _;\n const nextLen = payload.issues.length;\n if (nextLen === currLen)\n return;\n if (!isAborted)\n isAborted = util.aborted(payload, currLen);\n });\n }\n else {\n const nextLen = payload.issues.length;\n if (nextLen === currLen)\n continue;\n if (!isAborted)\n isAborted = util.aborted(payload, currLen);\n }\n }\n if (asyncResult) {\n return asyncResult.then(() => {\n return payload;\n });\n }\n return payload;\n };\n inst._zod.run = (payload, ctx) => {\n const result = inst._zod.parse(payload, ctx);\n if (result instanceof Promise) {\n if (ctx.async === false)\n throw new core.$ZodAsyncError();\n return result.then((result) => runChecks(result, checks, ctx));\n }\n return runChecks(result, checks, ctx);\n };\n }\n inst[\"~standard\"] = {\n validate: (value) => {\n try {\n const r = safeParse(inst, value);\n return r.success ? { value: r.data } : { issues: r.error?.issues };\n }\n catch (_) {\n return safeParseAsync(inst, value).then((r) => (r.success ? { value: r.data } : { issues: r.error?.issues }));\n }\n },\n vendor: \"zod\",\n version: 1,\n };\n});\nexport { clone } from \"./util.js\";\nexport const $ZodString = /*@__PURE__*/ core.$constructor(\"$ZodString\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = [...(inst?._zod.bag?.patterns ?? [])].pop() ?? regexes.string(inst._zod.bag);\n inst._zod.parse = (payload, _) => {\n if (def.coerce)\n try {\n payload.value = String(payload.value);\n }\n catch (_) { }\n if (typeof payload.value === \"string\")\n return payload;\n payload.issues.push({\n expected: \"string\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodStringFormat\", (inst, def) => {\n // check initialization must come first\n checks.$ZodCheckStringFormat.init(inst, def);\n $ZodString.init(inst, def);\n});\nexport const $ZodGUID = /*@__PURE__*/ core.$constructor(\"$ZodGUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.guid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodUUID = /*@__PURE__*/ core.$constructor(\"$ZodUUID\", (inst, def) => {\n if (def.version) {\n const versionMap = {\n v1: 1,\n v2: 2,\n v3: 3,\n v4: 4,\n v5: 5,\n v6: 6,\n v7: 7,\n v8: 8,\n };\n const v = versionMap[def.version];\n if (v === undefined)\n throw new Error(`Invalid UUID version: \"${def.version}\"`);\n def.pattern ?? (def.pattern = regexes.uuid(v));\n }\n else\n def.pattern ?? (def.pattern = regexes.uuid());\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodEmail = /*@__PURE__*/ core.$constructor(\"$ZodEmail\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.email);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodURL = /*@__PURE__*/ core.$constructor(\"$ZodURL\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n try {\n const orig = payload.value;\n const url = new URL(orig);\n const href = url.href;\n if (def.hostname) {\n def.hostname.lastIndex = 0;\n if (!def.hostname.test(url.hostname)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid hostname\",\n pattern: regexes.hostname.source,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n }\n if (def.protocol) {\n def.protocol.lastIndex = 0;\n if (!def.protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid protocol\",\n pattern: def.protocol.source,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n }\n // payload.value = url.href;\n if (!orig.endsWith(\"/\") && href.endsWith(\"/\")) {\n payload.value = href.slice(0, -1);\n }\n else {\n payload.value = href;\n }\n return;\n }\n catch (_) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodEmoji = /*@__PURE__*/ core.$constructor(\"$ZodEmoji\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.emoji());\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodNanoID = /*@__PURE__*/ core.$constructor(\"$ZodNanoID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.nanoid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID = /*@__PURE__*/ core.$constructor(\"$ZodCUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cuid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID2 = /*@__PURE__*/ core.$constructor(\"$ZodCUID2\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cuid2);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodULID = /*@__PURE__*/ core.$constructor(\"$ZodULID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ulid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodXID = /*@__PURE__*/ core.$constructor(\"$ZodXID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.xid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodKSUID = /*@__PURE__*/ core.$constructor(\"$ZodKSUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ksuid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODateTime = /*@__PURE__*/ core.$constructor(\"$ZodISODateTime\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.datetime(def));\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODate = /*@__PURE__*/ core.$constructor(\"$ZodISODate\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.date);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISOTime = /*@__PURE__*/ core.$constructor(\"$ZodISOTime\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.time(def));\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODuration = /*@__PURE__*/ core.$constructor(\"$ZodISODuration\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.duration);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodIPv4 = /*@__PURE__*/ core.$constructor(\"$ZodIPv4\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ipv4);\n $ZodStringFormat.init(inst, def);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = `ipv4`;\n });\n});\nexport const $ZodIPv6 = /*@__PURE__*/ core.$constructor(\"$ZodIPv6\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ipv6);\n $ZodStringFormat.init(inst, def);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = `ipv6`;\n });\n inst._zod.check = (payload) => {\n try {\n new URL(`http://[${payload.value}]`);\n // return;\n }\n catch {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"ipv6\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv4\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cidrv4);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv6\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cidrv6); // not used for validation\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n const [address, prefix] = payload.value.split(\"/\");\n try {\n if (!prefix)\n throw new Error();\n const prefixNum = Number(prefix);\n if (`${prefixNum}` !== prefix)\n throw new Error();\n if (prefixNum < 0 || prefixNum > 128)\n throw new Error();\n new URL(`http://[${address}]`);\n }\n catch {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"cidrv6\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\n////////////////////////////// ZodBase64 //////////////////////////////\nexport function isValidBase64(data) {\n if (data === \"\")\n return true;\n if (data.length % 4 !== 0)\n return false;\n try {\n atob(data);\n return true;\n }\n catch {\n return false;\n }\n}\nexport const $ZodBase64 = /*@__PURE__*/ core.$constructor(\"$ZodBase64\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.base64);\n $ZodStringFormat.init(inst, def);\n inst._zod.onattach.push((inst) => {\n inst._zod.bag.contentEncoding = \"base64\";\n });\n inst._zod.check = (payload) => {\n if (isValidBase64(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"base64\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n////////////////////////////// ZodBase64 //////////////////////////////\nexport function isValidBase64URL(data) {\n if (!regexes.base64url.test(data))\n return false;\n const base64 = data.replace(/[-_]/g, (c) => (c === \"-\" ? \"+\" : \"/\"));\n const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n return isValidBase64(padded);\n}\nexport const $ZodBase64URL = /*@__PURE__*/ core.$constructor(\"$ZodBase64URL\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.base64url);\n $ZodStringFormat.init(inst, def);\n inst._zod.onattach.push((inst) => {\n inst._zod.bag.contentEncoding = \"base64url\";\n });\n inst._zod.check = (payload) => {\n if (isValidBase64URL(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"base64url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodE164 = /*@__PURE__*/ core.$constructor(\"$ZodE164\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.e164);\n $ZodStringFormat.init(inst, def);\n});\n////////////////////////////// ZodJWT //////////////////////////////\nexport function isValidJWT(token, algorithm = null) {\n try {\n const tokensParts = token.split(\".\");\n if (tokensParts.length !== 3)\n return false;\n const [header] = tokensParts;\n if (!header)\n return false;\n const parsedHeader = JSON.parse(atob(header));\n if (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\")\n return false;\n if (!parsedHeader.alg)\n return false;\n if (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm))\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nexport const $ZodJWT = /*@__PURE__*/ core.$constructor(\"$ZodJWT\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (isValidJWT(payload.value, def.alg))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"jwt\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCustomStringFormat\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (def.fn(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: def.format,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodNumber = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = inst._zod.bag.pattern ?? regexes.number;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = Number(payload.value);\n }\n catch (_) { }\n const input = payload.value;\n if (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) {\n return payload;\n }\n const received = typeof input === \"number\"\n ? Number.isNaN(input)\n ? \"NaN\"\n : !Number.isFinite(input)\n ? \"Infinity\"\n : undefined\n : undefined;\n payload.issues.push({\n expected: \"number\",\n code: \"invalid_type\",\n input,\n inst,\n ...(received ? { received } : {}),\n });\n return payload;\n };\n});\nexport const $ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n checks.$ZodCheckNumberFormat.init(inst, def);\n $ZodNumber.init(inst, def); // no format checksp\n});\nexport const $ZodBoolean = /*@__PURE__*/ core.$constructor(\"$ZodBoolean\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.boolean;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = Boolean(payload.value);\n }\n catch (_) { }\n const input = payload.value;\n if (typeof input === \"boolean\")\n return payload;\n payload.issues.push({\n expected: \"boolean\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodBigInt = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.bigint;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = BigInt(payload.value);\n }\n catch (_) { }\n if (typeof payload.value === \"bigint\")\n return payload;\n payload.issues.push({\n expected: \"bigint\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n checks.$ZodCheckBigIntFormat.init(inst, def);\n $ZodBigInt.init(inst, def); // no format checks\n});\nexport const $ZodSymbol = /*@__PURE__*/ core.$constructor(\"$ZodSymbol\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"symbol\")\n return payload;\n payload.issues.push({\n expected: \"symbol\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodUndefined = /*@__PURE__*/ core.$constructor(\"$ZodUndefined\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.undefined;\n inst._zod.values = new Set([undefined]);\n inst._zod.optin = \"optional\";\n inst._zod.optout = \"optional\";\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"undefined\")\n return payload;\n payload.issues.push({\n expected: \"undefined\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodNull = /*@__PURE__*/ core.$constructor(\"$ZodNull\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.null;\n inst._zod.values = new Set([null]);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (input === null)\n return payload;\n payload.issues.push({\n expected: \"null\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodAny = /*@__PURE__*/ core.$constructor(\"$ZodAny\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload) => payload;\n});\nexport const $ZodUnknown = /*@__PURE__*/ core.$constructor(\"$ZodUnknown\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload) => payload;\n});\nexport const $ZodNever = /*@__PURE__*/ core.$constructor(\"$ZodNever\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n payload.issues.push({\n expected: \"never\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodVoid = /*@__PURE__*/ core.$constructor(\"$ZodVoid\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"undefined\")\n return payload;\n payload.issues.push({\n expected: \"void\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodDate = /*@__PURE__*/ core.$constructor(\"$ZodDate\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce) {\n try {\n payload.value = new Date(payload.value);\n }\n catch (_err) { }\n }\n const input = payload.value;\n const isDate = input instanceof Date;\n const isValidDate = isDate && !Number.isNaN(input.getTime());\n if (isValidDate)\n return payload;\n payload.issues.push({\n expected: \"date\",\n code: \"invalid_type\",\n input,\n ...(isDate ? { received: \"Invalid Date\" } : {}),\n inst,\n });\n return payload;\n };\n});\nfunction handleArrayResult(result, final, index) {\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(index, result.issues));\n }\n final.value[index] = result.value;\n}\nexport const $ZodArray = /*@__PURE__*/ core.$constructor(\"$ZodArray\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!Array.isArray(input)) {\n payload.issues.push({\n expected: \"array\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n payload.value = Array(input.length);\n const proms = [];\n for (let i = 0; i < input.length; i++) {\n const item = input[i];\n const result = def.element._zod.run({\n value: item,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleArrayResult(result, payload, i)));\n }\n else {\n handleArrayResult(result, payload, i);\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => payload);\n }\n return payload; //handleArrayResultsAsync(parseResults, final);\n };\n});\nfunction handleObjectResult(result, final, key) {\n // if(isOptional)\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(key, result.issues));\n }\n final.value[key] = result.value;\n}\nfunction handleOptionalObjectResult(result, final, key, input) {\n if (result.issues.length) {\n // validation failed against value schema\n if (input[key] === undefined) {\n // if input was undefined, ignore the error\n if (key in input) {\n final.value[key] = undefined;\n }\n else {\n final.value[key] = result.value;\n }\n }\n else {\n final.issues.push(...util.prefixIssues(key, result.issues));\n }\n }\n else if (result.value === undefined) {\n // validation returned `undefined`\n if (key in input)\n final.value[key] = undefined;\n }\n else {\n // non-undefined value\n final.value[key] = result.value;\n }\n}\nexport const $ZodObject = /*@__PURE__*/ core.$constructor(\"$ZodObject\", (inst, def) => {\n // requires cast because technically $ZodObject doesn't extend\n $ZodType.init(inst, def);\n const _normalized = util.cached(() => {\n const keys = Object.keys(def.shape);\n for (const k of keys) {\n if (!(def.shape[k] instanceof $ZodType)) {\n throw new Error(`Invalid element at key \"${k}\": expected a Zod schema`);\n }\n }\n const okeys = util.optionalKeys(def.shape);\n return {\n shape: def.shape,\n keys,\n keySet: new Set(keys),\n numKeys: keys.length,\n optionalKeys: new Set(okeys),\n };\n });\n util.defineLazy(inst._zod, \"propValues\", () => {\n const shape = def.shape;\n const propValues = {};\n for (const key in shape) {\n const field = shape[key]._zod;\n if (field.values) {\n propValues[key] ?? (propValues[key] = new Set());\n for (const v of field.values)\n propValues[key].add(v);\n }\n }\n return propValues;\n });\n const generateFastpass = (shape) => {\n const doc = new Doc([\"shape\", \"payload\", \"ctx\"]);\n const normalized = _normalized.value;\n const parseStr = (key) => {\n const k = util.esc(key);\n return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n };\n doc.write(`const input = payload.value;`);\n const ids = Object.create(null);\n let counter = 0;\n for (const key of normalized.keys) {\n ids[key] = `key_${counter++}`;\n }\n // A: preserve key order {\n doc.write(`const newResult = {}`);\n for (const key of normalized.keys) {\n if (normalized.optionalKeys.has(key)) {\n const id = ids[key];\n doc.write(`const ${id} = ${parseStr(key)};`);\n const k = util.esc(key);\n doc.write(`\n if (${id}.issues.length) {\n if (input[${k}] === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n payload.issues = payload.issues.concat(\n ${id}.issues.map((iss) => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}],\n }))\n );\n }\n } else if (${id}.value === undefined) {\n if (${k} in input) newResult[${k}] = undefined;\n } else {\n newResult[${k}] = ${id}.value;\n }\n `);\n }\n else {\n const id = ids[key];\n // const id = ids[key];\n doc.write(`const ${id} = ${parseStr(key)};`);\n doc.write(`\n if (${id}.issues.length) payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${util.esc(key)}, ...iss.path] : [${util.esc(key)}]\n })));`);\n doc.write(`newResult[${util.esc(key)}] = ${id}.value`);\n }\n }\n doc.write(`payload.value = newResult;`);\n doc.write(`return payload;`);\n const fn = doc.compile();\n return (payload, ctx) => fn(shape, payload, ctx);\n };\n let fastpass;\n const isObject = util.isObject;\n const jit = !core.globalConfig.jitless;\n const allowsEval = util.allowsEval;\n const fastEnabled = jit && allowsEval.value; // && !def.catchall;\n const catchall = def.catchall;\n let value;\n inst._zod.parse = (payload, ctx) => {\n value ?? (value = _normalized.value);\n const input = payload.value;\n if (!isObject(input)) {\n payload.issues.push({\n expected: \"object\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n // always synchronous\n if (!fastpass)\n fastpass = generateFastpass(def.shape);\n payload = fastpass(payload, ctx);\n }\n else {\n payload.value = {};\n const shape = value.shape;\n for (const key of value.keys) {\n const el = shape[key];\n // do not add omitted optional keys\n // if (!(key in input)) {\n // if (optionalKeys.has(key)) continue;\n // payload.issues.push({\n // code: \"invalid_type\",\n // path: [key],\n // expected: \"nonoptional\",\n // note: `Missing required key: \"${key}\"`,\n // input,\n // inst,\n // });\n // }\n const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n const isOptional = el._zod.optin === \"optional\" && el._zod.optout === \"optional\";\n if (r instanceof Promise) {\n proms.push(r.then((r) => isOptional ? handleOptionalObjectResult(r, payload, key, input) : handleObjectResult(r, payload, key)));\n }\n else if (isOptional) {\n handleOptionalObjectResult(r, payload, key, input);\n }\n else {\n handleObjectResult(r, payload, key);\n }\n }\n }\n if (!catchall) {\n // return payload;\n return proms.length ? Promise.all(proms).then(() => payload) : payload;\n }\n const unrecognized = [];\n // iterate over input keys\n const keySet = value.keySet;\n const _catchall = catchall._zod;\n const t = _catchall.def.type;\n for (const key of Object.keys(input)) {\n if (keySet.has(key))\n continue;\n if (t === \"never\") {\n unrecognized.push(key);\n continue;\n }\n const r = _catchall.run({ value: input[key], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((r) => handleObjectResult(r, payload, key)));\n }\n else {\n handleObjectResult(r, payload, key);\n }\n }\n if (unrecognized.length) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n keys: unrecognized,\n input,\n inst,\n });\n }\n if (!proms.length)\n return payload;\n return Promise.all(proms).then(() => {\n return payload;\n });\n };\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n for (const result of results) {\n if (result.issues.length === 0) {\n final.value = result.value;\n return final;\n }\n }\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n });\n return final;\n}\nexport const $ZodUnion = /*@__PURE__*/ core.$constructor(\"$ZodUnion\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.options.some((o) => o._zod.optin === \"optional\") ? \"optional\" : undefined);\n util.defineLazy(inst._zod, \"optout\", () => def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n util.defineLazy(inst._zod, \"values\", () => {\n if (def.options.every((o) => o._zod.values)) {\n return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));\n }\n return undefined;\n });\n util.defineLazy(inst._zod, \"pattern\", () => {\n if (def.options.every((o) => o._zod.pattern)) {\n const patterns = def.options.map((o) => o._zod.pattern);\n return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join(\"|\")})$`);\n }\n return undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n let async = false;\n const results = [];\n for (const option of def.options) {\n const result = option._zod.run({\n value: payload.value,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n results.push(result);\n async = true;\n }\n else {\n if (result.issues.length === 0)\n return result;\n results.push(result);\n }\n }\n if (!async)\n return handleUnionResults(results, payload, inst, ctx);\n return Promise.all(results).then((results) => {\n return handleUnionResults(results, payload, inst, ctx);\n });\n };\n});\nexport const $ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n $ZodUnion.init(inst, def);\n const _super = inst._zod.parse;\n util.defineLazy(inst._zod, \"propValues\", () => {\n const propValues = {};\n for (const option of def.options) {\n const pv = option._zod.propValues;\n if (!pv || Object.keys(pv).length === 0)\n throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n for (const [k, v] of Object.entries(pv)) {\n if (!propValues[k])\n propValues[k] = new Set();\n for (const val of v) {\n propValues[k].add(val);\n }\n }\n }\n return propValues;\n });\n const disc = util.cached(() => {\n const opts = def.options;\n const map = new Map();\n for (const o of opts) {\n const values = o._zod.propValues?.[def.discriminator];\n if (!values || values.size === 0)\n throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(o)}\"`);\n for (const v of values) {\n if (map.has(v)) {\n throw new Error(`Duplicate discriminator value \"${String(v)}\"`);\n }\n map.set(v, o);\n }\n }\n return map;\n });\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!util.isObject(input)) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"object\",\n input,\n inst,\n });\n return payload;\n }\n const opt = disc.value.get(input?.[def.discriminator]);\n if (opt) {\n return opt._zod.run(payload, ctx);\n }\n if (def.unionFallback) {\n return _super(payload, ctx);\n }\n // no matching discriminator\n payload.issues.push({\n code: \"invalid_union\",\n errors: [],\n note: \"No matching discriminator\",\n input,\n path: [def.discriminator],\n inst,\n });\n return payload;\n };\n});\nexport const $ZodIntersection = /*@__PURE__*/ core.$constructor(\"$ZodIntersection\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n const left = def.left._zod.run({ value: input, issues: [] }, ctx);\n const right = def.right._zod.run({ value: input, issues: [] }, ctx);\n const async = left instanceof Promise || right instanceof Promise;\n if (async) {\n return Promise.all([left, right]).then(([left, right]) => {\n return handleIntersectionResults(payload, left, right);\n });\n }\n return handleIntersectionResults(payload, left, right);\n };\n});\nfunction mergeValues(a, b) {\n // const aType = parse.t(a);\n // const bType = parse.t(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n if (a instanceof Date && b instanceof Date && +a === +b) {\n return { valid: true, data: a };\n }\n if (util.isPlainObject(a) && util.isPlainObject(b)) {\n const bKeys = Object.keys(b);\n const sharedKeys = Object.keys(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 {\n valid: false,\n mergeErrorPath: [key, ...sharedValue.mergeErrorPath],\n };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) {\n return { valid: false, mergeErrorPath: [] };\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 {\n valid: false,\n mergeErrorPath: [index, ...sharedValue.mergeErrorPath],\n };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n return { valid: false, mergeErrorPath: [] };\n}\nfunction handleIntersectionResults(result, left, right) {\n if (left.issues.length) {\n result.issues.push(...left.issues);\n }\n if (right.issues.length) {\n result.issues.push(...right.issues);\n }\n if (util.aborted(result))\n return result;\n const merged = mergeValues(left.value, right.value);\n if (!merged.valid) {\n throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);\n }\n result.value = merged.data;\n return result;\n}\nexport const $ZodTuple = /*@__PURE__*/ core.$constructor(\"$ZodTuple\", (inst, def) => {\n $ZodType.init(inst, def);\n const items = def.items;\n const optStart = items.length - [...items].reverse().findIndex((item) => item._zod.optin !== \"optional\");\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!Array.isArray(input)) {\n payload.issues.push({\n input,\n inst,\n expected: \"tuple\",\n code: \"invalid_type\",\n });\n return payload;\n }\n payload.value = [];\n const proms = [];\n if (!def.rest) {\n const tooBig = input.length > items.length;\n const tooSmall = input.length < optStart - 1;\n if (tooBig || tooSmall) {\n payload.issues.push({\n input,\n inst,\n origin: \"array\",\n ...(tooBig ? { code: \"too_big\", maximum: items.length } : { code: \"too_small\", minimum: items.length }),\n });\n return payload;\n }\n }\n let i = -1;\n for (const item of items) {\n i++;\n if (i >= input.length)\n if (i >= optStart)\n continue;\n const result = item._zod.run({\n value: input[i],\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n }\n else {\n handleTupleResult(result, payload, i);\n }\n }\n if (def.rest) {\n const rest = input.slice(items.length);\n for (const el of rest) {\n i++;\n const result = def.rest._zod.run({\n value: el,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n }\n else {\n handleTupleResult(result, payload, i);\n }\n }\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleTupleResult(result, final, index) {\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(index, result.issues));\n }\n final.value[index] = result.value;\n}\nexport const $ZodRecord = /*@__PURE__*/ core.$constructor(\"$ZodRecord\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!util.isPlainObject(input)) {\n payload.issues.push({\n expected: \"record\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n if (def.keyType._zod.values) {\n const values = def.keyType._zod.values;\n payload.value = {};\n for (const key of values) {\n if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[key] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[key] = result.value;\n }\n }\n }\n let unrecognized;\n for (const key in input) {\n if (!values.has(key)) {\n unrecognized = unrecognized ?? [];\n unrecognized.push(key);\n }\n }\n if (unrecognized && unrecognized.length > 0) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n input,\n inst,\n keys: unrecognized,\n });\n }\n }\n else {\n payload.value = {};\n for (const key of Reflect.ownKeys(input)) {\n if (key === \"__proto__\")\n continue;\n const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n if (keyResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n if (keyResult.issues.length) {\n payload.issues.push({\n origin: \"record\",\n code: \"invalid_key\",\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n input: key,\n path: [key],\n inst,\n });\n payload.value[keyResult.value] = keyResult.value;\n continue;\n }\n const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[keyResult.value] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[keyResult.value] = result.value;\n }\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => payload);\n }\n return payload;\n };\n});\nexport const $ZodMap = /*@__PURE__*/ core.$constructor(\"$ZodMap\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!(input instanceof Map)) {\n payload.issues.push({\n expected: \"map\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n payload.value = new Map();\n for (const [key, value] of input) {\n const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);\n if (keyResult instanceof Promise || valueResult instanceof Promise) {\n proms.push(Promise.all([keyResult, valueResult]).then(([keyResult, valueResult]) => {\n handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n }));\n }\n else {\n handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n }\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {\n if (keyResult.issues.length) {\n if (util.propertyKeyTypes.has(typeof key)) {\n final.issues.push(...util.prefixIssues(key, keyResult.issues));\n }\n else {\n final.issues.push({\n origin: \"map\",\n code: \"invalid_key\",\n input,\n inst,\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n });\n }\n }\n if (valueResult.issues.length) {\n if (util.propertyKeyTypes.has(typeof key)) {\n final.issues.push(...util.prefixIssues(key, valueResult.issues));\n }\n else {\n final.issues.push({\n origin: \"map\",\n code: \"invalid_element\",\n input,\n inst,\n key: key,\n issues: valueResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n });\n }\n }\n final.value.set(keyResult.value, valueResult.value);\n}\nexport const $ZodSet = /*@__PURE__*/ core.$constructor(\"$ZodSet\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!(input instanceof Set)) {\n payload.issues.push({\n input,\n inst,\n expected: \"set\",\n code: \"invalid_type\",\n });\n return payload;\n }\n const proms = [];\n payload.value = new Set();\n for (const item of input) {\n const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleSetResult(result, payload)));\n }\n else\n handleSetResult(result, payload);\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleSetResult(result, final) {\n if (result.issues.length) {\n final.issues.push(...result.issues);\n }\n final.value.add(result.value);\n}\nexport const $ZodEnum = /*@__PURE__*/ core.$constructor(\"$ZodEnum\", (inst, def) => {\n $ZodType.init(inst, def);\n const values = util.getEnumValues(def.entries);\n inst._zod.values = new Set(values);\n inst._zod.pattern = new RegExp(`^(${values\n .filter((k) => util.propertyKeyTypes.has(typeof k))\n .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o.toString()))\n .join(\"|\")})$`);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (inst._zod.values.has(input)) {\n return payload;\n }\n payload.issues.push({\n code: \"invalid_value\",\n values,\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodLiteral = /*@__PURE__*/ core.$constructor(\"$ZodLiteral\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.values = new Set(def.values);\n inst._zod.pattern = new RegExp(`^(${def.values\n .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o ? o.toString() : String(o)))\n .join(\"|\")})$`);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (inst._zod.values.has(input)) {\n return payload;\n }\n payload.issues.push({\n code: \"invalid_value\",\n values: def.values,\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodFile = /*@__PURE__*/ core.$constructor(\"$ZodFile\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (input instanceof File)\n return payload;\n payload.issues.push({\n expected: \"file\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodTransform = /*@__PURE__*/ core.$constructor(\"$ZodTransform\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const _out = def.transform(payload.value, payload);\n if (_ctx.async) {\n const output = _out instanceof Promise ? _out : Promise.resolve(_out);\n return output.then((output) => {\n payload.value = output;\n return payload;\n });\n }\n if (_out instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n payload.value = _out;\n return payload;\n };\n});\nexport const $ZodOptional = /*@__PURE__*/ core.$constructor(\"$ZodOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n inst._zod.optout = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => {\n return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined;\n });\n util.defineLazy(inst._zod, \"pattern\", () => {\n const pattern = def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n if (def.innerType._zod.optin === \"optional\") {\n return def.innerType._zod.run(payload, ctx);\n }\n if (payload.value === undefined) {\n return payload;\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodNullable = /*@__PURE__*/ core.$constructor(\"$ZodNullable\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n util.defineLazy(inst._zod, \"pattern\", () => {\n const pattern = def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;\n });\n util.defineLazy(inst._zod, \"values\", () => {\n return def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n if (payload.value === null)\n return payload;\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodDefault = /*@__PURE__*/ core.$constructor(\"$ZodDefault\", (inst, def) => {\n $ZodType.init(inst, def);\n // inst._zod.qin = \"true\";\n inst._zod.optin = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n /**\n * $ZodDefault always returns the default value immediately.\n * It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe. */\n return payload;\n }\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleDefaultResult(result, def));\n }\n return handleDefaultResult(result, def);\n };\n});\nfunction handleDefaultResult(payload, def) {\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n }\n return payload;\n}\nexport const $ZodPrefault = /*@__PURE__*/ core.$constructor(\"$ZodPrefault\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodNonOptional = /*@__PURE__*/ core.$constructor(\"$ZodNonOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => {\n const v = def.innerType._zod.values;\n return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleNonOptionalResult(result, inst));\n }\n return handleNonOptionalResult(result, inst);\n };\n});\nfunction handleNonOptionalResult(payload, inst) {\n if (!payload.issues.length && payload.value === undefined) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"nonoptional\",\n input: payload.value,\n inst,\n });\n }\n return payload;\n}\nexport const $ZodSuccess = /*@__PURE__*/ core.$constructor(\"$ZodSuccess\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => {\n payload.value = result.issues.length === 0;\n return payload;\n });\n }\n payload.value = result.issues.length === 0;\n return payload;\n };\n});\nexport const $ZodCatch = /*@__PURE__*/ core.$constructor(\"$ZodCatch\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => {\n payload.value = result.value;\n if (result.issues.length) {\n payload.value = def.catchValue({\n ...payload,\n error: {\n issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n },\n input: payload.value,\n });\n payload.issues = [];\n }\n return payload;\n });\n }\n payload.value = result.value;\n if (result.issues.length) {\n payload.value = def.catchValue({\n ...payload,\n error: {\n issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n },\n input: payload.value,\n });\n payload.issues = [];\n }\n return payload;\n };\n});\nexport const $ZodNaN = /*@__PURE__*/ core.$constructor(\"$ZodNaN\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"number\" || !Number.isNaN(payload.value)) {\n payload.issues.push({\n input: payload.value,\n inst,\n expected: \"nan\",\n code: \"invalid_type\",\n });\n return payload;\n }\n return payload;\n };\n});\nexport const $ZodPipe = /*@__PURE__*/ core.$constructor(\"$ZodPipe\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n inst._zod.parse = (payload, ctx) => {\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handlePipeResult(left, def, ctx));\n }\n return handlePipeResult(left, def, ctx);\n };\n});\nfunction handlePipeResult(left, def, ctx) {\n if (util.aborted(left)) {\n return left;\n }\n return def.out._zod.run({ value: left.value, issues: left.issues }, ctx);\n}\nexport const $ZodReadonly = /*@__PURE__*/ core.$constructor(\"$ZodReadonly\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"propValues\", () => def.innerType._zod.propValues);\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n inst._zod.parse = (payload, ctx) => {\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then(handleReadonlyResult);\n }\n return handleReadonlyResult(result);\n };\n});\nfunction handleReadonlyResult(payload) {\n payload.value = Object.freeze(payload.value);\n return payload;\n}\nexport const $ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"$ZodTemplateLiteral\", (inst, def) => {\n $ZodType.init(inst, def);\n const regexParts = [];\n for (const part of def.parts) {\n if (part instanceof $ZodType) {\n if (!part._zod.pattern) {\n // if (!source)\n throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);\n }\n const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;\n if (!source)\n throw new Error(`Invalid template literal part: ${part._zod.traits}`);\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n regexParts.push(source.slice(start, end));\n }\n else if (part === null || util.primitiveTypes.has(typeof part)) {\n regexParts.push(util.escapeRegex(`${part}`));\n }\n else {\n throw new Error(`Invalid template literal part: ${part}`);\n }\n }\n inst._zod.pattern = new RegExp(`^${regexParts.join(\"\")}$`);\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"string\") {\n payload.issues.push({\n input: payload.value,\n inst,\n expected: \"template_literal\",\n code: \"invalid_type\",\n });\n return payload;\n }\n inst._zod.pattern.lastIndex = 0;\n if (!inst._zod.pattern.test(payload.value)) {\n payload.issues.push({\n input: payload.value,\n inst,\n code: \"invalid_format\",\n format: def.format ?? \"template_literal\",\n pattern: inst._zod.pattern.source,\n });\n return payload;\n }\n return payload;\n };\n});\nexport const $ZodPromise = /*@__PURE__*/ core.$constructor(\"$ZodPromise\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));\n };\n});\nexport const $ZodLazy = /*@__PURE__*/ core.$constructor(\"$ZodLazy\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"innerType\", () => def.getter());\n util.defineLazy(inst._zod, \"pattern\", () => inst._zod.innerType._zod.pattern);\n util.defineLazy(inst._zod, \"propValues\", () => inst._zod.innerType._zod.propValues);\n util.defineLazy(inst._zod, \"optin\", () => inst._zod.innerType._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => inst._zod.innerType._zod.optout);\n inst._zod.parse = (payload, ctx) => {\n const inner = inst._zod.innerType;\n return inner._zod.run(payload, ctx);\n };\n});\nexport const $ZodCustom = /*@__PURE__*/ core.$constructor(\"$ZodCustom\", (inst, def) => {\n checks.$ZodCheck.init(inst, def);\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _) => {\n return payload;\n };\n inst._zod.check = (payload) => {\n const input = payload.value;\n const r = def.fn(input);\n if (r instanceof Promise) {\n return r.then((r) => handleRefineResult(r, payload, input, inst));\n }\n handleRefineResult(r, payload, input, inst);\n return;\n };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n if (!result) {\n const _iss = {\n code: \"custom\",\n input,\n inst, // incorporates params.error into issue reporting\n path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n continue: !inst._zod.def.abort,\n // params: inst._zod.def.params,\n };\n if (inst._zod.def.params)\n _iss.params = inst._zod.def.params;\n payload.issues.push(util.issue(_iss));\n }\n}\n","export const $output = Symbol(\"ZodOutput\");\nexport const $input = Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n constructor() {\n this._map = new Map();\n this._idmap = new Map();\n }\n add(schema, ..._meta) {\n const meta = _meta[0];\n this._map.set(schema, meta);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n if (this._idmap.has(meta.id)) {\n throw new Error(`ID ${meta.id} already exists in the registry`);\n }\n this._idmap.set(meta.id, schema);\n }\n return this;\n }\n clear() {\n this._map = new Map();\n this._idmap = new Map();\n return this;\n }\n remove(schema) {\n const meta = this._map.get(schema);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.delete(meta.id);\n }\n this._map.delete(schema);\n return this;\n }\n get(schema) {\n // return this._map.get(schema) as any;\n // inherit metadata\n const p = schema._zod.parent;\n if (p) {\n const pm = { ...(this.get(p) ?? {}) };\n delete pm.id; // do not inherit id\n return { ...pm, ...this._map.get(schema) };\n }\n return this._map.get(schema);\n }\n has(schema) {\n return this._map.has(schema);\n }\n}\n// registries\nexport function registry() {\n return new $ZodRegistry();\n}\nexport const globalRegistry = /*@__PURE__*/ registry();\n","import * as checks from \"./checks.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\nexport function _string(Class, params) {\n return new Class({\n type: \"string\",\n ...util.normalizeParams(params),\n });\n}\nexport function _coercedString(Class, params) {\n return new Class({\n type: \"string\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\nexport function _email(Class, params) {\n return new Class({\n type: \"string\",\n format: \"email\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _guid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"guid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _uuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _uuidv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v4\",\n ...util.normalizeParams(params),\n });\n}\nexport function _uuidv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v6\",\n ...util.normalizeParams(params),\n });\n}\nexport function _uuidv7(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v7\",\n ...util.normalizeParams(params),\n });\n}\nexport function _url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _emoji(Class, params) {\n return new Class({\n type: \"string\",\n format: \"emoji\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _nanoid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"nanoid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _cuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _cuid2(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid2\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _ulid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ulid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _xid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"xid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _ksuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ksuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _ipv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _ipv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _cidrv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _cidrv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _base64(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _base64url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _e164(Class, params) {\n return new Class({\n type: \"string\",\n format: \"e164\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport function _jwt(Class, params) {\n return new Class({\n type: \"string\",\n format: \"jwt\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport const TimePrecision = {\n Any: null,\n Minute: -1,\n Second: 0,\n Millisecond: 3,\n Microsecond: 6,\n};\nexport function _isoDateTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"datetime\",\n check: \"string_format\",\n offset: false,\n local: false,\n precision: null,\n ...util.normalizeParams(params),\n });\n}\nexport function _isoDate(Class, params) {\n return new Class({\n type: \"string\",\n format: \"date\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\nexport function _isoTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"time\",\n check: \"string_format\",\n precision: null,\n ...util.normalizeParams(params),\n });\n}\nexport function _isoDuration(Class, params) {\n return new Class({\n type: \"string\",\n format: \"duration\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\nexport function _number(Class, params) {\n return new Class({\n type: \"number\",\n checks: [],\n ...util.normalizeParams(params),\n });\n}\nexport function _coercedNumber(Class, params) {\n return new Class({\n type: \"number\",\n coerce: true,\n checks: [],\n ...util.normalizeParams(params),\n });\n}\nexport function _int(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"safeint\",\n ...util.normalizeParams(params),\n });\n}\nexport function _float32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float32\",\n ...util.normalizeParams(params),\n });\n}\nexport function _float64(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float64\",\n ...util.normalizeParams(params),\n });\n}\nexport function _int32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"int32\",\n ...util.normalizeParams(params),\n });\n}\nexport function _uint32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"uint32\",\n ...util.normalizeParams(params),\n });\n}\nexport function _boolean(Class, params) {\n return new Class({\n type: \"boolean\",\n ...util.normalizeParams(params),\n });\n}\nexport function _coercedBoolean(Class, params) {\n return new Class({\n type: \"boolean\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\nexport function _bigint(Class, params) {\n return new Class({\n type: \"bigint\",\n ...util.normalizeParams(params),\n });\n}\nexport function _coercedBigint(Class, params) {\n return new Class({\n type: \"bigint\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\nexport function _int64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"int64\",\n ...util.normalizeParams(params),\n });\n}\nexport function _uint64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"uint64\",\n ...util.normalizeParams(params),\n });\n}\nexport function _symbol(Class, params) {\n return new Class({\n type: \"symbol\",\n ...util.normalizeParams(params),\n });\n}\nexport function _undefined(Class, params) {\n return new Class({\n type: \"undefined\",\n ...util.normalizeParams(params),\n });\n}\nexport function _null(Class, params) {\n return new Class({\n type: \"null\",\n ...util.normalizeParams(params),\n });\n}\nexport function _any(Class) {\n return new Class({\n type: \"any\",\n });\n}\nexport function _unknown(Class) {\n return new Class({\n type: \"unknown\",\n });\n}\nexport function _never(Class, params) {\n return new Class({\n type: \"never\",\n ...util.normalizeParams(params),\n });\n}\nexport function _void(Class, params) {\n return new Class({\n type: \"void\",\n ...util.normalizeParams(params),\n });\n}\nexport function _date(Class, params) {\n return new Class({\n type: \"date\",\n ...util.normalizeParams(params),\n });\n}\nexport function _coercedDate(Class, params) {\n return new Class({\n type: \"date\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\nexport function _nan(Class, params) {\n return new Class({\n type: \"nan\",\n ...util.normalizeParams(params),\n });\n}\nexport function _lt(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\nexport function _lte(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.lte()` instead. */\n_lte as _max, };\nexport function _gt(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\nexport function _gte(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.gte()` instead. */\n_gte as _min, };\nexport function _positive(params) {\n return _gt(0, params);\n}\n// negative\nexport function _negative(params) {\n return _lt(0, params);\n}\n// nonpositive\nexport function _nonpositive(params) {\n return _lte(0, params);\n}\n// nonnegative\nexport function _nonnegative(params) {\n return _gte(0, params);\n}\nexport function _multipleOf(value, params) {\n return new checks.$ZodCheckMultipleOf({\n check: \"multiple_of\",\n ...util.normalizeParams(params),\n value,\n });\n}\nexport function _maxSize(maximum, params) {\n return new checks.$ZodCheckMaxSize({\n check: \"max_size\",\n ...util.normalizeParams(params),\n maximum,\n });\n}\nexport function _minSize(minimum, params) {\n return new checks.$ZodCheckMinSize({\n check: \"min_size\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\nexport function _size(size, params) {\n return new checks.$ZodCheckSizeEquals({\n check: \"size_equals\",\n ...util.normalizeParams(params),\n size,\n });\n}\nexport function _maxLength(maximum, params) {\n const ch = new checks.$ZodCheckMaxLength({\n check: \"max_length\",\n ...util.normalizeParams(params),\n maximum,\n });\n return ch;\n}\nexport function _minLength(minimum, params) {\n return new checks.$ZodCheckMinLength({\n check: \"min_length\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\nexport function _length(length, params) {\n return new checks.$ZodCheckLengthEquals({\n check: \"length_equals\",\n ...util.normalizeParams(params),\n length,\n });\n}\nexport function _regex(pattern, params) {\n return new checks.$ZodCheckRegex({\n check: \"string_format\",\n format: \"regex\",\n ...util.normalizeParams(params),\n pattern,\n });\n}\nexport function _lowercase(params) {\n return new checks.$ZodCheckLowerCase({\n check: \"string_format\",\n format: \"lowercase\",\n ...util.normalizeParams(params),\n });\n}\nexport function _uppercase(params) {\n return new checks.$ZodCheckUpperCase({\n check: \"string_format\",\n format: \"uppercase\",\n ...util.normalizeParams(params),\n });\n}\nexport function _includes(includes, params) {\n return new checks.$ZodCheckIncludes({\n check: \"string_format\",\n format: \"includes\",\n ...util.normalizeParams(params),\n includes,\n });\n}\nexport function _startsWith(prefix, params) {\n return new checks.$ZodCheckStartsWith({\n check: \"string_format\",\n format: \"starts_with\",\n ...util.normalizeParams(params),\n prefix,\n });\n}\nexport function _endsWith(suffix, params) {\n return new checks.$ZodCheckEndsWith({\n check: \"string_format\",\n format: \"ends_with\",\n ...util.normalizeParams(params),\n suffix,\n });\n}\nexport function _property(property, schema, params) {\n return new checks.$ZodCheckProperty({\n check: \"property\",\n property,\n schema,\n ...util.normalizeParams(params),\n });\n}\nexport function _mime(types, params) {\n return new checks.$ZodCheckMimeType({\n check: \"mime_type\",\n mime: types,\n ...util.normalizeParams(params),\n });\n}\nexport function _overwrite(tx) {\n return new checks.$ZodCheckOverwrite({\n check: \"overwrite\",\n tx,\n });\n}\n// normalize\nexport function _normalize(form) {\n return _overwrite((input) => input.normalize(form));\n}\n// trim\nexport function _trim() {\n return _overwrite((input) => input.trim());\n}\n// toLowerCase\nexport function _toLowerCase() {\n return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\nexport function _toUpperCase() {\n return _overwrite((input) => input.toUpperCase());\n}\nexport function _array(Class, element, params) {\n return new Class({\n type: \"array\",\n element,\n // get element() {\n // return element;\n // },\n ...util.normalizeParams(params),\n });\n}\nexport function _union(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n ...util.normalizeParams(params),\n });\n}\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n return new Class({\n type: \"union\",\n options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\nexport function _intersection(Class, left, right) {\n return new Class({\n type: \"intersection\",\n left,\n right,\n });\n}\n// export function _tuple(\n// Class: util.SchemaClass<schemas.$ZodTuple>,\n// items: [],\n// params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\nexport function _tuple(Class, items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new Class({\n type: \"tuple\",\n items,\n rest,\n ...util.normalizeParams(params),\n });\n}\nexport function _record(Class, keyType, valueType, params) {\n return new Class({\n type: \"record\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\nexport function _map(Class, keyType, valueType, params) {\n return new Class({\n type: \"map\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\nexport function _set(Class, valueType, params) {\n return new Class({\n type: \"set\",\n valueType,\n ...util.normalizeParams(params),\n });\n}\nexport function _enum(Class, values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n // if (Array.isArray(values)) {\n // for (const value of values) {\n // entries[value] = value;\n // }\n // } else {\n // Object.assign(entries, values);\n // }\n // const entries: util.EnumLike = {};\n // for (const val of values) {\n // entries[val] = val;\n // }\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function _nativeEnum(Class, entries, params) {\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport function _literal(Class, value, params) {\n return new Class({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\nexport function _file(Class, params) {\n return new Class({\n type: \"file\",\n ...util.normalizeParams(params),\n });\n}\nexport function _transform(Class, fn) {\n return new Class({\n type: \"transform\",\n transform: fn,\n });\n}\nexport function _optional(Class, innerType) {\n return new Class({\n type: \"optional\",\n innerType,\n });\n}\nexport function _nullable(Class, innerType) {\n return new Class({\n type: \"nullable\",\n innerType,\n });\n}\nexport function _default(Class, innerType, defaultValue) {\n return new Class({\n type: \"default\",\n innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : defaultValue;\n },\n });\n}\nexport function _nonoptional(Class, innerType, params) {\n return new Class({\n type: \"nonoptional\",\n innerType,\n ...util.normalizeParams(params),\n });\n}\nexport function _success(Class, innerType) {\n return new Class({\n type: \"success\",\n innerType,\n });\n}\nexport function _catch(Class, innerType, catchValue) {\n return new Class({\n type: \"catch\",\n innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\nexport function _pipe(Class, in_, out) {\n return new Class({\n type: \"pipe\",\n in: in_,\n out,\n });\n}\nexport function _readonly(Class, innerType) {\n return new Class({\n type: \"readonly\",\n innerType,\n });\n}\nexport function _templateLiteral(Class, parts, params) {\n return new Class({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\nexport function _lazy(Class, getter) {\n return new Class({\n type: \"lazy\",\n getter,\n });\n}\nexport function _promise(Class, innerType) {\n return new Class({\n type: \"promise\",\n innerType,\n });\n}\nexport function _custom(Class, fn, _params) {\n const norm = util.normalizeParams(_params);\n norm.abort ?? (norm.abort = true); // default to abort:false\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...norm,\n });\n return schema;\n}\n// export function _refine<T>(\n// Class: util.SchemaClass<schemas.$ZodCustom>,\n// fn: (arg: NoInfer<T>) => util.MaybeAsync<unknown>,\n// _params: string | $ZodCustomParams = {}\n// ): checks.$ZodCheck<T> {\n// return _custom(Class, fn, _params);\n// }\n// same as _custom but defaults to abort:false\nexport function _refine(Class, fn, _params) {\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...util.normalizeParams(_params),\n });\n return schema;\n}\nexport function _stringbool(Classes, _params) {\n const params = util.normalizeParams(_params);\n let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n if (params.case !== \"sensitive\") {\n truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n }\n const truthySet = new Set(truthyArray);\n const falsySet = new Set(falsyArray);\n const _Pipe = Classes.Pipe ?? schemas.$ZodPipe;\n const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n const _String = Classes.String ?? schemas.$ZodString;\n const _Transform = Classes.Transform ?? schemas.$ZodTransform;\n const tx = new _Transform({\n type: \"transform\",\n transform: (input, payload) => {\n let data = input;\n if (params.case !== \"sensitive\")\n data = data.toLowerCase();\n if (truthySet.has(data)) {\n return true;\n }\n else if (falsySet.has(data)) {\n return false;\n }\n else {\n payload.issues.push({\n code: \"invalid_value\",\n expected: \"stringbool\",\n values: [...truthySet, ...falsySet],\n input: payload.value,\n inst: tx,\n });\n return {};\n }\n },\n error: params.error,\n });\n // params.error;\n const innerPipe = new _Pipe({\n type: \"pipe\",\n in: new _String({ type: \"string\", error: params.error }),\n out: tx,\n error: params.error,\n });\n const outerPipe = new _Pipe({\n type: \"pipe\",\n in: innerPipe,\n out: new _Boolean({\n type: \"boolean\",\n error: params.error,\n }),\n error: params.error,\n });\n return outerPipe;\n}\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n const params = util.normalizeParams(_params);\n const def = {\n ...util.normalizeParams(_params),\n check: \"string_format\",\n type: \"string\",\n format,\n fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n ...params,\n };\n if (fnOrRegex instanceof RegExp) {\n def.pattern = fnOrRegex;\n }\n const inst = new Class(def);\n return inst;\n}\n","import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport const ZodISODateTime = /*@__PURE__*/ core.$constructor(\"ZodISODateTime\", (inst, def) => {\n core.$ZodISODateTime.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function datetime(params) {\n return core._isoDateTime(ZodISODateTime, params);\n}\nexport const ZodISODate = /*@__PURE__*/ core.$constructor(\"ZodISODate\", (inst, def) => {\n core.$ZodISODate.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function date(params) {\n return core._isoDate(ZodISODate, params);\n}\nexport const ZodISOTime = /*@__PURE__*/ core.$constructor(\"ZodISOTime\", (inst, def) => {\n core.$ZodISOTime.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function time(params) {\n return core._isoTime(ZodISOTime, params);\n}\nexport const ZodISODuration = /*@__PURE__*/ core.$constructor(\"ZodISODuration\", (inst, def) => {\n core.$ZodISODuration.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function duration(params) {\n return core._isoDuration(ZodISODuration, params);\n}\n","import * as core from \"../core/index.js\";\nimport { $ZodError } from \"../core/index.js\";\nconst initializer = (inst, issues) => {\n $ZodError.init(inst, issues);\n inst.name = \"ZodError\";\n Object.defineProperties(inst, {\n format: {\n value: (mapper) => core.formatError(inst, mapper),\n // enumerable: false,\n },\n flatten: {\n value: (mapper) => core.flattenError(inst, mapper),\n // enumerable: false,\n },\n addIssue: {\n value: (issue) => inst.issues.push(issue),\n // enumerable: false,\n },\n addIssues: {\n value: (issues) => inst.issues.push(...issues),\n // enumerable: false,\n },\n isEmpty: {\n get() {\n return inst.issues.length === 0;\n },\n // enumerable: false,\n },\n });\n // Object.defineProperty(inst, \"isEmpty\", {\n // get() {\n // return inst.issues.length === 0;\n // },\n // });\n};\nexport const ZodError = core.$constructor(\"ZodError\", initializer);\nexport const ZodRealError = core.$constructor(\"ZodError\", initializer, {\n Parent: Error,\n});\n// /** @deprecated Use `z.core.$ZodErrorMapCtx` instead. */\n// export type ErrorMapCtx = core.$ZodErrorMapCtx;\n","import * as core from \"../core/index.js\";\nimport { ZodRealError } from \"./errors.js\";\nexport const parse = /* @__PURE__ */ core._parse(ZodRealError);\nexport const parseAsync = /* @__PURE__ */ core._parseAsync(ZodRealError);\nexport const safeParse = /* @__PURE__ */ core._safeParse(ZodRealError);\nexport const safeParseAsync = /* @__PURE__ */ core._safeParseAsync(ZodRealError);\n","import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as checks from \"./checks.js\";\nimport * as iso from \"./iso.js\";\nimport * as parse from \"./parse.js\";\nexport const ZodType = /*@__PURE__*/ core.$constructor(\"ZodType\", (inst, def) => {\n core.$ZodType.init(inst, def);\n inst.def = def;\n Object.defineProperty(inst, \"_def\", { value: def });\n // base methods\n inst.check = (...checks) => {\n return inst.clone({\n ...def,\n checks: [\n ...(def.checks ?? []),\n ...checks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n ],\n }\n // { parent: true }\n );\n };\n inst.clone = (def, params) => core.clone(inst, def, params);\n inst.brand = () => inst;\n inst.register = ((reg, meta) => {\n reg.add(inst, meta);\n return inst;\n });\n // parsing\n inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });\n inst.safeParse = (data, params) => parse.safeParse(inst, data, params);\n inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });\n inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);\n inst.spa = inst.safeParseAsync;\n // refinements\n inst.refine = (check, params) => inst.check(refine(check, params));\n inst.superRefine = (refinement) => inst.check(superRefine(refinement));\n inst.overwrite = (fn) => inst.check(checks.overwrite(fn));\n // wrappers\n inst.optional = () => optional(inst);\n inst.nullable = () => nullable(inst);\n inst.nullish = () => optional(nullable(inst));\n inst.nonoptional = (params) => nonoptional(inst, params);\n inst.array = () => array(inst);\n inst.or = (arg) => union([inst, arg]);\n inst.and = (arg) => intersection(inst, arg);\n inst.transform = (tx) => pipe(inst, transform(tx));\n inst.default = (def) => _default(inst, def);\n inst.prefault = (def) => prefault(inst, def);\n // inst.coalesce = (def, params) => coalesce(inst, def, params);\n inst.catch = (params) => _catch(inst, params);\n inst.pipe = (target) => pipe(inst, target);\n inst.readonly = () => readonly(inst);\n // meta\n inst.describe = (description) => {\n const cl = inst.clone();\n core.globalRegistry.add(cl, { description });\n return cl;\n };\n Object.defineProperty(inst, \"description\", {\n get() {\n return core.globalRegistry.get(inst)?.description;\n },\n configurable: true,\n });\n inst.meta = (...args) => {\n if (args.length === 0) {\n return core.globalRegistry.get(inst);\n }\n const cl = inst.clone();\n core.globalRegistry.add(cl, args[0]);\n return cl;\n };\n // helpers\n inst.isOptional = () => inst.safeParse(undefined).success;\n inst.isNullable = () => inst.safeParse(null).success;\n return inst;\n});\n/** @internal */\nexport const _ZodString = /*@__PURE__*/ core.$constructor(\"_ZodString\", (inst, def) => {\n core.$ZodString.init(inst, def);\n ZodType.init(inst, def);\n const bag = inst._zod.bag;\n inst.format = bag.format ?? null;\n inst.minLength = bag.minimum ?? null;\n inst.maxLength = bag.maximum ?? null;\n // validations\n inst.regex = (...args) => inst.check(checks.regex(...args));\n inst.includes = (...args) => inst.check(checks.includes(...args));\n inst.startsWith = (...args) => inst.check(checks.startsWith(...args));\n inst.endsWith = (...args) => inst.check(checks.endsWith(...args));\n inst.min = (...args) => inst.check(checks.minLength(...args));\n inst.max = (...args) => inst.check(checks.maxLength(...args));\n inst.length = (...args) => inst.check(checks.length(...args));\n inst.nonempty = (...args) => inst.check(checks.minLength(1, ...args));\n inst.lowercase = (params) => inst.check(checks.lowercase(params));\n inst.uppercase = (params) => inst.check(checks.uppercase(params));\n // transforms\n inst.trim = () => inst.check(checks.trim());\n inst.normalize = (...args) => inst.check(checks.normalize(...args));\n inst.toLowerCase = () => inst.check(checks.toLowerCase());\n inst.toUpperCase = () => inst.check(checks.toUpperCase());\n});\nexport const ZodString = /*@__PURE__*/ core.$constructor(\"ZodString\", (inst, def) => {\n core.$ZodString.init(inst, def);\n _ZodString.init(inst, def);\n inst.email = (params) => inst.check(core._email(ZodEmail, params));\n inst.url = (params) => inst.check(core._url(ZodURL, params));\n inst.jwt = (params) => inst.check(core._jwt(ZodJWT, params));\n inst.emoji = (params) => inst.check(core._emoji(ZodEmoji, params));\n inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n inst.uuid = (params) => inst.check(core._uuid(ZodUUID, params));\n inst.uuidv4 = (params) => inst.check(core._uuidv4(ZodUUID, params));\n inst.uuidv6 = (params) => inst.check(core._uuidv6(ZodUUID, params));\n inst.uuidv7 = (params) => inst.check(core._uuidv7(ZodUUID, params));\n inst.nanoid = (params) => inst.check(core._nanoid(ZodNanoID, params));\n inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n inst.cuid = (params) => inst.check(core._cuid(ZodCUID, params));\n inst.cuid2 = (params) => inst.check(core._cuid2(ZodCUID2, params));\n inst.ulid = (params) => inst.check(core._ulid(ZodULID, params));\n inst.base64 = (params) => inst.check(core._base64(ZodBase64, params));\n inst.base64url = (params) => inst.check(core._base64url(ZodBase64URL, params));\n inst.xid = (params) => inst.check(core._xid(ZodXID, params));\n inst.ksuid = (params) => inst.check(core._ksuid(ZodKSUID, params));\n inst.ipv4 = (params) => inst.check(core._ipv4(ZodIPv4, params));\n inst.ipv6 = (params) => inst.check(core._ipv6(ZodIPv6, params));\n inst.cidrv4 = (params) => inst.check(core._cidrv4(ZodCIDRv4, params));\n inst.cidrv6 = (params) => inst.check(core._cidrv6(ZodCIDRv6, params));\n inst.e164 = (params) => inst.check(core._e164(ZodE164, params));\n // iso\n inst.datetime = (params) => inst.check(iso.datetime(params));\n inst.date = (params) => inst.check(iso.date(params));\n inst.time = (params) => inst.check(iso.time(params));\n inst.duration = (params) => inst.check(iso.duration(params));\n});\nexport function string(params) {\n return core._string(ZodString, params);\n}\nexport const ZodStringFormat = /*@__PURE__*/ core.$constructor(\"ZodStringFormat\", (inst, def) => {\n core.$ZodStringFormat.init(inst, def);\n _ZodString.init(inst, def);\n});\nexport const ZodEmail = /*@__PURE__*/ core.$constructor(\"ZodEmail\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodEmail.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function email(params) {\n return core._email(ZodEmail, params);\n}\nexport const ZodGUID = /*@__PURE__*/ core.$constructor(\"ZodGUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodGUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function guid(params) {\n return core._guid(ZodGUID, params);\n}\nexport const ZodUUID = /*@__PURE__*/ core.$constructor(\"ZodUUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodUUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function uuid(params) {\n return core._uuid(ZodUUID, params);\n}\nexport function uuidv4(params) {\n return core._uuidv4(ZodUUID, params);\n}\n// ZodUUIDv6\nexport function uuidv6(params) {\n return core._uuidv6(ZodUUID, params);\n}\n// ZodUUIDv7\nexport function uuidv7(params) {\n return core._uuidv7(ZodUUID, params);\n}\nexport const ZodURL = /*@__PURE__*/ core.$constructor(\"ZodURL\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodURL.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function url(params) {\n return core._url(ZodURL, params);\n}\nexport const ZodEmoji = /*@__PURE__*/ core.$constructor(\"ZodEmoji\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodEmoji.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function emoji(params) {\n return core._emoji(ZodEmoji, params);\n}\nexport const ZodNanoID = /*@__PURE__*/ core.$constructor(\"ZodNanoID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodNanoID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function nanoid(params) {\n return core._nanoid(ZodNanoID, params);\n}\nexport const ZodCUID = /*@__PURE__*/ core.$constructor(\"ZodCUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cuid(params) {\n return core._cuid(ZodCUID, params);\n}\nexport const ZodCUID2 = /*@__PURE__*/ core.$constructor(\"ZodCUID2\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCUID2.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cuid2(params) {\n return core._cuid2(ZodCUID2, params);\n}\nexport const ZodULID = /*@__PURE__*/ core.$constructor(\"ZodULID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodULID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ulid(params) {\n return core._ulid(ZodULID, params);\n}\nexport const ZodXID = /*@__PURE__*/ core.$constructor(\"ZodXID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodXID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function xid(params) {\n return core._xid(ZodXID, params);\n}\nexport const ZodKSUID = /*@__PURE__*/ core.$constructor(\"ZodKSUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodKSUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ksuid(params) {\n return core._ksuid(ZodKSUID, params);\n}\nexport const ZodIPv4 = /*@__PURE__*/ core.$constructor(\"ZodIPv4\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodIPv4.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ipv4(params) {\n return core._ipv4(ZodIPv4, params);\n}\nexport const ZodIPv6 = /*@__PURE__*/ core.$constructor(\"ZodIPv6\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodIPv6.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ipv6(params) {\n return core._ipv6(ZodIPv6, params);\n}\nexport const ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv4\", (inst, def) => {\n core.$ZodCIDRv4.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cidrv4(params) {\n return core._cidrv4(ZodCIDRv4, params);\n}\nexport const ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv6\", (inst, def) => {\n core.$ZodCIDRv6.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cidrv6(params) {\n return core._cidrv6(ZodCIDRv6, params);\n}\nexport const ZodBase64 = /*@__PURE__*/ core.$constructor(\"ZodBase64\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodBase64.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function base64(params) {\n return core._base64(ZodBase64, params);\n}\nexport const ZodBase64URL = /*@__PURE__*/ core.$constructor(\"ZodBase64URL\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodBase64URL.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function base64url(params) {\n return core._base64url(ZodBase64URL, params);\n}\nexport const ZodE164 = /*@__PURE__*/ core.$constructor(\"ZodE164\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodE164.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function e164(params) {\n return core._e164(ZodE164, params);\n}\nexport const ZodJWT = /*@__PURE__*/ core.$constructor(\"ZodJWT\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodJWT.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function jwt(params) {\n return core._jwt(ZodJWT, params);\n}\nexport const ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodCustomStringFormat\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCustomStringFormat.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n return core._stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params);\n}\nexport const ZodNumber = /*@__PURE__*/ core.$constructor(\"ZodNumber\", (inst, def) => {\n core.$ZodNumber.init(inst, def);\n ZodType.init(inst, def);\n inst.gt = (value, params) => inst.check(checks.gt(value, params));\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.lt = (value, params) => inst.check(checks.lt(value, params));\n inst.lte = (value, params) => inst.check(checks.lte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n inst.int = (params) => inst.check(int(params));\n inst.safe = (params) => inst.check(int(params));\n inst.positive = (params) => inst.check(checks.gt(0, params));\n inst.nonnegative = (params) => inst.check(checks.gte(0, params));\n inst.negative = (params) => inst.check(checks.lt(0, params));\n inst.nonpositive = (params) => inst.check(checks.lte(0, params));\n inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n inst.step = (value, params) => inst.check(checks.multipleOf(value, params));\n // inst.finite = (params) => inst.check(core.finite(params));\n inst.finite = () => inst;\n const bag = inst._zod.bag;\n inst.minValue =\n Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;\n inst.maxValue =\n Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;\n inst.isInt = (bag.format ?? \"\").includes(\"int\") || Number.isSafeInteger(bag.multipleOf ?? 0.5);\n inst.isFinite = true;\n inst.format = bag.format ?? null;\n});\nexport function number(params) {\n return core._number(ZodNumber, params);\n}\nexport const ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodNumberFormat\", (inst, def) => {\n core.$ZodNumberFormat.init(inst, def);\n ZodNumber.init(inst, def);\n});\nexport function int(params) {\n return core._int(ZodNumberFormat, params);\n}\nexport function float32(params) {\n return core._float32(ZodNumberFormat, params);\n}\nexport function float64(params) {\n return core._float64(ZodNumberFormat, params);\n}\nexport function int32(params) {\n return core._int32(ZodNumberFormat, params);\n}\nexport function uint32(params) {\n return core._uint32(ZodNumberFormat, params);\n}\nexport const ZodBoolean = /*@__PURE__*/ core.$constructor(\"ZodBoolean\", (inst, def) => {\n core.$ZodBoolean.init(inst, def);\n ZodType.init(inst, def);\n});\nexport function boolean(params) {\n return core._boolean(ZodBoolean, params);\n}\nexport const ZodBigInt = /*@__PURE__*/ core.$constructor(\"ZodBigInt\", (inst, def) => {\n core.$ZodBigInt.init(inst, def);\n ZodType.init(inst, def);\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.gt = (value, params) => inst.check(checks.gt(value, params));\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.lt = (value, params) => inst.check(checks.lt(value, params));\n inst.lte = (value, params) => inst.check(checks.lte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n inst.positive = (params) => inst.check(checks.gt(BigInt(0), params));\n inst.negative = (params) => inst.check(checks.lt(BigInt(0), params));\n inst.nonpositive = (params) => inst.check(checks.lte(BigInt(0), params));\n inst.nonnegative = (params) => inst.check(checks.gte(BigInt(0), params));\n inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n const bag = inst._zod.bag;\n inst.minValue = bag.minimum ?? null;\n inst.maxValue = bag.maximum ?? null;\n inst.format = bag.format ?? null;\n});\nexport function bigint(params) {\n return core._bigint(ZodBigInt, params);\n}\nexport const ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodBigIntFormat\", (inst, def) => {\n core.$ZodBigIntFormat.init(inst, def);\n ZodBigInt.init(inst, def);\n});\n// int64\nexport function int64(params) {\n return core._int64(ZodBigIntFormat, params);\n}\n// uint64\nexport function uint64(params) {\n return core._uint64(ZodBigIntFormat, params);\n}\nexport const ZodSymbol = /*@__PURE__*/ core.$constructor(\"ZodSymbol\", (inst, def) => {\n core.$ZodSymbol.init(inst, def);\n ZodType.init(inst, def);\n});\nexport function symbol(params) {\n return core._symbol(ZodSymbol, params);\n}\nexport const ZodUndefined = /*@__PURE__*/ core.$constructor(\"ZodUndefined\", (inst, def) => {\n core.$ZodUndefined.init(inst, def);\n ZodType.init(inst, def);\n});\nfunction _undefined(params) {\n return core._undefined(ZodUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodNull = /*@__PURE__*/ core.$constructor(\"ZodNull\", (inst, def) => {\n core.$ZodNull.init(inst, def);\n ZodType.init(inst, def);\n});\nfunction _null(params) {\n return core._null(ZodNull, params);\n}\nexport { _null as null };\nexport const ZodAny = /*@__PURE__*/ core.$constructor(\"ZodAny\", (inst, def) => {\n core.$ZodAny.init(inst, def);\n ZodType.init(inst, def);\n});\nexport function any() {\n return core._any(ZodAny);\n}\nexport const ZodUnknown = /*@__PURE__*/ core.$constructor(\"ZodUnknown\", (inst, def) => {\n core.$ZodUnknown.init(inst, def);\n ZodType.init(inst, def);\n});\nexport function unknown() {\n return core._unknown(ZodUnknown);\n}\nexport const ZodNever = /*@__PURE__*/ core.$constructor(\"ZodNever\", (inst, def) => {\n core.$ZodNever.init(inst, def);\n ZodType.init(inst, def);\n});\nexport function never(params) {\n return core._never(ZodNever, params);\n}\nexport const ZodVoid = /*@__PURE__*/ core.$constructor(\"ZodVoid\", (inst, def) => {\n core.$ZodVoid.init(inst, def);\n ZodType.init(inst, def);\n});\nfunction _void(params) {\n return core._void(ZodVoid, params);\n}\nexport { _void as void };\nexport const ZodDate = /*@__PURE__*/ core.$constructor(\"ZodDate\", (inst, def) => {\n core.$ZodDate.init(inst, def);\n ZodType.init(inst, def);\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n const c = inst._zod.bag;\n inst.minDate = c.minimum ? new Date(c.minimum) : null;\n inst.maxDate = c.maximum ? new Date(c.maximum) : null;\n});\nexport function date(params) {\n return core._date(ZodDate, params);\n}\nexport const ZodArray = /*@__PURE__*/ core.$constructor(\"ZodArray\", (inst, def) => {\n core.$ZodArray.init(inst, def);\n ZodType.init(inst, def);\n inst.element = def.element;\n inst.min = (minLength, params) => inst.check(checks.minLength(minLength, params));\n inst.nonempty = (params) => inst.check(checks.minLength(1, params));\n inst.max = (maxLength, params) => inst.check(checks.maxLength(maxLength, params));\n inst.length = (len, params) => inst.check(checks.length(len, params));\n inst.unwrap = () => inst.element;\n});\nexport function array(element, params) {\n return core._array(ZodArray, element, params);\n}\n// .keyof\nexport function keyof(schema) {\n const shape = schema._zod.def.shape;\n return literal(Object.keys(shape));\n}\nexport const ZodObject = /*@__PURE__*/ core.$constructor(\"ZodObject\", (inst, def) => {\n core.$ZodObject.init(inst, def);\n ZodType.init(inst, def);\n util.defineLazy(inst, \"shape\", () => def.shape);\n inst.keyof = () => _enum(Object.keys(inst._zod.def.shape));\n inst.catchall = (catchall) => inst.clone({ ...inst._zod.def, catchall: catchall });\n inst.passthrough = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n // inst.nonstrict = () => inst.clone({ ...inst._zod.def, catchall: api.unknown() });\n inst.loose = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n inst.strict = () => inst.clone({ ...inst._zod.def, catchall: never() });\n inst.strip = () => inst.clone({ ...inst._zod.def, catchall: undefined });\n inst.extend = (incoming) => {\n return util.extend(inst, incoming);\n };\n inst.merge = (other) => util.merge(inst, other);\n inst.pick = (mask) => util.pick(inst, mask);\n inst.omit = (mask) => util.omit(inst, mask);\n inst.partial = (...args) => util.partial(ZodOptional, inst, args[0]);\n inst.required = (...args) => util.required(ZodNonOptional, inst, args[0]);\n});\nexport function object(shape, params) {\n const def = {\n type: \"object\",\n get shape() {\n util.assignProp(this, \"shape\", { ...shape });\n return this.shape;\n },\n ...util.normalizeParams(params),\n };\n return new ZodObject(def);\n}\n// strictObject\nexport function strictObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n get shape() {\n util.assignProp(this, \"shape\", { ...shape });\n return this.shape;\n },\n catchall: never(),\n ...util.normalizeParams(params),\n });\n}\n// looseObject\nexport function looseObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n get shape() {\n util.assignProp(this, \"shape\", { ...shape });\n return this.shape;\n },\n catchall: unknown(),\n ...util.normalizeParams(params),\n });\n}\nexport const ZodUnion = /*@__PURE__*/ core.$constructor(\"ZodUnion\", (inst, def) => {\n core.$ZodUnion.init(inst, def);\n ZodType.init(inst, def);\n inst.options = def.options;\n});\nexport function union(options, params) {\n return new ZodUnion({\n type: \"union\",\n options: options,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodDiscriminatedUnion\", (inst, def) => {\n ZodUnion.init(inst, def);\n core.$ZodDiscriminatedUnion.init(inst, def);\n});\nexport function discriminatedUnion(discriminator, options, params) {\n // const [options, params] = args;\n return new ZodDiscriminatedUnion({\n type: \"union\",\n options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodIntersection = /*@__PURE__*/ core.$constructor(\"ZodIntersection\", (inst, def) => {\n core.$ZodIntersection.init(inst, def);\n ZodType.init(inst, def);\n});\nexport function intersection(left, right) {\n return new ZodIntersection({\n type: \"intersection\",\n left: left,\n right: right,\n });\n}\nexport const ZodTuple = /*@__PURE__*/ core.$constructor(\"ZodTuple\", (inst, def) => {\n core.$ZodTuple.init(inst, def);\n ZodType.init(inst, def);\n inst.rest = (rest) => inst.clone({\n ...inst._zod.def,\n rest: rest,\n });\n});\nexport function tuple(items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof core.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new ZodTuple({\n type: \"tuple\",\n items: items,\n rest,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodRecord = /*@__PURE__*/ core.$constructor(\"ZodRecord\", (inst, def) => {\n core.$ZodRecord.init(inst, def);\n ZodType.init(inst, def);\n inst.keyType = def.keyType;\n inst.valueType = def.valueType;\n});\nexport function record(keyType, valueType, params) {\n return new ZodRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\n// type alksjf = core.output<core.$ZodRecordKey>;\nexport function partialRecord(keyType, valueType, params) {\n return new ZodRecord({\n type: \"record\",\n keyType: union([keyType, never()]),\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMap = /*@__PURE__*/ core.$constructor(\"ZodMap\", (inst, def) => {\n core.$ZodMap.init(inst, def);\n ZodType.init(inst, def);\n inst.keyType = def.keyType;\n inst.valueType = def.valueType;\n});\nexport function map(keyType, valueType, params) {\n return new ZodMap({\n type: \"map\",\n keyType: keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodSet = /*@__PURE__*/ core.$constructor(\"ZodSet\", (inst, def) => {\n core.$ZodSet.init(inst, def);\n ZodType.init(inst, def);\n inst.min = (...args) => inst.check(core._minSize(...args));\n inst.nonempty = (params) => inst.check(core._minSize(1, params));\n inst.max = (...args) => inst.check(core._maxSize(...args));\n inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function set(valueType, params) {\n return new ZodSet({\n type: \"set\",\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodEnum = /*@__PURE__*/ core.$constructor(\"ZodEnum\", (inst, def) => {\n core.$ZodEnum.init(inst, def);\n ZodType.init(inst, def);\n inst.enum = def.entries;\n inst.options = Object.values(def.entries);\n const keys = new Set(Object.keys(def.entries));\n inst.extract = (values, params) => {\n const newEntries = {};\n for (const value of values) {\n if (keys.has(value)) {\n newEntries[value] = def.entries[value];\n }\n else\n throw new Error(`Key ${value} not found in enum`);\n }\n return new ZodEnum({\n ...def,\n checks: [],\n ...util.normalizeParams(params),\n entries: newEntries,\n });\n };\n inst.exclude = (values, params) => {\n const newEntries = { ...def.entries };\n for (const value of values) {\n if (keys.has(value)) {\n delete newEntries[value];\n }\n else\n throw new Error(`Key ${value} not found in enum`);\n }\n return new ZodEnum({\n ...def,\n checks: [],\n ...util.normalizeParams(params),\n entries: newEntries,\n });\n };\n});\nfunction _enum(values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n return new ZodEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport { _enum as enum };\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n return new ZodEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodLiteral = /*@__PURE__*/ core.$constructor(\"ZodLiteral\", (inst, def) => {\n core.$ZodLiteral.init(inst, def);\n ZodType.init(inst, def);\n inst.values = new Set(def.values);\n Object.defineProperty(inst, \"value\", {\n get() {\n if (def.values.length > 1) {\n throw new Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");\n }\n return def.values[0];\n },\n });\n});\nexport function literal(value, params) {\n return new ZodLiteral({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\nexport const ZodFile = /*@__PURE__*/ core.$constructor(\"ZodFile\", (inst, def) => {\n core.$ZodFile.init(inst, def);\n ZodType.init(inst, def);\n inst.min = (size, params) => inst.check(core._minSize(size, params));\n inst.max = (size, params) => inst.check(core._maxSize(size, params));\n inst.mime = (types, params) => inst.check(core._mime(Array.isArray(types) ? types : [types], params));\n});\nexport function file(params) {\n return core._file(ZodFile, params);\n}\nexport const ZodTransform = /*@__PURE__*/ core.$constructor(\"ZodTransform\", (inst, def) => {\n core.$ZodTransform.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(util.issue(issue, payload.value, def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n _issue.input ?? (_issue.input = payload.value);\n _issue.inst ?? (_issue.inst = inst);\n _issue.continue ?? (_issue.continue = true);\n payload.issues.push(util.issue(_issue));\n }\n };\n const output = def.transform(payload.value, payload);\n if (output instanceof Promise) {\n return output.then((output) => {\n payload.value = output;\n return payload;\n });\n }\n payload.value = output;\n return payload;\n };\n});\nexport function transform(fn) {\n return new ZodTransform({\n type: \"transform\",\n transform: fn,\n });\n}\nexport const ZodOptional = /*@__PURE__*/ core.$constructor(\"ZodOptional\", (inst, def) => {\n core.$ZodOptional.init(inst, def);\n ZodType.init(inst, def);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function optional(innerType) {\n return new ZodOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nexport const ZodNullable = /*@__PURE__*/ core.$constructor(\"ZodNullable\", (inst, def) => {\n core.$ZodNullable.init(inst, def);\n ZodType.init(inst, def);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nullable(innerType) {\n return new ZodNullable({\n type: \"nullable\",\n innerType: innerType,\n });\n}\n// nullish\nexport function nullish(innerType) {\n return optional(nullable(innerType));\n}\nexport const ZodDefault = /*@__PURE__*/ core.$constructor(\"ZodDefault\", (inst, def) => {\n core.$ZodDefault.init(inst, def);\n ZodType.init(inst, def);\n inst.unwrap = () => inst._zod.def.innerType;\n inst.removeDefault = inst.unwrap;\n});\nexport function _default(innerType, defaultValue) {\n return new ZodDefault({\n type: \"default\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : defaultValue;\n },\n });\n}\nexport const ZodPrefault = /*@__PURE__*/ core.$constructor(\"ZodPrefault\", (inst, def) => {\n core.$ZodPrefault.init(inst, def);\n ZodType.init(inst, def);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function prefault(innerType, defaultValue) {\n return new ZodPrefault({\n type: \"prefault\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : defaultValue;\n },\n });\n}\nexport const ZodNonOptional = /*@__PURE__*/ core.$constructor(\"ZodNonOptional\", (inst, def) => {\n core.$ZodNonOptional.init(inst, def);\n ZodType.init(inst, def);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nonoptional(innerType, params) {\n return new ZodNonOptional({\n type: \"nonoptional\",\n innerType: innerType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodSuccess = /*@__PURE__*/ core.$constructor(\"ZodSuccess\", (inst, def) => {\n core.$ZodSuccess.init(inst, def);\n ZodType.init(inst, def);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function success(innerType) {\n return new ZodSuccess({\n type: \"success\",\n innerType: innerType,\n });\n}\nexport const ZodCatch = /*@__PURE__*/ core.$constructor(\"ZodCatch\", (inst, def) => {\n core.$ZodCatch.init(inst, def);\n ZodType.init(inst, def);\n inst.unwrap = () => inst._zod.def.innerType;\n inst.removeCatch = inst.unwrap;\n});\nfunction _catch(innerType, catchValue) {\n return new ZodCatch({\n type: \"catch\",\n innerType: innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\nexport { _catch as catch };\nexport const ZodNaN = /*@__PURE__*/ core.$constructor(\"ZodNaN\", (inst, def) => {\n core.$ZodNaN.init(inst, def);\n ZodType.init(inst, def);\n});\nexport function nan(params) {\n return core._nan(ZodNaN, params);\n}\nexport const ZodPipe = /*@__PURE__*/ core.$constructor(\"ZodPipe\", (inst, def) => {\n core.$ZodPipe.init(inst, def);\n ZodType.init(inst, def);\n inst.in = def.in;\n inst.out = def.out;\n});\nexport function pipe(in_, out) {\n return new ZodPipe({\n type: \"pipe\",\n in: in_,\n out: out,\n // ...util.normalizeParams(params),\n });\n}\nexport const ZodReadonly = /*@__PURE__*/ core.$constructor(\"ZodReadonly\", (inst, def) => {\n core.$ZodReadonly.init(inst, def);\n ZodType.init(inst, def);\n});\nexport function readonly(innerType) {\n return new ZodReadonly({\n type: \"readonly\",\n innerType: innerType,\n });\n}\nexport const ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodTemplateLiteral\", (inst, def) => {\n core.$ZodTemplateLiteral.init(inst, def);\n ZodType.init(inst, def);\n});\nexport function templateLiteral(parts, params) {\n return new ZodTemplateLiteral({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodLazy = /*@__PURE__*/ core.$constructor(\"ZodLazy\", (inst, def) => {\n core.$ZodLazy.init(inst, def);\n ZodType.init(inst, def);\n inst.unwrap = () => inst._zod.def.getter();\n});\nexport function lazy(getter) {\n return new ZodLazy({\n type: \"lazy\",\n getter: getter,\n });\n}\nexport const ZodPromise = /*@__PURE__*/ core.$constructor(\"ZodPromise\", (inst, def) => {\n core.$ZodPromise.init(inst, def);\n ZodType.init(inst, def);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function promise(innerType) {\n return new ZodPromise({\n type: \"promise\",\n innerType: innerType,\n });\n}\nexport const ZodCustom = /*@__PURE__*/ core.$constructor(\"ZodCustom\", (inst, def) => {\n core.$ZodCustom.init(inst, def);\n ZodType.init(inst, def);\n});\n// custom checks\nexport function check(fn) {\n const ch = new core.$ZodCheck({\n check: \"custom\",\n // ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\nexport function custom(fn, _params) {\n return core._custom(ZodCustom, fn ?? (() => true), _params);\n}\nexport function refine(fn, _params = {}) {\n return core._refine(ZodCustom, fn, _params);\n}\n// superRefine\nexport function superRefine(fn) {\n const ch = check((payload) => {\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n _issue.input ?? (_issue.input = payload.value);\n _issue.inst ?? (_issue.inst = ch);\n _issue.continue ?? (_issue.continue = !ch._zod.def.abort);\n payload.issues.push(util.issue(_issue));\n }\n };\n return fn(payload.value, payload);\n });\n return ch;\n}\nfunction _instanceof(cls, params = {\n error: `Input not instance of ${cls.name}`,\n}) {\n const inst = new ZodCustom({\n type: \"custom\",\n check: \"custom\",\n fn: (data) => data instanceof cls,\n abort: true,\n ...util.normalizeParams(params),\n });\n inst._zod.bag.Class = cls;\n return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n Pipe: ZodPipe,\n Boolean: ZodBoolean,\n String: ZodString,\n Transform: ZodTransform,\n}, ...args);\nexport function json(params) {\n const jsonSchema = lazy(() => {\n return union([string(params), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n });\n return jsonSchema;\n}\n// preprocess\n// /** @deprecated Use `z.pipe()` and `z.transform()` instead. */\nexport function preprocess(fn, schema) {\n return pipe(transform(fn), schema);\n}\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(str, 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 EncoderConfig,\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) : EncoderConfig {\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 : EncoderConfig\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 : EncoderConfig) : 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) : EncoderConfig {\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 : EncoderConfig) : 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) : EncoderConfig {\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 : EncoderConfig) : 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) : EncoderConfig {\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","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_TYPE = {\n P2PKH : 'p2pkh',\n P2SH : 'p2sh',\n P2WPKH : 'p2wpkh',\n P2WSH : 'p2wsh',\n P2TR : 'p2tr',\n OPRETURN : 'opreturn',\n} as const\n\nexport const SPEND_SCRIPT_TYPE = {\n P2PKH : 'p2pkh',\n P2SH : 'p2sh',\n P2WPKH : 'p2wpkh',\n P2WSH : 'p2wsh',\n P2TR : 'p2tr',\n P2TS : 'p2ts',\n} as const\n\nexport const LOCK_SCRIPT_REGEX : Record<string, RegExp> = {\n [LOCK_SCRIPT_TYPE.P2PKH] : /^76a914[0-9a-f]{40}88ac$/i,\n [LOCK_SCRIPT_TYPE.P2SH] : /^a914[0-9a-f]{40}87$/i,\n [LOCK_SCRIPT_TYPE.P2WPKH] : /^0014[0-9a-f]{40}$/i,\n [LOCK_SCRIPT_TYPE.P2WSH] : /^0020[0-9a-f]{64}$/i,\n [LOCK_SCRIPT_TYPE.P2TR] : /^5120[0-9a-f]{64}$/i,\n [LOCK_SCRIPT_TYPE.OPRETURN] : /^6a[0-9a-f]{2,}$/i,\n} as const\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 { Buff, Bytes } from '@vbyte/buff'\nimport { LOCK_SCRIPT_REGEX } from '@/const.js'\n\nimport type {\n LockScriptInfo,\n LockScriptType,\n WitnessVersion\n} from '@/types/index.js'\n\nexport function is_return_script (script : Bytes) : boolean {\n const bytes = Buff.bytes(script)\n return bytes.at(0) === 0x6a\n}\n\nexport function get_lock_script_info (script : Bytes) : LockScriptInfo {\n return {\n type : get_lock_script_type(script),\n version : get_lock_script_version(script)\n }\n}\n\nexport function get_lock_script_type (script : Bytes) : LockScriptType | null {\n // Get the hex string of the script.\n const hex = Buff.bytes(script).hex\n // Iterate over the lock script regexes.\n for (const [ type, regex ] of Object.entries(LOCK_SCRIPT_REGEX)) {\n // If the script matches the regex, return the type.\n if (regex.test(hex)) return type as LockScriptType\n }\n // If the script does not match any regex, return null.\n return null\n}\n\nexport function get_lock_script_version (script : Bytes) : WitnessVersion | null {\n // Get the version of the script.\n const version = Buff.bytes(script)\n // Return the version of the script.\n switch (version.at(0)) {\n case 0x00 : return 0\n case 0x51 : return 1\n default : return null\n }\n}\n\nexport function is_p2pkh_script (script : Bytes) : boolean {\n const hex = Buff.bytes(script).hex\n return LOCK_SCRIPT_REGEX['p2pkh'].test(hex)\n}\n\nexport function is_p2sh_script (script : Bytes) : boolean {\n const hex = Buff.bytes(script).hex\n return LOCK_SCRIPT_REGEX['p2sh'].test(hex)\n}\n\nexport function is_p2wpkh_script (script : Bytes) : boolean {\n const hex = Buff.bytes(script).hex\n return LOCK_SCRIPT_REGEX['p2wpkh'].test(hex)\n}\n\nexport function is_p2wsh_script (script : Bytes) : boolean {\n const hex = Buff.bytes(script).hex\n return LOCK_SCRIPT_REGEX['p2wsh'].test(hex)\n}\n\nexport function is_p2tr_script (script : Bytes) : boolean {\n const hex = Buff.bytes(script).hex\n return LOCK_SCRIPT_REGEX['p2tr'].test(hex)\n}\n\nexport function is_opreturn_script (script : Bytes) : boolean {\n const hex = Buff.bytes(script).hex\n return LOCK_SCRIPT_REGEX['opreturn'].test(hex)\n}\n","import type { AddressType, ScriptInfo } 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) : ScriptInfo {\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 'p2wpkh':\n return get_p2w_pkh_script(script_key)\n case 'p2wsh':\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 hex : '76a914' + script_key + '88ac',\n asm : [ 'OP_DUP', 'OP_HASH160', script_key, 'OP_EQUALVERIFY', 'OP_CHECKSIG' ]\n }\n}\n\nfunction get_p2sh_script (script_key : string) {\n return {\n hex : 'a914' + script_key + '87',\n asm : [ 'OP_HASH160', script_key, 'OP_EQUAL' ]\n }\n}\n\nfunction get_p2w_pkh_script (script_key : string) {\n return {\n hex : '0014' + script_key,\n asm : [ 'OP_0', script_key ]\n }\n}\n\nfunction get_p2w_sh_script (script_key : string) {\n return {\n hex : '0020' + script_key,\n asm : [ 'OP_0', script_key ]\n }\n}\n\nfunction get_p2tr_script (script_key : string) {\n return {\n hex : '5120' + script_key,\n asm : [ 'OP_1', script_key ]\n }\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 AddressInfo,\n ChainNetwork,\n LockScriptType,\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', 'p2wpkh', 'main', 20, 'bech32', 0 ],\n [ 'tb', 'p2wpkh', 'testnet', 20, 'bech32', 0 ],\n [ 'bcrt', 'p2wpkh', 'regtest', 20, 'bech32', 0 ],\n [ 'bc', 'p2wsh', 'main', 32, 'bech32', 0 ],\n [ 'tb', 'p2wsh', 'testnet', 32, 'bech32', 0 ],\n [ 'bcrt', 'p2wsh', '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 : LockScriptType\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 * 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 get_address_info (address : string) : AddressInfo {\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 data = Buff.uint(dec.data).hex\n const script = get_address_script(data, type)\n // Return the address configuration and data.\n return { data, script,type, prefix, network, size, format, version }\n }\n // Otherwise, throw an error\n throw new Error('address configuration is invalid')\n}\n","import { Buff, Bytes } from '@vbyte/buff'\nimport { Assert } from '@vbyte/micro-lib'\nimport { hash160 } from '@vbyte/micro-lib/hash'\nimport { encode_address } from './encode.js'\nimport { is_p2pkh_script } from '@/lib/script/lock.js'\nimport { LOCK_SCRIPT_TYPE } from '@/const.js'\n\nimport {\n get_address_config,\n get_address_info\n} from './util.js'\n\nimport type {\n AddressInfo,\n ChainNetwork\n} from '@/types/index.js'\n\nconst ADDRESS_TYPE = LOCK_SCRIPT_TYPE.P2PKH\n\nexport namespace P2PKH {\n export const create_address = create_p2pkh_address\n export const create_script = create_p2pkh_script\n export const encode_address = encode_p2pkh_address\n export const encode_script = encode_p2pkh_script\n export const decode_address = decode_p2pkh_address\n export const decode_script = decode_p2pkh_script\n}\n\nfunction create_p2pkh_address (\n pubkey : Bytes,\n network : ChainNetwork = 'main',\n) : string {\n // Create the p2pkh script.\n const script = create_p2pkh_script(pubkey)\n // Encode the script as an address.\n return encode_p2pkh_address(script, network)\n}\n\nfunction create_p2pkh_script (pubkey : Bytes) : Buff {\n // Convert the public key into bytes.\n const bytes = Buff.bytes(pubkey)\n // Assert the public key is 33 bytes.\n Assert.size(bytes, 33, 'invalid pubkey size')\n // Convert the bytes into a hash.\n const hash = hash160(bytes)\n // Return the script.\n return encode_p2pkh_script(hash)\n}\n\nfunction encode_p2pkh_script (pk_hash : Bytes) : Buff {\n return Buff.join([ '76a914', pk_hash, '88ac' ])\n}\n\nfunction encode_p2pkh_address (\n script : Bytes,\n network : ChainNetwork = 'main',\n) : string {\n // Get the public key hash from the script.\n const pk_hash = decode_p2pkh_script(script)\n // Get the address configuration.\n const config = get_address_config(network, ADDRESS_TYPE)\n // Assert the configuration exists.\n Assert.exists(config, `unrecognized address config: ${ADDRESS_TYPE} on ${network}` )\n // Assert the payload size is correct.\n Assert.size(pk_hash, config.size, `invalid payload size: ${pk_hash.length} !== ${config.size}` )\n // Encode the address.\n return encode_address({\n data : pk_hash,\n format : 'base58',\n version : config.version\n })\n}\n\nfunction decode_p2pkh_address (\n address : string\n) : AddressInfo {\n // Parse the address.\n const parsed = get_address_info(address)\n // Assert the address type is correct.\n Assert.ok(parsed.type === 'p2pkh', `address type mismatch: ${parsed.type} !== ${ADDRESS_TYPE}`)\n // Return the parsed address.\n return parsed\n}\n\nfunction decode_p2pkh_script (\n script : Bytes,\n) : Buff {\n // Convert the script into bytes.\n const bytes = Buff.bytes(script)\n // Assert the script is a p2pkh script.\n Assert.ok(is_p2pkh_script(script), `invalid p2pkh script`)\n // Return the public key hash from the script.\n return bytes.slice(3, 23)\n}\n","import { Buff, Bytes } from '@vbyte/buff'\nimport { Assert } from '@vbyte/micro-lib'\nimport { hash160 } from '@vbyte/micro-lib/hash'\nimport { encode_address } from './encode.js'\nimport { is_p2sh_script } from '@/lib/script/lock.js'\nimport { LOCK_SCRIPT_TYPE } from '@/const.js'\n\nimport {\n get_address_config,\n get_address_info\n} from './util.js'\n\nimport type {\n AddressInfo,\n ChainNetwork\n} from '@/types/index.js'\n\nconst ADDRESS_TYPE = LOCK_SCRIPT_TYPE.P2SH\n\nexport namespace P2SH {\n export const create_address = create_p2sh_address\n export const create_script = create_p2sh_script\n export const encode_address = encode_p2sh_address\n export const encode_script = encode_p2sh_script\n export const decode_address = decode_p2sh_address\n export const decode_script = decode_p2sh_script\n}\n\nfunction create_p2sh_address (\n script : Bytes,\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 // Create the p2sh script.\n const p2sh_script = encode_p2sh_script(hash)\n // Encode the address.\n return encode_p2sh_address(p2sh_script, network)\n}\n\nfunction create_p2sh_script (script : Bytes) : Buff {\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 // Return the script.\n return encode_p2sh_script(hash)\n}\n\nfunction encode_p2sh_script (script_hash : Bytes) : Buff {\n return Buff.join([ 'a914', script_hash, '87' ])\n}\n\nfunction encode_p2sh_address (\n script_pk : Bytes,\n network : ChainNetwork = 'main',\n) : string {\n // Get the script hash from the script.\n const script_hash = decode_p2sh_script(script_pk)\n // Get the address configuration.\n const config = get_address_config(network, ADDRESS_TYPE)\n // Assert the configuration exists.\n Assert.exists(config, `unrecognized address config: ${ADDRESS_TYPE} on ${network}` )\n // Assert the payload size is correct.\n Assert.size(script_hash, config.size, `invalid payload size: ${script_hash.length} !== ${config.size}` )\n // Encode the address.\n return encode_address({\n data : script_hash,\n format : 'base58',\n version : config.version\n })\n}\n\nfunction decode_p2sh_address (\n address : string\n) : AddressInfo {\n // Parse the address.\n const parsed = get_address_info(address)\n // Assert the address type is correct.\n Assert.ok(parsed.type === 'p2sh', `address type mismatch: ${parsed.type} !== ${ADDRESS_TYPE}`)\n // Return the parsed address.\n return parsed\n}\n\nfunction decode_p2sh_script (\n script : Bytes,\n) : Buff {\n // Assert the script is a p2sh script.\n Assert.ok(is_p2sh_script(script), `invalid p2sh script`)\n // Convert the script into bytes.\n const bytes = Buff.bytes(script)\n // Return the script hash from the script.\n return bytes.slice(2, 22)\n}\n","import { Buff, Bytes } from '@vbyte/buff'\nimport { Assert } from '@vbyte/micro-lib'\nimport { hash160 } from '@vbyte/micro-lib/hash'\nimport { encode_address } from './encode.js'\nimport { is_p2wpkh_script } from '@/lib/script/lock.js'\nimport { LOCK_SCRIPT_TYPE } from '@/const.js'\n\nimport {\n get_address_config,\n get_address_info\n} from './util.js'\n\nimport type {\n AddressInfo,\n ChainNetwork\n} from '@/types/index.js'\n\nconst ADDRESS_TYPE = LOCK_SCRIPT_TYPE.P2WPKH\n\nexport namespace P2WPKH {\n export const create_address = create_p2wpkh_address\n export const create_script = create_p2wpkh_script\n export const encode_address = encode_p2wpkh_address\n export const encode_script = encode_p2wpkh_script\n export const decode_address = decode_p2wpkh_address\n export const decode_script = decode_p2wpkh_script\n}\n\nfunction create_p2wpkh_address (\n pubkey : Bytes,\n network : ChainNetwork = 'main',\n) : string {\n // Create the p2wpkh script.\n const script = create_p2wpkh_script(pubkey)\n // Encode the script as an address.\n return encode_p2wpkh_address(script, network)\n}\n\nfunction create_p2wpkh_script (pubkey : Bytes) : Buff {\n // Convert the public key into bytes.\n const bytes = Buff.bytes(pubkey)\n // Assert the public key is 33 bytes.\n Assert.size(bytes, 33, 'invalid pubkey size')\n // Convert the bytes into a hash.\n const hash = hash160(bytes)\n // Return the script.\n return encode_p2wpkh_script(hash)\n}\n\nfunction encode_p2wpkh_script (pk_hash : Bytes) : Buff {\n return Buff.join([ '0014', pk_hash ])\n}\n\nfunction encode_p2wpkh_address (\n script_pk : Bytes,\n network : ChainNetwork = 'main',\n) : string {\n // Get the public key hash from the script.\n const pk_hash = decode_p2wpkh_script(script_pk)\n // Get the address configuration.\n const config = get_address_config(network, ADDRESS_TYPE)\n // Assert the configuration exists.\n Assert.exists(config, `unrecognized address config: ${ADDRESS_TYPE} on ${network}` )\n // Assert the payload size is correct.\n Assert.size(pk_hash, config.size, `invalid payload size: ${pk_hash.length} !== ${config.size}` )\n // Encode the address.\n return encode_address({\n data : pk_hash,\n format : 'bech32',\n prefix : config.prefix\n })\n}\n\nfunction decode_p2wpkh_address (\n address : string\n) : AddressInfo {\n // Parse the address.\n const parsed = get_address_info(address)\n // Assert the address type is correct.\n Assert.ok(parsed.type === 'p2wpkh', `address type mismatch: ${parsed.type} !== ${ADDRESS_TYPE}`)\n // Return the parsed address.\n return parsed\n}\n\nfunction decode_p2wpkh_script (\n script : Bytes,\n) : Buff {\n // Assert the script is a p2wpkh script.\n Assert.ok(is_p2wpkh_script(script), `invalid p2wpkh script`)\n // Convert the script into bytes.\n const bytes = Buff.bytes(script)\n // Return the public key hash from the script.\n return bytes.slice(2, 22)\n}\n","import { Buff, Bytes } from '@vbyte/buff'\nimport { Assert } from '@vbyte/micro-lib'\nimport { sha256 } from '@vbyte/micro-lib/hash'\nimport { encode_address } from './encode.js'\nimport { is_p2wsh_script } from '@/lib/script/lock.js'\nimport { LOCK_SCRIPT_TYPE } from '@/const.js'\n\nimport {\n get_address_config,\n get_address_info\n} from './util.js'\n\nimport type {\n AddressInfo,\n ChainNetwork\n} from '@/types/index.js'\n\nconst ADDRESS_TYPE = LOCK_SCRIPT_TYPE.P2WSH\n\nexport namespace P2WSH {\n export const create_address = create_p2wsh_address\n export const create_script = create_p2wsh_script\n export const encode_address = encode_p2wsh_address\n export const encode_script = encode_p2wsh_script\n export const decode_address = decode_p2wsh_address\n export const decode_script = decode_p2wsh_script\n}\n\nfunction create_p2wsh_address (\n script : Bytes,\n network : ChainNetwork = 'main',\n) : string {\n // Create the p2wsh script.\n const wsh_script = create_p2wsh_script(script)\n // Encode the script as an address.\n return encode_p2wsh_address(wsh_script, network)\n}\n\nfunction create_p2wsh_script (script : Bytes) : Buff {\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 // Return the script.\n return encode_p2wsh_script(hash)\n}\n\nfunction encode_p2wsh_script (script_hash : Bytes) : Buff {\n return Buff.join([ '0020', script_hash ])\n}\n\nfunction encode_p2wsh_address (\n script_pk : Bytes,\n network : ChainNetwork = 'main',\n) : string {\n // Get the script hash from the script.\n const script_hash = decode_p2wsh_script(script_pk)\n // Get the address configuration.\n const config = get_address_config(network, ADDRESS_TYPE)\n // Assert the configuration exists.\n Assert.exists(config, `unrecognized address config: ${ADDRESS_TYPE} on ${network}` )\n // Assert the payload size is correct.\n Assert.size(script_hash, config.size, `invalid payload size: ${script_hash.length} !== ${config.size}` )\n // Encode the address.\n return encode_address({\n data : script_hash,\n format : 'bech32',\n prefix : config.prefix\n })\n}\n\nfunction decode_p2wsh_address (\n address : string\n) : AddressInfo {\n // Parse the address.\n const parsed = get_address_info(address)\n // Assert the address type is correct.\n Assert.ok(parsed.type === 'p2wsh', `address type mismatch: ${parsed.type} !== ${ADDRESS_TYPE}`)\n // Return the parsed address.\n return parsed\n}\n\nfunction decode_p2wsh_script (\n script : Bytes,\n) : Buff {\n // Assert the script is a p2wsh script.\n Assert.ok(is_p2wsh_script(script), `invalid p2wsh script`)\n // Convert the script into bytes.\n const bytes = Buff.bytes(script)\n // Return the script hash from the script.\n return bytes.slice(2, 34)\n}\n","import { Buff, Bytes } from '@vbyte/buff'\nimport { Assert } from '@vbyte/micro-lib'\nimport { encode_address } from './encode.js'\nimport { is_p2tr_script } from '@/lib/script/lock.js'\nimport { LOCK_SCRIPT_TYPE } from '@/const.js'\n\nimport {\n get_address_config,\n get_address_info\n} from './util.js'\n\nimport type {\n AddressInfo,\n ChainNetwork\n} from '@/types/index.js'\n\nconst ADDRESS_TYPE = LOCK_SCRIPT_TYPE.P2TR\n\nexport namespace P2TR {\n export const create_address = create_p2tr_address\n export const create_script = create_p2tr_script\n export const encode_address = encode_p2tr_address\n export const encode_script = encode_p2tr_script\n export const decode_address = decode_p2tr_address\n export const decode_script = decode_p2tr_script\n}\n\nfunction create_p2tr_address (\n pubkey : Bytes,\n network : ChainNetwork = 'main',\n) : string {\n // Create the p2tr script.\n const script = create_p2tr_script(pubkey)\n // Encode the script as an address.\n return encode_p2tr_address(script, network)\n}\n\nfunction create_p2tr_script (pubkey : Bytes) : Buff {\n // Convert the public key into bytes.\n const bytes = Buff.bytes(pubkey)\n // Assert the public key is 32 bytes.\n Assert.size(bytes, 32, 'invalid pubkey size')\n // Return the script.\n return encode_p2tr_script(bytes)\n}\n\nfunction encode_p2tr_script (pubkey : Bytes) : Buff {\n return Buff.join([ '5120', pubkey ])\n}\n\nfunction encode_p2tr_address (\n script_pk : Bytes,\n network : ChainNetwork = 'main'\n) : string {\n // Get the public key from the script.\n const pubkey = decode_p2tr_script(script_pk)\n // Get the address configuration.\n const config = get_address_config(network, ADDRESS_TYPE)\n // Assert the configuration exists.\n Assert.exists(config, `unrecognized address config: ${ADDRESS_TYPE} on ${network}` )\n // Assert the payload size is correct.\n Assert.size(pubkey, config.size, `invalid payload size: ${pubkey.length} !== ${config.size}` )\n // Encode the address.\n return encode_address({\n data : pubkey,\n format : 'bech32m',\n prefix : config.prefix\n })\n}\n\nfunction decode_p2tr_address (\n address : string\n) : AddressInfo {\n // Parse the address.\n const parsed = get_address_info(address)\n // Assert the address type is correct.\n Assert.ok(parsed.type === 'p2tr', `address type mismatch: ${parsed.type} !== ${ADDRESS_TYPE}`)\n // Return the parsed address.\n return parsed\n}\n\nfunction decode_p2tr_script (\n script : Bytes,\n) : Buff {\n // Assert the script is a p2tr script.\n Assert.ok(is_p2tr_script(script), `invalid p2tr script`)\n // Convert the script into bytes.\n const bytes = Buff.bytes(script)\n // Return the public key from the script.\n return bytes.slice(2, 34)\n}\n","import { Buff, Bytes } from '@vbyte/buff'\nimport { get_lock_script_type } from '@/lib/script/lock.js'\nimport { get_address_info } from './util.js'\nimport { LOCK_SCRIPT_TYPE } from '@/const.js'\n\nimport { P2PKH } from './p2pkh.js'\nimport { P2SH } from './p2sh.js'\nimport { P2TR } from './p2tr.js'\nimport { P2WPKH } from './p2wpkh.js'\nimport { P2WSH } from './p2wsh.js'\n\nimport type { AddressInfo, ChainNetwork } from '@/types/index.js'\n\n/**\n * Get the address for a given locking script.\n * \n * @param script - The locking script.\n * @param network - The network to use.\n * @returns The address.\n */\nexport function get_address (\n script : Bytes,\n network : ChainNetwork = 'main'\n) : string {\n // Convert the script into bytes.\n const bytes = Buff.bytes(script)\n // Get the address configuration.\n const type = get_lock_script_type(bytes)\n // If the script type is not recognized, throw an error.\n if (type === null) throw new Error('unknown locking script: ' + bytes.hex)\n // Create the address based on the script type.\n switch (type) {\n case LOCK_SCRIPT_TYPE.P2PKH:\n return P2PKH.encode_address(script, network)\n case LOCK_SCRIPT_TYPE.P2SH:\n return P2SH.encode_address(script, network)\n case LOCK_SCRIPT_TYPE.P2WPKH:\n return P2WPKH.encode_address(script, network)\n case LOCK_SCRIPT_TYPE.P2WSH:\n return P2WSH.encode_address(script, network)\n case LOCK_SCRIPT_TYPE.P2TR:\n return P2TR.encode_address(script, network)\n default:\n throw new Error('unknown script type: ' + type)\n }\n}\n\nexport function parse_address (address : string) : AddressInfo {\n return get_address_info(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 LocktimeField {\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 RefPointer {\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) : Buff {\n if (words.length === 0) return Buff.num(0, 1)\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'))\n : buffer\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 { Buff, Bytes, Stream } from '@vbyte/buff'\n\nimport {\n get_op_code,\n get_op_type,\n is_valid_op\n} from './words.js'\n\nimport type { ScriptInfo } from '@/types/script.js'\n\nexport function parse_script (script: Bytes): ScriptInfo {\n const bytes = Buff.bytes(script)\n return {\n asm: decode_script(bytes),\n hex: bytes.hex\n }\n}\n\n/**\n * Decode a bitcoin script into asm instructions.\n */\nexport function decode_script (\n script : Bytes\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, Bytes, 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 InscriptionUtil {\n export type Type = InscriptionData\n export const encode = encode_inscription\n export const decode = decode_inscription\n}\n\nexport function decode_inscription (\n script : Bytes\n) : InscriptionData[] {\n const envelopes = parse_envelopes(script)\n return envelopes.map(parse_record)\n}\n\nexport function encode_inscription (data : InscriptionData[]) : Buff {\n return Buff.join(data.map(create_envelope))\n}\n\nfunction create_envelope (data : InscriptionData) : Buff {\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 : Bytes\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 : Bytes[]) {\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 = decode_bytes(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 decode_bytes (bytes : Bytes) : string {\n return Buff.bytes(bytes).hex\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 identifier : Bytes\n) : string {\n const bytes = Buff.bytes(identifier)\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 bytes : Bytes\n) : number {\n return Buff.bytes(bytes).reverse().num\n}\n\nfunction encode_label (\n label : string\n) : string {\n return Buff.str(label).hex\n}\n\nfunction decode_label (\n label : Bytes\n) : string {\n return Buff.bytes(label).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 chunks : Bytes[],\n format : 'hex' | 'utf8' = 'hex'\n) : string {\n const data = Buff.join(chunks)\n return (format === '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 (label: Bytes): string {\n // Convert hex to BigInt, with byte order reversed\n let big = Buff.bytes(label).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 SequenceField {\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 { encode_script } from './encode.js'\n\nimport {\n decode_script,\n is_valid_script,\n parse_script\n} from './decode.js'\n\nexport * from './decode.js'\nexport * from './encode.js'\nexport * from './lock.js'\nexport * from './util.js'\nexport * from './words.js'\n\nexport namespace ScriptUtil {\n export const parse = parse_script\n export const decode = decode_script\n export const encode = encode_script\n export const is_valid = is_valid_script\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","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 { 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 } 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 { parse_tx } from './parse.js'\nimport { assert_tx_template } from './validate.js'\n\nimport { DEFAULT } from '@/const.js'\n\nimport type {\n TxData,\n TxOutput,\n TxOutputTemplate,\n TxValue\n} from '@/types/index.js'\n\nexport function get_txid (txdata : string | Uint8Array | TxData) : string {\n // If the transaction data is an object,\n if (typeof txdata === 'object') {\n // Assert the structure of the transaction data is valid.\n assert_tx_template(txdata)\n // Encode the transaction data.\n txdata = encode_tx(txdata, false)\n }\n // Return the txid of the transaction data.\n return hash256(txdata).reverse().hex\n}\n\nexport function get_txhash (txdata : string | Uint8Array | TxData) : string {\n // If the transaction data is an object,\n if (typeof txdata === 'object') {\n // Assert the structure of the transaction data is valid.\n assert_tx_template(txdata)\n // Encode the transaction data.\n txdata = encode_tx(txdata, true)\n }\n // Return the txhash of the transaction data.\n return hash256(txdata).reverse().hex\n}\n\nexport function get_tx_value (txdata : string | Uint8Array | TxData) : TxValue {\n // Parse the transaction data.\n const tx = parse_tx(txdata)\n // Assert the structure of the transaction data is valid.\n assert_tx_template(tx)\n // Calculate the value of the transaction.\n const vin = tx.vin.reduce((acc, txin) => acc + (txin.prevout?.value ?? 0n), 0n)\n const vout = tx.vout.reduce((acc, txout) => acc + txout.value, 0n)\n const fees = (vin > vout) ? (vin - vout) : 0n\n // Return the value of the transaction.\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 { 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.sign_ecdsa(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.sign_bip340(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 SpendScriptType,\n WitnessVersion\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 : SpendScriptType | null\n) {\n let script : Uint8Array | undefined\n switch (type) {\n case 'p2ts':\n script = elems.at(-1)\n case 'p2wsh':\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) : SpendScriptType | null{\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 'p2ts'\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 'p2wpkh'\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'\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 'p2wsh'\n // If the witness elements don't match any known profile:\n } else {\n return null\n }\n}\n\nfunction parse_witness_version (\n type : SpendScriptType | null\n) : WitnessVersion | null {\n if (type === null) return null\n if (type.startsWith('p2w')) return 0\n if (type.startsWith('p2t')) return 1\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","ahash","h","create","outputLen","blockLen","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","bytesLength","Chi","c","Maj","HashMD","padOffset","isLE","pos","view","take","min","process","roundClean","digestInto","out","aoutput","setBigUint64","_32n","_u32_max","wh","wl","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","iHash","oHash","buf","getPrototypeOf","hmac","_1n","abool","title","numberToHexUnpadded","hexToNumber","bytesToNumberBE","bytesToHex_","bytesToNumberLE","abytes_","numberToBytesBE","hexToBytes_","numberToBytesLE","ensureBytes","expectedLength","isBytes_","isPosBig","inRange","max","aInRange","bitLen","bitMask","_validateObject","object","fields","optFields","checkField","fieldName","expectedType","isOpt","val","current","entries","forEach","k","memoized","fn","WeakMap","arg","computed","_2n","_3n","_4n","_5n","_7n","_8n","_9n","_16n","mod","result","pow2","x","power","modulo","invert","u","r","m","assertIsSquare","Fp","root","eql","sqr","sqrt3mod4","p1div4","ORDER","pow","sqrt5mod8","p5div8","mul","nv","sub","ONE","tonelliShanks","P","Q","S","Z","_Fp","Field","FpLegendre","cc","Q1div2","is0","M","t","R","ZERO","t_tmp","exponent","FpSqrt","Fp_","tn","c1","neg","c2","c3","c4","tv1","tv2","tv3","tv4","e1","e2","cmov","e3","sqrt9mod16","FIELD_FIELDS","FpInvertBatch","nums","passZero","inverted","multipliedAcc","acc","invertedAcc","inv","reduceRight","p1mod2","powered","yes","zero","no","bitLenOrOpts","opts","_nbitLength","_sqrt","allowedLengths","modOnDecode","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","skipValidation","padded","scalar","invertBatch","lst","getFieldBytesLength","fieldOrder","bitLength","getMinHashLength","mapHashToField","fieldLen","minLen","reduced","negateCt","condition","item","negate","normalizeZ","points","invertedZs","fromAffine","toAffine","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","wNAF","Point","BASE","Fn","_unsafeLadder","elm","double","precomputeWindow","point","base","push","precomputes","wo","wNAFUnsafe","getPrecomputes","transform","comp","cached","unsafe","prev","createCache","delete","hasCache","pippenger","fieldN","scalars","validateMSMPoints","field","s","validateMSMScalars","plength","slength","buckets","resI","sumI","createField","order","validateField","divNearest","den","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","_normFnElement","expected","error","weierstrassN","CURVE","curveOpts","params","_createCurveFields","cofactor","CURVE_ORDER","allowInfinityPoint","clearCofactor","isTorsionFree","endo","wrapPrivateKey","beta","basises","assertCompressionIsSupported","_c","isCompressed","y","bx","pprefix","L","LC","LU","head","tail","isValidXY","y2","weierstrassEquation","sqrtError","x2","x3","_legacyHelperEquat","left","right","Gx","Gy","_4a3","_27b2","acoord","banZero","aprjpoint","other","splitEndoScalarN","basis","a1","b1","a2","b2","k1","k2","k1neg","k2neg","MAX_NUM","_splitEndoScalar","toAffineMemo","iz","X","Y","zz","assertValidMemo","finishEndo","endoBeta","k1p","k2p","px","py","pz","assertValidity","fromPrivateKey","privateKey","multiply","msm","_setWindowSize","precompute","isLazy","wnaf","hasEvenY","X1","Y1","Z1","X2","Y2","Z2","U1","U2","b3","X3","Y3","Z3","t0","t1","t2","t3","t4","t5","subtract","fake","k1f","k2f","multiplyUnsafe","sc","p1","p2","mulEndoUnsafe","multiplyAndAddUnsafe","invertedZ","isSmallOrder","toRawBytes","ecdsa","ecdsaOpts","bits2int","bits2int_modN","randomBytes_","hmac_","msgs","fnBits","seedLen","secret","public","publicUncompressed","signature","seed","isBiggerThanHalfOrder","aValidRS","Signature","recovery","format","addRecoveryBit","recoverPublicKey","msgHash","FIELD_ORDER","rec","radj","ir","u1","u2","hasHighS","normalizeS","fromCompact","fromDER","toDERRawBytes","toDERHex","toCompactRawBytes","toCompactHex","isValidSecretKey","randomSecretKey","utils","isValidPublicKey","publicKey","isValidPrivateKey","randomPrivateKey","normPrivateKeyToScalar","getPublicKey","secretKey","isProbPub","delta","ORDER_MASK","int2octets","prepSig","defaultSigOpts","some","extraEntropy","ent","h1int","seedArgs","k2sig","kBytes","ik","q","normS","defaultVerOpts","keygen","sign","hashLen","qByteLen","hmacFn","u8n","u8of","reset","reseed","gen","sl","concatBytes_","pred","createHmacDrbg","drbg","verify","sg","_sig","isHex","isObj","derError","is","getSharedSecret","secretKeyA","publicKeyB","info","publicKeyHasPrefix","_ecdsa_legacy_opts_to_new","allowedPrivateKeyLengths","Set","_weierstrass_legacy_opts_to_new","weierstrass","assign","ProjectivePoint","_ecdsa_new_output_to_legacy","secp256k1_CURVE","secp256k1_ENDO","sqrtMod","_6n","_11n","_22n","_23n","_44n","_88n","b6","b9","b11","b22","b44","b88","b176","b220","b223","Fpk1","secp256k1","curveDef","defHash","createCurve","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","z","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","$constructor","initializer","init","inst","def","_a","defineProperty","_zod","enumerable","traits","prototype","bind","constr","Parent","Definition","deferred","Symbol","hasInstance","has","$ZodAsyncError","globalConfig","config","newConfig","jsonStringifyReplacer","getter","nullish","cleanRegex","source","startsWith","endsWith","defineLazy","configurable","assignProp","target","prop","writable","esc","captureStackTrace","_args","isObject","allowsEval","navigator","userAgent","Function","isPlainObject","o","ctor","prot","hasOwnProperty","call","propertyKeyTypes","escapeRegex","replace","parent","normalizeParams","_params","NUMBER_FORMAT_RANGES","safeint","MIN_SAFE_INTEGER","int32","uint32","float32","float64","MAX_VALUE","aborted","startIndex","issues","continue","prefixIssues","path","iss","unshift","unwrapMessage","finalizeIssue","ctx","full","customError","localeError","reportInput","getLengthableOrigin","issue","code","util.jsonStringifyReplacer","$ZodError","$ZodRealError","_parse","_Err","schema","_ctx","async","run","Promise","core.$ZodAsyncError","util.finalizeIssue","core.config","util.captureStackTrace","callee","_parseAsync","_safeParse","success","errors.$ZodError","safeParse","errors.$ZodRealError","_safeParseAsync","safeParseAsync","cuid","cuid2","ulid","xid","ksuid","nanoid","duration","guid","uuid","version","RegExp","email","ipv4","ipv6","cidrv4","cidrv6","base64","base64url","hostname","e164","dateSource","date","timeSource","hhmm","precision","integer","boolean","_null","lowercase","uppercase","$ZodCheck","core.$constructor","onattach","numericOriginMap","$ZodCheckLessThan","origin","bag","curr","inclusive","maximum","exclusiveMaximum","POSITIVE_INFINITY","check","abort","$ZodCheckGreaterThan","minimum","exclusiveMinimum","NEGATIVE_INFINITY","$ZodCheckMultipleOf","multipleOf","step","valDecCount","stepDecCount","decCount","toFixed","util.floatSafeRemainder","divisor","$ZodCheckNumberFormat","isInt","util.NUMBER_FORMAT_RANGES","pattern","regexes.integer","note","$ZodCheckMaxLength","when","util.nullish","util.getLengthableOrigin","$ZodCheckMinLength","$ZodCheckLengthEquals","tooBig","exact","$ZodCheckStringFormat","_b","patterns","lastIndex","$ZodCheckRegex","$ZodCheckLowerCase","regexes.lowercase","$ZodCheckUpperCase","regexes.uppercase","$ZodCheckIncludes","escapedRegex","util.escapeRegex","position","$ZodCheckStartsWith","$ZodCheckEndsWith","suffix","$ZodCheckOverwrite","tx","Doc","content","indent","indented","write","execution","lines","minIndent","trimStart","dedented","repeat","line","compile","major","minor","patch","$ZodType","checks","runChecks","asyncResult","isAborted","util.aborted","currLen","resolve","then","validate","vendor","$ZodString","pop","coerce","$ZodStringFormat","checks.$ZodCheckStringFormat","$ZodGUID","regexes.guid","$ZodUUID","v1","v2","v3","v4","v5","v6","v7","v8","regexes.uuid","$ZodEmail","regexes.email","$ZodURL","orig","url","URL","href","regexes.hostname","protocol","$ZodEmoji","$ZodNanoID","regexes.nanoid","$ZodCUID","regexes.cuid","$ZodCUID2","regexes.cuid2","$ZodULID","regexes.ulid","$ZodXID","regexes.xid","$ZodKSUID","regexes.ksuid","$ZodISODateTime","time","local","timeRegex","regexes.datetime","$ZodISODate","regexes.date","$ZodISOTime","$ZodISODuration","regexes.duration","$ZodIPv4","regexes.ipv4","$ZodIPv6","regexes.ipv6","$ZodCIDRv4","regexes.cidrv4","$ZodCIDRv6","regexes.cidrv6","address","prefixNum","isValidBase64","atob","$ZodBase64","regexes.base64","contentEncoding","$ZodBase64URL","regexes.base64url","padEnd","isValidBase64URL","$ZodE164","regexes.e164","$ZodJWT","token","algorithm","tokensParts","header","parsedHeader","typ","alg","isValidJWT","$ZodNumber","regexes.number","isFinite","received","$ZodNumberFormat","checks.$ZodCheckNumberFormat","$ZodBoolean","regexes.boolean","Boolean","$ZodBigInt","regexes.bigint","$ZodNull","regexes.null","values","$ZodAny","$ZodUnknown","$ZodNever","$ZodDate","_err","isDate","getTime","handleArrayResult","final","index","util.prefixIssues","$ZodArray","proms","element","all","handleObjectResult","handleOptionalObjectResult","$ZodObject","_normalized","util.cached","shape","okeys","optin","optout","keySet","numKeys","optionalKeys","util.defineLazy","propValues","fastpass","util.isObject","jit","core.globalConfig","jitless","fastEnabled","util.allowsEval","catchall","doc","normalized","parseStr","util.esc","ids","counter","id","generateFastpass","isOptional","unrecognized","_catchall","handleUnionResults","results","errors","$ZodUnion","options","flatMap","option","util.cleanRegex","$ZodIntersection","handleIntersectionResults","mergeValues","valid","util.isPlainObject","bKeys","sharedKeys","indexOf","newObj","sharedValue","mergeErrorPath","newArray","merged","$ZodRecord","keyType","valueType","Reflect","ownKeys","keyResult","$ZodEnum","numericValues","util.getEnumValues","util.propertyKeyTypes","$ZodTransform","_out","output","$ZodOptional","innerType","$ZodNullable","$ZodDefault","defaultValue","handleDefaultResult","$ZodPrefault","$ZodNonOptional","handleNonOptionalResult","$ZodCatch","catchValue","$ZodPipe","in","handlePipeResult","$ZodReadonly","handleReadonlyResult","$ZodLazy","$ZodCustom","checks.$ZodCheck","handleRefineResult","_iss","util.issue","$ZodRegistry","_map","_idmap","_meta","meta","clear","remove","pm","registry","globalRegistry","_guid","Class","util.normalizeParams","_lt","checks.$ZodCheckLessThan","_lte","_gt","checks.$ZodCheckGreaterThan","_gte","_multipleOf","checks.$ZodCheckMultipleOf","_maxLength","checks.$ZodCheckMaxLength","_minLength","checks.$ZodCheckMinLength","_length","checks.$ZodCheckLengthEquals","_overwrite","checks.$ZodCheckOverwrite","ZodISODateTime","core.$ZodISODateTime","schemas.ZodStringFormat","datetime","core._isoDateTime","ZodISODate","core.$ZodISODate","core._isoDate","ZodISOTime","core.$ZodISOTime","core._isoTime","ZodISODuration","core.$ZodISODuration","core._isoDuration","ZodRealError","defineProperties","mapper","_mapper","fieldErrors","_errors","processError","core.formatError","flatten","formErrors","core.flattenError","addIssue","addIssues","isEmpty","core._parse","parseAsync","core._parseAsync","core._safeParse","core._safeParseAsync","ZodType","core.$ZodType","core.clone","brand","register","reg","parse.parse","parse.safeParse","parse.parseAsync","parse.safeParseAsync","spa","refine","core._refine","ZodCustom","superRefine","refinement","core.$ZodCheck","_issue","fatal","overwrite","checks.overwrite","optional","nullable","nonoptional","ZodNonOptional","or","union","and","ZodIntersection","pipe","ZodTransform","default","_default","ZodDefault","prefault","ZodPrefault","catch","_catch","ZodCatch","readonly","ZodReadonly","describe","description","core.globalRegistry","isNullable","_ZodString","core.$ZodString","minLength","maxLength","regex","checks.$ZodCheckRegex","checks.regex","checks.$ZodCheckIncludes","checks.includes","checks.$ZodCheckStartsWith","checks.startsWith","checks.$ZodCheckEndsWith","checks.endsWith","checks.minLength","checks.maxLength","checks.length","nonempty","checks.$ZodCheckLowerCase","checks.lowercase","checks.$ZodCheckUpperCase","checks.uppercase","trim","normalize","form","checks.normalize","toLowerCase","toUpperCase","ZodString","core._email","ZodEmail","core._url","ZodURL","jwt","core._jwt","ZodJWT","emoji","core._emoji","ZodEmoji","core._guid","ZodGUID","core._uuid","ZodUUID","uuidv4","core._uuidv4","uuidv6","core._uuidv6","uuidv7","core._uuidv7","core._nanoid","ZodNanoID","core._cuid","ZodCUID","core._cuid2","ZodCUID2","core._ulid","ZodULID","core._base64","ZodBase64","core._base64url","ZodBase64URL","core._xid","ZodXID","core._ksuid","ZodKSUID","core._ipv4","ZodIPv4","core._ipv6","ZodIPv6","core._cidrv4","ZodCIDRv4","core._cidrv6","ZodCIDRv6","core._e164","ZodE164","iso.datetime","iso.date","iso.time","iso.duration","string","core._string","ZodStringFormat","core.$ZodStringFormat","core.$ZodEmail","core.$ZodGUID","core.$ZodUUID","core.$ZodURL","core.$ZodEmoji","core.$ZodNanoID","core.$ZodCUID","core.$ZodCUID2","core.$ZodULID","core.$ZodXID","core.$ZodKSUID","core.$ZodIPv4","core.$ZodIPv6","core.$ZodCIDRv4","core.$ZodCIDRv6","core.$ZodBase64","core.$ZodBase64URL","core.$ZodE164","core.$ZodJWT","ZodNumber","core.$ZodNumber","gt","checks.gt","gte","checks.gte","lt","checks.lt","lte","checks.lte","safe","positive","nonnegative","negative","nonpositive","checks.multipleOf","finite","minValue","maxValue","core._number","ZodNumberFormat","core.$ZodNumberFormat","core._int","ZodBoolean","core.$ZodBoolean","core._boolean","ZodBigInt","core.$ZodBigInt","core._bigint","ZodNull","core.$ZodNull","ZodAny","core.$ZodAny","ZodUnknown","core.$ZodUnknown","unknown","ZodNever","core.$ZodNever","never","core._never","ZodDate","core.$ZodDate","minDate","maxDate","ZodArray","core.$ZodArray","unwrap","core._array","ZodObject","core.$ZodObject","keyof","fromEntries","ZodEnum","_enum","passthrough","loose","strict","strip","extend","incoming","_shape","util.extend","merge","util.merge","pick","newShape","currDef","util.pick","omit","util.omit","partial","oldShape","util.partial","ZodOptional","required","util.required","util.assignProp","ZodUnion","core.$ZodUnion","core.$ZodIntersection","ZodRecord","core.$ZodRecord","record","core.$ZodEnum","enum","extract","newEntries","exclude","core.$ZodTransform","core.$ZodOptional","ZodNullable","core.$ZodNullable","core.$ZodDefault","removeDefault","core.$ZodPrefault","core.$ZodNonOptional","core.$ZodCatch","removeCatch","ZodPipe","core.$ZodPipe","in_","core.$ZodReadonly","ZodLazy","core.$ZodLazy","core.$ZodCustom","z.bigint","z.boolean","core._date","z.number","u8a","cls","z.instanceof","z.string","parts","at","literal","z.union","core._null","z.null","z.array","z.record","u8a32","u8a33","u8a64","hex32","hex33","hex64","byte32","isArrayOf","isString","afn","astr","label","aArr","astrArr","anumArr","chain","wrap","alphabet","letters","lettersA","indexes","digits","letter","separator","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","get_address_format","encoded","base58_decode","rest","bech32_decode","bech32m_decode","encode_address","base58_encode","bech32_encode","bech32m_encode","COINBASE","TXID","VOUT","DEFAULT","LOCKTIME","SEQUENCE","TAPLEAF_VERSIONS","LOCK_SCRIPT_TYPE","P2PKH","P2SH","P2WPKH","P2WSH","P2TR","OPRETURN","LOCK_SCRIPT_REGEX","SIGHASH_SEGWIT","SIGHASH_TAPROOT","P2TS","GLOBAL_BASE","GLOBAL_WIT","TXIN_BASE","TXOUT_BASE","get_lock_script_type","script","get_lock_script_version","is_p2pkh_script","is_p2sh_script","is_p2wpkh_script","is_p2wsh_script","is_p2tr_script","get_address_script","script_key","script_type","asm","get_p2pkh_script","get_p2sh_script","get_p2w_pkh_script","get_p2w_sh_script","get_p2tr_script","CONFIG_TABLE","get_address_config","address_network","address_type","network","get_address_info","dec","ADDRESS_TYPE","create_p2pkh_address","encode_p2pkh_address","create_p2pkh_script","encode_p2pkh_script","pk_hash","decode_p2pkh_script","decode_p2pkh_address","parsed","create_address","create_script","encode_script","decode_script","create_p2sh_address","encode_p2sh_address","encode_p2sh_script","create_p2sh_script","script_hash","script_pk","decode_p2sh_script","decode_p2sh_address","create_p2wpkh_address","encode_p2wpkh_address","create_p2wpkh_script","encode_p2wpkh_script","decode_p2wpkh_script","decode_p2wpkh_address","create_p2wsh_address","encode_p2wsh_address","create_p2wsh_script","encode_p2wsh_script","decode_p2wsh_script","decode_p2wsh_address","create_p2tr_address","encode_p2tr_address","create_p2tr_script","encode_p2tr_script","decode_p2tr_script","decode_p2tr_address","LOCKTIME_THRESHOLD","LocktimeField","RefPointer","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","assert","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_word","asm_code","split_script_word","prefix_word_size","get_size_varint","parse_script","stream","stack","stack_size","word_type","word_size","is_valid_script","_26n","InscriptionUtil","decode_inscription","envelopes","start_idx","findIndex","stop_idx","env","parse_envelopes","parse_record","encode_inscription","create_envelope","delegate","encode_id","ref","opcode","encode_pointer","pointer","ptr","rune","encode_rune_label","mimetype","encode_label","encode_content","envelope","decode_label","decode_pointer","decode_id","decode_rune_label","decode_bytes","decode_content","identifier","charCode","fromCharCode","TIMELOCK_TYPE","TIMELOCK_VALUE_MASK","TIMELOCK_VALUE_MAX","SequenceField","encode_sequence","mode","parse_height","ts","parse_stamp","decode_sequence","sequence","parse_sequence","ScriptUtil","prefix_script_size","is_valid","matchAll","get_prevout","vin","prevout","parse_txinput","txdata","txindex","txinput","get_annex_data","witness","annex","taptree","z.object","leaves","sats","tx_output","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","encode_tx_vout","txout","param","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","create_tx","create_tx_output","normalize_sequence","normalize_value","normalize_prevout","create_coinbase_input","create_virtual_input","create_spend_input","create_tx_input","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.sign_ecdsa","ECC.sign_bip340","_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","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,38,39,40,41,42,43,44,45]}
|