@solarpunkltd/swarm-id 0.8.2 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/README.md +17 -7
  2. package/dist/bus/account-bus.d.ts +12 -0
  3. package/dist/bus/messages.d.ts +12 -0
  4. package/dist/bus/signaling-transport.d.ts +2 -0
  5. package/dist/chunks/ccip-BEanftc1.js +2 -0
  6. package/dist/chunks/ccip-BEanftc1.js.map +1 -0
  7. package/dist/chunks/{chat-binding-DgECjSWW.js → chat-binding-gSvKTm5l.js} +15 -15
  8. package/dist/chunks/chat-binding-gSvKTm5l.js.map +1 -0
  9. package/dist/chunks/index-BbRV2bja.js +2 -0
  10. package/dist/chunks/index-BbRV2bja.js.map +1 -0
  11. package/dist/index.d.ts +5 -1
  12. package/dist/internal.d.ts +3 -1
  13. package/dist/internal.esm.js +1 -1
  14. package/dist/internal.esm.js.map +1 -1
  15. package/dist/schemas.d.ts +59 -0
  16. package/dist/swarm-id-button-frame.d.ts +77 -0
  17. package/dist/swarm-id-client.d.ts +64 -69
  18. package/dist/swarm-id-proxy.d.ts +47 -55
  19. package/dist/swarm-id.esm.js +1 -1
  20. package/dist/swarm-id.esm.js.map +1 -1
  21. package/dist/sync/device-state.d.ts +16 -7
  22. package/dist/sync/index.d.ts +2 -1
  23. package/dist/sync/published-wallet-link.d.ts +27 -0
  24. package/dist/types.d.ts +374 -64
  25. package/dist/utils/button-view.d.ts +16 -0
  26. package/dist/utils/ens-name.d.ts +33 -0
  27. package/dist/utils/ens.d.ts +13 -0
  28. package/dist/utils/json-rpc.d.ts +5 -0
  29. package/dist/utils/personal-sign.d.ts +17 -0
  30. package/dist/utils/postage-stamp-association.d.ts +24 -25
  31. package/dist/utils/site-allow-list.d.ts +0 -4
  32. package/dist/utils/storage-probe.d.ts +20 -10
  33. package/dist/utils/wallet-link.d.ts +70 -0
  34. package/package.json +2 -1
  35. package/dist/chunks/chat-binding-DgECjSWW.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-binding-gSvKTm5l.js","sources":["../../src/errors.ts","../../../node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/core.js","../../../node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/util.js","../../../node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/errors.js","../../../node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/parse.js","../../../node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/regexes.js","../../../node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/checks.js","../../../node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/doc.js","../../../node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/versions.js","../../../node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/schemas.js","../../../node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/registries.js","../../../node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/core/api.js","../../../node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/classic/iso.js","../../../node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/classic/errors.js","../../../node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/classic/parse.js","../../../node_modules/.pnpm/zod@4.1.13/node_modules/zod/v4/classic/schemas.js","../../../node_modules/.pnpm/cafe-utility@34.0.0/node_modules/cafe-utility/index.js","../../../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/esm/crypto.js","../../../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/esm/utils.js","../../../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/esm/_md.js","../../../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/esm/sha2.js","../../../node_modules/.pnpm/@noble+hashes@1.8.0/node_modules/@noble/hashes/esm/hmac.js","../../../node_modules/.pnpm/@noble+curves@1.9.7/node_modules/@noble/curves/esm/utils.js","../../../node_modules/.pnpm/@noble+curves@1.9.7/node_modules/@noble/curves/esm/abstract/modular.js","../../../node_modules/.pnpm/@noble+curves@1.9.7/node_modules/@noble/curves/esm/abstract/curve.js","../../../node_modules/.pnpm/@noble+curves@1.9.7/node_modules/@noble/curves/esm/abstract/weierstrass.js","../../../node_modules/.pnpm/@noble+curves@1.9.7/node_modules/@noble/curves/esm/secp256k1.js","../../../node_modules/.pnpm/@noble+curves@1.9.7/node_modules/@noble/curves/esm/_shortw_utils.js","../../../node_modules/.pnpm/@ethersphere+core-sdk@0.1.1/node_modules/@ethersphere/core-sdk/dist/index.js","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/core.js","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/util.js","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/errors.js","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/parse.js","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/regexes.js","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/checks.js","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/doc.js","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/versions.js","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/schemas.js","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/registries.js","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/api.js","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/to-json-schema.js","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/json-schema-processors.js","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/iso.js","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/errors.js","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/parse.js","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/schemas.js","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/coerce.js","../../../node_modules/.pnpm/@ethersphere+bee-js@13.0.0/node_modules/@ethersphere/bee-js/dist/mjs/types/schema/envelope.js","../../../node_modules/.pnpm/ms@2.1.3/node_modules/ms/index.js","../../../node_modules/.pnpm/debug@4.4.3/node_modules/debug/src/browser.js","../../../node_modules/.pnpm/debug@4.4.3/node_modules/debug/src/common.js","../../../node_modules/.pnpm/@ethersphere+bee-js@13.0.0/node_modules/@ethersphere/bee-js/dist/mjs/utils/http.js","../../../node_modules/.pnpm/@ethersphere+bee-js@13.0.0/node_modules/@ethersphere/bee-js/dist/mjs/types/schema/rchash.js","../../../node_modules/.pnpm/@ethersphere+bee-js@13.0.0/node_modules/@ethersphere/bee-js/dist/mjs/types/schema/upload.js","../../../node_modules/.pnpm/@ethersphere+bee-js@13.0.0/node_modules/@ethersphere/bee-js/dist/mjs/utils/error.js","../../../node_modules/.pnpm/@ethersphere+bee-js@13.0.0/node_modules/@ethersphere/bee-js/dist/mjs/utils/duration.js","../../../node_modules/.pnpm/@ethersphere+bee-js@13.0.0/node_modules/@ethersphere/bee-js/dist/mjs/utils/tokens.js","../../../node_modules/.pnpm/@ethersphere+bee-js@13.0.0/node_modules/@ethersphere/bee-js/dist/mjs/utils/file.js","../../../node_modules/.pnpm/@ethersphere+bee-js@13.0.0/node_modules/@ethersphere/bee-js/dist/mjs/types/debug.js","../../../node_modules/.pnpm/@ethersphere+bee-js@13.0.0/node_modules/@ethersphere/bee-js/dist/mjs/types/index.js","../../../node_modules/.pnpm/@ethersphere+bee-js@13.0.0/node_modules/@ethersphere/bee-js/dist/mjs/utils/hex-schema.js","../../../node_modules/.pnpm/@ethersphere+bee-js@13.0.0/node_modules/@ethersphere/bee-js/dist/mjs/utils/schema.js","../../../node_modules/.pnpm/@ethersphere+bee-js@13.0.0/node_modules/@ethersphere/bee-js/dist/mjs/utils/type.js","../../../node_modules/.pnpm/@ethersphere+bee-js@13.0.0/node_modules/@ethersphere/bee-js/dist/mjs/utils/workaround.js","../../../node_modules/.pnpm/@ethersphere+bee-js@13.0.0/node_modules/@ethersphere/bee-js/dist/mjs/types/schema/balance.js","../../../node_modules/.pnpm/@ethersphere+bee-js@13.0.0/node_modules/@ethersphere/bee-js/dist/mjs/types/schema/chequebook.js","../../../node_modules/.pnpm/@ethersphere+bee-js@13.0.0/node_modules/@ethersphere/bee-js/dist/mjs/types/schema/connectivity.js","../../../node_modules/.pnpm/@ethersphere+bee-js@13.0.0/node_modules/@ethersphere/bee-js/dist/mjs/types/schema/status.js","../../../node_modules/.pnpm/@ethersphere+bee-js@13.0.0/node_modules/@ethersphere/bee-js/dist/mjs/types/schema/stewardship.js","../../../node_modules/.pnpm/@ethersphere+bee-js@13.0.0/node_modules/@ethersphere/bee-js/dist/mjs/types/schema/grantee.js","../../../node_modules/.pnpm/isomorphic-ws@5.0.0_ws@8.21.0/node_modules/isomorphic-ws/browser.js","../../../node_modules/.pnpm/@ethersphere+bee-js@13.0.0/node_modules/@ethersphere/bee-js/dist/mjs/types/schema/pinning.js","../../../node_modules/.pnpm/@ethersphere+bee-js@13.0.0/node_modules/@ethersphere/bee-js/dist/mjs/types/schema/settlements.js","../../../node_modules/.pnpm/@ethersphere+bee-js@13.0.0/node_modules/@ethersphere/bee-js/dist/mjs/types/schema/stake.js","../../../node_modules/.pnpm/@ethersphere+bee-js@13.0.0/node_modules/@ethersphere/bee-js/dist/mjs/types/schema/stamps.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/internal/debug.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/internal/constants.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/internal/re.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/classes/semver.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/internal/parse-options.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/internal/identifiers.js","../../../node_modules/.pnpm/semver@7.8.5/node_modules/semver/functions/major.js","../../../node_modules/.pnpm/@ethersphere+bee-js@13.0.0/node_modules/@ethersphere/bee-js/dist/mjs/version.js","../../../node_modules/.pnpm/@ethersphere+bee-js@13.0.0/node_modules/@ethersphere/bee-js/dist/mjs/types/schema/states.js","../../../node_modules/.pnpm/@ethersphere+bee-js@13.0.0/node_modules/@ethersphere/bee-js/dist/mjs/types/schema/tag.js","../../../node_modules/.pnpm/@ethersphere+bee-js@13.0.0/node_modules/@ethersphere/bee-js/dist/mjs/types/schema/transactions.js","../../../node_modules/.pnpm/@ethersphere+bee-js@13.0.0/node_modules/@ethersphere/bee-js/dist/mjs/utils/constants.js","../../src/utils/url.ts","../../../node_modules/.pnpm/@noble+hashes@1.3.2/node_modules/@noble/hashes/esm/_assert.js","../../../node_modules/.pnpm/@noble+hashes@1.3.2/node_modules/@noble/hashes/esm/crypto.js","../../../node_modules/.pnpm/@noble+hashes@1.3.2/node_modules/@noble/hashes/esm/utils.js","../../../node_modules/.pnpm/@noble+hashes@1.3.2/node_modules/@noble/hashes/esm/_sha2.js","../../../node_modules/.pnpm/@noble+hashes@1.3.2/node_modules/@noble/hashes/esm/sha256.js","../../../node_modules/.pnpm/@noble+curves@1.2.0/node_modules/@noble/curves/esm/abstract/utils.js","../../../node_modules/.pnpm/@noble+curves@1.2.0/node_modules/@noble/curves/esm/abstract/modular.js","../../../node_modules/.pnpm/@noble+curves@1.2.0/node_modules/@noble/curves/esm/abstract/curve.js","../../../node_modules/.pnpm/@noble+curves@1.2.0/node_modules/@noble/curves/esm/abstract/weierstrass.js","../../../node_modules/.pnpm/@noble+hashes@1.3.2/node_modules/@noble/hashes/esm/hmac.js","../../../node_modules/.pnpm/@noble+curves@1.2.0/node_modules/@noble/curves/esm/_shortw_utils.js","../../../node_modules/.pnpm/@noble+curves@1.2.0/node_modules/@noble/curves/esm/secp256k1.js","../../../node_modules/.pnpm/@noble+hashes@1.3.2/node_modules/@noble/hashes/esm/_u64.js","../../../node_modules/.pnpm/@noble+hashes@1.3.2/node_modules/@noble/hashes/esm/sha3.js","../../src/utils/hex.ts","../../src/utils/personal-sign.ts","../../src/utils/wallet-link.ts","../../src/schemas.ts","../../src/types.ts","../../src/utils/avatar.ts","../../src/utils/promise.ts","../../src/chunk/constants.ts","../../src/chunk/encryption.ts","../../src/chunk/bmt.ts","../../src/chunk/cac.ts","../../src/chunk/encrypted-cac.ts","../../src/proxy/download-data.ts","../../src/proxy/mantaray.ts","../../src/utils/ttl.ts","../../src/utils/json-rpc.ts","../../src/utils/key-derivation.ts","../../src/utils/chat-binding.ts"],"sourcesContent":["// Copyright 2026 The Swarm Authors. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type {\n SwarmIdErrorCode,\n UploadUnavailableReason,\n WireError,\n} from \"./types\"\n\n/** The optional fields of a `SwarmIdError`, by code */\nexport interface SwarmIdErrorDetails {\n /** With `upload-unavailable`: why the session refuses to stamp */\n reason?: UploadUnavailableReason\n /** With `bee-rejected`: the HTTP status Bee or the gateway answered */\n status?: number\n /** With `bee-rejected`: Bee's own message from the response body */\n beeMessage?: string\n /** With `bee-rejected`: the path of the request that was refused (no host) */\n url?: string\n cause?: unknown\n}\n\n/**\n * Every rejection a `SwarmIdClient` call produces (#761). `message` is the\n * text a caller always got; `code` is the stable part to branch on, and the\n * details are set for the codes that have them.\n *\n * Constructed on the client side from the wire fields: an `Error` posted\n * through the iframe bridge arrives as a plain `Error` (structured clone keeps\n * `name` and `message` only), so the instance never crosses it. Prefer\n * `error.code` over `instanceof` in a dApp that may bundle two copies of the\n * package.\n */\nexport class SwarmIdError extends Error {\n readonly code: SwarmIdErrorCode\n readonly reason?: UploadUnavailableReason\n readonly status?: number\n readonly beeMessage?: string\n readonly url?: string\n\n constructor(\n code: SwarmIdErrorCode,\n message: string,\n details: SwarmIdErrorDetails = {},\n ) {\n super(\n message,\n details.cause === undefined ? undefined : { cause: details.cause },\n )\n this.name = \"SwarmIdError\"\n this.code = code\n if (details.reason !== undefined) this.reason = details.reason\n if (details.status !== undefined) this.status = details.status\n if (details.beeMessage !== undefined) this.beeMessage = details.beeMessage\n if (details.url !== undefined) this.url = details.url\n }\n\n /** The fields that cross the bridge */\n toWire(): WireError {\n return {\n error: this.message,\n code: this.code,\n ...(this.reason !== undefined && { reason: this.reason }),\n ...(this.status !== undefined && { status: this.status }),\n ...(this.beeMessage !== undefined && { beeMessage: this.beeMessage }),\n ...(this.url !== undefined && { url: this.url }),\n }\n }\n\n static fromWire(wire: WireError): SwarmIdError {\n const { error, code, ...details } = wire\n return new SwarmIdError(code, error, details)\n }\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 if (!inst._zod) {\n Object.defineProperty(inst, \"_zod\", {\n value: {\n def,\n constr: _,\n traits: new Set(),\n },\n enumerable: false,\n });\n }\n if (inst._zod.traits.has(name)) {\n return;\n }\n inst._zod.traits.add(name);\n initializer(inst, def);\n // support prototype modifications\n const proto = _.prototype;\n const keys = Object.keys(proto);\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n if (!(k in inst)) {\n inst[k] = proto[k].bind(inst);\n }\n }\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 class $ZodEncodeError extends Error {\n constructor(name) {\n super(`Encountered unidirectional transform during encode: ${name}`);\n this.name = \"ZodEncodeError\";\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 stepString = step.toString();\n let stepDecCount = (stepString.split(\".\")[1] || \"\").length;\n if (stepDecCount === 0 && /\\d?e-\\d?/.test(stepString)) {\n const match = stepString.match(/\\d?e-(\\d?)/);\n if (match?.[1]) {\n stepDecCount = Number.parseInt(match[1]);\n }\n }\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}\nconst EVALUATING = Symbol(\"evaluating\");\nexport function defineLazy(object, key, getter) {\n let value = undefined;\n Object.defineProperty(object, key, {\n get() {\n if (value === EVALUATING) {\n // Circular reference detected, return undefined to break the cycle\n return undefined;\n }\n if (value === undefined) {\n value = EVALUATING;\n value = getter();\n }\n return value;\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 objectClone(obj) {\n return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));\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 mergeDefs(...defs) {\n const mergedDescriptors = {};\n for (const def of defs) {\n const descriptors = Object.getOwnPropertyDescriptors(def);\n Object.assign(mergedDescriptors, descriptors);\n }\n return Object.defineProperties({}, mergedDescriptors);\n}\nexport function cloneDef(schema) {\n return mergeDefs(schema._zod.def);\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 function slugify(input) {\n return input\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, \"\")\n .replace(/[\\s_-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\nexport const captureStackTrace = (\"captureStackTrace\" in Error ? Error.captureStackTrace : (..._args) => { });\nexport function isObject(data) {\n return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = cached(() => {\n // @ts-ignore\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 if (typeof ctor !== \"function\")\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 shallowClone(o) {\n if (isPlainObject(o))\n return { ...o };\n if (Array.isArray(o))\n return [...o];\n return o;\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 // @ts-ignore\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 currDef = schema._zod.def;\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = {};\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 newShape[key] = currDef.shape[key];\n }\n assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function omit(schema, mask) {\n const currDef = schema._zod.def;\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = { ...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 assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\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 checks = schema._zod.def.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\"Object schemas containing refinements cannot be extended. Use `.safeExtend()` instead.\");\n }\n const def = mergeDefs(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: [],\n });\n return clone(schema, def);\n}\nexport function safeExtend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to safeExtend: 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: schema._zod.def.checks,\n };\n return clone(schema, def);\n}\nexport function merge(a, b) {\n const def = mergeDefs(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 get catchall() {\n return b._zod.def.catchall;\n },\n checks: [], // delete existing checks\n });\n return clone(a, def);\n}\nexport function partial(Class, schema, mask) {\n const def = mergeDefs(schema._zod.def, {\n get shape() {\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 assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function required(Class, schema, mask) {\n const def = mergeDefs(schema._zod.def, {\n get shape() {\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 assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\n// invalid_type | too_big | too_small | invalid_format | not_multiple_of | unrecognized_keys | invalid_union | invalid_key | invalid_element | invalid_value | custom\nexport function aborted(x, startIndex = 0) {\n if (x.aborted === true)\n return true;\n for (let i = startIndex; i < x.issues.length; i++) {\n if (x.issues[i]?.continue !== true) {\n return true;\n }\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 // @ts-ignore\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// Codec utility functions\nexport function base64ToUint8Array(base64) {\n const binaryString = atob(base64);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes;\n}\nexport function uint8ArrayToBase64(bytes) {\n let binaryString = \"\";\n for (let i = 0; i < bytes.length; i++) {\n binaryString += String.fromCharCode(bytes[i]);\n }\n return btoa(binaryString);\n}\nexport function base64urlToUint8Array(base64url) {\n const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const padding = \"=\".repeat((4 - (base64.length % 4)) % 4);\n return base64ToUint8Array(base64 + padding);\n}\nexport function uint8ArrayToBase64url(bytes) {\n return uint8ArrayToBase64(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nexport function hexToUint8Array(hex) {\n const cleanHex = hex.replace(/^0x/, \"\");\n if (cleanHex.length % 2 !== 0) {\n throw new Error(\"Invalid hex string length\");\n }\n const bytes = new Uint8Array(cleanHex.length / 2);\n for (let i = 0; i < cleanHex.length; i += 2) {\n bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);\n }\n return bytes;\n}\nexport function uint8ArrayToHex(bytes) {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\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 inst.message = JSON.stringify(def, util.jsonStringifyReplacer, 2);\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 = (issue) => issue.message) {\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 = (issue) => issue.message) {\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 const path = _path.map((seg) => (typeof seg === \"object\" ? seg.key : seg));\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);\nexport const _encode = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _parse(_Err)(schema, value, ctx);\n};\nexport const encode = /* @__PURE__*/ _encode(errors.$ZodRealError);\nexport const _decode = (_Err) => (schema, value, _ctx) => {\n return _parse(_Err)(schema, value, _ctx);\n};\nexport const decode = /* @__PURE__*/ _decode(errors.$ZodRealError);\nexport const _encodeAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _parseAsync(_Err)(schema, value, ctx);\n};\nexport const encodeAsync = /* @__PURE__*/ _encodeAsync(errors.$ZodRealError);\nexport const _decodeAsync = (_Err) => async (schema, value, _ctx) => {\n return _parseAsync(_Err)(schema, value, _ctx);\n};\nexport const decodeAsync = /* @__PURE__*/ _decodeAsync(errors.$ZodRealError);\nexport const _safeEncode = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _safeParse(_Err)(schema, value, ctx);\n};\nexport const safeEncode = /* @__PURE__*/ _safeEncode(errors.$ZodRealError);\nexport const _safeDecode = (_Err) => (schema, value, _ctx) => {\n return _safeParse(_Err)(schema, value, _ctx);\n};\nexport const safeDecode = /* @__PURE__*/ _safeDecode(errors.$ZodRealError);\nexport const _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n return _safeParseAsync(_Err)(schema, value, ctx);\n};\nexport const safeEncodeAsync = /* @__PURE__*/ _safeEncodeAsync(errors.$ZodRealError);\nexport const _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {\n return _safeParseAsync(_Err)(schema, value, _ctx);\n};\nexport const safeDecodeAsync = /* @__PURE__*/ _safeDecodeAsync(errors.$ZodRealError);\n","import * as util from \"./util.js\";\nexport 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 9562/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|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;\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 idnEmail = unicodeEmail;\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}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;\nexport const mac = (delimiter) => {\n const escapedDelim = util.escapeRegex(delimiter ?? \":\");\n return new RegExp(`^(?:[0-9A-F]{2}${escapedDelim}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${escapedDelim}){5}[0-9a-f]{2}$`);\n};\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 = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexport const hostname = /^(?=.{1,253}\\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\\.?$/;\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) opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n if (args.offset)\n opts.push(`([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)`);\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+)?/;\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// regex for hexadecimal strings (any length)\nexport const hex = /^[0-9a-fA-F]*$/;\n// Hash regexes for different algorithms and encodings\n// Helper function to create base64 regex with exact length and padding\nfunction fixedBase64(bodyLength, padding) {\n return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`);\n}\n// Helper function to create base64url regex with exact length (no padding)\nfunction fixedBase64url(length) {\n return new RegExp(`^[A-Za-z0-9_-]{${length}}$`);\n}\n// MD5 (16 bytes): base64 = 24 chars total (22 + \"==\")\nexport const md5_hex = /^[0-9a-fA-F]{32}$/;\nexport const md5_base64 = /*@__PURE__*/ fixedBase64(22, \"==\");\nexport const md5_base64url = /*@__PURE__*/ fixedBase64url(22);\n// SHA1 (20 bytes): base64 = 28 chars total (27 + \"=\")\nexport const sha1_hex = /^[0-9a-fA-F]{40}$/;\nexport const sha1_base64 = /*@__PURE__*/ fixedBase64(27, \"=\");\nexport const sha1_base64url = /*@__PURE__*/ fixedBase64url(27);\n// SHA256 (32 bytes): base64 = 44 chars total (43 + \"=\")\nexport const sha256_hex = /^[0-9a-fA-F]{64}$/;\nexport const sha256_base64 = /*@__PURE__*/ fixedBase64(43, \"=\");\nexport const sha256_base64url = /*@__PURE__*/ fixedBase64url(43);\n// SHA384 (48 bytes): base64 = 64 chars total (no padding)\nexport const sha384_hex = /^[0-9a-fA-F]{96}$/;\nexport const sha384_base64 = /*@__PURE__*/ fixedBase64(64, \"\");\nexport const sha384_base64url = /*@__PURE__*/ fixedBase64url(64);\n// SHA512 (64 bytes): base64 = 88 chars total (86 + \"==\")\nexport const sha512_hex = /^[0-9a-fA-F]{128}$/;\nexport const sha512_base64 = /*@__PURE__*/ fixedBase64(86, \"==\");\nexport const sha512_base64url = /*@__PURE__*/ fixedBase64url(86);\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 continue: false,\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 inclusive: true,\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 inclusive: true,\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 continue: !def.abort,\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: 1,\n patch: 13,\n};\n","import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { parse, parseAsync, 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 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 // const handleChecksResult = (\n // checkResult: ParsePayload,\n // originalResult: ParsePayload,\n // ctx: ParseContextInternal\n // ): util.MaybeAsync<ParsePayload> => {\n // // if the checks mutated the value && there are no issues, re-parse the result\n // if (checkResult.value !== originalResult.value && !checkResult.issues.length)\n // return inst._zod.parse(checkResult, ctx);\n // return originalResult;\n // };\n const handleCanaryResult = (canary, payload, ctx) => {\n // abort if the canary is aborted\n if (util.aborted(canary)) {\n canary.aborted = true;\n return canary;\n }\n // run checks first, then\n const checkResult = runChecks(payload, checks, ctx);\n if (checkResult instanceof Promise) {\n if (ctx.async === false)\n throw new core.$ZodAsyncError();\n return checkResult.then((checkResult) => inst._zod.parse(checkResult, ctx));\n }\n return inst._zod.parse(checkResult, ctx);\n };\n inst._zod.run = (payload, ctx) => {\n if (ctx.skipChecks) {\n return inst._zod.parse(payload, ctx);\n }\n if (ctx.direction === \"backward\") {\n // run canary\n // initial pass (no checks)\n const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true });\n if (canary instanceof Promise) {\n return canary.then((canary) => {\n return handleCanaryResult(canary, payload, ctx);\n });\n }\n return handleCanaryResult(canary, payload, ctx);\n }\n // forward\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 // Trim whitespace from input\n const trimmed = payload.value.trim();\n // @ts-ignore\n const url = new URL(trimmed);\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: def.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 // Set the output value based on normalize flag\n if (def.normalize) {\n // Use normalized URL\n payload.value = url.href;\n }\n else {\n // Preserve the original input (trimmed)\n payload.value = trimmed;\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.bag.format = `ipv4`;\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.bag.format = `ipv6`;\n inst._zod.check = (payload) => {\n try {\n // @ts-ignore\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 $ZodMAC = /*@__PURE__*/ core.$constructor(\"$ZodMAC\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.mac(def.delimiter));\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `mac`;\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 parts = payload.value.split(\"/\");\n try {\n if (parts.length !== 2)\n throw new Error();\n const [address, prefix] = parts;\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 // @ts-ignore\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 // @ts-ignore\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.bag.contentEncoding = \"base64\";\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.bag.contentEncoding = \"base64url\";\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 // @ts-ignore\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(\"$ZodNumberFormat\", (inst, def) => {\n checks.$ZodCheckNumberFormat.init(inst, def);\n $ZodNumber.init(inst, def); // no format checks\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(\"$ZodBigIntFormat\", (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 handlePropertyResult(result, final, key, input) {\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(key, result.issues));\n }\n if (result.value === undefined) {\n if (key in input) {\n final.value[key] = undefined;\n }\n }\n else {\n final.value[key] = result.value;\n }\n}\nfunction normalizeDef(def) {\n const keys = Object.keys(def.shape);\n for (const k of keys) {\n if (!def.shape?.[k]?._zod?.traits?.has(\"$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 ...def,\n keys,\n keySet: new Set(keys),\n numKeys: keys.length,\n optionalKeys: new Set(okeys),\n };\n}\nfunction handleCatchall(proms, input, payload, ctx, def, inst) {\n const unrecognized = [];\n // iterate over input keys\n const keySet = def.keySet;\n const _catchall = def.catchall._zod;\n const t = _catchall.def.type;\n for (const key in 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) => handlePropertyResult(r, payload, key, input)));\n }\n else {\n handlePropertyResult(r, payload, key, input);\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}\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 sh = def.shape;\n const desc = Object.getOwnPropertyDescriptor(def, \"shape\");\n if (!desc?.get) {\n const sh = def.shape;\n Object.defineProperty(def, \"shape\", {\n get: () => {\n const newSh = { ...sh };\n Object.defineProperty(def, \"shape\", {\n value: newSh,\n });\n return newSh;\n },\n });\n }\n const _normalized = util.cached(() => normalizeDef(def));\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 isObject = util.isObject;\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 payload.value = {};\n const proms = [];\n const shape = value.shape;\n for (const key of value.keys) {\n const el = shape[key];\n const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((r) => handlePropertyResult(r, payload, key, input)));\n }\n else {\n handlePropertyResult(r, payload, key, input);\n }\n }\n if (!catchall) {\n return proms.length ? Promise.all(proms).then(() => payload) : payload;\n }\n return handleCatchall(proms, input, payload, ctx, _normalized.value, inst);\n };\n});\nexport const $ZodObjectJIT = /*@__PURE__*/ core.$constructor(\"$ZodObjectJIT\", (inst, def) => {\n // requires cast because technically $ZodObject doesn't extend\n $ZodObject.init(inst, def);\n const superParse = inst._zod.parse;\n const _normalized = util.cached(() => normalizeDef(def));\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 const id = ids[key];\n const k = util.esc(key);\n doc.write(`const ${id} = ${parseStr(key)};`);\n doc.write(`\n if (${id}.issues.length) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n \n \n if (${id}.value === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n \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 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 if (!catchall)\n return payload;\n return handleCatchall([], input, payload, ctx, value, inst);\n }\n return superParse(payload, ctx);\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 const nonaborted = results.filter((r) => !util.aborted(r));\n if (nonaborted.length === 1) {\n final.value = nonaborted[0].value;\n return nonaborted[0];\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 const single = def.options.length === 1;\n const first = def.options[0]._zod.run;\n inst._zod.parse = (payload, ctx) => {\n if (single) {\n return first(payload, ctx);\n }\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 discriminator: def.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 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 const reversedIndex = [...items].reverse().findIndex((item) => item._zod.optin !== \"optional\");\n const optStart = reversedIndex === -1 ? 0 : items.length - reversedIndex;\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 ...(tooBig ? { code: \"too_big\", maximum: items.length } : { code: \"too_small\", minimum: items.length }),\n input,\n inst,\n origin: \"array\",\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 const values = def.keyType._zod.values;\n if (values) {\n payload.value = {};\n const recordKeys = new Set();\n for (const key of values) {\n if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n recordKeys.add(typeof key === \"number\" ? key.toString() : key);\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 (!recordKeys.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 code: \"invalid_key\",\n origin: \"record\",\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 code: \"invalid_key\",\n origin: \"map\",\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 const valuesSet = new Set(values);\n inst._zod.values = valuesSet;\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 (valuesSet.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 if (def.values.length === 0) {\n throw new Error(\"Cannot create literal schema with no valid values\");\n }\n const values = new Set(def.values);\n inst._zod.values = values;\n inst._zod.pattern = new RegExp(`^(${def.values\n .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o ? util.escapeRegex(o.toString()) : String(o)))\n .join(\"|\")})$`);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (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 // @ts-ignore\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 if (ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(inst.constructor.name);\n }\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});\nfunction handleOptionalResult(result, input) {\n if (result.issues.length && input === undefined) {\n return { issues: [], value: undefined };\n }\n return result;\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 const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise)\n return result.then((r) => handleOptionalResult(r, payload.value));\n return handleOptionalResult(result, payload.value);\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 // Forward direction (decode): allow null to pass through\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 (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply defaults for undefined input\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n /**\n * $ZodDefault returns the default value immediately in forward direction.\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 // Forward direction: continue with default handling\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 (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply prefault for undefined input\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 if (ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(\"ZodSuccess\");\n }\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 util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\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 if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply catch logic\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 if (ctx.direction === \"backward\") {\n const right = def.out._zod.run(payload, ctx);\n if (right instanceof Promise) {\n return right.then((right) => handlePipeResult(right, def.in, ctx));\n }\n return handlePipeResult(right, def.in, ctx);\n }\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handlePipeResult(left, def.out, ctx));\n }\n return handlePipeResult(left, def.out, ctx);\n };\n});\nfunction handlePipeResult(left, next, ctx) {\n if (left.issues.length) {\n // prevent further checks\n left.aborted = true;\n return left;\n }\n return next._zod.run({ value: left.value, issues: left.issues }, ctx);\n}\nexport const $ZodCodec = /*@__PURE__*/ core.$constructor(\"$ZodCodec\", (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 direction = ctx.direction || \"forward\";\n if (direction === \"forward\") {\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handleCodecAResult(left, def, ctx));\n }\n return handleCodecAResult(left, def, ctx);\n }\n else {\n const right = def.out._zod.run(payload, ctx);\n if (right instanceof Promise) {\n return right.then((right) => handleCodecAResult(right, def, ctx));\n }\n return handleCodecAResult(right, def, ctx);\n }\n };\n});\nfunction handleCodecAResult(result, def, ctx) {\n if (result.issues.length) {\n // prevent further checks\n result.aborted = true;\n return result;\n }\n const direction = ctx.direction || \"forward\";\n if (direction === \"forward\") {\n const transformed = def.transform(result.value, result);\n if (transformed instanceof Promise) {\n return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx));\n }\n return handleCodecTxResult(result, transformed, def.out, ctx);\n }\n else {\n const transformed = def.reverseTransform(result.value, result);\n if (transformed instanceof Promise) {\n return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx));\n }\n return handleCodecTxResult(result, transformed, def.in, ctx);\n }\n}\nfunction handleCodecTxResult(left, value, nextSchema, ctx) {\n // Check if transform added any issues\n if (left.issues.length) {\n left.aborted = true;\n return left;\n }\n return nextSchema._zod.run({ 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 if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\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 (typeof part === \"object\" && part !== null) {\n // is Zod schema\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 $ZodFunction = /*@__PURE__*/ core.$constructor(\"$ZodFunction\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._def = def;\n inst._zod.def = def;\n inst.implement = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implement() must be called with a function\");\n }\n return function (...args) {\n const parsedArgs = inst._def.input ? parse(inst._def.input, args) : args;\n const result = Reflect.apply(func, this, parsedArgs);\n if (inst._def.output) {\n return parse(inst._def.output, result);\n }\n return result;\n };\n };\n inst.implementAsync = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implementAsync() must be called with a function\");\n }\n return async function (...args) {\n const parsedArgs = inst._def.input ? await parseAsync(inst._def.input, args) : args;\n const result = await Reflect.apply(func, this, parsedArgs);\n if (inst._def.output) {\n return await parseAsync(inst._def.output, result);\n }\n return result;\n };\n };\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"function\") {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"function\",\n input: payload.value,\n inst,\n });\n return payload;\n }\n // Check if output is a promise type to determine if we should use async implementation\n const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === \"promise\";\n if (hasPromiseOutput) {\n payload.value = inst.implementAsync(payload.value);\n }\n else {\n payload.value = inst.implement(payload.value);\n }\n return payload;\n };\n inst.input = (...args) => {\n const F = inst.constructor;\n if (Array.isArray(args[0])) {\n return new F({\n type: \"function\",\n input: new $ZodTuple({\n type: \"tuple\",\n items: args[0],\n rest: args[1],\n }),\n output: inst._def.output,\n });\n }\n return new F({\n type: \"function\",\n input: args[0],\n output: inst._def.output,\n });\n };\n inst.output = (output) => {\n const F = inst.constructor;\n return new F({\n type: \"function\",\n input: inst._def.input,\n output,\n });\n };\n return inst;\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 // let _innerType!: any;\n // util.defineLazy(def, \"getter\", () => {\n // if (!_innerType) {\n // _innerType = def.getter();\n // }\n // return () => _innerType;\n // });\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 ?? undefined);\n util.defineLazy(inst._zod, \"optout\", () => inst._zod.innerType?._zod?.optout ?? undefined);\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","var _a;\nexport const $output = Symbol(\"ZodOutput\");\nexport const $input = Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n constructor() {\n this._map = new WeakMap();\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 WeakMap();\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 const f = { ...pm, ...this._map.get(schema) };\n return Object.keys(f).length ? f : undefined;\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}\n(_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());\nexport const globalRegistry = globalThis.__zod_globalRegistry;\n","import * as checks from \"./checks.js\";\nimport * as registries from \"./registries.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 _mac(Class, params) {\n return new Class({\n type: \"string\",\n format: \"mac\",\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}\n// slugify\nexport function _slugify() {\n return _overwrite((input) => util.slugify(input));\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() : util.shallowClone(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// 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 _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); // abort is always undefined, so this is always true...\n payload.issues.push(util.issue(_issue));\n }\n };\n return fn(payload.value, payload);\n });\n return ch;\n}\nexport function _check(fn, params) {\n const ch = new checks.$ZodCheck({\n check: \"custom\",\n ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\nexport function describe(description) {\n const ch = new checks.$ZodCheck({ check: \"describe\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, description });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\nexport function meta(metadata) {\n const ch = new checks.$ZodCheck({ check: \"meta\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, ...metadata });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\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 _Codec = Classes.Codec ?? schemas.$ZodCodec;\n const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n const _String = Classes.String ?? schemas.$ZodString;\n const stringSchema = new _String({ type: \"string\", error: params.error });\n const booleanSchema = new _Boolean({ type: \"boolean\", error: params.error });\n const codec = new _Codec({\n type: \"pipe\",\n in: stringSchema,\n out: booleanSchema,\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: codec,\n continue: false,\n });\n return {};\n }\n }),\n reverseTransform: ((input, _payload) => {\n if (input === true) {\n return truthyArray[0] || \"true\";\n }\n else {\n return falsyArray[0] || \"false\";\n }\n }),\n error: params.error,\n });\n return codec;\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\";\nimport * as util from \"../core/util.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) => {\n inst.issues.push(issue);\n inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n },\n // enumerable: false,\n },\n addIssues: {\n value: (issues) => {\n inst.issues.push(...issues);\n inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n },\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// Codec functions\nexport const encode = /* @__PURE__ */ core._encode(ZodRealError);\nexport const decode = /* @__PURE__ */ core._decode(ZodRealError);\nexport const encodeAsync = /* @__PURE__ */ core._encodeAsync(ZodRealError);\nexport const decodeAsync = /* @__PURE__ */ core._decodeAsync(ZodRealError);\nexport const safeEncode = /* @__PURE__ */ core._safeEncode(ZodRealError);\nexport const safeDecode = /* @__PURE__ */ core._safeDecode(ZodRealError);\nexport const safeEncodeAsync = /* @__PURE__ */ core._safeEncodeAsync(ZodRealError);\nexport const safeDecodeAsync = /* @__PURE__ */ core._safeDecodeAsync(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 inst.type = def.type;\n Object.defineProperty(inst, \"_def\", { value: def });\n // base methods\n inst.check = (...checks) => {\n return inst.clone(util.mergeDefs(def, {\n checks: [\n ...(def.checks ?? []),\n ...checks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n ],\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 // encoding/decoding\n inst.encode = (data, params) => parse.encode(inst, data, params);\n inst.decode = (data, params) => parse.decode(inst, data, params);\n inst.encodeAsync = async (data, params) => parse.encodeAsync(inst, data, params);\n inst.decodeAsync = async (data, params) => parse.decodeAsync(inst, data, params);\n inst.safeEncode = (data, params) => parse.safeEncode(inst, data, params);\n inst.safeDecode = (data, params) => parse.safeDecode(inst, data, params);\n inst.safeEncodeAsync = async (data, params) => parse.safeEncodeAsync(inst, data, params);\n inst.safeDecodeAsync = async (data, params) => parse.safeDecodeAsync(inst, data, params);\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 inst.slugify = () => inst.check(checks.slugify());\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 function httpUrl(params) {\n return core._url(ZodURL, {\n protocol: /^https?$/,\n hostname: core.regexes.domain,\n ...util.normalizeParams(params),\n });\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 ZodMAC = /*@__PURE__*/ core.$constructor(\"ZodMAC\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodMAC.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function mac(params) {\n return core._mac(ZodMAC, 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 function hostname(_params) {\n return core._stringFormat(ZodCustomStringFormat, \"hostname\", core.regexes.hostname, _params);\n}\nexport function hex(_params) {\n return core._stringFormat(ZodCustomStringFormat, \"hex\", core.regexes.hex, _params);\n}\nexport function hash(alg, params) {\n const enc = params?.enc ?? \"hex\";\n const format = `${alg}_${enc}`;\n const regex = core.regexes[format];\n if (!regex)\n throw new Error(`Unrecognized hash format: ${format}`);\n return core._stringFormat(ZodCustomStringFormat, format, regex, 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 _enum(Object.keys(shape));\n}\nexport const ZodObject = /*@__PURE__*/ core.$constructor(\"ZodObject\", (inst, def) => {\n core.$ZodObjectJIT.init(inst, def);\n ZodType.init(inst, def);\n util.defineLazy(inst, \"shape\", () => {\n return def.shape;\n });\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.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.safeExtend = (incoming) => {\n return util.safeExtend(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 shape: shape ?? {},\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 shape,\n catchall: never(),\n ...util.normalizeParams(params),\n });\n}\n// looseObject\nexport function looseObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n shape,\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 const k = core.clone(keyType);\n k._zod.values = undefined;\n return new ZodRecord({\n type: \"record\",\n keyType: k,\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 if (_ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(inst.constructor.name);\n }\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 ??= 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() : util.shallowClone(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() : util.shallowClone(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 ZodCodec = /*@__PURE__*/ core.$constructor(\"ZodCodec\", (inst, def) => {\n ZodPipe.init(inst, def);\n core.$ZodCodec.init(inst, def);\n});\nexport function codec(in_, out, params) {\n return new ZodCodec({\n type: \"pipe\",\n in: in_,\n out: out,\n transform: params.decode,\n reverseTransform: params.encode,\n });\n}\nexport const ZodReadonly = /*@__PURE__*/ core.$constructor(\"ZodReadonly\", (inst, def) => {\n core.$ZodReadonly.init(inst, def);\n ZodType.init(inst, def);\n inst.unwrap = () => inst._zod.def.innerType;\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 ZodFunction = /*@__PURE__*/ core.$constructor(\"ZodFunction\", (inst, def) => {\n core.$ZodFunction.init(inst, def);\n ZodType.init(inst, def);\n});\nexport function _function(params) {\n return new ZodFunction({\n type: \"function\",\n input: Array.isArray(params?.input) ? tuple(params?.input) : (params?.input ?? array(unknown())),\n output: params?.output ?? unknown(),\n });\n}\nexport { _function as function };\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 return core._superRefine(fn);\n}\n// Re-export describe and meta from core\nexport const describe = core.describe;\nexport const meta = core.meta;\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 Codec: ZodCodec,\n Boolean: ZodBoolean,\n String: ZodString,\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","'use strict'\nvar _a\nObject.defineProperty(exports, '__esModule', { value: !0 }), (exports.Vector = exports.Cache = exports.Assertions = exports.Strings = exports.Types = exports.Objects = exports.Dates = exports.Promises = exports.Numbers = exports.System = exports.Arrays = exports.Random = exports.Elliptic = exports.Binary = exports.Lock = exports.Solver = exports.RollingValueProvider = exports.TrieRouter = exports.AsyncQueue = exports.PubSubChannel = exports.FixedPointNumber = exports.MerkleTree = exports.Chunk = exports.Uint8ArrayWriter = exports.Uint8ArrayReader = exports.AsyncLazy = exports.Lazy = exports.Optional = void 0)\nasync function invertPromise(n) {\n\treturn new Promise((e, t) => n.then(t, e))\n}\nasync function raceFulfilled(n) {\n\treturn invertPromise(Promise.all(n.map(invertPromise)))\n}\nasync function runInParallelBatches(n, e = 1) {\n\tconst t = splitByCount(n, e),\n\t\tr = [],\n\t\ti = t.map(async o => {\n\t\t\tfor (const u of o) r.push(await u())\n\t\t})\n\treturn await Promise.all(i), r\n}\nasync function sleepMillis(n) {\n\treturn new Promise(e =>\n\t\tsetTimeout(() => {\n\t\t\te(!0)\n\t\t}, n)\n\t)\n}\nfunction shuffle(n, e = Math.random) {\n\tfor (let t = n.length - 1; t > 0; t--) {\n\t\tconst r = Math.floor(e() * (t + 1)),\n\t\t\ti = n[t]\n\t\t;(n[t] = n[r]), (n[r] = i)\n\t}\n\treturn n\n}\nfunction onlyOrThrow(n) {\n\tif (n.length === 1) return n[0]\n\tthrow Error(`Expected exactly one element, actual: ${n.length}`)\n}\nfunction onlyOrNull(n) {\n\treturn n.length === 1 ? n[0] : null\n}\nfunction firstOrNull(n) {\n\treturn n.length > 0 ? n[0] : null\n}\nfunction firstOrThrow(n) {\n\tif (!n.length) throw Error('Received empty array')\n\treturn n[0]\n}\nfunction initializeArray(n, e) {\n\tconst t = []\n\tfor (let r = 0; r < n; r++) t.push(e(r))\n\treturn t\n}\nfunction rotate2DArray(n) {\n\tconst e = []\n\tfor (let t = 0; t < n[0].length; t++) {\n\t\te.push([])\n\t\tfor (let r = 0; r < n.length; r++) e[t].push(n[r][t])\n\t}\n\treturn e\n}\nfunction initialize2DArray(n, e, t) {\n\tconst r = []\n\tfor (let i = 0; i < n; i++) {\n\t\tr.push([])\n\t\tfor (let o = 0; o < e; o++) r[i].push(t)\n\t}\n\treturn r\n}\nfunction containsShape(n, e, t, r) {\n\tif (t < 0 || r < 0 || r + e[0].length > n[0].length || t + e.length > n.length) return !1\n\tfor (let i = 0; i < e.length; i++) for (let o = 0; o < e[i].length; o++) if (e[i][o] !== void 0 && n[t + i][r + o] !== e[i][o]) return !1\n\treturn !0\n}\nfunction pickRandomIndices(n, e, t = Math.random) {\n\treturn shuffle(range(0, n.length - 1), t).slice(0, e)\n}\nfunction pluck(n, e) {\n\treturn n.map(t => t[e])\n}\nfunction makeSeededRng(n) {\n\tlet e = n,\n\t\tt = 3405648695,\n\t\tr = 3735928559\n\treturn function () {\n\t\treturn (e += t), (t ^= e << 7), (e *= r), (r ^= e << 13), (e ^= t ^ r), (e >>> 0) / 4294967296\n\t}\n}\nfunction intBetween(n, e, t = Math.random) {\n\treturn Math.floor(t() * (e - n + 1)) + n\n}\nfunction floatBetween(n, e, t = Math.random) {\n\treturn t() * (e - n) + n\n}\nfunction signedRandom() {\n\treturn Math.random() * 2 - 1\n}\nfunction containsPoint(n, e, t) {\n\treturn e >= n.x && e < n.x + n.width && t >= n.y && t < n.y + n.height\n}\nfunction randomPoint(n, e, t, r = Math.random) {\n\tlet i, o\n\tdo (i = intBetween(0, n - 1, r)), (o = intBetween(0, e - 1, r))\n\twhile (t && containsPoint(t, i, o))\n\treturn [i, o]\n}\nfunction procs(n, e = Math.random) {\n\tconst t = Math.floor(n),\n\t\tr = n - t\n\treturn chance(r, e) ? t + 1 : t\n}\nfunction chance(n, e = Math.random) {\n\treturn e() < n\n}\nfunction pick(n, e = Math.random) {\n\treturn n[Math.floor(n.length * e())]\n}\nfunction pickMany(n, e, t = Math.random) {\n\tif (e > n.length) throw new Error(`Count (${e}) is greater than array length (${n.length})`)\n\treturn pickRandomIndices(n, e, t).map(i => n[i])\n}\nfunction pickManyUnique(n, e, t, r = Math.random) {\n\tif (e > n.length) throw new Error(`Count (${e}) is greater than array length (${n.length})`)\n\tconst i = []\n\tfor (; i.length < e; ) {\n\t\tconst o = pick(n, r)\n\t\ti.some(u => t(u, o)) || i.push(o)\n\t}\n\treturn i\n}\nfunction pickGuaranteed(n, e, t, r, i, o = Math.random) {\n\tconst u = n.filter(c => c !== e && c !== t),\n\t\ts = []\n\tfor (e !== null && s.push(e); u.length && s.length < r; ) {\n\t\tconst c = exports.Random.intBetween(0, u.length - 1, o)\n\t\ti(u[c], s) && s.push(u[c]), u.splice(c, 1)\n\t}\n\treturn shuffle(s, o), { values: s, indexOfGuaranteed: e !== null ? s.indexOf(e) : -1 }\n}\nfunction last(n) {\n\tif (!n.length) throw Error('Received empty array')\n\treturn n[n.length - 1]\n}\nfunction pipe(n, e, t) {\n\treturn t(e.reduce((r, i) => i(r), n))\n}\nfunction makePipe(n, e) {\n\treturn t => pipe(t, n, e)\n}\nfunction pickWeighted(n, e, t) {\n\tif ((t === void 0 && (t = Math.random()), n.length !== e.length)) throw new Error('Array length mismatch')\n\tlet r = e.reduce((o, u) => o + u, 0)\n\tconst i = t * r\n\tfor (let o = 0; o < n.length - 1; o++) if (((r -= e[o]), i >= r)) return n[o]\n\treturn last(n)\n}\nfunction sortWeighted(n, e, t = Math.random) {\n\tconst r = e.map(o => t() * o),\n\t\ti = []\n\tfor (let o = 0; o < n.length; o++) i.push([n[o], r[o]])\n\treturn i.sort((o, u) => u[1] - o[1]).map(o => o[0])\n}\nfunction getDeep(n, e) {\n\tif (n == null) return null\n\tconst t = e.split('.')\n\tlet r = n\n\tfor (const i of t) {\n\t\tif (r[i] === null || r[i] === void 0) return null\n\t\tr = r[i]\n\t}\n\treturn r\n}\nfunction setDeep(n, e, t) {\n\tconst r = e.split(/\\.|\\[/)\n\tlet i = n\n\tfor (let o = 0; o < r.length; o++) {\n\t\tconst u = r[o],\n\t\t\ts = o < r.length - 1 && r[o + 1].includes(']'),\n\t\t\tf = u.includes(']') ? u.replace(/\\[|\\]/g, '') : u\n\t\tif (o === r.length - 1) return (i[f] = t), t\n\t\tisObject(i[f]) || (s ? (i[f] = []) : (i[f] = {})), (i = i[f])\n\t}\n\treturn t\n}\nfunction incrementDeep(n, e, t = 1) {\n\tconst r = getDeep(n, e) || 0\n\treturn setDeep(n, e, r + t), r\n}\nfunction ensureDeep(n, e, t) {\n\treturn getDeep(n, e) || setDeep(n, e, t)\n}\nfunction deleteDeep(n, e) {\n\tconst t = beforeLast(e, '.'),\n\t\tr = afterLast(e, '.')\n\tif (!t || !r) return\n\tconst i = getDeep(n, t)\n\ti && delete i[r]\n}\nfunction replaceDeep(n, e, t) {\n\tconst r = getDeep(n, e)\n\tif (!r) throw new Error(\"Key '\" + e + \"' does not exist.\")\n\treturn setDeep(n, e, t), r\n}\nfunction getFirstDeep(n, e, t) {\n\tfor (const r of e) {\n\t\tconst i = getDeep(n, r)\n\t\tif (i) return i\n\t}\n\tif (t) {\n\t\tconst r = Object.values(n)\n\t\tif (r.length) return r[0]\n\t}\n\treturn null\n}\nasync function forever(n, e, t) {\n\tfor (;;) {\n\t\ttry {\n\t\t\tawait n()\n\t\t} catch (r) {\n\t\t\tt && t('Error in forever', r)\n\t\t}\n\t\tawait sleepMillis(e)\n\t}\n}\nfunction runAndSetInterval(n, e) {\n\tn()\n\tconst t = setInterval(() => {\n\t\tn()\n\t}, e)\n\treturn () => clearInterval(t)\n}\nfunction whereAmI() {\n\tconst n = globalThis.process\n\treturn n ? (n.browser === !0 ? 'browser' : 'node') : 'browser'\n}\nasync function withRetries(n, e, t, r, i, o) {\n\tlet u = null\n\tfor (let s = 0; s <= e; s++)\n\t\ttry {\n\t\t\treturn await n()\n\t\t} catch (c) {\n\t\t\tif (((u = c), s === e)) break\n\t\t\tconst f = t + (r - t) * (s / (e - 1))\n\t\t\ti && i('Error in withRetries, retrying', { attempt: s + 1, allowedFailures: e, delayMillis: f, error: c }), o && o(), await sleepMillis(f)\n\t\t}\n\tthrow u\n}\nfunction asMegabytes(n) {\n\treturn n / 1024 / 1024\n}\nfunction convertBytes(n, e = 1024) {\n\treturn n >= e * e * e * e ? (n / e / e / e / e).toFixed(3) + ' TB' : n >= e * e * e ? (n / e / e / e).toFixed(3) + ' GB' : n >= e * e ? (n / e / e).toFixed(3) + ' MB' : n >= e ? (n / e).toFixed(3) + ' KB' : n + ' B'\n}\nfunction hexToRgb(n) {\n\tconst e = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(n.toLowerCase())\n\tif (!e) throw new Error('Invalid hex color: ' + n)\n\treturn [parseInt(e[1], 16), parseInt(e[2], 16), parseInt(e[3], 16)]\n}\nfunction rgbToHex(n) {\n\treturn '#' + n.map(e => e.toString(16).padStart(2, '0')).join('')\n}\nfunction haversineDistanceToMeters(n, e, t, r) {\n\tconst o = (n * Math.PI) / 180,\n\t\tu = (t * Math.PI) / 180,\n\t\ts = ((t - n) * Math.PI) / 180,\n\t\tc = ((r - e) * Math.PI) / 180,\n\t\tf = Math.sin(s / 2) * Math.sin(s / 2) + Math.cos(o) * Math.cos(u) * Math.sin(c / 2) * Math.sin(c / 2)\n\treturn 6371e3 * (2 * Math.atan2(Math.sqrt(f), Math.sqrt(1 - f)))\n}\nfunction roundToNearest(n, e) {\n\treturn Math.round(n / e) * e\n}\nfunction formatDistance(n) {\n\treturn n > 1e3 ? (n / 1e3).toFixed(0) + ' km' : n >= 500 ? roundToNearest(n, 100) + ' m' : n >= 100 ? roundToNearest(n, 50) + ' m' : roundToNearest(n, 10) + ' m'\n}\nfunction triangularNumber(n) {\n\treturn (n * (n + 1)) / 2\n}\nfunction searchFloat(n) {\n\tconst e = n.match(/-?\\d+(\\.\\d+)?/)\n\tif (!e) throw Error('No float found in ' + n)\n\treturn parseFloat(e[0])\n}\nfunction binomialSample(n, e, t = Math.random) {\n\tconst r = n * e,\n\t\ti = Math.sqrt(n * e * (1 - e)),\n\t\tu = (t() + t() + t() + t() + t() + t() - 3) * Math.SQRT2,\n\t\ts = Math.round(r + i * u)\n\treturn Math.max(0, Math.min(n, s))\n}\nfunction toSignificantDigits(n, e) {\n\tif (!n.includes('.')) return n\n\tif (parseFloat(n) === 0) return '0'\n\tconst [t, r] = n.split('.'),\n\t\ti = t.replace('-', ''),\n\t\to = i.length\n\tif (o >= e) return t\n\tif (!(i === '0')) {\n\t\tconst f = e - o,\n\t\t\tl = r.slice(0, f)\n\t\treturn /[1-9]/.test(l) ? `${t}.${l.replace(/0+$/, '')}` : t\n\t}\n\tconst s = r.match(/^0*/)?.[0].length ?? 0,\n\t\tc = e + s\n\treturn `${t}.${r.slice(0, c)}`\n}\nfunction isObject(n, e = !0) {\n\treturn !n || (e && !isUndefined(n._readableState)) || (e && n.constructor && (n.constructor.isBuffer || n.constructor.name == 'AbortController' || n.constructor.name == 'AbortSignal' || n.constructor.name == 'Uint8Array' || n.constructor.name === 'ArrayBuffer' || n.constructor.name === 'ReadableStream')) ? !1 : typeof n == 'object'\n}\nfunction isStrictlyObject(n) {\n\treturn isObject(n) && !Array.isArray(n)\n}\nfunction isEmptyArray(n) {\n\treturn Array.isArray(n) && n.length === 0\n}\nfunction isEmptyObject(n) {\n\treturn isStrictlyObject(n) && Object.keys(n).length === 0\n}\nfunction isUndefined(n) {\n\treturn n === void 0\n}\nfunction isFunction(n) {\n\treturn Object.prototype.toString.call(n) === '[object Function]' || Object.prototype.toString.call(n) === '[object AsyncFunction]'\n}\nfunction isString(n) {\n\treturn Object.prototype.toString.call(n) === '[object String]'\n}\nfunction isNumber(n) {\n\treturn typeof n == 'number' && isFinite(n)\n}\nfunction isBoolean(n) {\n\treturn n === !0 || n === !1\n}\nfunction isDate(n) {\n\treturn Object.prototype.toString.call(n) === '[object Date]'\n}\nfunction isBlank(n) {\n\treturn !isString(n) || n.trim().length === 0\n}\nfunction isId(n) {\n\treturn isNumber(n) && Number.isInteger(n) && n >= 1\n}\nfunction isIntegerString(n) {\n\treturn isString(n) && n.match(/^-?\\d+$/) !== null\n}\nfunction isHexString(n) {\n\treturn isString(n) && n.match(/^(0x)?[0-9a-f]+$/i) !== null\n}\nconst symbols = '!@#$%^&*()_+-=[]{}|;:<>?,./',\n\tsymbolsArray = '!@#$%^&*()_+-=[]{}|;:<>?,./'.split(''),\n\tlowercaseAlphabet = 'abcdefghijklmnopqrstuvwxyz',\n\tuppercaseAlphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',\n\tnumericAlphabet = '1234567890',\n\talphanumericAlphabet = lowercaseAlphabet + uppercaseAlphabet + numericAlphabet,\n\trichAsciiAlphabet = alphanumericAlphabet + symbols,\n\tunicodeTestingAlphabet = ['\\u2014', '\\\\', '\\u6771', '\\u4EAC', '\\u90FD', '\\u{1D586}', '\\u{1D587}', '\\u{1D588}', '\\u{1F47E}', '\\u{1F647}', '\\u{1F481}', '\\u{1F645}', '\\u16A0', '\\u16C7', '\\u16BB', '\\u16E6'],\n\thexAlphabet = '0123456789abcdef'\nfunction randomLetterString(n, e = Math.random) {\n\tlet t = ''\n\tfor (let r = 0; r < n; r++) t += lowercaseAlphabet[Math.floor(e() * lowercaseAlphabet.length)]\n\treturn t\n}\nfunction randomAlphanumericString(n, e = Math.random) {\n\tlet t = ''\n\tfor (let r = 0; r < n; r++) t += alphanumericAlphabet[Math.floor(e() * alphanumericAlphabet.length)]\n\treturn t\n}\nfunction randomRichAsciiString(n, e = Math.random) {\n\tlet t = ''\n\tfor (let r = 0; r < n; r++) t += richAsciiAlphabet[Math.floor(e() * richAsciiAlphabet.length)]\n\treturn t\n}\nfunction randomUnicodeString(n, e = Math.random) {\n\tlet t = ''\n\tfor (let r = 0; r < n; r++) t += unicodeTestingAlphabet[Math.floor(e() * unicodeTestingAlphabet.length)]\n\treturn t\n}\nfunction searchHex(n, e) {\n\tconst t = new RegExp(`[0-9a-f]{${e}}`, 'i'),\n\t\tr = n.match(t)\n\treturn r ? r[0] : null\n}\nfunction searchSubstring(n, e, t = symbolsArray) {\n\tconst r = splitAll(n, t)\n\tfor (const i of r) if (e(i)) return i\n\treturn null\n}\nfunction randomHexString(n, e = Math.random) {\n\tlet t = ''\n\tfor (let r = 0; r < n; r++) t += hexAlphabet[Math.floor(e() * hexAlphabet.length)]\n\treturn t\n}\nfunction asIntegerString(n, e) {\n\tif (!isIntegerString(n)) throw new TypeError(`Expected integer string${e?.name ? ` for ${e.name}` : ''}, got: ` + n)\n\tconst t = BigInt(n)\n\tif (e && ((e.min && t < e.min) || (e.max && t > e.max))) throw RangeError(`Expected integer string${e?.name ? ` for ${e.name}` : ''} in range: ${e.min ?? '-inf'}..${e.max ?? 'inf'}; got: ` + t)\n\treturn n\n}\nfunction asString(n, e) {\n\tif (isBlank(n)) throw new TypeError(`Expected string${e?.name ? ` for ${e.name}` : ''}, got: ` + n)\n\tif (e && ((e.min !== void 0 && n.length < e.min) || (e.max !== void 0 && n.length > e.max))) throw RangeError(`Expected string${e?.name ? ` for ${e.name}` : ''} length in range: ${e.min ?? '-inf'}..${e.max ?? 'inf'}; got: ${n.length}`)\n\treturn n\n}\nfunction asHexString(n, e) {\n\tif (!isHexString(n)) throw new TypeError(`Expected hex string${e?.name ? ` for ${e.name}` : ''}, got: ` + n)\n\tif (e?.strictPrefix && !n.startsWith('0x') && !n.startsWith('0X')) throw new TypeError(`Expected hex string with 0x prefix${e?.name ? ` for ${e.name}` : ''}, got: ` + n)\n\tconst t = n.replace(/^0x/i, '')\n\tif (t.length % 2 !== 0 && !e?.uneven) throw RangeError(`Expected even number of hex digits${e?.name ? ` for ${e.name}` : ''}; got: ` + n)\n\tif (e && e.byteLength && t.length !== e.byteLength * 2) throw RangeError(`Expected hex string${e?.name ? ` for ${e.name}` : ''} of byte length ${e.byteLength}; got: ` + t)\n\treturn `0x${t}`\n}\nfunction asSafeString(n, e) {\n\tif (\n\t\t!asString(n, e)\n\t\t\t.split('')\n\t\t\t.every(t => t === '_' || isLetterOrDigit(t))\n\t)\n\t\tthrow new TypeError(`Expected safe string${e?.name ? ` for ${e.name}` : ''}, got: ` + n)\n\treturn n\n}\nfunction checkLimits(n, e) {\n\tif ((e.min !== void 0 && n < e.min) || (e.max !== void 0 && n > e.max)) throw RangeError(`Expected value${e?.name ? ` for ${e.name}` : ''} in range: ${e.min ?? '-inf'}..${e.max ?? 'inf'}; got: ${n}`)\n}\nfunction asFunction(n, e) {\n\tif (!isFunction(n)) throw new TypeError(`Expected function${e?.name ? ` for ${e.name}` : ''}, got: ` + n)\n\treturn n\n}\nfunction asNumber(n, e) {\n\tif (isNumber(n)) return e && checkLimits(n, e), n\n\tif (!isString(n) || !n.match(/^-?\\d+(\\.\\d+)?$/)) throw new TypeError(`Expected number${e?.name ? ` for ${e.name}` : ''}, got: ` + n)\n\tconst t = parseFloat(n)\n\treturn e && checkLimits(t, e), t\n}\nfunction asInteger(n, e) {\n\treturn Math.trunc(asNumber(n, e))\n}\nfunction asBoolean(n, e) {\n\tif (n === 'true') return !0\n\tif (n === 'false') return !1\n\tif (!isBoolean(n)) throw new TypeError(`Expected boolean${e?.name ? ` for ${e.name}` : ''}, got: ` + n)\n\treturn n\n}\nfunction asDate(n, e) {\n\tif (!isDate(n)) throw new TypeError(`Expected date${e?.name ? ` for ${e.name}` : ''}, got: ` + n)\n\treturn n\n}\nfunction asNullableString(n) {\n\treturn isBlank(n) ? null : n\n}\nfunction asEmptiableString(n, e) {\n\tif (!isString(n)) throw new TypeError(`Expected string${e?.name ? ` for ${e.name}` : ''}, got: ` + n)\n\treturn n\n}\nfunction asId(n, e) {\n\tif (isId(n)) return n\n\tconst t = parseInt(n, 10)\n\tif (!isId(t)) throw new TypeError(`Expected id${e?.name ? ` for ${e.name}` : ''}, got: ` + n)\n\treturn t\n}\nfunction asTime(n, e) {\n\tif (!isString(n)) throw new TypeError(`Expected time${e?.name ? ` for ${e.name}` : ''}, got: ` + n)\n\tconst t = n.split(':')\n\tif (t.length !== 2) throw new TypeError(`Expected time${e?.name ? ` for ${e.name}` : ''}, got: ` + n)\n\tconst r = parseInt(t[0], 10),\n\t\ti = parseInt(t[1], 10)\n\tif (!isNumber(r) || !isNumber(i) || r < 0 || r > 23 || i < 0 || i > 59) throw new TypeError(`Expected time, got${e?.name ? ` for ${e.name}` : ''}: ` + n)\n\treturn `${String(r).padStart(2, '0')}:${String(i).padStart(2, '0')}`\n}\nfunction asArray(n, e) {\n\tif (!Array.isArray(n)) throw new TypeError(`Expected array${e?.name ? ` for ${e.name}` : ''}, got: ` + n)\n\treturn n\n}\nfunction asObject(n, e) {\n\tif (!isStrictlyObject(n)) throw new TypeError(`Expected object${e?.name ? ` for ${e.name}` : ''}, got: ` + n)\n\treturn n\n}\nfunction asNullableObject(n, e) {\n\treturn n === null ? null : asObject(n, e)\n}\nfunction asStringMap(n, e) {\n\tconst t = asObject(n, e)\n\tfor (const r of Object.keys(t)) if (!isString(t[r])) throw new TypeError(`Expected string map${e?.name ? ` for ${e.name}` : ''}, got: ` + n)\n\treturn t\n}\nfunction asNumericDictionary(n, e) {\n\tconst t = asObject(n),\n\t\tr = Object.keys(t),\n\t\ti = Object.values(t)\n\tif (!r.every(isString) || !i.every(isNumber)) throw new TypeError(`Expected numeric dictionary${e?.name ? ` for ${e.name}` : ''}, got: ` + n)\n\treturn t\n}\nfunction isUrl(n) {\n\treturn isString(n) && n.match(/^https?:\\/\\/.+/) !== null\n}\nfunction asUrl(n, e) {\n\tif (!isUrl(n)) throw new TypeError(`Expected url${e?.name ? ` for ${e.name}` : ''}, got: ` + n)\n\treturn n\n}\nfunction isBigint(n) {\n\treturn typeof n == 'bigint'\n}\nfunction asBigint(n, e) {\n\tif (!isBigint(n)) throw new TypeError(`Expected bigint${e?.name ? ` for ${e.name}` : ''}, got: ` + n)\n\tif ((e?.min !== void 0 && n < e?.min) || (e?.max !== void 0 && n > e?.max)) throw RangeError(`Expected value${e?.name ? ` for ${e.name}` : ''} in range: ${e.min ?? '-inf'}..${e.max ?? 'inf'}; got: ${n}`)\n\treturn n\n}\nfunction isNullable(n, e) {\n\treturn e == null ? !0 : n(e)\n}\nfunction asNullable(n, e) {\n\treturn e == null ? null : n(e)\n}\nfunction asEmptiable(n, e) {\n\treturn e === '' ? void 0 : n(e)\n}\nfunction asOptional(n, e) {\n\treturn e == null ? void 0 : n(e)\n}\nfunction enforceObjectShape(n, e) {\n\tfor (const [t, r] of Object.entries(e)) if (!r(n[t])) throw TypeError(`${t} in value does not exist or match shape`)\n\tfor (const t of Object.keys(n)) if (!e[t]) throw TypeError(`${t} exists in value but not in shape`)\n\treturn !0\n}\nfunction enforceArrayShape(n, e) {\n\treturn n.every(t => enforceObjectShape(t, e))\n}\nfunction represent(n, e = 'json', t = 0) {\n\tif (n && isFunction(n.represent)) {\n\t\tconst r = n.represent()\n\t\tif (isString(r)) return e === 'json' && t === 0 ? JSON.stringify(r) : r\n\t}\n\tif (isObject(n, !1)) {\n\t\tif (t > 1) return '[object Object]'\n\t\tif (e === 'json') {\n\t\t\tif (Array.isArray(n)) {\n\t\t\t\tconst i = n.map(o => represent(o, 'json', t + 1))\n\t\t\t\treturn t === 0 ? JSON.stringify(i) : i\n\t\t\t}\n\t\t\tconst r = {}\n\t\t\tn.message && (r.message = represent(n.message, 'json', t + 1))\n\t\t\tfor (const [i, o] of Object.entries(n)) r[i] = represent(o, 'json', t + 1)\n\t\t\treturn t === 0 ? JSON.stringify(r) : r\n\t\t} else if (e === 'key-value') {\n\t\t\tconst r = Object.keys(n)\n\t\t\treturn n.message && !r.includes('message') && r.unshift('message'), r.map(i => `${i}=${JSON.stringify(represent(n[i], 'json', t + 1))}`).join(' ')\n\t\t}\n\t}\n\treturn isUndefined(n) && (n = 'undefined'), t === 0 ? JSON.stringify(n) : n\n}\nfunction expandError(n, e) {\n\tif (isString(n)) return n\n\tconst t = Object.keys(n)\n\tn.message && !t.includes('message') && t.push('message')\n\tconst r = t.map(i => `${i}: ${n[i]}`).join('; ')\n\treturn e && n.stack\n\t\t? r +\n\t\t\t\t`\n` +\n\t\t\t\tn.stack\n\t\t: r\n}\nfunction deepMergeInPlace(n, e) {\n\tif (isStrictlyObject(n) && isStrictlyObject(e)) for (const t in e) isStrictlyObject(e[t]) ? (n[t] || (n[t] = {}), deepMergeInPlace(n[t], e[t])) : Array.isArray(e[t]) ? (n[t] = [...e[t]]) : ((e[t] !== null && e[t] !== void 0) || n[t] === null || n[t] === void 0) && (n[t] = e[t])\n\treturn n\n}\nfunction deepMerge2(n, e) {\n\tconst t = {}\n\treturn deepMergeInPlace(t, n), deepMergeInPlace(t, e), t\n}\nfunction deepMerge3(n, e, t) {\n\tconst r = {}\n\treturn deepMergeInPlace(r, n), deepMergeInPlace(r, e), deepMergeInPlace(r, t), r\n}\nfunction zip(n, e) {\n\tconst t = {}\n\tfor (const r of n) for (const i of Object.keys(r)) t[i] ? (t[i] = e(t[i], r[i])) : (t[i] = r[i])\n\treturn t\n}\nfunction zipSum(n) {\n\treturn zip(n, (e, t) => e + t)\n}\nfunction pushToBucket(n, e, t) {\n\tn[e] || (n[e] = []), n[e].push(t)\n}\nfunction unshiftAndLimit(n, e, t) {\n\tfor (n.unshift(e); n.length > t; ) n.pop()\n}\nfunction atRolling(n, e) {\n\tlet t = e % n.length\n\treturn t < 0 && (t += n.length), n[t]\n}\nfunction pushAll(n, e) {\n\tArray.prototype.push.apply(n, e)\n}\nfunction unshiftAll(n, e) {\n\tArray.prototype.unshift.apply(n, e)\n}\nasync function mapAllAsync(n, e) {\n\tconst t = []\n\tfor (const r of n) t.push(await e(r))\n\treturn t\n}\nfunction glue(n, e) {\n\tconst t = []\n\tfor (let r = 0; r < n.length; r++) t.push(n[r]), r < n.length - 1 && (isFunction(e) ? t.push(e()) : t.push(e))\n\treturn t\n}\nfunction asEqual(n, e) {\n\tif (n !== e) throw Error(`Expected [${n}] to equal [${e}]`)\n\treturn [n, e]\n}\nfunction asTrue(n) {\n\tif (n !== !0) throw Error(`Expected [true], got: [${n}]`)\n\treturn n\n}\nfunction asTruthy(n) {\n\tif (!n) throw Error(`Expected truthy value, got: [${n}]`)\n\treturn n\n}\nfunction asFalse(n) {\n\tif (n !== !1) throw Error(`Expected [false], got: [${n}]`)\n\treturn n\n}\nfunction asFalsy(n) {\n\tif (n) throw Error(`Expected falsy value, got: [${n}]`)\n\treturn n\n}\nfunction asEither(n, e) {\n\tif (!e.includes(n)) throw Error(`Expected any of [${e.join(', ')}], got: [${n}]`)\n\treturn n\n}\nfunction scheduleMany(n, e) {\n\tfor (let t = 0; t < n.length; t++) {\n\t\tconst r = n[t],\n\t\t\ti = e[t],\n\t\t\to = Math.max(0, i.getTime() - Date.now())\n\t\tsetTimeout(r, o)\n\t}\n}\nfunction interpolate(n, e, t) {\n\treturn n + (e - n) * t\n}\nfunction sum(n) {\n\treturn n.reduce((e, t) => e + t, 0)\n}\nfunction average(n) {\n\treturn n.reduce((e, t) => e + t, 0) / n.length\n}\nfunction median(n) {\n\tconst e = [...n].sort((r, i) => r - i),\n\t\tt = Math.floor(e.length / 2)\n\treturn e.length % 2 === 0 ? (e[t] + e[t - 1]) / 2 : e[t]\n}\nfunction getDistanceFromMidpoint(n, e) {\n\treturn n - (e - 1) / 2\n}\nfunction range(n, e) {\n\tconst t = []\n\tfor (let r = n; r <= e; r++) t.push(r)\n\treturn t\n}\nfunction includesAny(n, e) {\n\treturn e.some(t => n.includes(t))\n}\nfunction isChinese(n) {\n\treturn /^[\\u4E00-\\u9FA5]+$/.test(n)\n}\nfunction slugify(n, e = () => !1) {\n\treturn n\n\t\t.toLowerCase()\n\t\t.normalize('NFD')\n\t\t.replace(/[\\u0300-\\u036f]/g, '')\n\t\t.split('')\n\t\t.map(t => (/[a-z0-9]/.test(t) || e(t) ? t : '-'))\n\t\t.join('')\n\t\t.replace(/-+/g, '-')\n\t\t.replace(/^-|-$/g, '')\n}\nfunction normalForm(n) {\n\treturn slugify(n).replaceAll('-', '')\n}\nfunction camelToTitle(n) {\n\treturn capitalize(n.replace(/([A-Z])/g, ' $1'))\n}\nfunction slugToTitle(n) {\n\treturn n.split('-').map(capitalize).join(' ')\n}\nfunction slugToCamel(n) {\n\treturn decapitalize(n.split('-').map(capitalize).join(''))\n}\nfunction joinHumanly(n, e = ', ', t = ' and ') {\n\treturn !n || !n.length ? '' : n.length === 1 ? n[0] : n.length === 2 ? `${n[0]}${t}${n[1]}` : `${n.slice(0, n.length - 1).join(e)}${t}${n[n.length - 1]}`\n}\nfunction surroundInOut(n, e) {\n\treturn e + n.split('').join(e) + e\n}\nfunction enumify(n) {\n\treturn slugify(n).replace(/-/g, '_').toUpperCase()\n}\nfunction getFuzzyMatchScore(n, e) {\n\tif (e.length === 0) return 0\n\tconst t = n.toLowerCase(),\n\t\tr = e.toLowerCase()\n\treturn n === e ? 1e4 : t.startsWith(r) ? 1e4 - n.length : t.includes(r) ? 5e3 - n.length : new RegExp('.*' + r.split('').join('.*') + '.*').test(t) ? 1e3 - n.length : 0\n}\nfunction sortByFuzzyScore(n, e) {\n\treturn n.filter(t => getFuzzyMatchScore(t, e)).sort((t, r) => getFuzzyMatchScore(r, e) - getFuzzyMatchScore(t, e))\n}\nfunction escapeHtml(n) {\n\treturn n.replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;')\n}\nconst htmlEntityMap = { '&amp;': '&', '&quot;': '\"', '&apos;': \"'\", '&gt;': '>', '&lt;': '<' }\nfunction decodeHtmlEntities(n) {\n\tlet e = n.replace(/&#(\\d+);/g, (t, r) => String.fromCharCode(r)).replace(/&#x(\\d+);/g, (t, r) => String.fromCharCode(parseInt(r, 16)))\n\tfor (const [t, r] of Object.entries(htmlEntityMap)) e = e.replaceAll(t, r)\n\treturn e\n}\nfunction before(n, e) {\n\tconst t = n.indexOf(e)\n\treturn t === -1 ? null : n.slice(0, t)\n}\nfunction after(n, e) {\n\tconst t = n.indexOf(e)\n\treturn t === -1 ? null : n.slice(t + e.length)\n}\nfunction beforeLast(n, e) {\n\tconst t = n.lastIndexOf(e)\n\treturn t === -1 ? null : n.slice(0, t)\n}\nfunction afterLast(n, e) {\n\tconst t = n.lastIndexOf(e)\n\treturn t === -1 ? null : n.slice(t + e.length)\n}\nfunction betweenWide(n, e, t) {\n\tconst r = beforeLast(n, t)\n\treturn r ? after(r, e) : null\n}\nfunction betweenNarrow(n, e, t) {\n\tconst r = after(n, e)\n\treturn r ? before(r, t) : null\n}\nfunction splitOnce(n, e, t = !1) {\n\tconst r = t ? n.lastIndexOf(e) : n.indexOf(e)\n\treturn r === -1 ? (t ? [null, n] : [n, null]) : [n.slice(0, r), n.slice(r + e.length)]\n}\nfunction splitAll(n, e) {\n\tlet t = [n]\n\tfor (const r of e) t = t.flatMap(i => i.split(r))\n\treturn t.filter(r => r)\n}\nfunction getExtension(n) {\n\tconst e = last(n.split(/\\\\|\\//g)),\n\t\tt = e.lastIndexOf('.', e.length - 1)\n\treturn t <= 0 ? '' : e.slice(t + 1)\n}\nfunction getBasename(n) {\n\tconst e = last(n.split(/\\\\|\\//g)),\n\t\tt = e.lastIndexOf('.', e.length - 1)\n\treturn t <= 0 ? e : e.slice(0, t)\n}\nfunction normalizeEmail(n) {\n\tlet [e, t] = n.split('@')\n\te = shrinkTrim(e.replaceAll('.', '').toLowerCase()).replaceAll(' ', '')\n\tconst [r] = e.split('+')\n\tif (!r || !t || t.indexOf('.') === -1 || t.indexOf('.') === t.length - 1) throw new Error('Invalid email')\n\treturn (t = shrinkTrim(t.toLowerCase()).replaceAll(' ', '')), `${r}@${t}`\n}\nfunction normalizeFilename(n) {\n\tconst e = getBasename(n),\n\t\tt = getExtension(n)\n\treturn t ? `${e}.${t}` : e\n}\nfunction parseFilename(n) {\n\tconst e = getBasename(n),\n\t\tt = getExtension(n)\n\treturn { basename: e, extension: t, filename: t ? `${e}.${t}` : e }\n}\nfunction randomize(n, e = Math.random) {\n\treturn n.replace(/\\{(.+?)\\}/g, (t, r) => pick(r.split('|'), e))\n}\nfunction expand(n) {\n\tconst e = /\\{(.+?)\\}/,\n\t\tt = n.match(e)\n\tif (!t || !t.index) return [n]\n\tconst r = t[1].split(','),\n\t\ti = n.slice(0, t.index),\n\t\to = n.slice(t.index + t[0].length)\n\tlet u = []\n\tfor (const s of r) {\n\t\tconst c = expand(i + s + o)\n\t\tu = u.concat(c)\n\t}\n\treturn u\n}\nfunction shrinkTrim(n) {\n\treturn n\n\t\t.split(\n\t\t\t`\n`\n\t\t)\n\t\t.map(e => e.trim().replace(/\\s+/g, ' '))\n\t\t.filter(e => e.length > 0).join(`\n`)\n}\nfunction capitalize(n) {\n\treturn n.charAt(0).toUpperCase() + n.slice(1)\n}\nfunction decapitalize(n) {\n\treturn n.charAt(0).toLowerCase() + n.slice(1)\n}\nfunction isLetter(n) {\n\tif (!n) return !1\n\tconst e = n.charCodeAt(0)\n\treturn (e >= 65 && e <= 90) || (e >= 97 && e <= 122)\n}\nfunction isDigit(n) {\n\tif (!n) return !1\n\tconst e = n.charCodeAt(0)\n\treturn e >= 48 && e <= 57\n}\nfunction isLetterOrDigit(n) {\n\treturn isLetter(n) || isDigit(n)\n}\nconst wordBreakCharacters = ` \n\t\\r.,?!:;\"'\\`(){}[]~@#$%^&*-+=|<>/\\\\`.split('')\nfunction isWordBreakCharacter(n) {\n\treturn wordBreakCharacters.includes(n)\n}\nfunction isValidObjectPathCharacter(n) {\n\treturn isLetterOrDigit(n) || n === '.' || n === '[' || n === ']' || n === '_'\n}\nfunction insertString(n, e, t, r, i) {\n\treturn n.slice(0, e) + r + n.slice(e, e + t) + i + n.slice(e + t)\n}\nfunction indexOfRegex(n, e, t = 0) {\n\tconst r = e.exec(n.slice(t))\n\treturn r ? { index: r.index, match: r[0] } : null\n}\nfunction lineMatches(n, e, t = !0) {\n\tif (!t) return e.every(i => (i instanceof RegExp ? i.test(n) : n.indexOf(i, 0) !== -1))\n\tlet r = 0\n\tfor (const i of e)\n\t\tif (i instanceof RegExp) {\n\t\t\tconst o = indexOfRegex(n, i, r)\n\t\t\tif (!o) return !1\n\t\t\tr = o.index + o.match.length\n\t\t} else {\n\t\t\tconst o = n.indexOf(i, r)\n\t\t\tif (o === -1) return !1\n\t\t\tr = o + i.length\n\t\t}\n\treturn !0\n}\nfunction linesMatchInOrder(n, e, t = !0) {\n\tlet r = 0\n\tfor (const i of e) {\n\t\tlet o = !1\n\t\tfor (; !o && r < n.length; ) lineMatches(n[r], i, t) && (o = !0), r++\n\t\tif (!o) return !1\n\t}\n\treturn !0\n}\nfunction csvEscape(n) {\n\treturn n.match(/\"|,/) ? `\"${n.replace(/\"/g, '\"\"')}\"` : n\n}\nfunction allIndexOf(n, e, t = 0) {\n\tconst r = []\n\tlet i = n.indexOf(e, t)\n\tfor (; i !== -1; ) r.push(i), (i = n.indexOf(e, i + e.length))\n\treturn r\n}\nfunction indexOfEarliest(n, e, t = 0) {\n\tlet r = -1\n\tfor (const i of e) {\n\t\tconst o = n.indexOf(i, t)\n\t\to !== -1 && (r === -1 || o < r) && (r = o)\n\t}\n\treturn r\n}\nfunction indexOfWordBreak(n, e = 0) {\n\tfor (let t = e; t < n.length; t++) if (isWordBreakCharacter(n[t])) return t\n\treturn -1\n}\nfunction indexOfHashtag(n, e = 0) {\n\tfor (let t = e; t < n.length; t++) if (n[t] === '#' && isLetterOrDigit(n[t + 1])) return t\n\treturn -1\n}\nfunction lastIndexOfBefore(n, e, t = 0) {\n\treturn n.slice(0, t).lastIndexOf(e)\n}\nfunction findWeightedPair(n, e = 0, t = '{', r = '}') {\n\tlet i = 1\n\tfor (let o = e; o < n.length; o++)\n\t\tif (n.slice(o, o + r.length) === r) {\n\t\t\tif (--i === 0) return o\n\t\t} else n.slice(o, o + t.length) === t && i++\n\treturn -1\n}\nfunction extractBlock(n, e) {\n\tconst t = e.wordBoundary\n\t\t? indexOfEarliest(\n\t\t\t\tn,\n\t\t\t\t[\n\t\t\t\t\t`${e.opening} `,\n\t\t\t\t\t`${e.opening}\n`\n\t\t\t\t],\n\t\t\t\te.start || 0\n\t\t )\n\t\t: n.indexOf(e.opening, e.start || 0)\n\tif (t === -1) return null\n\tconst r = findWeightedPair(n, t + e.opening.length, e.opening, e.closing)\n\treturn r === -1 ? null : e.exclusive ? n.slice(t + e.opening.length, r) : n.slice(t, r + e.closing.length)\n}\nfunction extractAllBlocks(n, e) {\n\tconst t = []\n\tlet r = e.wordBoundary\n\t\t? indexOfEarliest(\n\t\t\t\tn,\n\t\t\t\t[\n\t\t\t\t\t`${e.opening} `,\n\t\t\t\t\t`${e.opening}\n`\n\t\t\t\t],\n\t\t\t\te.start || 0\n\t\t )\n\t\t: n.indexOf(e.opening, e.start || 0)\n\tfor (;;) {\n\t\tif (r === -1) return t\n\t\tconst i = extractBlock(n, { ...e, start: r })\n\t\tif (!i) return t\n\t\tt.push(i),\n\t\t\t(r = e.wordBoundary\n\t\t\t\t? indexOfEarliest(\n\t\t\t\t\t\tn,\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t`${e.opening} `,\n\t\t\t\t\t\t\t`${e.opening}\n`\n\t\t\t\t\t\t],\n\t\t\t\t\t\tr + i.length\n\t\t\t\t )\n\t\t\t\t: n.indexOf(e.opening, r + i.length))\n\t}\n}\nfunction replaceBlocks(n, e, t) {\n\tlet r = 0\n\tfor (;;) {\n\t\tconst i = exports.Strings.extractBlock(n, { ...t, start: r })\n\t\tif (!i) return n\n\t\tconst o = e(i)\n\t\t;(r = n.indexOf(i, r) + o.length), (n = n.replace(i, o))\n\t}\n}\nfunction splitFormatting(n, e) {\n\tconst t = []\n\tlet r = 0\n\tfor (; r < n.length; ) {\n\t\tconst i = n.indexOf(e, r)\n\t\tif (i === -1) {\n\t\t\tt.push({ string: n.slice(r), symbol: null })\n\t\t\tbreak\n\t\t}\n\t\tconst o = n.indexOf(e, i + e.length)\n\t\tif ((i > r && o !== -1 && t.push({ string: n.slice(r, i), symbol: null }), o === -1)) {\n\t\t\tt.push({ string: n.slice(r), symbol: null })\n\t\t\tbreak\n\t\t}\n\t\tt.push({ string: n.slice(i + e.length, o), symbol: e }), (r = o + e.length)\n\t}\n\treturn t\n}\nfunction splitHashtags(n) {\n\tconst e = []\n\tlet t = 0\n\tfor (; t < n.length; ) {\n\t\tconst r = indexOfHashtag(n, t)\n\t\tif (r === -1) {\n\t\t\te.push({ string: n.slice(t), symbol: null })\n\t\t\tbreak\n\t\t}\n\t\tconst i = indexOfWordBreak(n, r + 1)\n\t\tif (i === -1) {\n\t\t\te.push({ string: n.slice(t, r), symbol: null }), e.push({ string: n.slice(r + 1), symbol: '#' })\n\t\t\tbreak\n\t\t}\n\t\tr > t && e.push({ string: n.slice(t, r), symbol: null }), e.push({ string: n.slice(r + 1, i), symbol: '#' }), (t = i)\n\t}\n\treturn e\n}\nfunction splitUrls(n) {\n\tconst e = []\n\tlet t = 0\n\tfor (; t < n.length; ) {\n\t\tconst r = indexOfEarliest(n, ['http://', 'https://'], t)\n\t\tif (r === -1) {\n\t\t\te.push({ string: n.slice(t), symbol: null })\n\t\t\tbreak\n\t\t}\n\t\tconst i = indexOfEarliest(\n\t\t\tn,\n\t\t\t[\n\t\t\t\t' ',\n\t\t\t\t`\n`\n\t\t\t],\n\t\t\tr\n\t\t)\n\t\tif (i === -1) {\n\t\t\tr > t && e.push({ string: n.slice(t, r), symbol: null }), e.push({ string: n.slice(r), symbol: 'http' })\n\t\t\tbreak\n\t\t}\n\t\tr > t && e.push({ string: n.slice(t, r), symbol: null }), e.push({ string: n.slice(r, i), symbol: 'http' }), (t = i)\n\t}\n\treturn e\n}\nconst BASE64_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',\n\tBASE32_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'\nfunction base64ToUint8Array(n) {\n\treturn baseToUint8Array(n, BASE64_CHARS)\n}\nfunction uint8ArrayToBase64(n) {\n\treturn uint8ArrayToBase(n, BASE64_CHARS)\n}\nfunction base32ToUint8Array(n) {\n\treturn baseToUint8Array(n, BASE32_CHARS)\n}\nfunction uint8ArrayToBase32(n) {\n\treturn uint8ArrayToBase(n, BASE32_CHARS)\n}\nfunction baseToUint8Array(n, e) {\n\tconst t = '=',\n\t\tr = e.length\n\tlet i = 0,\n\t\to = 0\n\tconst u = []\n\tfor (let s = 0; s < n.length; s++) {\n\t\tconst c = n[s]\n\t\tif (c === t) break\n\t\tconst f = e.indexOf(c)\n\t\tif (f === -1) throw new Error(`Invalid character: ${c}`)\n\t\t;(o = (o << Math.log2(r)) | f), (i += Math.log2(r)), i >= 8 && ((i -= 8), u.push((o >> i) & 255))\n\t}\n\treturn new Uint8Array(u)\n}\nfunction uint8ArrayToBase(n, e) {\n\tconst t = e.length\n\tlet r = 0,\n\t\ti = 0,\n\t\to = ''\n\tfor (let u = 0; u < n.length; u++) for (i = (i << 8) | n[u], r += 8; r >= Math.log2(t); ) (r -= Math.log2(t)), (o += e[(i >> r) & (t - 1)])\n\treturn r > 0 && (o += e[(i << (Math.log2(t) - r)) & (t - 1)]), o.length % 4 !== 0 && (o += '='.repeat(4 - (o.length % 4))), o\n}\nfunction hexToUint8Array(n) {\n\t;(n.startsWith('0x') || n.startsWith('0X')) && (n = n.slice(2))\n\tconst e = n.length / 2,\n\t\tt = new Uint8Array(e)\n\tfor (let r = 0; r < e; r++) {\n\t\tconst i = parseInt(n.slice(r * 2, r * 2 + 2), 16)\n\t\tt[r] = i\n\t}\n\treturn t\n}\nfunction uint8ArrayToHex(n) {\n\treturn Array.from(n)\n\t\t.map(e => e.toString(16).padStart(2, '0'))\n\t\t.join('')\n}\nfunction uint8ArrayToBinary(n) {\n\treturn Array.from(n)\n\t\t.map(e => e.toString(2).padStart(8, '0'))\n\t\t.join('')\n}\nfunction binaryToUint8Array(n) {\n\tconst e = Math.ceil(n.length / 8),\n\t\tt = new Uint8Array(e)\n\tfor (let r = 0; r < e; r++) {\n\t\tconst i = parseInt(n.slice(r * 8, r * 8 + 8), 2)\n\t\tt[r] = i\n\t}\n\treturn t\n}\nfunction route(n, e) {\n\tconst t = n.split('/').filter(o => o),\n\t\tr = e.split('/').filter(o => o)\n\tif (t.length !== r.length) return null\n\tconst i = {}\n\tfor (let o = 0; o < t.length; o++) {\n\t\tconst u = t[o]\n\t\tif (u.startsWith(':')) i[u.slice(1)] = r[o]\n\t\telse if (u !== r[o]) return null\n\t}\n\treturn i\n}\nfunction explodeReplace(n, e, t) {\n\tconst r = []\n\tfor (const i of t) i !== e && r.push(n.replace(e, i))\n\treturn r\n}\nfunction generateVariants(n, e, t, r = Math.random) {\n\tconst i = exports.Arrays.shuffle(\n\t\t\te.map(u => ({\n\t\t\t\tvariants: exports.Arrays.shuffle(\n\t\t\t\t\tu.variants.map(s => s),\n\t\t\t\t\tr\n\t\t\t\t),\n\t\t\t\tavoid: u.avoid\n\t\t\t})),\n\t\t\tr\n\t\t),\n\t\to = []\n\tfor (const u of i) {\n\t\tconst s = u.variants.filter(f => f !== u.avoid),\n\t\t\tc = s.find(f => n.includes(f))\n\t\tif (c && (pushAll(o, explodeReplace(n, c, s)), o.length >= t)) break\n\t}\n\tif (o.length < t)\n\t\tfor (const u of i) {\n\t\t\tconst s = u.variants.find(c => n.includes(c))\n\t\t\tif (s && (pushAll(o, explodeReplace(n, s, u.variants)), o.length >= t)) break\n\t\t}\n\treturn o.slice(0, t)\n}\nfunction replaceWord(n, e, t, r = !1) {\n\tconst i = new RegExp(r ? `(?<=\\\\s|^)${e}(?=\\\\s|$)` : `\\\\b${e}\\\\b`, 'g')\n\treturn n.replace(i, t)\n}\nfunction replacePascalCaseWords(n, e) {\n\tconst t = /\\b[A-Z][a-zA-Z0-9]*\\b/g\n\treturn n.replace(t, r => (r.toUpperCase() === r ? r : e(r)))\n}\nfunction stripHtml(n) {\n\treturn n.replace(/<[^>]*>/g, '')\n}\nfunction breakLine(n) {\n\tconst e = n.lastIndexOf(' ')\n\tif (e === -1) return { line: n, rest: '' }\n\tconst t = n.slice(0, e),\n\t\tr = n.slice(e + 1)\n\treturn { line: t, rest: r }\n}\nfunction measureTextWidth(n, e = {}) {\n\treturn [...n].reduce((t, r) => t + (e[r] || 1), 0)\n}\nfunction toLines(n, e, t = {}) {\n\tconst r = []\n\tlet i = '',\n\t\to = 0\n\tfor (let u = 0; u < n.length; u++) {\n\t\tconst s = n[u],\n\t\t\tc = t[s] || 1\n\t\tif (((i += s), (o += c), o > e)) {\n\t\t\tconst { line: f, rest: l } = breakLine(i)\n\t\t\tr.push(f),\n\t\t\t\t(i = l),\n\t\t\t\t(o = l\n\t\t\t\t\t.split('')\n\t\t\t\t\t.map(a => t[a] || 1)\n\t\t\t\t\t.reduce((a, h) => a + h, 0))\n\t\t}\n\t}\n\treturn i && r.push(i), r\n}\nfunction levenshteinDistance(n, e) {\n\tconst t = []\n\tfor (let r = 0; r <= n.length; r++) t[r] = [r]\n\tfor (let r = 0; r <= e.length; r++) t[0][r] = r\n\tfor (let r = 1; r <= n.length; r++)\n\t\tfor (let i = 1; i <= e.length; i++) {\n\t\t\tconst o = n[r - 1] === e[i - 1] ? 0 : 1\n\t\t\tt[r][i] = Math.min(t[r - 1][i] + 1, t[r][i - 1] + 1, t[r - 1][i - 1] + o)\n\t\t}\n\treturn t[n.length][e.length]\n}\nfunction findCommonPrefix(n) {\n\tconst e = n.reduce((r, i) => (r.length < i.length ? r : i))\n\tlet t = ''\n\tfor (let r = 0; r < e.length; r++) {\n\t\tconst i = e[r]\n\t\tif (n.every(o => o[r] === i)) t += i\n\t\telse break\n\t}\n\treturn t\n}\nfunction findCommonDirectory(n) {\n\tconst e = findCommonPrefix(n),\n\t\tt = e.lastIndexOf('/')\n\treturn t === -1 ? '' : e.slice(0, t + 1)\n}\nfunction containsWord(n, e) {\n\treturn new RegExp(`\\\\b${e}\\\\b`).test(n)\n}\nfunction containsWords(n, e, t) {\n\treturn t === 'any' ? e.some(r => containsWord(n, r)) : e.every(r => containsWord(n, r))\n}\nfunction parseHtmlAttributes(n) {\n\tconst e = {},\n\t\tt = n.match(/([a-z\\-]+)=\"([^\"]+)\"/g)\n\tif (t)\n\t\tfor (const r of t) {\n\t\t\tconst [i, o] = splitOnce(r, '=')\n\t\t\te[i] = o.slice(1, o.length - 1)\n\t\t}\n\treturn e\n}\nfunction readNextWord(n, e, t = []) {\n\tlet r = ''\n\tfor (; e < n.length && (isLetterOrDigit(n[e]) || t.includes(n[e])); ) r += n[e++]\n\treturn r\n}\nfunction readWordsAfterAll(n, e, t = []) {\n\tconst r = allIndexOf(n, e),\n\t\ti = []\n\tfor (const o of r) i.push(readNextWord(n, o + e.length, t))\n\treturn i\n}\nfunction resolveVariables(n, e, t = '$', r = ':') {\n\tfor (const i in e) n = resolveVariableWithDefaultSyntax(n, i, e[i], t, r)\n\treturn (n = resolveRemainingVariablesWithDefaults(n)), n\n}\nfunction resolveVariableWithDefaultSyntax(n, e, t, r = '$', i = ':') {\n\tif (t === '') return n\n\tlet o = n.indexOf(`${r}${e}`)\n\tfor (; o !== -1; ) {\n\t\tif (n[o + e.length + 1] === i)\n\t\t\tif (n[o + e.length + 2] === i) n = n.replace(`${r}${e}${i}${i}`, t)\n\t\t\telse {\n\t\t\t\tconst s = readNextWord(n, o + e.length + 2, ['_'])\n\t\t\t\tn = n.replace(`${r}${e}${i}${s}`, t)\n\t\t\t}\n\t\telse n = n.replace(`${r}${e}`, t)\n\t\to = n.indexOf(`${r}${e}`, o + t.length)\n\t}\n\treturn n\n}\nfunction resolveRemainingVariablesWithDefaults(n, e = '$', t = ':') {\n\tlet r = n.indexOf(e)\n\tfor (; r !== -1; ) {\n\t\tconst i = readNextWord(n, r + 1)\n\t\tif (n[r + i.length + 1] === t)\n\t\t\tif (n[r + i.length + 2] === t) n = n.replace(`${e}${i}${t}${t}`, '')\n\t\t\telse {\n\t\t\t\tconst u = readNextWord(n, r + i.length + 2)\n\t\t\t\tn = n.replace(`${e}${i}${t}${u}`, u)\n\t\t\t}\n\t\tr = n.indexOf(e, r + 1)\n\t}\n\treturn n\n}\nfunction resolveMarkdownLinks(n, e) {\n\tlet t = n.indexOf('](')\n\tfor (; t !== -1; ) {\n\t\tconst r = lastIndexOfBefore(n, '[', t),\n\t\t\ti = n.indexOf(')', t)\n\t\tif (r !== -1 && i !== -1) {\n\t\t\tconst [o, u] = n.slice(r + 1, i).split(']('),\n\t\t\t\ts = e(o, u)\n\t\t\tn = n.slice(0, r) + s + n.slice(i + 1)\n\t\t}\n\t\tt = n.indexOf('](', t + 1)\n\t}\n\treturn n\n}\nfunction toQueryString(n, e = !0) {\n\tconst t = Object.entries(n)\n\t\t.filter(([r, i]) => i != null)\n\t\t.map(([r, i]) => `${r}=${encodeURIComponent(i)}`)\n\t\t.join('&')\n\treturn t ? (e ? '?' : '') + t : ''\n}\nfunction parseQueryString(n) {\n\tconst e = {},\n\t\tt = n.split('&')\n\tfor (const r of t) {\n\t\tconst [i, o] = r.split('=')\n\t\ti && o && (e[i] = decodeURIComponent(o))\n\t}\n\treturn e\n}\nfunction hasKey(n, e) {\n\treturn Object.prototype.hasOwnProperty.call(n, e)\n}\nfunction selectMax(n, e) {\n\tlet t = null,\n\t\tr = -1 / 0\n\tfor (const [i, o] of Object.entries(n)) {\n\t\tconst u = e(o)\n\t\tu > r && ((r = u), (t = i))\n\t}\n\treturn t ? [t, n[t]] : null\n}\nfunction reposition(n, e, t, r) {\n\tconst i = n.find(u => u[e] === t),\n\t\to = n.find(u => u[e] === t + r)\n\ti && o ? ((i[e] = t + r), (o[e] = t)) : i && (i[e] = t + r), n.sort((u, s) => asNumber(u[e]) - asNumber(s[e])), n.forEach((u, s) => (u[e] = s + 1))\n}\nfunction unwrapSingleKey(n) {\n\tconst e = Object.keys(n)\n\tif (e.length === 1) return n[e[0]]\n\tthrow new Error('Expected object to have a single key')\n}\nfunction parseKeyValues(n, e = ':') {\n\treturn Object.fromEntries(\n\t\tn\n\t\t\t.map(t => splitOnce(t, e))\n\t\t\t.map(t => (t[0] && t[1] ? [shrinkTrim(t[0]), shrinkTrim(t[1])] : null))\n\t\t\t.filter(t => t)\n\t)\n}\nfunction errorMatches(n, e) {\n\tif (!n) return !1\n\tconst t = n.message\n\treturn typeof t == 'string' && t.includes(e)\n}\nfunction buildUrl(n, e, t) {\n\treturn joinUrl([n, e]) + toQueryString(t || {})\n}\nfunction parseCsv(n, e = ',', t = '\"') {\n\tconst r = []\n\tlet i = '',\n\t\to = !1\n\tconst u = n.split('')\n\tfor (const s of u) s === e && !o ? (r.push(i), (i = '')) : s === t && ((!i && !o) || o) ? (o = !o) : (i += s)\n\treturn r.push(i), r\n}\nfunction humanizeProgress(n) {\n\treturn `[${Math.floor(n.progress * 100)}%] ${humanizeTime(n.deltaMs)} out of ${humanizeTime(n.totalTimeMs)} (${humanizeTime(n.remainingTimeMs)} left) [${Math.round(n.baseTimeMs)} ms each]`\n}\nasync function waitFor(n, e) {\n\tlet t = e.requiredConsecutivePasses || 1,\n\t\tr = 0\n\tfor (let i = 0; i < e.attempts; i++) {\n\t\ttry {\n\t\t\tif (await n()) {\n\t\t\t\tif ((r++, r >= t)) return\n\t\t\t} else r = 0\n\t\t} catch {\n\t\t\tr = 0\n\t\t}\n\t\ti < e.attempts - 1 && (await sleepMillis(e.waitMillis))\n\t}\n\tthrow Error('Timed out waiting for predicate')\n}\nfunction filterAndRemove(n, e) {\n\tconst t = []\n\tfor (let r = n.length - 1; r >= 0; r--) e(n[r]) && t.push(n.splice(r, 1)[0])\n\treturn t\n}\nfunction cloneWithJson(n) {\n\treturn JSON.parse(JSON.stringify(n))\n}\nfunction unixTimestamp(n) {\n\treturn Math.ceil((n || Date.now()) / 1e3)\n}\nfunction isoDate(n) {\n\treturn (n || new Date()).toISOString().slice(0, 10)\n}\nfunction dateTimeSlug(n) {\n\treturn (n || new Date()).toISOString().slice(0, 19).replace(/T|:/g, '-')\n}\nfunction fromUtcString(n) {\n\tconst e = new Date(n)\n\treturn new Date(e.getTime() - e.getTimezoneOffset() * 6e4)\n}\nfunction fromMillis(n) {\n\treturn new Date(n)\n}\nfunction createTimeDigits(n) {\n\treturn String(Math.floor(n)).padStart(2, '0')\n}\nfunction normalizeTime(n) {\n\tlet [e, t] = n.split(':')\n\tisNumber(parseInt(e, 10)) || (e = '0'), isNumber(parseInt(t, 10)) || (t = '0')\n\tlet r = clamp(asInteger(e), 0, 23),\n\t\ti = clamp(asInteger(t), 0, 59)\n\treturn `${createTimeDigits(r)}:${createTimeDigits(i)}`\n}\nfunction humanizeTime(n) {\n\tconst e = Math.floor(n / 36e5)\n\tn = n % 36e5\n\tconst t = Math.floor(n / 6e4)\n\tn = n % 6e4\n\tconst r = Math.floor(n / 1e3)\n\treturn e ? `${createTimeDigits(e)}:${createTimeDigits(t)}:${createTimeDigits(r)}` : `${createTimeDigits(t)}:${createTimeDigits(r)}`\n}\nfunction absoluteDays(n) {\n\treturn Math.floor((isDate(n) ? n.getTime() : n) / 864e5)\n}\nconst DefaultTimestampLabels = { today: (n, e) => createTimeDigits(n) + ':' + createTimeDigits(e), yesterday: () => 'Yesterday', monday: () => 'Mon', tuesday: () => 'Tue', wednesday: () => 'Wed', thursday: () => 'Thu', friday: () => 'Fri', saturday: () => 'Sat', sunday: () => 'Sun', weeks: n => `${n}w` }\nfunction getTimestamp(n, e) {\n\tconst t = new Date(e?.now || Date.now()),\n\t\tr = e?.labels || DefaultTimestampLabels,\n\t\ti = isDate(n) ? n : new Date(n)\n\tif (absoluteDays(t) === absoluteDays(i)) return r.today(i.getUTCHours(), i.getUTCMinutes(), i.getUTCHours() > 12)\n\tif (absoluteDays(t) - absoluteDays(i) === 1) return r.yesterday()\n\tconst o = getDayInfoFromDate(i)\n\treturn absoluteDays(t) - absoluteDays(i) < 7 ? r[o.day]() : r.weeks(Math.round((t.getTime() - i.getTime()) / 6048e5))\n}\nconst DefaultTimeDeltaLabels = { now: () => 'A few seconds', seconds: n => `${n} seconds`, minutes: n => `${n} minutes`, hours: n => `${n} hours`, days: n => `${n} days`, weeks: n => `${n} weeks` }\nfunction getTimeDelta(n, e) {\n\tconst t = e?.now ?? Date.now(),\n\t\tr = e?.labels || DefaultTimeDeltaLabels,\n\t\ti = exports.Types.isDate(n) ? n.getTime() : n\n\tlet o = (t - i) / 1e3\n\treturn o < 10 ? r.now() : o < 120 ? r.seconds(Math.floor(o)) : ((o /= 60), o < 120 ? r.minutes(Math.floor(o)) : ((o /= 60), o < 48 ? r.hours(Math.floor(o)) : ((o /= 24), o < 14 ? r.days(Math.floor(o)) : ((o /= 7), r.weeks(Math.floor(o))))))\n}\nfunction secondsToHumanTime(n, e = DefaultTimeDeltaLabels) {\n\treturn getTimeDelta(0, { now: n * 1e3, labels: e })\n}\nfunction countCycles(n, e, t) {\n\tconst i = (t?.now ?? Date.now()) - n,\n\t\to = Math.floor(i / e),\n\t\tu = e / (t?.precision ?? 1) - Math.ceil((i % e) / (t?.precision ?? 1))\n\treturn { cycles: o, remaining: u }\n}\nconst throttleTimers = {}\nfunction throttle(n, e) {\n\treturn !throttleTimers[n] || Date.now() > throttleTimers[n] ? ((throttleTimers[n] = Date.now() + e), !0) : !1\n}\nconst timeUnits = { s: 1e3, m: 6e4, h: 36e5, d: 864e5 }\nfunction timeSince(n, e, t) {\n\treturn (e = isDate(e) ? e.getTime() : e), (t = t ? (isDate(t) ? t.getTime() : t) : Date.now()), (t - e) / timeUnits[n]\n}\nfunction getProgress(n, e, t, r) {\n\tr || (r = Date.now())\n\tconst i = e / t,\n\t\to = r - n,\n\t\tu = o / e,\n\t\ts = u * t,\n\t\tc = s - o\n\treturn { deltaMs: o, progress: i, baseTimeMs: u, totalTimeMs: s, remainingTimeMs: c }\n}\nconst dayNumberIndex = { 0: 'sunday', 1: 'monday', 2: 'tuesday', 3: 'wednesday', 4: 'thursday', 5: 'friday', 6: 'saturday' }\nfunction mapDayNumber(n) {\n\treturn { zeroBasedIndex: n, day: dayNumberIndex[n] }\n}\nfunction getDayInfoFromDate(n) {\n\treturn mapDayNumber(n.getDay())\n}\nfunction getDayInfoFromDateTimeString(n) {\n\treturn getDayInfoFromDate(new Date(n))\n}\nfunction seconds(n) {\n\treturn n * 1e3\n}\nfunction minutes(n) {\n\treturn n * 6e4\n}\nfunction hours(n) {\n\treturn n * 36e5\n}\nfunction days(n) {\n\treturn n * 864e5\n}\nconst dateUnits = { ms: 1, milli: 1, millis: 1, millisecond: 1, milliseconds: 1, s: 1e3, sec: 1e3, second: 1e3, seconds: 1e3, m: 6e4, min: 6e4, minute: 6e4, minutes: 6e4, h: 36e5, hour: 36e5, hours: 36e5, d: 864e5, day: 864e5, days: 864e5, w: 6048e5, week: 6048e5, weeks: 6048e5, month: 2592e6, months: 2592e6, y: 31536e6, year: 31536e6, years: 31536e6 }\nfunction makeDate(n) {\n\tconst e = parseFloat(n)\n\tif (isNaN(e)) throw Error('makeDate got NaN for input')\n\tconst t = n\n\t\t\t.replace(/^-?[0-9.]+/, '')\n\t\t\t.trim()\n\t\t\t.toLowerCase(),\n\t\tr = t === '' ? 1 : dateUnits[t]\n\tif (!r) throw Error(`Unknown unit: \"${t}\"`)\n\treturn Math.ceil(e * r)\n}\nconst storageUnitExponents = { b: 0, byte: 0, bytes: 0, kb: 1, kilobyte: 1, kilobytes: 1, mb: 2, megabyte: 2, megabytes: 2, gb: 3, gigabyte: 3, gigabytes: 3, tb: 4, terabyte: 4, terabytes: 4 }\nfunction makeStorage(n, e = 1024) {\n\tconst t = parseFloat(n)\n\tif (isNaN(t)) throw Error('makeStorage got NaN for input')\n\tconst r = n\n\t\t\t.replace(/^-?[0-9.]+/, '')\n\t\t\t.trim()\n\t\t\t.toLowerCase(),\n\t\ti = r === '' ? 0 : storageUnitExponents[r]\n\tif (i == null) throw Error(`Unknown unit: \"${r}\"`)\n\treturn Math.ceil(t * e ** i)\n}\nfunction getPreLine(n) {\n\treturn n.replace(/ +/g, ' ').replace(/^ /gm, '')\n}\nconst tinyCache = new Map()\nasync function getCached(n, e, t, r) {\n\tconst i = Date.now(),\n\t\to = tinyCache.get(n)\n\tif (o && o.validUntil > i) return o.value\n\tr?.onMiss?.()\n\ttry {\n\t\tconst u = await t()\n\t\treturn tinyCache.set(n, { value: u, validUntil: i + e }), u\n\t} catch (u) {\n\t\tthrow (r?.onFailure?.(u), u)\n\t}\n}\nfunction getCachedDeferred(n, e, t, r) {\n\tconst i = Date.now(),\n\t\to = tinyCache.get(n)\n\tif (o && o.validUntil > i) return o.value\n\tr?.onMiss?.()\n\tconst u = t()\n\treturn (\n\t\ttinyCache.set(n, { value: u, validUntil: i + e }),\n\t\tu.catch(s => {\n\t\t\ttinyCache.delete(n), r?.onFailure?.(s)\n\t\t}),\n\t\tu\n\t)\n}\nfunction deleteFromCache(n) {\n\ttinyCache.delete(n)\n}\nfunction clearCache() {\n\ttinyCache.clear()\n}\nfunction deleteExpiredFromCache() {\n\tconst n = Date.now()\n\tfor (const [e, t] of tinyCache.entries()) t.validUntil <= n && tinyCache.delete(e)\n}\nfunction cacheSize() {\n\treturn tinyCache.size\n}\nfunction joinUrl(n, e = !1) {\n\t;(n = n.filter(o => o)), e && isString(n[1]) && (n[1] = '../' + n[1])\n\tlet t = ''\n\tisString(n[0]) && n[0].includes('://') && ((t = before(n[0], '://') ?? ''), (n[0] = after(n[0], '://') ?? ''))\n\tconst r = n.map(o => String(o)).flatMap(o => o.split('/')),\n\t\ti = []\n\tfor (let o = 0; o < r.length; o++) r[o] !== '.' && (r[o] === '..' ? (!t || i.length > 1) && i.pop() : i.push(r[o]))\n\treturn (t ? t + '://' : '') + i.join('/').replaceAll(/\\/{2,}/g, '/')\n}\nfunction replaceBetweenStrings(n, e, t, r, i = !0) {\n\tconst o = n.indexOf(e),\n\t\tu = n.indexOf(t, o + e.length)\n\tif (o === -1 || u === -1) throw Error('Start or end not found')\n\treturn i ? n.substring(0, o + e.length) + r + n.substring(u) : n.substring(0, o) + r + n.substring(u + t.length)\n}\nfunction describeMarkdown(n) {\n\tlet e = 'p'\n\tn.startsWith('#') ? ((e = 'h1'), (n = n.slice(1).trim())) : n.startsWith('-') && ((e = 'li'), (n = n.slice(1).trim()))\n\tconst t = n[0] === n[0].toUpperCase(),\n\t\tr = /[.?!]$/.test(n),\n\t\ti = /:$/.test(n)\n\treturn { type: e, isCapitalized: t, hasPunctuation: r, endsWithColon: i }\n}\nfunction isBalanced(n, e = '(', t = ')') {\n\tlet r = 0,\n\t\ti = 0\n\tfor (; i < n.length; ) if ((n.startsWith(e, i) ? (r++, (i += e.length)) : n.startsWith(t, i) ? (r--, (i += t.length)) : i++, r < 0)) return !1\n\treturn e === t ? r % 2 === 0 : r === 0\n}\nfunction textToFormat(n) {\n\tn = n.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '')\n\tlet e = n.length\n\tfor (; (n = n.replace(/(\\w+)[\\s,']+\\w+/g, '$1')), n.length !== e; ) e = n.length\n\treturn (n = n.replaceAll(/[A-Z][a-zA-Z0-9]*/g, 'A')), (n = n.replaceAll(/[a-z][a-zA-Z0-9]*/g, 'a')), (n = n.replaceAll(/[\\u4E00-\\u9FA5]+/g, 'Z')), n\n}\nfunction sortObject(n) {\n\tconst t = Object.keys(n).sort((i, o) => i.localeCompare(o)),\n\t\tr = {}\n\tfor (const i of t) r[i] = sortAny(n[i])\n\treturn r\n}\nfunction sortArray(n) {\n\tconst e = []\n\treturn n.sort((t, r) => JSON.stringify(sortAny(t)).localeCompare(JSON.stringify(sortAny(r)))).forEach(t => e.push(sortAny(t))), e\n}\nfunction sortAny(n) {\n\treturn Array.isArray(n) ? sortArray(n) : isObject(n) ? sortObject(n) : n\n}\nfunction deepEquals(n, e) {\n\treturn JSON.stringify(sortAny(n)) === JSON.stringify(sortAny(e))\n}\nfunction deepEqualsEvery(...n) {\n\tfor (let e = 1; e < n.length; e++) if (!deepEquals(n[e - 1], n[e])) return !1\n\treturn !0\n}\nfunction safeParse(n) {\n\ttry {\n\t\treturn JSON.parse(n)\n\t} catch {\n\t\treturn null\n\t}\n}\nfunction createSequence() {\n\tlet n = 0\n\treturn { next: () => n++ }\n}\nfunction createOscillator(n) {\n\tlet e = 0\n\treturn { next: () => n[e++ % n.length] }\n}\nfunction createStatefulToggle(n) {\n\tlet e\n\treturn t => {\n\t\tconst r = t === n && e !== n\n\t\treturn (e = t), r\n\t}\n}\nfunction organiseWithLimits(n, e, t, r, i) {\n\tconst o = {}\n\tfor (const u of Object.keys(e)) o[u] = []\n\t;(o[r] = []), i && (n = n.sort(i))\n\tfor (const u of n) {\n\t\tconst s = u[t],\n\t\t\tc = e[s] ? s : r\n\t\to[c].length >= e[c] ? o[r].push(u) : o[c].push(u)\n\t}\n\treturn o\n}\nfunction diffKeys(n, e) {\n\tconst t = Object.keys(n),\n\t\tr = Object.keys(e)\n\treturn { uniqueToA: t.filter(i => !r.includes(i)), uniqueToB: r.filter(i => !t.includes(i)) }\n}\nfunction pickRandomKey(n) {\n\tconst e = Object.keys(n)\n\treturn e[Math.floor(Math.random() * e.length)]\n}\nfunction mapRandomKey(n, e) {\n\tconst t = pickRandomKey(n)\n\treturn (n[t] = e(n[t])), t\n}\nfunction fromObjectString(n) {\n\treturn (\n\t\t(n = n.replace(\n\t\t\t/\\r\\n/g,\n\t\t\t`\n`\n\t\t)),\n\t\t(n = n.replace(/(\\w+)\\((.+)\\)/g, (e, t, r) => `${t}(${r.replaceAll(',', '&comma;')})`)),\n\t\t(n = n.replace(/(,)(\\s+})/g, '$2')),\n\t\t(n = n.replace(/\\.\\.\\..+?,/g, '')),\n\t\t(n = n.replace(/({\\s+)([a-zA-Z]\\w+),/g, \"$1$2: '$2',\")),\n\t\t(n = n.replace(/(,\\s+)([a-zA-Z]\\w+),/g, \"$1$2: '$2',\")),\n\t\t(n = n.replace(/:(.+)\\?(.+):/g, (e, t, r) => `: (${t.trim()} && ${r.trim()}) ||`)),\n\t\t(n = n.replace(/([a-zA-Z0-9]+)( ?: ?{)/g, '\"$1\"$2')),\n\t\t(n = n.replace(/([a-zA-Z0-9]+) ?: ?(.+?)(,|\\n|})/g, (e, t, r, i) => `\"${t}\":\"${r.trim()}\"${i}`)),\n\t\t(n = n.replace(/(\"'|'\")/g, '\"')),\n\t\t(n = n.replaceAll('&comma;', ',')),\n\t\tJSON.parse(n)\n\t)\n}\nconst thresholds = [1e3, 1e6, 1e9, 1e12, 1e15, 1e18, 1e21, 1e24, 1e27, 1e30, 1e9, 1e16, 1e18, 1e18, 1e18, 1e33],\n\tlongNumberUnits = ['thousand', 'million', 'billion', 'trillion', 'quadrillion', 'quintillion', 'sextillion', 'septillion', 'octillion', 'nonillion', 'gwei', 'bzz', 'btc', 'eth', 'dai', 'decillion'],\n\tshortNumberUnits = ['K', 'M', 'B', 'T', 'Qa', 'Qi', 'Sx', 'Sp', 'O', 'N', 'gwei', 'bzz', 'eth', 'btc', 'dai', 'D']\nfunction fromDecimals(n, e, t) {\n\tlet r = n.length - e\n\tif (r <= 0) return '0.' + '0'.repeat(-r) + n + (t ? ' ' + t : '')\n\tlet i = n.substring(0, r),\n\t\to = n.substring(r)\n\treturn i === '' && (i = '0'), i + '.' + o + (t ? ' ' + t : '')\n}\nfunction formatNumber(n, e) {\n\tconst t = e?.longForm ?? !1,\n\t\tr = e?.unit ? ` ${e.unit}` : '',\n\t\ti = t ? longNumberUnits : shortNumberUnits,\n\t\to = e?.precision ?? 1\n\tif (n < thresholds[0]) return `${n}${r}`\n\tfor (let u = 0; u < thresholds.length - 1; u++) if (n < thresholds[u + 1]) return `${(n / thresholds[u]).toFixed(o)}${t ? ' ' : ''}${i[u]}${r}`\n\treturn `${(n / thresholds[thresholds.length - 1]).toFixed(o)}${t ? ' ' : ''}${i[thresholds.length - 1]}${r}`\n}\nfunction makeNumber(n) {\n\tconst e = parseFloat(n)\n\tif (isNaN(e)) throw Error('makeNumber got NaN for input')\n\tconst t = n.replace(/^-?[0-9.]+/, '').trim(),\n\t\tr = shortNumberUnits.findIndex(i => i.toLowerCase() === t.toLowerCase())\n\treturn r === -1 ? e : e * thresholds[r]\n}\nfunction clamp(n, e, t) {\n\treturn n < e ? e : n > t ? t : n\n}\nfunction increment(n, e, t) {\n\tconst r = n + e\n\treturn r > t ? t : r\n}\nfunction decrement(n, e, t) {\n\tconst r = n - e\n\treturn r < t ? t : r\n}\nfunction runOn(n, e) {\n\treturn e(n), n\n}\nfunction ifPresent(n, e) {\n\tn && e(n)\n}\nfunction mergeArrays(n, e) {\n\tconst t = Object.keys(e)\n\tfor (const r of t) Array.isArray(e[r]) && Array.isArray(n[r]) && pushAll(n[r], e[r])\n}\nfunction empty(n) {\n\treturn n.splice(0, n.length), n\n}\nfunction removeEmptyArrays(n) {\n\tfor (const e of Object.keys(n)) (isEmptyArray(n[e]) || (Array.isArray(n[e]) && n[e].every(t => t == null))) && delete n[e]\n\treturn n\n}\nfunction removeEmptyValues(n) {\n\tfor (const e of Object.entries(n)) (e[1] === null || e[1] === void 0 || (isString(e[1]) && isBlank(e[1]))) && delete n[e[0]]\n\treturn n\n}\nfunction filterObjectKeys(n, e) {\n\tconst t = {}\n\tfor (const [r, i] of Object.entries(n)) e(r) && (t[r] = i)\n\treturn t\n}\nfunction filterObjectValues(n, e) {\n\tconst t = {}\n\tfor (const [r, i] of Object.entries(n)) e(i) && (t[r] = i)\n\treturn t\n}\nfunction mapObject(n, e) {\n\tconst t = {}\n\tfor (const r of Object.entries(n)) t[r[0]] = e(r[1])\n\treturn t\n}\nfunction mapIterable(n, e) {\n\tconst t = []\n\tlet r = 0\n\tfor (const i of n) t.push(e(i, r++))\n\treturn t\n}\nasync function rethrow(n, e) {\n\ttry {\n\t\treturn await n()\n\t} catch {\n\t\tthrow e\n\t}\n}\nfunction setSomeOnObject(n, e, t) {\n\tt != null && (n[e] = t)\n}\nfunction setSomeDeep(n, e, t, r) {\n\tconst i = getDeep(t, r)\n\ti != null && setDeep(n, e, i)\n}\nfunction flip(n) {\n\tconst e = {}\n\tfor (const [t, r] of Object.entries(n)) e[r] = t\n\treturn e\n}\nfunction getAllPermutations(n) {\n\tconst e = Object.keys(n),\n\t\tt = e.map(s => n[s].length),\n\t\tr = t.reduce((s, c) => (s *= c))\n\tlet i = 1\n\tconst o = [1]\n\tfor (let s = 0; s < t.length - 1; s++) (i *= t[s]), o.push(i)\n\tconst u = []\n\tfor (let s = 0; s < r; s++) {\n\t\tconst c = {}\n\t\tfor (let f = 0; f < e.length; f++) {\n\t\t\tconst l = n[e[f]],\n\t\t\t\ta = Math.floor(s / o[f]) % l.length\n\t\t\tc[e[f]] = l[a]\n\t\t}\n\t\tu.push(c)\n\t}\n\treturn u\n}\nfunction countTruthyValues(n) {\n\treturn Object.values(n).filter(e => e).length\n}\nfunction getFlatNotation(n, e, t) {\n\treturn n + (t ? '[' + e + ']' : (n.length ? '.' : '') + e)\n}\nfunction flattenInner(n, e, t, r, i) {\n\tif (!isObject(e)) return e\n\tfor (const [o, u] of Object.entries(e)) {\n\t\tconst s = getFlatNotation(t, o, r)\n\t\tArray.isArray(u) ? (i ? flattenInner(n, u, s, !0, i) : (n[s] = u.map(c => flattenInner(Array.isArray(c) ? [] : {}, c, '', !1, i)))) : isObject(u) ? flattenInner(n, u, s, !1, i) : (n[s] = u)\n\t}\n\treturn n\n}\nfunction flatten(n, e = !1, t) {\n\treturn flattenInner({}, n, t || '', !1, e)\n}\nfunction unflatten(n) {\n\tif (!isObject(n)) return n\n\tconst e = Array.isArray(n) ? [] : {}\n\tfor (const [t, r] of Object.entries(n))\n\t\tArray.isArray(r)\n\t\t\t? setDeep(\n\t\t\t\t\te,\n\t\t\t\t\tt,\n\t\t\t\t\tr.map(i => unflatten(i))\n\t\t\t )\n\t\t\t: setDeep(e, t, r)\n\treturn e\n}\nfunction match(n, e, t) {\n\treturn e[n] ? e[n] : t\n}\nfunction indexArray(n, e) {\n\tconst t = {}\n\tfor (const r of n) {\n\t\tconst i = e(r)\n\t\tt[i] = r\n\t}\n\treturn t\n}\nfunction indexArrayToCollection(n, e) {\n\tconst t = {}\n\tfor (const r of n) {\n\t\tconst i = e(r)\n\t\tt[i] || (t[i] = []), t[i].push(r)\n\t}\n\treturn t\n}\nfunction splitBySize(n, e) {\n\tconst t = []\n\tfor (let r = 0; r < n.length; r += e) t.push(n.slice(r, r + e))\n\treturn t\n}\nfunction splitByCount(n, e) {\n\tconst t = Math.ceil(n.length / e),\n\t\tr = []\n\tfor (let i = 0; i < n.length; i += t) r.push(n.slice(i, i + t))\n\treturn r\n}\nfunction tokenizeByLength(n, e) {\n\tconst t = [],\n\t\tr = Math.ceil(n.length / e)\n\tfor (let i = 0; i < r; i++) t.push(n.slice(i * e, i * e + e))\n\treturn t\n}\nfunction tokenizeByCount(n, e) {\n\tconst t = Math.ceil(n.length / e)\n\treturn tokenizeByLength(n, t)\n}\nfunction makeUnique(n, e) {\n\treturn Object.values(indexArray(n, e))\n}\nfunction countUnique(n, e, t, r, i) {\n\tconst o = e ? n.map(e) : n,\n\t\tu = {}\n\tfor (const c of o) u[c] = (u[c] || 0) + 1\n\tconst s = r ? sortObjectValues(u, i ? (c, f) => c[1] - f[1] : (c, f) => f[1] - c[1]) : u\n\treturn t ? Object.keys(s) : s\n}\nfunction sortObjectValues(n, e) {\n\treturn Object.fromEntries(Object.entries(n).sort(e))\n}\nfunction transformToArray(n) {\n\tconst e = [],\n\t\tt = Object.keys(n),\n\t\tr = n[t[0]].length\n\tfor (let i = 0; i < r; i++) {\n\t\tconst o = {}\n\t\tfor (const u of t) o[u] = n[u][i]\n\t\te.push(o)\n\t}\n\treturn e\n}\nfunction incrementMulti(n, e, t = 1) {\n\tfor (const r of n) r[e] += t\n}\nfunction setMulti(n, e, t) {\n\tfor (const r of n) r[e] = t\n}\nfunction group(n, e) {\n\tconst t = []\n\tlet r = []\n\treturn (\n\t\tn.forEach((i, o) => {\n\t\t\t;(o === 0 || !e(i, n[o - 1])) && ((r = []), t.push(r)), r.push(i)\n\t\t}),\n\t\tt\n\t)\n}\nfunction createBidirectionalMap() {\n\treturn { map: new Map(), keys: [] }\n}\nfunction createTemporalBidirectionalMap() {\n\treturn { map: new Map(), keys: [] }\n}\nfunction pushToBidirectionalMap(n, e, t, r = 100) {\n\tif (n.map.has(e)) {\n\t\tconst i = n.keys.indexOf(e)\n\t\tn.keys.splice(i, 1)\n\t}\n\tif ((n.map.set(e, t), n.keys.push(e), n.keys.length > r)) {\n\t\tconst i = n.keys.shift()\n\t\ti && n.map.delete(i)\n\t}\n}\nfunction unshiftToBidirectionalMap(n, e, t, r = 100) {\n\tif (n.map.has(e)) {\n\t\tconst i = n.keys.indexOf(e)\n\t\tn.keys.splice(i, 1)\n\t}\n\tif ((n.map.set(e, t), n.keys.unshift(e), n.keys.length > r)) {\n\t\tconst i = n.keys.shift()\n\t\ti && n.map.delete(i)\n\t}\n}\nfunction addToTemporalBidirectionalMap(n, e, t, r, i = 100) {\n\tpushToBidirectionalMap(n, e, { validUntil: Date.now() + r, data: t }, i)\n}\nfunction getFromTemporalBidirectionalMap(n, e) {\n\tconst t = n.map.get(e)\n\treturn t && t.validUntil > Date.now() ? t.data : null\n}\nclass Optional {\n\tconstructor(e) {\n\t\tthis.value = e\n\t}\n\tstatic of(e) {\n\t\treturn new Optional(e)\n\t}\n\tstatic empty() {\n\t\treturn new Optional(null)\n\t}\n\tmap(e) {\n\t\treturn new Optional(this.value !== null && this.value !== void 0 ? e(this.value) : null)\n\t}\n\tmapAsync(e) {\n\t\treturn this.value !== null && this.value !== void 0 ? e(this.value).then(t => Optional.of(t)) : Promise.resolve(Optional.empty())\n\t}\n\tifPresent(e) {\n\t\treturn this.value !== null && this.value !== void 0 && e(this.value), this\n\t}\n\tifPresentAsync(e) {\n\t\treturn this.value !== null && this.value !== void 0 ? e(this.value).then(() => this) : Promise.resolve(this)\n\t}\n\tifAbsent(e) {\n\t\treturn (this.value === null || this.value === void 0) && e(), this\n\t}\n\tifAbsentAsync(e) {\n\t\treturn this.value === null || this.value === void 0 ? e().then(() => this) : Promise.resolve(this)\n\t}\n\tgetOrFallback(e) {\n\t\treturn this.value ?? e()\n\t}\n\tgetOrFallbackAsync(e) {\n\t\treturn this.value !== null && this.value !== void 0 ? Promise.resolve(this.value) : e()\n\t}\n\tgetOrThrow() {\n\t\tif (this.value === null || this.value === void 0) throw Error('Optional.value is empty')\n\t\treturn this.value\n\t}\n}\nexports.Optional = Optional\nclass Lazy {\n\tconstructor(e) {\n\t\t;(this.supplier = e), (this.value = null)\n\t}\n\tget() {\n\t\treturn this.value || (this.value = this.supplier()), this.value\n\t}\n}\nexports.Lazy = Lazy\nclass AsyncLazy {\n\tconstructor(e) {\n\t\t;(this.supplier = e), (this.value = null)\n\t}\n\tasync get() {\n\t\treturn this.value || (this.value = await this.supplier()), this.value\n\t}\n}\nexports.AsyncLazy = AsyncLazy\nfunction multicall(n) {\n\treturn () => n.forEach(e => e())\n}\nfunction maxBy(n, e) {\n\treturn n.reduce((t, r) => (e(t) > e(r) ? t : r))\n}\nfunction minBy(n, e) {\n\treturn n.reduce((t, r) => (e(t) < e(r) ? t : r))\n}\nfunction allArrayIndexOf(n, e) {\n\tconst t = []\n\treturn (\n\t\tn.forEach((r, i) => {\n\t\t\te(r) && t.push(i)\n\t\t}),\n\t\tt\n\t)\n}\nfunction findInstance(n, e) {\n\tconst t = n.find(r => r instanceof e)\n\treturn Optional.of(t)\n}\nfunction filterInstances(n, e) {\n\treturn n.filter(t => t instanceof e)\n}\nfunction interleave(n, e) {\n\tconst t = [],\n\t\tr = Math.max(n.length, e.length)\n\tfor (let i = 0; i < r; i++) n[i] && t.push(n[i]), e[i] && t.push(e[i])\n\treturn t\n}\nfunction toggle(n, e) {\n\treturn n.includes(e) ? n.filter(t => t !== e) : [...n, e]\n}\nclass Node {\n\tconstructor(e) {\n\t\t;(this.value = e), (this.children = [])\n\t}\n}\nfunction createHierarchy(n, e, t, r, i = !1) {\n\tconst o = new Map(),\n\t\tu = []\n\tn.forEach(c => {\n\t\tconst f = new Node(c)\n\t\to.set(c[e], f)\n\t}),\n\t\tn.forEach(c => {\n\t\t\tconst f = o.get(c[e])\n\t\t\tif (!f) return\n\t\t\tconst l = c[t]\n\t\t\tif (l) {\n\t\t\t\tconst a = o.get(l)\n\t\t\t\ta && a.children.push(f)\n\t\t\t} else u.push(f)\n\t\t})\n\tconst s = c => {\n\t\tc.children.sort((f, l) => {\n\t\t\tconst a = f.value[r],\n\t\t\t\th = l.value[r]\n\t\t\treturn i ? h - a : a - h\n\t\t}),\n\t\t\tc.children.forEach(s)\n\t}\n\treturn u.forEach(s), u\n}\nfunction log2Reduce(n, e) {\n\tif (Math.log2(n.length) % 1 !== 0) throw new Error('Array length must be a power of 2')\n\tlet t = [...n]\n\tfor (; t.length > 1; ) {\n\t\tconst r = []\n\t\tfor (let i = 0; i < t.length; i += 2) {\n\t\t\tconst o = t[i + 1]\n\t\t\tr.push(e(t[i], o))\n\t\t}\n\t\tt = r\n\t}\n\treturn t[0]\n}\nfunction concatBytes(...n) {\n\tconst e = n.reduce((i, o) => i + o.length, 0),\n\t\tt = new Uint8Array(e)\n\tlet r = 0\n\treturn (\n\t\tn.forEach(i => {\n\t\t\tt.set(i, r), (r += i.length)\n\t\t}),\n\t\tt\n\t)\n}\nfunction isPng(n) {\n\treturn n[0] === 137 && n[1] === 80 && n[2] === 78 && n[3] === 71\n}\nfunction isJpg(n) {\n\treturn n[0] === 255 && n[1] === 216\n}\nfunction isWebp(n) {\n\treturn n[8] === 87 && n[9] === 69 && n[10] === 66 && n[11] === 80\n}\nfunction isImage(n) {\n\treturn isPng(n) || isJpg(n) || isWebp(n)\n}\nfunction numberToUint8(n) {\n\treturn new Uint8Array([n])\n}\nfunction uint8ToNumber(n) {\n\treturn n[0]\n}\nfunction numberToUint16(n, e) {\n\tconst t = new ArrayBuffer(2)\n\treturn new DataView(t).setUint16(0, n, e === 'LE'), new Uint8Array(t)\n}\nfunction uint16ToNumber(n, e) {\n\treturn new DataView(n.buffer).getUint16(n.byteOffset, e === 'LE')\n}\nfunction numberToUint32(n, e) {\n\tconst t = new ArrayBuffer(4)\n\treturn new DataView(t).setUint32(0, n, e === 'LE'), new Uint8Array(t)\n}\nfunction uint32ToNumber(n, e) {\n\treturn new DataView(n.buffer).getUint32(n.byteOffset, e === 'LE')\n}\nfunction numberToUint64(n, e) {\n\tconst t = new ArrayBuffer(8)\n\treturn new DataView(t).setBigUint64(0, BigInt(n), e === 'LE'), new Uint8Array(t)\n}\nfunction uint64ToNumber(n, e) {\n\treturn new DataView(n.buffer).getBigUint64(n.byteOffset, e === 'LE')\n}\nfunction numberToUint256(n, e) {\n\tconst r = new Uint8Array(32)\n\tlet i = n\n\tif (e === 'LE') {\n\t\tfor (let o = 0; o < 32; o++) (r[o] = Number(i & 0xffn)), (i >>= 8n)\n\t\treturn r\n\t}\n\tfor (let o = 31; o >= 0; o--) (r[o] = Number(i & 0xffn)), (i >>= 8n)\n\treturn r\n}\nfunction uint256ToNumber(n, e) {\n\tlet r = 0n\n\tif (e === 'LE') {\n\t\tfor (let i = 31; i >= 0; i--) r = (r << 8n) | BigInt(n[i])\n\t\treturn r\n\t}\n\tfor (let i = 0; i < 32; i++) r = (r << 8n) | BigInt(n[i])\n\treturn r\n}\nfunction sliceBytes(n, e) {\n\tconst t = []\n\tlet r = 0\n\tfor (const i of e) t.push(n.subarray(r, r + i)), (r += i)\n\treturn t\n}\nfunction partition(n, e) {\n\tconst t = []\n\tfor (let r = 0; r < n.length; r += e) t.push(n.subarray(r, r + e))\n\treturn t\n}\nconst IOTA_CONSTANTS = [0, 1, 0, 32898, 2147483648, 32906, 2147483648, 2147516416, 0, 32907, 0, 2147483649, 2147483648, 2147516545, 2147483648, 32777, 0, 138, 0, 136, 0, 2147516425, 0, 2147483658, 0, 2147516555, 2147483648, 139, 2147483648, 32905, 2147483648, 32771, 2147483648, 32770, 2147483648, 128, 0, 32778, 2147483648, 2147483658, 2147483648, 2147516545, 2147483648, 32896, 0, 2147483649, 2147483648, 2147516424]\nfunction keccakPermutate(n) {\n\tfor (let e = 0; e < 24; e++) {\n\t\tconst t = n[0] ^ n[10] ^ n[20] ^ n[30] ^ n[40],\n\t\t\tr = n[1] ^ n[11] ^ n[21] ^ n[31] ^ n[41],\n\t\t\ti = n[2] ^ n[12] ^ n[22] ^ n[32] ^ n[42],\n\t\t\to = n[3] ^ n[13] ^ n[23] ^ n[33] ^ n[43],\n\t\t\tu = n[4] ^ n[14] ^ n[24] ^ n[34] ^ n[44],\n\t\t\ts = n[5] ^ n[15] ^ n[25] ^ n[35] ^ n[45],\n\t\t\tc = n[6] ^ n[16] ^ n[26] ^ n[36] ^ n[46],\n\t\t\tf = n[7] ^ n[17] ^ n[27] ^ n[37] ^ n[47],\n\t\t\tl = n[8] ^ n[18] ^ n[28] ^ n[38] ^ n[48],\n\t\t\ta = n[9] ^ n[19] ^ n[29] ^ n[39] ^ n[49],\n\t\t\th = (i << 1) | (o >>> 31),\n\t\t\tbn = (o << 1) | (i >>> 31),\n\t\t\td = l ^ h,\n\t\t\tp = a ^ bn,\n\t\t\t$n = (u << 1) | (s >>> 31),\n\t\t\tEn = (s << 1) | (u >>> 31),\n\t\t\tm = t ^ $n,\n\t\t\tg = r ^ En,\n\t\t\tAn = (c << 1) | (f >>> 31),\n\t\t\tMn = (f << 1) | (c >>> 31),\n\t\t\tw = i ^ An,\n\t\t\tx = o ^ Mn,\n\t\t\tkn = (l << 1) | (a >>> 31),\n\t\t\tSn = (a << 1) | (l >>> 31),\n\t\t\ty = u ^ kn,\n\t\t\tb = s ^ Sn,\n\t\t\tOn = (t << 1) | (r >>> 31),\n\t\t\tTn = (r << 1) | (t >>> 31),\n\t\t\t$ = c ^ On,\n\t\t\tE = f ^ Tn\n\t\t;(n[0] ^= d), (n[1] ^= p), (n[2] ^= m), (n[3] ^= g), (n[4] ^= w), (n[5] ^= x), (n[6] ^= y), (n[7] ^= b), (n[8] ^= $), (n[9] ^= E), (n[10] ^= d), (n[11] ^= p), (n[12] ^= m), (n[13] ^= g), (n[14] ^= w), (n[15] ^= x), (n[16] ^= y), (n[17] ^= b), (n[18] ^= $), (n[19] ^= E), (n[20] ^= d), (n[21] ^= p), (n[22] ^= m), (n[23] ^= g), (n[24] ^= w), (n[25] ^= x), (n[26] ^= y), (n[27] ^= b), (n[28] ^= $), (n[29] ^= E), (n[30] ^= d), (n[31] ^= p), (n[32] ^= m), (n[33] ^= g), (n[34] ^= w), (n[35] ^= x), (n[36] ^= y), (n[37] ^= b), (n[38] ^= $), (n[39] ^= E), (n[40] ^= d), (n[41] ^= p), (n[42] ^= m), (n[43] ^= g), (n[44] ^= w), (n[45] ^= x), (n[46] ^= y), (n[47] ^= b), (n[48] ^= $), (n[49] ^= E)\n\t\tconst A = n[0],\n\t\t\tM = n[1],\n\t\t\tk = (n[2] << 1) | (n[3] >>> 31),\n\t\t\tS = (n[3] << 1) | (n[2] >>> 31),\n\t\t\tO = (n[5] << 30) | (n[4] >>> 2),\n\t\t\tT = (n[4] << 30) | (n[5] >>> 2),\n\t\t\tC = (n[6] << 28) | (n[7] >>> 4),\n\t\t\tR = (n[7] << 28) | (n[6] >>> 4),\n\t\t\tI = (n[8] << 27) | (n[9] >>> 5),\n\t\t\tD = (n[9] << 27) | (n[8] >>> 5),\n\t\t\tB = (n[11] << 4) | (n[10] >>> 28),\n\t\t\tP = (n[10] << 4) | (n[11] >>> 28),\n\t\t\tv = (n[13] << 12) | (n[12] >>> 20),\n\t\t\tU = (n[12] << 12) | (n[13] >>> 20),\n\t\t\tL = (n[14] << 6) | (n[15] >>> 26),\n\t\t\tN = (n[15] << 6) | (n[14] >>> 26),\n\t\t\tj = (n[17] << 23) | (n[16] >>> 9),\n\t\t\tF = (n[16] << 23) | (n[17] >>> 9),\n\t\t\tz = (n[18] << 20) | (n[19] >>> 12),\n\t\t\tq = (n[19] << 20) | (n[18] >>> 12),\n\t\t\tW = (n[20] << 3) | (n[21] >>> 29),\n\t\t\tH = (n[21] << 3) | (n[20] >>> 29),\n\t\t\tV = (n[22] << 10) | (n[23] >>> 22),\n\t\t\tJ = (n[23] << 10) | (n[22] >>> 22),\n\t\t\tK = (n[25] << 11) | (n[24] >>> 21),\n\t\t\tZ = (n[24] << 11) | (n[25] >>> 21),\n\t\t\tQ = (n[26] << 25) | (n[27] >>> 7),\n\t\t\tG = (n[27] << 25) | (n[26] >>> 7),\n\t\t\tY = (n[29] << 7) | (n[28] >>> 25),\n\t\t\tX = (n[28] << 7) | (n[29] >>> 25),\n\t\t\t_ = (n[31] << 9) | (n[30] >>> 23),\n\t\t\tnn = (n[30] << 9) | (n[31] >>> 23),\n\t\t\ten = (n[33] << 13) | (n[32] >>> 19),\n\t\t\ttn = (n[32] << 13) | (n[33] >>> 19),\n\t\t\trn = (n[34] << 15) | (n[35] >>> 17),\n\t\t\ton = (n[35] << 15) | (n[34] >>> 17),\n\t\t\tun = (n[36] << 21) | (n[37] >>> 11),\n\t\t\tcn = (n[37] << 21) | (n[36] >>> 11),\n\t\t\tsn = (n[38] << 8) | (n[39] >>> 24),\n\t\t\tfn = (n[39] << 8) | (n[38] >>> 24),\n\t\t\tln = (n[40] << 18) | (n[41] >>> 14),\n\t\t\tan = (n[41] << 18) | (n[40] >>> 14),\n\t\t\thn = (n[42] << 2) | (n[43] >>> 30),\n\t\t\tdn = (n[43] << 2) | (n[42] >>> 30),\n\t\t\tpn = (n[45] << 29) | (n[44] >>> 3),\n\t\t\tmn = (n[44] << 29) | (n[45] >>> 3),\n\t\t\tgn = (n[47] << 24) | (n[46] >>> 8),\n\t\t\twn = (n[46] << 24) | (n[47] >>> 8),\n\t\t\txn = (n[48] << 14) | (n[49] >>> 18),\n\t\t\tyn = (n[49] << 14) | (n[48] >>> 18)\n\t\t;(n[0] = A ^ (~v & K)), (n[1] = M ^ (~U & Z)), (n[2] = v ^ (~K & un)), (n[3] = U ^ (~Z & cn)), (n[4] = K ^ (~un & xn)), (n[5] = Z ^ (~cn & yn)), (n[6] = un ^ (~xn & A)), (n[7] = cn ^ (~yn & M)), (n[8] = xn ^ (~A & v)), (n[9] = yn ^ (~M & U)), (n[10] = C ^ (~z & W)), (n[11] = R ^ (~q & H)), (n[12] = z ^ (~W & en)), (n[13] = q ^ (~H & tn)), (n[14] = W ^ (~en & pn)), (n[15] = H ^ (~tn & mn)), (n[16] = en ^ (~pn & C)), (n[17] = tn ^ (~mn & R)), (n[18] = pn ^ (~C & z)), (n[19] = mn ^ (~R & q)), (n[20] = k ^ (~L & Q)), (n[21] = S ^ (~N & G)), (n[22] = L ^ (~Q & sn)), (n[23] = N ^ (~G & fn)), (n[24] = Q ^ (~sn & ln)), (n[25] = G ^ (~fn & an)), (n[26] = sn ^ (~ln & k)), (n[27] = fn ^ (~an & S)), (n[28] = ln ^ (~k & L)), (n[29] = an ^ (~S & N)), (n[30] = I ^ (~B & V)), (n[31] = D ^ (~P & J)), (n[32] = B ^ (~V & rn)), (n[33] = P ^ (~J & on)), (n[34] = V ^ (~rn & gn)), (n[35] = J ^ (~on & wn)), (n[36] = rn ^ (~gn & I)), (n[37] = on ^ (~wn & D)), (n[38] = gn ^ (~I & B)), (n[39] = wn ^ (~D & P)), (n[40] = O ^ (~j & Y)), (n[41] = T ^ (~F & X)), (n[42] = j ^ (~Y & _)), (n[43] = F ^ (~X & nn)), (n[44] = Y ^ (~_ & hn)), (n[45] = X ^ (~nn & dn)), (n[46] = _ ^ (~hn & O)), (n[47] = nn ^ (~dn & T)), (n[48] = hn ^ (~O & j)), (n[49] = dn ^ (~T & F)), (n[0] ^= IOTA_CONSTANTS[e * 2]), (n[1] ^= IOTA_CONSTANTS[e * 2 + 1])\n\t}\n}\nfunction bytesToNumbers(n) {\n\tconst e = []\n\tfor (let t = 0; t < n.length; t += 4) e.push(n[t] | (n[t + 1] << 8) | (n[t + 2] << 16) | (n[t + 3] << 24))\n\treturn e\n}\nfunction divideToBlocks(n, e) {\n\tif (!n.length) {\n\t\tconst i = new Uint8Array(136)\n\t\treturn (i[0] = e), (i[135] = 128), [bytesToNumbers(i)]\n\t}\n\tconst t = partition(n, 136),\n\t\tr = t[t.length - 1]\n\tif (r.length < 136) {\n\t\tconst i = new Uint8Array(136)\n\t\ti.set(r), (i[r.length] = e), (i[135] |= 128), (t[t.length - 1] = i)\n\t}\n\tif (r.length === 136) {\n\t\tconst i = new Uint8Array(136)\n\t\t;(i[0] = e), (i[135] = 128), t.push(i)\n\t}\n\treturn t.map(bytesToNumbers)\n}\nfunction absorb(n, e) {\n\tfor (const t of e) {\n\t\tfor (let r = 0; r < 34; r += 2) (n[r] ^= t[r + 1]), (n[r + 1] ^= t[r])\n\t\tkeccakPermutate(n)\n\t}\n\treturn n\n}\nfunction squeeze(n) {\n\treturn new Uint8Array([n[1], n[1] >> -24, n[1] >> -16, n[1] >> -8, n[0], n[0] >> 8, n[0] >> 16, n[0] >> 24, n[3], n[3] >> -24, n[3] >> -16, n[3] >> -8, n[2], n[2] >> 8, n[2] >> 16, n[2] >> 24, n[5], n[5] >> -24, n[5] >> -16, n[5] >> -8, n[4], n[4] >> 8, n[4] >> 16, n[4] >> 24, n[7], n[7] >> -24, n[7] >> -16, n[7] >> -8, n[6], n[6] >> 8, n[6] >> 16, n[6] >> 24])\n}\nfunction keccak256(n) {\n\treturn squeeze(absorb(new Array(50).fill(0), divideToBlocks(n, 1)))\n}\nfunction sha3_256(n) {\n\treturn squeeze(absorb(new Array(50).fill(0), divideToBlocks(n, 6)))\n}\nfunction proximity(n, e) {\n\tconst t = Math.min(n.length, e.length)\n\tfor (let r = 0; r < t; r++) {\n\t\tconst i = n[r] ^ e[r]\n\t\tfor (let o = 0; o < 8; o++) if ((i >> (7 - o)) & 1) return r * 8 + o\n\t}\n\treturn Math.min(n.length, e.length) * 8\n}\nfunction commonPrefix(n, e) {\n\tconst t = Math.min(n.length, e.length)\n\tfor (let r = 0; r < t; r++) if (n[r] !== e[r]) return n.subarray(0, r)\n\treturn n.subarray(0, t)\n}\nfunction setBit(n, e, t, r) {\n\tconst i = Math.floor(e / 8),\n\t\to = e % 8\n\tt === 1 ? (n[i] |= 1 << (r === 'BE' ? 7 - o : o)) : (n[i] &= ~(1 << (r === 'BE' ? 7 - o : o)))\n}\nfunction getBit(n, e, t) {\n\tconst r = Math.floor(e / 8),\n\t\ti = e % 8\n\treturn (n[r] >> (t === 'BE' ? 7 - i : i)) & 1\n}\nfunction binaryIndexOf(n, e, t = 0) {\n\tfor (let r = t; r < n.length; r++) for (let i = 0; i < e.length && n[r + i] === e[i]; i++) if (i === e.length - 1) return r\n\treturn -1\n}\nfunction binaryPadStart(n, e, t = 0) {\n\tif (n.length >= e) return n\n\tconst r = new Uint8Array(e)\n\treturn r.fill(t), r.set(n, e - n.length), r\n}\nfunction binaryPadStartToMultiple(n, e, t = 0) {\n\tconst r = n.length % e\n\treturn r === 0 ? n : binaryPadStart(n, n.length + e - r, t)\n}\nfunction binaryPadEnd(n, e, t = 0) {\n\tif (n.length >= e) return n\n\tconst r = new Uint8Array(e)\n\treturn r.fill(t), r.set(n, 0), r\n}\nfunction binaryPadEndToMultiple(n, e, t = 0) {\n\tconst r = n.length % e\n\treturn r === 0 ? n : binaryPadEnd(n, n.length + e - r, t)\n}\nfunction xorCypher(n, e) {\n\tconst t = new Uint8Array(n.length)\n\tfor (let r = 0; r < n.length; r++) t[r] = n[r] ^ e[r % e.length]\n\treturn t\n}\nfunction isUtf8(n) {\n\tfor (let e = 0; e < n.length; e++) {\n\t\tconst t = n[e]\n\t\tif (!(t < 128))\n\t\t\tif ((t & 224) === 192) {\n\t\t\t\tif (e + 1 >= n.length || (n[e + 1] & 192) !== 128) return !1\n\t\t\t\te += 1\n\t\t\t} else if ((t & 240) === 224) {\n\t\t\t\tif (e + 2 >= n.length || (n[e + 1] & 192) !== 128 || (n[e + 2] & 192) !== 128) return !1\n\t\t\t\te += 2\n\t\t\t} else if ((t & 248) === 240) {\n\t\t\t\tif (e + 3 >= n.length || (n[e + 1] & 192) !== 128 || (n[e + 2] & 192) !== 128 || (n[e + 3] & 192) !== 128) return !1\n\t\t\t\te += 3\n\t\t\t} else return !1\n\t}\n\treturn !0\n}\nfunction binaryEquals(n, e) {\n\tif (n.length !== e.length) return !1\n\tfor (let t = 0; t < n.length; t++) if (n[t] !== e[t]) return !1\n\treturn !0\n}\nfunction mod(n, e) {\n\treturn ((n % e) + e) % e\n}\nfunction modInverse(n, e) {\n\tn = mod(n, e)\n\tlet [t, r] = [0n, 1n],\n\t\t[i, o] = [e, n]\n\tfor (; o !== 0n; ) {\n\t\tconst u = i / o\n\t\t;([t, r] = [r, t - u * r]), ([i, o] = [o, i - u * o])\n\t}\n\tif (i > 1n) throw new Error('a is not invertible')\n\treturn t < 0n && (t += e), t\n}\nfunction modPow(n, e, t) {\n\tlet r = 1n\n\tfor (n = mod(n, t); e > 0; ) e % 2n === 1n && (r = mod(r * n, t)), (n = mod(n * n, t)), (e = e / 2n)\n\treturn r\n}\nfunction modSqrt(n, e) {\n\treturn mod(n, e) === 0n ? 0n : e % 4n === 3n ? modPow(n, (e + 1n) / 4n, e) : null\n}\nconst SECP256K1_P = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2fn,\n\tSECP256K1_N = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141n,\n\tSECP256K1_X = 0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798n,\n\tSECP256K1_Y = 0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8n\nfunction ellipticDouble(n, e, t) {\n\tif (e === 0n) return [0n, 0n]\n\tconst r = mod(3n * n * n * modInverse(2n * e, t), t),\n\t\ti = mod(r * r - 2n * n, t),\n\t\to = mod(r * (n - i) - e, t)\n\treturn [i, o]\n}\nfunction ellipticAdd(n, e, t, r, i) {\n\tif (n === 0n && e === 0n) return [t, r]\n\tif (t === 0n && r === 0n) return [n, e]\n\tif (n === t && e === mod(-r, i)) return [0n, 0n]\n\tif (n === t && e === r) return ellipticDouble(n, e, i)\n\tconst o = mod((r - e) * modInverse(t - n, i), i),\n\t\tu = mod(o * o - n - t, i),\n\t\ts = mod(o * (n - u) - e, i)\n\treturn [u, s]\n}\nfunction privateKeyToPublicKey(n) {\n\tif (n <= 0n || n >= SECP256K1_N) throw new Error('Invalid private key')\n\treturn doubleAndAdd(SECP256K1_X, SECP256K1_Y, n, SECP256K1_P)\n}\nfunction compressPublicKey(n) {\n\tconst t = n[1] % 2n === 0n ? 2 : 3\n\treturn new Uint8Array([t, ...numberToUint256(n[0], 'BE')])\n}\nfunction publicKeyFromCompressed(n) {\n\tif (n.length !== 33 || (n[0] !== 2 && n[0] !== 3)) throw new Error('Invalid compressed public key')\n\tconst e = uint256ToNumber(n.slice(1), 'BE'),\n\t\tt = modSqrt(mod(e ** 3n + 7n, SECP256K1_P), SECP256K1_P)\n\tif (!t) throw Error('Invalid x: does not correspond to a valid curve point')\n\tconst r = mod(-t, SECP256K1_P),\n\t\ti = t % 2n === 0n\n\treturn [e, n[0] === 2 ? (i ? t : r) : i ? r : t]\n}\nfunction publicKeyToAddress(n) {\n\tconst e = new Uint8Array(20),\n\t\tt = keccak256(concatBytes(numberToUint256(n[0], 'BE'), numberToUint256(n[1], 'BE')))\n\treturn e.set(t.subarray(12)), e\n}\nfunction checksumEncode(n) {\n\tconst e = exports.Binary.uint8ArrayToHex(n),\n\t\tt = exports.Binary.uint8ArrayToHex(exports.Binary.keccak256(new Uint8Array([...e].map(i => i.charCodeAt(0)))))\n\tlet r = '0x'\n\tfor (let i = 0; i < e.length; i++) parseInt(t[i], 16) > 7 ? (r += e[i].toUpperCase()) : (r += e[i])\n\treturn r\n}\nfunction doubleAndAdd(n, e, t, r) {\n\tlet i = [0n, 0n],\n\t\to = [n, e]\n\tconst u = t.toString(2)\n\tfor (const s of u) s === '0' ? ((o = ellipticAdd(i[0], i[1], o[0], o[1], r)), (i = ellipticDouble(i[0], i[1], r))) : ((i = ellipticAdd(i[0], i[1], o[0], o[1], r)), (o = ellipticDouble(o[0], o[1], r)))\n\treturn i\n}\nfunction signMessage(n, e, t) {\n\treturn signHash(uint256ToNumber(keccak256(n), 'BE'), e, t)\n}\nfunction signHash(n, e, t) {\n\tif (e <= 0n || e >= SECP256K1_N) throw new Error('Invalid private key')\n\tif ((t || (t = mod(uint256ToNumber(keccak256(concatBytes(keccak256(numberToUint256(e, 'BE')), numberToUint256(n, 'BE'))), 'BE'), SECP256K1_N)), t <= 0n || t >= SECP256K1_N)) throw new Error('Invalid nonce')\n\tconst r = mod(n, SECP256K1_N),\n\t\ti = doubleAndAdd(SECP256K1_X, SECP256K1_Y, t, SECP256K1_P),\n\t\to = mod(i[0], SECP256K1_N)\n\tlet u = mod((r + mod(o, SECP256K1_N) * e) * modInverse(t, SECP256K1_N), SECP256K1_N)\n\tif (o === 0n || u === 0n) throw new Error('Invalid r or s value')\n\tlet s = i[1] % 2n === 0n ? 27n : 28n\n\treturn u > SECP256K1_N / 2n && ((u = SECP256K1_N - u), (s = s === 27n ? 28n : 27n)), [o, u, s]\n}\nfunction recoverPublicKey(n, e, t, r) {\n\tconst i = modSqrt(mod(e ** 3n + 7n, SECP256K1_P), SECP256K1_P)\n\tif (!i) throw new Error('Invalid r: does not correspond to a valid curve point')\n\tconst o = r === 27n ? 0n : 1n,\n\t\tu = i % 2n === o ? i : SECP256K1_P - i,\n\t\ts = mod(uint256ToNumber(keccak256(n), 'BE'), SECP256K1_N),\n\t\tc = doubleAndAdd(e, u, t, SECP256K1_P),\n\t\tf = doubleAndAdd(SECP256K1_X, SECP256K1_Y, s, SECP256K1_P),\n\t\tl = ellipticAdd(c[0], c[1], f[0], mod(-f[1], SECP256K1_P), SECP256K1_P)\n\treturn doubleAndAdd(l[0], l[1], modInverse(e, SECP256K1_N), SECP256K1_P)\n}\nfunction verifySignature(n, e, t, r) {\n\tconst i = mod(uint256ToNumber(keccak256(n), 'BE'), SECP256K1_N),\n\t\to = modInverse(r, SECP256K1_N),\n\t\tu = mod(i * o, SECP256K1_N),\n\t\ts = mod(t * o, SECP256K1_N),\n\t\tc = doubleAndAdd(SECP256K1_X, SECP256K1_Y, u, SECP256K1_P),\n\t\tf = doubleAndAdd(e[0], e[1], s, SECP256K1_P),\n\t\tl = ellipticAdd(c[0], c[1], f[0], f[1], SECP256K1_P)\n\treturn t === mod(l[0], SECP256K1_N)\n}\nclass Uint8ArrayReader {\n\tconstructor(e) {\n\t\t;(this.cursor = 0), (this.buffer = e)\n\t}\n\tread(e) {\n\t\tconst t = this.buffer.subarray(this.cursor, this.cursor + e)\n\t\treturn (this.cursor += e), t\n\t}\n\tmax() {\n\t\treturn this.buffer.length - this.cursor\n\t}\n}\nexports.Uint8ArrayReader = Uint8ArrayReader\nclass Uint8ArrayWriter {\n\tconstructor(e) {\n\t\t;(this.buffer = e), (this.cursor = 0)\n\t}\n\twrite(e) {\n\t\tconst t = Math.min(this.max(), e.max())\n\t\treturn this.buffer.set(e.read(t), this.cursor), (this.cursor += t), t\n\t}\n\tmax() {\n\t\treturn this.buffer.length - this.cursor\n\t}\n}\nexports.Uint8ArrayWriter = Uint8ArrayWriter\nclass Chunk {\n\tconstructor(e, t = 0n) {\n\t\t;(this.span = t), (this.writer = new Uint8ArrayWriter(new Uint8Array(e)))\n\t}\n\tbuild() {\n\t\treturn concatBytes(numberToUint64(this.span, 'LE'), this.writer.buffer)\n\t}\n\thash() {\n\t\tconst e = log2Reduce(partition(this.writer.buffer, 32), (t, r) => Chunk.hashFunction(concatBytes(t, r)))\n\t\treturn Chunk.hashFunction(concatBytes(numberToUint64(this.span, 'LE'), e))\n\t}\n}\n;(exports.Chunk = Chunk), (Chunk.hashFunction = keccak256)\nclass MerkleTree {\n\tconstructor(e, t = 4096) {\n\t\t;(this.counters = [1]), (this.capacity = t), (this.chunks = [new Chunk(t)]), (this.onChunk = e)\n\t}\n\tstatic async root(e, t = 4096) {\n\t\tconst r = new _a(_a.NOOP, t)\n\t\treturn await r.append(e), r.finalize()\n\t}\n\tasync append(e, t = 0, r = 0n) {\n\t\tconst i = new Uint8ArrayReader(e)\n\t\tfor (; i.max() > 0; ) {\n\t\t\tthis.chunks[t].writer.max() === 0 && (await this.elevate(t))\n\t\t\tconst o = this.chunks[t].writer.write(i)\n\t\t\tr ? (this.chunks[t].span += r) : (this.chunks[0].span += BigInt(o))\n\t\t}\n\t}\n\tasync elevate(e) {\n\t\t;(this.counters[e] = ++this.counters[e] % (this.capacity / 32)), this.chunks[e + 1] || (this.chunks.push(new Chunk(this.capacity)), this.counters.push(1)), await this.append(this.chunks[e].hash(), e + 1, this.chunks[e].span), await this.onChunk(this.chunks[e]), (this.chunks[e] = new Chunk(this.capacity))\n\t}\n\tasync finalize(e = 0) {\n\t\treturn this.chunks[e + 1] ? (this.counters[e] === 1 ? (await this.elevate(e + 1), (this.chunks[e + 1] = this.chunks[e]), this.finalize(e + 1)) : (await this.elevate(e), this.finalize(e + 1))) : (await this.onChunk(this.chunks[e]), this.chunks[e])\n\t}\n}\n;(exports.MerkleTree = MerkleTree), (_a = MerkleTree), (MerkleTree.NOOP = async n => {})\nclass FixedPointNumber {\n\tconstructor(e, t) {\n\t\tif (t < 0) throw Error('Scale must be non-negative')\n\t\t;(this.value = BigInt(e)), (this.scale = t)\n\t}\n\tstatic cast(e) {\n\t\tif (!e) throw Error('Cannot cast falsy value to FixedPointNumber')\n\t\tif (e instanceof FixedPointNumber) return e\n\t\tconst t = asBigint(e.value),\n\t\t\tr = asNumber(e.scale)\n\t\treturn new FixedPointNumber(t, r)\n\t}\n\tstatic fromDecimalString(e, t) {\n\t\t;/e\\-\\d+$/i.test(e) && (e = parseFloat(e).toFixed(t))\n\t\tlet [r, i] = e.split('.')\n\t\treturn (i = (i || '').padEnd(t, '0').slice(0, t)), new FixedPointNumber(BigInt(r + i), t)\n\t}\n\tstatic fromFloat(e, t) {\n\t\treturn FixedPointNumber.fromDecimalString(e.toString(), t)\n\t}\n\tadd(e) {\n\t\treturn this.assertSameScale(e), new FixedPointNumber(this.value + e.value, this.scale)\n\t}\n\tsubtract(e) {\n\t\treturn this.assertSameScale(e), new FixedPointNumber(this.value - e.value, this.scale)\n\t}\n\tmultiply(e) {\n\t\treturn new FixedPointNumber(this.value * e, this.scale)\n\t}\n\tdivmod(e) {\n\t\tif (e === 0n) throw new Error('Division by zero is not allowed')\n\t\tconst t = this.value / e,\n\t\t\tr = this.value % e\n\t\treturn [new FixedPointNumber(t, this.scale), new FixedPointNumber(r, this.scale)]\n\t}\n\texchange(e, t, r) {\n\t\tif (e === '*') {\n\t\t\tconst o = (this.value * t.value) / 10n ** BigInt(this.scale)\n\t\t\treturn new FixedPointNumber(o, r)\n\t\t}\n\t\tthis.assertSameScale(t)\n\t\tconst i = (this.value * 10n ** BigInt(r)) / t.value\n\t\treturn new FixedPointNumber(i, r)\n\t}\n\tcompare(e) {\n\t\treturn this.assertSameScale(e), this.value > e.value ? 1 : this.value < e.value ? -1 : 0\n\t}\n\ttoDecimalString() {\n\t\tif (this.scale === 0) return this.value.toString()\n\t\tconst e = this.value.toString(),\n\t\t\tt = e.slice(0, -this.scale) || '0',\n\t\t\tr = e.slice(-this.scale).padStart(this.scale, '0')\n\t\treturn `${t}.${r}`\n\t}\n\ttoString() {\n\t\treturn this.value.toString()\n\t}\n\ttoJSON() {\n\t\treturn this.toString()\n\t}\n\ttoFloat() {\n\t\treturn parseFloat(this.toDecimalString())\n\t}\n\tassertSameScale(e) {\n\t\tif (this.scale !== e.scale) throw new Error(`Scale mismatch: expected ${this.scale}, but got ${e.scale}`)\n\t}\n}\nexports.FixedPointNumber = FixedPointNumber\nfunction tickPlaybook(n) {\n\tif (n.length === 0) return null\n\tconst e = n[0]\n\treturn e.ttlMax ? --e.ttl <= 0 && n.shift() : (e.ttlMax = e.ttl), { progress: (e.ttlMax - e.ttl) / e.ttlMax, data: e.data }\n}\nfunction getArgument(n, e, t, r) {\n\tconst i = n.findIndex(s => s === `--${e}` || s.startsWith(`--${e}=`)),\n\t\to = n[i]\n\tif (!o) return (t || {})[r || e || ''] || null\n\tif (o.includes('=')) return o.split('=')[1]\n\tconst u = n[i + 1]\n\treturn u && !u.startsWith('-') ? u : (t || {})[r || e || ''] || null\n}\nfunction getNumberArgument(n, e, t, r) {\n\tconst i = getArgument(n, e, t, r)\n\tif (!i) return null\n\ttry {\n\t\treturn makeNumber(i)\n\t} catch {\n\t\tthrow new Error(`Invalid number argument ${e}: ${i}`)\n\t}\n}\nfunction getBooleanArgument(n, e, t, r) {\n\tconst i = n.some(c => c.endsWith('-' + e)),\n\t\to = getArgument(n, e, t, r)\n\tif (!o && i) return !0\n\tif (!o && !i) return null\n\tconst u = ['true', '1', 'yes', 'y', 'on'],\n\t\ts = ['false', '0', 'no', 'n', 'off']\n\tif (u.includes(o.toLowerCase())) return !0\n\tif (s.includes(o.toLowerCase())) return !1\n\tthrow Error(`Invalid boolean argument ${e}: ${o}`)\n}\nfunction requireStringArgument(n, e, t, r) {\n\tconst i = getArgument(n, e, t, r)\n\tif (!i) throw new Error(`Missing argument ${e}`)\n\treturn i\n}\nfunction requireNumberArgument(n, e, t, r) {\n\tconst i = requireStringArgument(n, e, t, r)\n\ttry {\n\t\treturn makeNumber(i)\n\t} catch {\n\t\tthrow new Error(`Invalid argument ${e}: ${i}`)\n\t}\n}\nfunction bringToFrontInPlace(n, e) {\n\tconst t = n[e]\n\tn.splice(e, 1), n.unshift(t)\n}\nfunction bringToFront(n, e) {\n\tconst t = [...n]\n\treturn bringToFrontInPlace(t, e), t\n}\nfunction addPoint(n, e) {\n\treturn { x: n.x + e.x, y: n.y + e.y }\n}\nfunction subtractPoint(n, e) {\n\treturn { x: n.x - e.x, y: n.y - e.y }\n}\nfunction multiplyPoint(n, e) {\n\treturn { x: n.x * e, y: n.y * e }\n}\nfunction normalizePoint(n) {\n\tconst e = Math.sqrt(n.x * n.x + n.y * n.y)\n\treturn { x: n.x / e, y: n.y / e }\n}\nfunction pushPoint(n, e, t) {\n\treturn { x: n.x + Math.cos(e) * t, y: n.y + Math.sin(e) * t }\n}\nfunction getDistanceBetweenPoints(n, e) {\n\treturn Math.sqrt((n.x - e.x) ** 2 + (n.y - e.y) ** 2)\n}\nfunction filterCoordinates(n, e, t = 'row-first') {\n\tconst r = []\n\tif (t === 'column-first') for (let i = 0; i < n.length; i++) for (let o = 0; o < n[0].length; o++) e(i, o) && r.push({ x: i, y: o })\n\telse for (let i = 0; i < n[0].length; i++) for (let o = 0; o < n.length; o++) e(o, i) && r.push({ x: o, y: i })\n\treturn r\n}\nfunction isHorizontalLine(n, e, t) {\n\treturn n[e + 1]?.[t] && n[e - 1]?.[t] && !n[e][t - 1] && !n[e][t + 1]\n}\nfunction isVerticalLine(n, e, t) {\n\treturn n[e][t + 1] && n[e][t - 1] && !n[e - 1]?.[t] && !n[e + 1]?.[t]\n}\nfunction isLeftmost(n, e, t) {\n\treturn !n[e - 1]?.[t]\n}\nfunction isRightmost(n, e, t) {\n\treturn !n[e + 1]?.[t]\n}\nfunction isTopmost(n, e, t) {\n\treturn !n[e][t - 1]\n}\nfunction isBottommost(n, e, t) {\n\treturn !n[e][t + 1]\n}\nfunction getCorners(n, e, t) {\n\tconst r = []\n\treturn n[e][t] ? (isHorizontalLine(n, e, t) || isVerticalLine(n, e, t) ? [] : (!n[e - 1]?.[t - 1] && isLeftmost(n, e, t) && isTopmost(n, e, t) && r.push({ x: e, y: t }), !n[e + 1]?.[t - 1] && isRightmost(n, e, t) && isTopmost(n, e, t) && r.push({ x: e + 1, y: t }), !n[e - 1]?.[t + 1] && isLeftmost(n, e, t) && isBottommost(n, e, t) && r.push({ x: e, y: t + 1 }), !n[e + 1]?.[t + 1] && isRightmost(n, e, t) && isBottommost(n, e, t) && r.push({ x: e + 1, y: t + 1 }), r)) : (n[e - 1]?.[t] && n[e][t - 1] && r.push({ x: e, y: t }), n[e + 1]?.[t] && n[e][t - 1] && r.push({ x: e + 1, y: t }), n[e - 1]?.[t] && n[e][t + 1] && r.push({ x: e, y: t + 1 }), n[e + 1]?.[t] && n[e][t + 1] && r.push({ x: e + 1, y: t + 1 }), r)\n}\nfunction findCorners(n, e, t, r) {\n\tconst i = [\n\t\t{ x: 0, y: 0 },\n\t\t{ x: t, y: 0 },\n\t\t{ x: 0, y: r },\n\t\t{ x: t, y: r }\n\t]\n\tfor (let o = 0; o < n.length; o++)\n\t\tfor (let u = 0; u < n[0].length; u++) {\n\t\t\tconst s = getCorners(n, o, u)\n\t\t\tfor (const c of s) i.some(f => f.x === c.x && f.y === c.y) || i.push(c)\n\t\t}\n\treturn i.map(o => ({ x: o.x * e, y: o.y * e }))\n}\nfunction findLines(n, e) {\n\tconst t = filterCoordinates(n, (c, f) => n[c][f] === 0 && n[c][f + 1] !== 0, 'row-first').map(c => ({ ...c, dx: 1, dy: 0 })),\n\t\tr = filterCoordinates(n, (c, f) => n[c][f] === 0 && n[c][f - 1] !== 0, 'row-first').map(c => ({ ...c, dx: 1, dy: 0 })),\n\t\ti = filterCoordinates(n, (c, f) => n[c][f] === 0 && n[c - 1]?.[f] !== 0, 'column-first').map(c => ({ ...c, dx: 0, dy: 1 })),\n\t\to = filterCoordinates(n, (c, f) => n[c][f] === 0 && n[c + 1]?.[f] !== 0, 'column-first').map(c => ({ ...c, dx: 0, dy: 1 }))\n\tt.forEach(c => c.y++), o.forEach(c => c.x++)\n\tconst u = group([...i, ...o], (c, f) => c.x === f.x && c.y - 1 === f.y),\n\t\ts = group([...r, ...t], (c, f) => c.y === f.y && c.x - 1 === f.x)\n\treturn [...u, ...s].map(c => ({ start: c[0], end: last(c) })).map(c => ({ start: multiplyPoint(c.start, e), end: multiplyPoint(addPoint(c.end, { x: c.start.dx, y: c.start.dy }), e) }))\n}\nfunction getAngleInRadians(n, e) {\n\treturn Math.atan2(e.y - n.y, e.x - n.x)\n}\nfunction getSortedRayAngles(n, e) {\n\treturn e.map(t => getAngleInRadians(n, t)).sort((t, r) => t - r)\n}\nfunction getLineIntersectionPoint(n, e, t, r) {\n\tconst i = (r.y - t.y) * (e.x - n.x) - (r.x - t.x) * (e.y - n.y)\n\tif (i === 0) return null\n\tlet o = n.y - t.y,\n\t\tu = n.x - t.x\n\tconst s = (r.x - t.x) * o - (r.y - t.y) * u,\n\t\tc = (e.x - n.x) * o - (e.y - n.y) * u\n\treturn (o = s / i), (u = c / i), o > 0 && o < 1 && u > 0 && u < 1 ? { x: n.x + o * (e.x - n.x), y: n.y + o * (e.y - n.y) } : null\n}\nfunction raycast(n, e, t) {\n\tconst r = [],\n\t\ti = pushPoint(n, t, 1e4)\n\tfor (const o of e) {\n\t\tconst u = getLineIntersectionPoint(n, i, o.start, o.end)\n\t\tu && r.push(u)\n\t}\n\treturn r.length\n\t\t? r.reduce((o, u) => {\n\t\t\t\tconst s = getDistanceBetweenPoints(n, u),\n\t\t\t\t\tc = getDistanceBetweenPoints(n, o)\n\t\t\t\treturn s < c ? u : o\n\t\t })\n\t\t: null\n}\nfunction raycastCircle(n, e, t) {\n\tconst i = getSortedRayAngles(n, t),\n\t\to = []\n\tfor (const u of i) {\n\t\tconst s = raycast(n, e, u - 0.001),\n\t\t\tc = raycast(n, e, u + 0.001)\n\t\ts && o.push(s), c && o.push(c)\n\t}\n\treturn o\n}\nclass PubSubChannel {\n\tconstructor() {\n\t\tthis.subscribers = []\n\t}\n\tsubscribe(e) {\n\t\treturn (\n\t\t\tthis.subscribers.push(e),\n\t\t\t() => {\n\t\t\t\tthis.subscribers = this.subscribers.filter(t => t !== e)\n\t\t\t}\n\t\t)\n\t}\n\tpublish(e) {\n\t\tthis.subscribers.forEach(t => t(e))\n\t}\n\tclear() {\n\t\tthis.subscribers = []\n\t}\n\tgetSubscriberCount() {\n\t\treturn this.subscribers.length\n\t}\n}\nexports.PubSubChannel = PubSubChannel\nclass AsyncQueue {\n\tconstructor(e, t) {\n\t\t;(this.queue = []), (this.running = 0), (this.onProcessed = new PubSubChannel()), (this.onDrained = new PubSubChannel()), (this.concurrency = e), (this.capacity = t)\n\t}\n\tprocess() {\n\t\tif (this.running >= this.concurrency) return\n\t\tconst e = this.queue.shift()\n\t\te &&\n\t\t\t(this.running++,\n\t\t\te().finally(() => {\n\t\t\t\tthis.running--, this.process(), this.onProcessed.publish(), this.running === 0 && this.onDrained.publish()\n\t\t\t}))\n\t}\n\tenqueue(e) {\n\t\tif (this.queue.length < this.capacity) return this.queue.push(e), this.process(), Promise.resolve()\n\t\tif (this.onProcessed.getSubscriberCount()) throw Error('Queue capacity is full')\n\t\treturn new Promise(t => {\n\t\t\tthis.onProcessed.subscribe(() => {\n\t\t\t\tthis.queue.length < this.capacity && (this.queue.push(e), this.process(), this.onProcessed.clear(), t())\n\t\t\t})\n\t\t})\n\t}\n\tdrain() {\n\t\tif (this.running === 0) return Promise.resolve()\n\t\tif (this.onDrained.getSubscriberCount()) throw Error('Already draining')\n\t\treturn new Promise(e => {\n\t\t\tthis.onDrained.subscribe(() => {\n\t\t\t\tthis.onDrained.clear(), e()\n\t\t\t})\n\t\t})\n\t}\n}\nexports.AsyncQueue = AsyncQueue\nclass TrieRouter {\n\tconstructor() {\n\t\tthis.forks = new Map()\n\t}\n\tinsert(e, t) {\n\t\tif (e.length === 0) {\n\t\t\tthis.handler = t\n\t\t\treturn\n\t\t}\n\t\tconst r = e[0]\n\t\tlet i = r,\n\t\t\to\n\t\tif ((r.startsWith(':') && ((i = ':'), (o = r.slice(1))), !this.forks.has(i))) {\n\t\t\tconst u = new TrieRouter()\n\t\t\to && (u.variableName = o), this.forks.set(i, u)\n\t\t}\n\t\tthis.forks.get(i).insert(e.slice(1), t)\n\t}\n\tasync handle(e, t, r, i) {\n\t\tif (e.length === 0) return this.handler ? (await this.handler(t, r, i), !0) : !1\n\t\tconst o = e[0],\n\t\t\tu = this.forks.get(o)\n\t\tif (u) return u.handle(e.slice(1), t, r, i)\n\t\tconst s = this.forks.get(':')\n\t\tif (s) return s.variableName && i.set(s.variableName, decodeURIComponent(o)), s.handle(e.slice(1), t, r, i)\n\t\tconst c = this.forks.get('*')\n\t\treturn c ? (i.set('wildcard', e.join('/')), c.handler ? (await c.handler(t, r, i), !0) : !1) : !1\n\t}\n}\nexports.TrieRouter = TrieRouter\nclass RollingValueProvider {\n\tconstructor(e) {\n\t\t;(this.index = 0), (this.values = e)\n\t}\n\tcurrent() {\n\t\treturn this.values[this.index]\n\t}\n\tnext() {\n\t\treturn (this.index = (this.index + 1) % this.values.length), this.values[this.index]\n\t}\n}\nexports.RollingValueProvider = RollingValueProvider\nclass Solver {\n\tconstructor() {\n\t\t;(this.status = 'pending'), (this.steps = []), (this.onStatusChange = async () => {}), (this.onStepChange = async () => {}), (this.onFinish = async () => {}), (this.onError = async () => {}), (this.context = new Map())\n\t}\n\tgetStatus() {\n\t\treturn this.status\n\t}\n\tcreateInitialState() {\n\t\treturn Object.fromEntries(this.steps.map(e => [e.name, 'pending']))\n\t}\n\tsetHooks(e) {\n\t\te.onStatusChange && (this.onStatusChange = e.onStatusChange), e.onStepChange && (this.onStepChange = e.onStepChange), e.onFinish && (this.onFinish = e.onFinish), e.onError && (this.onError = e.onError)\n\t}\n\taddStep(e) {\n\t\tif (this.steps.find(t => t.name === e.name)) throw Error(`Step with name ${e.name} already exists`)\n\t\tthis.steps.push(e)\n\t}\n\tasync execute() {\n\t\tif (this.status !== 'pending') throw Error(`Cannot execute solver in status ${this.status}`)\n\t\t;(this.status = 'in-progress'), await this.onStatusChange(this.status)\n\t\tlet e = this.createInitialState()\n\t\tfor (const t of this.steps)\n\t\t\ttry {\n\t\t\t\tif (t.transientSkipStepName) {\n\t\t\t\t\tconst i = e[t.transientSkipStepName]\n\t\t\t\t\tif (i === 'skipped' || i === 'failed') {\n\t\t\t\t\t\t;(e = { ...e, [t.name]: 'skipped' }), await this.onStepChange(e)\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!(t.precondition ? await t.precondition(this.context) : !0)) {\n\t\t\t\t\t;(e = { ...e, [t.name]: 'skipped' }), await this.onStepChange(e)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\t;(e = { ...e, [t.name]: 'in-progress' }), await this.onStepChange(e)\n\t\t\t\tfor (let i = 0; (await t.action(this.context, i)) === 'retry'; i++);\n\t\t\t\t;(e = { ...e, [t.name]: 'completed' }), await this.onStepChange(e)\n\t\t\t} catch (r) {\n\t\t\t\tthrow ((e = { ...e, [t.name]: 'failed' }), (this.status = 'failed'), await this.onStatusChange(this.status), await this.onStepChange(e), await this.onError(r), r)\n\t\t\t}\n\t\treturn (this.status = 'completed'), await this.onStatusChange(this.status), await this.onFinish(), this.context\n\t}\n}\nexports.Solver = Solver\nclass Lock {\n\tconstructor(e) {\n\t\t;(this.queryFunction = e.queryFunction), (this.lockFunction = e.lockFunction), (this.unlockFunction = e.unlockFunction), (this.timeoutMillis = e.timeoutMillis)\n\t}\n\tasync couldLock() {\n\t\tconst e = await this.queryFunction()\n\t\ttry {\n\t\t\tconst t = asInteger(e)\n\t\t\tif (Date.now() < t + this.timeoutMillis) return new Date(t + this.timeoutMillis)\n\t\t} catch {}\n\t\treturn await this.lockFunction(Date.now().toString()), !0\n\t}\n\tasync unlock() {\n\t\tawait this.unlockFunction()\n\t}\n}\n;(exports.Lock = Lock),\n\t(exports.Binary = { hexToUint8Array, uint8ArrayToHex, binaryToUint8Array, uint8ArrayToBinary, base64ToUint8Array, uint8ArrayToBase64, base32ToUint8Array, uint8ArrayToBase32, log2Reduce, partition, concatBytes, numberToUint8, uint8ToNumber, numberToUint16, uint16ToNumber, numberToUint32, uint32ToNumber, numberToUint64, uint64ToNumber, numberToUint256, uint256ToNumber, sliceBytes, keccak256, sha3_256, proximity, commonPrefix, setBit, getBit, indexOf: binaryIndexOf, equals: binaryEquals, padStart: binaryPadStart, padStartToMultiple: binaryPadStartToMultiple, padEnd: binaryPadEnd, padEndToMultiple: binaryPadEndToMultiple, xorCypher, isUtf8 }),\n\t(exports.Elliptic = { privateKeyToPublicKey, compressPublicKey, publicKeyFromCompressed, publicKeyToAddress, signMessage, signHash, verifySignature, recoverPublicKey, checksumEncode }),\n\t(exports.Random = { intBetween, floatBetween, chance, signed: signedRandom, makeSeededRng, point: randomPoint, procs }),\n\t(exports.Arrays = { countUnique, makeUnique, splitBySize, splitByCount, index: indexArray, indexCollection: indexArrayToCollection, onlyOrThrow, onlyOrNull, firstOrThrow, firstOrNull, shuffle, initialize: initializeArray, initialize2D: initialize2DArray, rotate2D: rotate2DArray, containsShape, glue, pluck, pick, pickMany, pickManyUnique, pickWeighted, pickRandomIndices, pickGuaranteed, last, pipe, makePipe, sortWeighted, pushAll, unshiftAll, filterAndRemove, merge: mergeArrays, empty, pushToBucket, unshiftAndLimit, atRolling, group, createOscillator, organiseWithLimits, tickPlaybook, getArgument, getBooleanArgument, getNumberArgument, requireStringArgument, requireNumberArgument, bringToFront, bringToFrontInPlace, findInstance, filterInstances, interleave, toggle, createHierarchy, multicall, maxBy, minBy, allIndexOf: allArrayIndexOf }),\n\t(exports.System = { sleepMillis, forever, scheduleMany, waitFor, expandError, runAndSetInterval, whereAmI, withRetries }),\n\t(exports.Numbers = { make: makeNumber, sum, average, median, getDistanceFromMidpoint, clamp, range, interpolate, createSequence, increment, decrement, format: formatNumber, fromDecimals, makeStorage, asMegabytes, convertBytes, hexToRgb, rgbToHex, haversineDistanceToMeters, roundToNearest, formatDistance, triangularNumber, searchFloat, binomialSample, toSignificantDigits }),\n\t(exports.Promises = { raceFulfilled, invert: invertPromise, runInParallelBatches }),\n\t(exports.Dates = { getTimestamp, getTimeDelta, secondsToHumanTime, countCycles, isoDate, throttle, timeSince, dateTimeSlug, unixTimestamp, fromUtcString, fromMillis, getProgress, humanizeTime, humanizeProgress, createTimeDigits, mapDayNumber, getDayInfoFromDate, getDayInfoFromDateTimeString, seconds, minutes, hours, days, make: makeDate, normalizeTime, absoluteDays }),\n\t(exports.Objects = { safeParse, deleteDeep, getDeep, setDeep, incrementDeep, ensureDeep, replaceDeep, getFirstDeep, deepMergeInPlace, deepMerge2, deepMerge3, mapAllAsync, cloneWithJson, sortObject, sortArray, sortAny, deepEquals, deepEqualsEvery, runOn, ifPresent, zip, zipSum, removeEmptyArrays, removeEmptyValues, flatten, unflatten, match, sort: sortObjectValues, map: mapObject, mapIterable, filterKeys: filterObjectKeys, filterValues: filterObjectValues, rethrow, setSomeOnObject, setSomeDeep, flip, getAllPermutations, countTruthyValues, transformToArray, setMulti, incrementMulti, createBidirectionalMap, createTemporalBidirectionalMap, pushToBidirectionalMap, unshiftToBidirectionalMap, addToTemporalBidirectionalMap, getFromTemporalBidirectionalMap, createStatefulToggle, diffKeys, pickRandomKey, mapRandomKey, fromObjectString, toQueryString, parseQueryString, hasKey, selectMax, reposition, unwrapSingleKey, parseKeyValues, errorMatches }),\n\t(exports.Types = { isFunction, isObject, isStrictlyObject, isEmptyArray, isEmptyObject, isUndefined, isString, isNumber, isBoolean, isDate, isBlank, isId, isIntegerString, isHexString, isUrl, isBigint, isNullable, asString, asHexString, asSafeString, asIntegerString, asNumber, asFunction, asInteger, asBoolean, asDate, asNullableString, asEmptiableString, asId, asTime, asArray, asObject, asNullableObject, asStringMap, asNumericDictionary, asUrl, asBigint, asEmptiable, asNullable, asOptional, enforceObjectShape, enforceArrayShape, isPng, isJpg, isWebp, isImage }),\n\t(exports.Strings = { tokenizeByCount, tokenizeByLength, searchHex, searchSubstring, randomHex: randomHexString, randomLetter: randomLetterString, randomAlphanumeric: randomAlphanumericString, randomRichAscii: randomRichAsciiString, randomUnicode: randomUnicodeString, includesAny, slugify, normalForm, enumify, escapeHtml, decodeHtmlEntities, after, afterLast, before, beforeLast, betweenWide, betweenNarrow, getPreLine, containsWord, containsWords, joinUrl, getFuzzyMatchScore, sortByFuzzyScore, splitOnce, splitAll, randomize, expand, shrinkTrim, capitalize, decapitalize, csvEscape, parseCsv, surroundInOut, getExtension, getBasename, normalizeEmail, normalizeFilename, parseFilename, camelToTitle, slugToTitle, slugToCamel, joinHumanly, findWeightedPair, extractBlock, extractAllBlocks, replaceBlocks, indexOfEarliest, lastIndexOfBefore, parseHtmlAttributes, readNextWord, readWordsAfterAll, resolveVariables, resolveVariableWithDefaultSyntax, resolveRemainingVariablesWithDefaults, isLetter, isDigit, isLetterOrDigit, isValidObjectPathCharacter, insert: insertString, indexOfRegex, allIndexOf, lineMatches, linesMatchInOrder, represent, resolveMarkdownLinks, buildUrl, isChinese, replaceBetweenStrings, describeMarkdown, isBalanced, textToFormat, splitFormatting, splitHashtags, splitUrls, route, explodeReplace, generateVariants, replaceWord, replacePascalCaseWords, stripHtml, breakLine, measureTextWidth, toLines, levenshteinDistance, findCommonPrefix, findCommonDirectory }),\n\t(exports.Assertions = { asEqual, asTrue, asTruthy, asFalse, asFalsy, asEither }),\n\t(exports.Cache = { get: getCached, getDeferred: getCachedDeferred, delete: deleteFromCache, deleteExpired: deleteExpiredFromCache, size: cacheSize, clear: clearCache }),\n\t(exports.Vector = { addPoint, subtractPoint, multiplyPoint, normalizePoint, pushPoint, filterCoordinates, findCorners, findLines, raycast, raycastCircle, getLineIntersectionPoint })\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// tmp name until v2\nexport function _abool2(value, title = '') {\n if (typeof value !== 'boolean') {\n const prefix = title && `\"${title}\"`;\n throw new Error(prefix + 'expected boolean, got type=' + typeof value);\n }\n return value;\n}\n// tmp name until v2\n/** Asserts something is Uint8Array. */\nexport function _abytes2(value, length, title = '') {\n const bytes = isBytes_(value);\n const len = value?.length;\n const needsLen = length !== undefined;\n if (!bytes || (needsLen && len !== length)) {\n const prefix = title && `\"${title}\" `;\n const ofLen = needsLen ? ` of length ${length}` : '';\n const got = bytes ? `length=${len}` : `type=${typeof value}`;\n throw new Error(prefix + 'expected Uint8Array' + ofLen + ', got ' + got);\n }\n return 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 * Copies Uint8Array. We can't use u8a.slice(), because u8a can be Buffer,\n * and Buffer#slice creates mutable copy. Never use Buffers!\n */\nexport function copyBytes(bytes) {\n return Uint8Array.from(bytes);\n}\n/**\n * Decodes 7-bit ASCII string to Uint8Array, throws on non-ascii symbols\n * Should be safe to use for things expected to be ASCII.\n * Returns exact same result as utf8ToBytes for ASCII or throws.\n */\nexport function asciiToBytes(ascii) {\n return Uint8Array.from(ascii, (c, i) => {\n const charCode = c.charCodeAt(0);\n if (c.length !== 1 || charCode > 127) {\n throw new Error(`string contains non-ASCII character \"${ascii[i]}\" with code ${charCode} at position ${i}`);\n }\n return charCode;\n });\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 modFromBytes = 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.modFromBytes === 'boolean')\n modFromBytes = _opts.modFromBytes;\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 (modFromBytes)\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, isLE) {\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, { isLE });\n }\n}\n/** Validates CURVE opts and creates fields */\nexport function _createCurveFields(type, CURVE, curveOpts = {}, FpFnLE) {\n if (FpFnLE === undefined)\n FpFnLE = type === 'edwards';\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, FpFnLE);\n const Fn = createField(CURVE.n, curveOpts.Fn, FpFnLE);\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 CURVE = Object.freeze(Object.assign({}, CURVE));\n return { CURVE, 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 as nobleHmac } from '@noble/hashes/hmac.js';\nimport { ahash } from '@noble/hashes/utils';\nimport { _validateObject, _abool2 as abool, _abytes2 as abytes, aInRange, bitLen, bitMask, bytesToHex, bytesToNumberBE, concatBytes, createHmacDrbg, ensureBytes, hexToBytes, inRange, isBytes, memoized, numberToHexUnpadded, randomBytes as randomBytesWeb, } from \"../utils.js\";\nimport { _createCurveFields, mulEndoUnsafe, negateCt, normalizeZ, pippenger, wNAF, } from \"./curve.js\";\nimport { Field, FpInvertBatch, getMinHashLength, mapHashToField, nLength, 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 validateSigFormat(format) {\n if (!['compact', 'recovered', 'der'].includes(format))\n throw new Error('Signature format must be \"compact\", \"recovered\", or \"der\"');\n return format;\n}\nfunction validateSigOpts(opts, def) {\n const optsn = {};\n for (let optName of Object.keys(def)) {\n // @ts-ignore\n optsn[optName] = opts[optName] === undefined ? def[optName] : opts[optName];\n }\n abool(optsn.lowS, 'lowS');\n abool(optsn.prehash, 'prehash');\n if (optsn.format !== undefined)\n validateSigFormat(optsn.format);\n return optsn;\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);\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}\n/**\n * Creates weierstrass Point constructor, based on specified curve options.\n *\n * @example\n```js\nconst opts = {\n p: BigInt('0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff'),\n n: BigInt('0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551'),\n h: BigInt(1),\n a: BigInt('0xffffffff00000001000000000000000000000000fffffffffffffffffffffffc'),\n b: BigInt('0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b'),\n Gx: BigInt('0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296'),\n Gy: BigInt('0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5'),\n};\nconst p256_Point = weierstrass(opts);\n```\n */\nexport function weierstrassN(params, extraOpts = {}) {\n const validated = _createCurveFields('weierstrass', params, extraOpts);\n const { Fp, Fn } = validated;\n let CURVE = validated.CURVE;\n const { h: cofactor, n: CURVE_ORDER } = CURVE;\n _validateObject(extraOpts, {}, {\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 } = extraOpts;\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 const lengths = getWLengths(Fp, Fn);\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, undefined, 'Point');\n const { publicKey: comp, publicKeyUncompressed: uncomp } = lengths; // e.g. for 32-byte: 33, 65\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 === comp && (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 === uncomp && head === 0x04) {\n // TODO: more checks\n const L = Fp.BYTES;\n const x = Fp.fromBytes(tail.subarray(0, L));\n const y = Fp.fromBytes(tail.subarray(L, 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=${comp} or uncompressed=${uncomp}`);\n }\n }\n const encodePoint = extraOpts.toBytes || pointToBytes;\n const decodePoint = extraOpts.fromBytes || pointFromBytes;\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, CURVE.a)), CURVE.b); // x³ + a * x + b\n }\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 (extraOpts.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 static CURVE() {\n return CURVE;\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 static fromBytes(bytes) {\n const P = Point.fromAffine(decodePoint(abytes(bytes, undefined, 'point')));\n P.assertValidity();\n return P;\n }\n static fromHex(hex) {\n return Point.fromBytes(ensureBytes('pointHex', hex));\n }\n get x() {\n return this.toAffine().x;\n }\n get y() {\n return this.toAffine().y;\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 } = extraOpts;\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 } = extraOpts;\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 } = extraOpts;\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 } = extraOpts;\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 encodePoint(Point, this, 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 // 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 toRawBytes(isCompressed = true) {\n return this.toBytes(isCompressed);\n }\n _setWindowSize(windowSize) {\n this.precompute(windowSize);\n }\n static normalizeZ(points) {\n return normalizeZ(Point, points);\n }\n static msm(points, scalars) {\n return pippenger(Point, Fn, points, scalars);\n }\n static fromPrivateKey(privateKey) {\n return Point.BASE.multiply(_normFnElement(Fn, privateKey));\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 // math field\n Point.Fp = Fp;\n // scalar field\n Point.Fn = Fn;\n const bits = Fn.BITS;\n const wnaf = new wNAF(Point, extraOpts.endo ? Math.ceil(bits / 2) : bits);\n Point.BASE.precompute(8); // Enable precomputes. Slows down first publicKey computation by 20ms.\n return 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}\nfunction getWLengths(Fp, Fn) {\n return {\n secretKey: Fn.BYTES,\n publicKey: 1 + Fp.BYTES,\n publicKeyUncompressed: 1 + 2 * Fp.BYTES,\n publicKeyHasPrefix: true,\n signature: 2 * Fn.BYTES,\n };\n}\n/**\n * Sometimes users only need getPublicKey, getSharedSecret, and secret key handling.\n * This helper ensures no signature functionality is present. Less code, smaller bundle size.\n */\nexport function ecdh(Point, ecdhOpts = {}) {\n const { Fn } = Point;\n const randomBytes_ = ecdhOpts.randomBytes || randomBytesWeb;\n const lengths = Object.assign(getWLengths(Point.Fp, Fn), { seed: getMinHashLength(Fn.ORDER) });\n function isValidSecretKey(secretKey) {\n try {\n return !!_normFnElement(Fn, secretKey);\n }\n catch (error) {\n return false;\n }\n }\n function isValidPublicKey(publicKey, isCompressed) {\n const { publicKey: comp, publicKeyUncompressed } = lengths;\n try {\n const l = publicKey.length;\n if (isCompressed === true && l !== comp)\n return false;\n if (isCompressed === false && l !== publicKeyUncompressed)\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_(lengths.seed)) {\n return mapHashToField(abytes(seed, lengths.seed, 'seed'), Fn.ORDER);\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 function keygen(seed) {\n const secretKey = randomSecretKey(seed);\n return { secretKey, publicKey: getPublicKey(secretKey) };\n }\n /**\n * Quick and dirty check for item being public key. Does not validate hex, or being on-curve.\n */\n function isProbPub(item) {\n if (typeof item === 'bigint')\n return false;\n if (item instanceof Point)\n return true;\n const { secretKey, publicKey, publicKeyUncompressed } = lengths;\n if (Fn.allowedLengths || secretKey === publicKey)\n return undefined;\n const l = ensureBytes('key', item).length;\n return l === publicKey || l === publicKeyUncompressed;\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 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 return Object.freeze({ getPublicKey, getSharedSecret, keygen, Point, utils, lengths });\n}\n/**\n * Creates ECDSA signing interface for given elliptic curve `Point` and `hash` function.\n * We need `hash` for 2 features:\n * 1. Message prehash-ing. NOT used if `sign` / `verify` are called with `prehash: false`\n * 2. k generation in `sign`, using HMAC-drbg(hash)\n *\n * ECDSAOpts are only rarely needed.\n *\n * @example\n * ```js\n * const p256_Point = weierstrass(...);\n * const p256_sha256 = ecdsa(p256_Point, sha256);\n * const p256_sha224 = ecdsa(p256_Point, sha224);\n * const p256_sha224_r = ecdsa(p256_Point, sha224, { randomBytes: (length) => { ... } });\n * ```\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 || randomBytesWeb;\n const hmac = ecdsaOpts.hmac ||\n ((key, ...msgs) => nobleHmac(hash, key, concatBytes(...msgs)));\n const { Fp, Fn } = Point;\n const { ORDER: CURVE_ORDER, BITS: fnBits } = Fn;\n const { keygen, getPublicKey, getSharedSecret, utils, lengths } = ecdh(Point, ecdsaOpts);\n const defaultSigOpts = {\n prehash: false,\n lowS: typeof ecdsaOpts.lowS === 'boolean' ? ecdsaOpts.lowS : false,\n format: undefined, //'compact' as ECDSASigFormat,\n extraEntropy: false,\n };\n const defaultSigOpts_format = 'compact';\n function isBiggerThanHalfOrder(number) {\n const HALF = CURVE_ORDER >> _1n;\n return number > HALF;\n }\n function validateRS(title, num) {\n if (!Fn.isValidNot0(num))\n throw new Error(`invalid signature ${title}: out of range 1..Point.Fn.ORDER`);\n return num;\n }\n function validateSigLength(bytes, format) {\n validateSigFormat(format);\n const size = lengths.signature;\n const sizer = format === 'compact' ? size : format === 'recovered' ? size + 1 : undefined;\n return abytes(bytes, sizer, `${format} signature`);\n }\n /**\n * ECDSA signature with its (r, s) properties. Supports compact, recovered & DER representations.\n */\n class Signature {\n constructor(r, s, recovery) {\n this.r = validateRS('r', r); // r in [1..N-1];\n this.s = validateRS('s', s); // s in [1..N-1];\n if (recovery != null)\n this.recovery = recovery;\n Object.freeze(this);\n }\n static fromBytes(bytes, format = defaultSigOpts_format) {\n validateSigLength(bytes, format);\n let recid;\n if (format === 'der') {\n const { r, s } = DER.toSig(abytes(bytes));\n return new Signature(r, s);\n }\n if (format === 'recovered') {\n recid = bytes[0];\n format = 'compact';\n bytes = bytes.subarray(1);\n }\n const L = Fn.BYTES;\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), recid);\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 recoverPublicKey(messageHash) {\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.fromBytes(concatBytes(pprefix((rec & 1) === 0), x));\n const ir = Fn.inv(radj); // r^-1\n const h = bits2int_modN(ensureBytes('msgHash', messageHash)); // 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 toBytes(format = defaultSigOpts_format) {\n validateSigFormat(format);\n if (format === 'der')\n return hexToBytes(DER.hexFromSig(this));\n const r = Fn.toBytes(this.r);\n const s = Fn.toBytes(this.s);\n if (format === 'recovered') {\n if (this.recovery == null)\n throw new Error('recovery bit must be present');\n return concatBytes(Uint8Array.of(this.recovery), r, s);\n }\n return concatBytes(r, s);\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 normalizeS() {\n return this.hasHighS() ? new Signature(this.r, Fn.neg(this.s), this.recovery) : this;\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 // 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 bits2int_def(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 bits2int_modN_def(bytes) {\n return Fn.create(bits2int(bytes)); // can't use bytesToNumberBE here\n };\n // Pads output with zero as per spec\n const ORDER_MASK = bitMask(fnBits);\n /** Converts to bytes. Checks if num in `[0..ORDER_MASK-1]` e.g.: `[0..2^256-1]`. */\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 function validateMsgAndHash(message, prehash) {\n abytes(message, undefined, 'message');\n return prehash ? abytes(hash(message), undefined, 'prehashed message') : message;\n }\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 *\n * Warning: we cannot assume here that message 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 */\n function prepSig(message, privateKey, opts) {\n if (['recovered', 'canonical'].some((k) => k in opts))\n throw new Error('sign() legacy options not supported');\n const { lowS, prehash, extraEntropy } = validateSigOpts(opts, defaultSigOpts);\n message = validateMsgAndHash(message, prehash); // RFC6979 3.2 A: h1 = H(m)\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(message);\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 (extraEntropy != null && extraEntropy !== false) {\n // K = HMAC_K(V || 0x00 || int2octets(x) || bits2octets(h1) || k')\n // gen random bytes OR pass as-is\n const e = extraEntropy === true ? randomBytes(lengths.secretKey) : extraEntropy;\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); // mod n, not mod p\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 = Fn.neg(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 /**\n * Signs message hash with a secret key.\n *\n * ```\n * sign(m, d) where\n * k = rfc6979_hmac_drbg(m, d)\n * (x, y) = G × k\n * r = x mod n\n * s = (m + dr) / k mod n\n * ```\n */\n function sign(message, secretKey, opts = {}) {\n message = ensureBytes('message', message);\n const { seed, k2sig } = prepSig(message, secretKey, opts); // Steps A, D of RFC6979 3.2.\n const drbg = createHmacDrbg(hash.outputLen, Fn.BYTES, hmac);\n const sig = drbg(seed, k2sig); // Steps B, C, D, E, F, G\n return sig;\n }\n function tryParsingSig(sg) {\n // Try to deduce format\n let sig = undefined;\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 try {\n sig = Signature.fromBytes(ensureBytes('sig', sg), 'der');\n }\n catch (derError) {\n if (!(derError instanceof DER.Err))\n throw derError;\n }\n if (!sig) {\n try {\n sig = Signature.fromBytes(ensureBytes('sig', sg), 'compact');\n }\n catch (error) {\n return false;\n }\n }\n }\n if (!sig)\n return false;\n return sig;\n }\n /**\n * Verifies a signature against message and public key.\n * Rejects lowS signatures by default: see {@link ECDSAVerifyOpts}.\n * 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, message, publicKey, opts = {}) {\n const { lowS, prehash, format } = validateSigOpts(opts, defaultSigOpts);\n publicKey = ensureBytes('publicKey', publicKey);\n message = validateMsgAndHash(ensureBytes('message', message), prehash);\n if ('strict' in opts)\n throw new Error('options.strict was renamed to lowS');\n const sig = format === undefined\n ? tryParsingSig(signature)\n : Signature.fromBytes(ensureBytes('sig', signature), format);\n if (sig === false)\n return false;\n try {\n const P = Point.fromBytes(publicKey);\n if (lowS && sig.hasHighS())\n return false;\n const { r, s } = sig;\n const h = bits2int_modN(message); // mod n, not mod p\n const is = Fn.inv(s); // s^-1 mod n\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)); // u1⋅G + u2⋅P\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 recoverPublicKey(signature, message, opts = {}) {\n const { prehash } = validateSigOpts(opts, defaultSigOpts);\n message = validateMsgAndHash(message, prehash);\n return Signature.fromBytes(signature, 'recovered').recoverPublicKey(message).toBytes();\n }\n return Object.freeze({\n keygen,\n getPublicKey,\n getSharedSecret,\n utils,\n lengths,\n Point,\n sign,\n verify,\n recoverPublicKey,\n Signature,\n hash,\n });\n}\n/** @deprecated use `weierstrass` in newer releases */\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}\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 modFromBytes: 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}\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}\nfunction _weierstrass_new_output_to_legacy(c, Point) {\n const { Fp, Fn } = Point;\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}\nfunction _ecdsa_new_output_to_legacy(c, _ecdsa) {\n const Point = _ecdsa.Point;\n return Object.assign({}, _ecdsa, {\n ProjectivePoint: Point,\n CURVE: Object.assign({}, c, nLength(Point.Fn.ORDER, Point.Fn.BITS)),\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 { bytesToNumberBE, concatBytes, ensureBytes, inRange, numberToBytesBE, utf8ToBytes, } 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, { 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(utf8ToBytes(tag));\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 Pointk1 = /* @__PURE__ */ (() => secp256k1.Point)();\nconst hasEven = (y) => y % _2n === _0n;\n// Calculate point, scalar and bytes\nfunction schnorrGetExtPubKey(priv) {\n const { Fn, BASE } = Pointk1;\n const d_ = _normFnElement(Fn, priv);\n const p = BASE.multiply(d_); // P = d'⋅G; 0 < d' < n check is done inside\n const scalar = hasEven(p.y) ? d_ : Fn.neg(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 const Fp = Fpk1;\n if (!Fp.isValidNot0(x))\n throw new Error('invalid x: Fail if x ≥ p');\n const xx = Fp.create(x * x);\n const c = Fp.create(xx * x + BigInt(7)); // Let c = x³ + 7 mod p.\n let y = Fp.sqrt(c); // Let y = c^(p+1)/4 mod p. Same as sqrt().\n // Return the unique point P such that x(P) = x and\n // y(P) = y if y mod 2 = 0 or y(P) = p-y otherwise.\n if (!hasEven(y))\n y = Fp.neg(y);\n const p = Pointk1.fromAffine({ x, y });\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 Pointk1.Fn.create(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 { Fn } = Pointk1;\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 = Fn.toBytes(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 // Let k' = int(rand) mod n. Fail if k' = 0. Let R = k'⋅G\n const { bytes: rx, scalar: k } = schnorrGetExtPubKey(rand);\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(Fn.toBytes(Fn.create(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 { Fn, BASE } = Pointk1;\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 // int(challenge(bytes(r)||bytes(P)||m))%n\n const e = challenge(Fn.toBytes(r), pointToBytes(P), m);\n // R = s⋅G - e⋅P, where -eP == (n-e)P\n const R = BASE.multiplyUnsafe(s).add(P.multiplyUnsafe(Fn.neg(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: Pointk1,\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 lengths: {\n secretKey: size,\n publicKey: size,\n publicKeyHasPrefix: false,\n signature: size * 2,\n seed: seedLength,\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","// src/bytes/encoding.ts\nfunction partition(bytes, size) {\n const partitions = [];\n for (let i = 0; i < bytes.length; i += size) {\n partitions.push(bytes.subarray(i, i + size));\n }\n return partitions;\n}\nfunction equals(a, b) {\n if (a.length !== b.length) {\n return false;\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n}\nfunction commonPrefix(one, other) {\n const length = Math.min(one.length, other.length);\n for (let i = 0; i < length; i++) {\n if (one[i] !== other[i]) {\n return one.subarray(0, i);\n }\n }\n return one.subarray(0, length);\n}\nfunction indexOf(bytes, value, start = 0) {\n for (let i = start; i < bytes.length; i++) {\n for (let j = 0; j < value.length; j++) {\n if (bytes[i + j] !== value[j]) {\n break;\n }\n if (j === value.length - 1) {\n return i;\n }\n }\n }\n return -1;\n}\nfunction uint8ArrayToHex(bytes) {\n return Array.from(bytes).map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n}\nfunction numberToUint256(value, endian) {\n const bytes = new Uint8Array(32);\n let remaining = value;\n if (endian === \"LE\") {\n for (let i = 0; i < 32; i++) {\n bytes[i] = Number(remaining & 0xffn);\n remaining >>= 8n;\n }\n return bytes;\n }\n for (let i = 31; i >= 0; i--) {\n bytes[i] = Number(remaining & 0xffn);\n remaining >>= 8n;\n }\n return bytes;\n}\nfunction uint256ToNumber(bytes, endian) {\n let result = 0n;\n if (endian === \"LE\") {\n for (let i = 31; i >= 0; i--) {\n result = result << 8n | BigInt(bytes[i]);\n }\n return result;\n }\n for (let i = 0; i < 32; i++) {\n result = result << 8n | BigInt(bytes[i]);\n }\n return result;\n}\nfunction hexToUint8Array(hex) {\n const clean = hex.startsWith(\"0x\") || hex.startsWith(\"0X\") ? hex.slice(2) : hex;\n const result = new Uint8Array(clean.length / 2);\n for (let i = 0; i < result.length; i++) {\n result[i] = parseInt(clean.slice(i * 2, i * 2 + 2), 16);\n }\n return result;\n}\nvar BASE64_CHARS = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nvar BASE32_CHARS = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\";\nfunction baseToUint8Array(baseString, baseChars) {\n const padding = \"=\";\n const base = baseChars.length;\n let bits = 0;\n let value = 0;\n const array = [];\n for (let i = 0; i < baseString.length; i++) {\n const character = baseString.charAt(i);\n if (character === padding) {\n break;\n }\n const index = baseChars.indexOf(character);\n if (index === -1) {\n throw new Error(`Invalid character: ${character}`);\n }\n value = value << Math.log2(base) | index;\n bits += Math.log2(base);\n if (bits >= 8) {\n bits -= 8;\n array.push(value >> bits & 255);\n }\n }\n return new Uint8Array(array);\n}\nfunction uint8ArrayToBase(bytes, baseChars) {\n const base = baseChars.length;\n let bits = 0;\n let value = 0;\n let result = \"\";\n for (const byte of bytes) {\n value = value << 8 | byte;\n bits += 8;\n while (bits >= Math.log2(base)) {\n bits -= Math.log2(base);\n result += baseChars.charAt(value >> bits & base - 1);\n }\n }\n if (bits > 0) {\n result += baseChars.charAt(value << Math.log2(base) - bits & base - 1);\n }\n if (result.length % 4 !== 0) {\n result += \"=\".repeat(4 - result.length % 4);\n }\n return result;\n}\nfunction base64ToUint8Array(base64) {\n return baseToUint8Array(base64, BASE64_CHARS);\n}\nfunction uint8ArrayToBase64(bytes) {\n return uint8ArrayToBase(bytes, BASE64_CHARS);\n}\nfunction base32ToUint8Array(base32) {\n return baseToUint8Array(base32, BASE32_CHARS);\n}\nfunction uint8ArrayToBase32(bytes) {\n return uint8ArrayToBase(bytes, BASE32_CHARS);\n}\nfunction uint8ArrayToBinary(bytes) {\n return Array.from(bytes).map((byte) => byte.toString(2).padStart(8, \"0\")).join(\"\");\n}\nfunction binaryToUint8Array(binary) {\n const result = new Uint8Array(Math.ceil(binary.length / 8));\n for (let i = 0; i < result.length; i++) {\n result[i] = parseInt(binary.slice(i * 8, i * 8 + 8), 2);\n }\n return result;\n}\nfunction sliceBytes(bytes, lengths) {\n const result = [];\n let offset = 0;\n for (const length of lengths) {\n result.push(bytes.subarray(offset, offset + length));\n offset += length;\n }\n return result;\n}\nfunction numberToUint8(value) {\n return new Uint8Array([value]);\n}\nfunction uint8ToNumber(bytes) {\n return bytes[0];\n}\nfunction numberToUint16(value, endian) {\n const buffer = new ArrayBuffer(2);\n new DataView(buffer).setUint16(0, value, endian === \"LE\");\n return new Uint8Array(buffer);\n}\nfunction uint16ToNumber(bytes, endian) {\n return new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength).getUint16(0, endian === \"LE\");\n}\nfunction numberToUint32(value, endian) {\n const buffer = new ArrayBuffer(4);\n new DataView(buffer).setUint32(0, value, endian === \"LE\");\n return new Uint8Array(buffer);\n}\nfunction uint32ToNumber(bytes, endian) {\n return new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength).getUint32(0, endian === \"LE\");\n}\nfunction numberToUint64(value, endian) {\n const buffer = new ArrayBuffer(8);\n new DataView(buffer).setBigUint64(0, value, endian === \"LE\");\n return new Uint8Array(buffer);\n}\nfunction uint64ToNumber(bytes, endian) {\n return new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength).getBigUint64(0, endian === \"LE\");\n}\n\n// src/crypto/keccak.ts\nvar IOTA_CONSTANTS = [\n 0,\n 1,\n 0,\n 32898,\n 2147483648,\n 32906,\n 2147483648,\n 2147516416,\n 0,\n 32907,\n 0,\n 2147483649,\n 2147483648,\n 2147516545,\n 2147483648,\n 32777,\n 0,\n 138,\n 0,\n 136,\n 0,\n 2147516425,\n 0,\n 2147483658,\n 0,\n 2147516555,\n 2147483648,\n 139,\n 2147483648,\n 32905,\n 2147483648,\n 32771,\n 2147483648,\n 32770,\n 2147483648,\n 128,\n 0,\n 32778,\n 2147483648,\n 2147483658,\n 2147483648,\n 2147516545,\n 2147483648,\n 32896,\n 0,\n 2147483649,\n 2147483648,\n 2147516424\n];\nfunction keccak256(bytes) {\n return squeeze(absorb(new Array(50).fill(0), divideToBlocks(bytes, 1)));\n}\nfunction absorb(state, blocks) {\n for (const block of blocks) {\n for (let i = 0; i < 34; i += 2) {\n state[i] = state[i] ^ block[i + 1];\n state[i + 1] = state[i + 1] ^ block[i];\n }\n keccakPermutate(state);\n }\n return state;\n}\nfunction keccakPermutate(state) {\n for (let round = 0; round < 24; round++) {\n const thetaC0 = state[0] ^ state[10] ^ state[20] ^ state[30] ^ state[40];\n const thetaC1 = state[1] ^ state[11] ^ state[21] ^ state[31] ^ state[41];\n const thetaC2 = state[2] ^ state[12] ^ state[22] ^ state[32] ^ state[42];\n const thetaC3 = state[3] ^ state[13] ^ state[23] ^ state[33] ^ state[43];\n const thetaC4 = state[4] ^ state[14] ^ state[24] ^ state[34] ^ state[44];\n const thetaC5 = state[5] ^ state[15] ^ state[25] ^ state[35] ^ state[45];\n const thetaC6 = state[6] ^ state[16] ^ state[26] ^ state[36] ^ state[46];\n const thetaC7 = state[7] ^ state[17] ^ state[27] ^ state[37] ^ state[47];\n const thetaC8 = state[8] ^ state[18] ^ state[28] ^ state[38] ^ state[48];\n const thetaC9 = state[9] ^ state[19] ^ state[29] ^ state[39] ^ state[49];\n const rotLow0 = thetaC2 << 1 | thetaC3 >>> 31;\n const rotHigh0 = thetaC3 << 1 | thetaC2 >>> 31;\n const thetaD0 = thetaC8 ^ rotLow0;\n const thetaD1 = thetaC9 ^ rotHigh0;\n const rotLow1 = thetaC4 << 1 | thetaC5 >>> 31;\n const rotHigh1 = thetaC5 << 1 | thetaC4 >>> 31;\n const thetaD2 = thetaC0 ^ rotLow1;\n const thetaD3 = thetaC1 ^ rotHigh1;\n const rotLow2 = thetaC6 << 1 | thetaC7 >>> 31;\n const rotHigh2 = thetaC7 << 1 | thetaC6 >>> 31;\n const thetaD4 = thetaC2 ^ rotLow2;\n const thetaD5 = thetaC3 ^ rotHigh2;\n const rotLow3 = thetaC8 << 1 | thetaC9 >>> 31;\n const rotHigh3 = thetaC9 << 1 | thetaC8 >>> 31;\n const thetaD6 = thetaC4 ^ rotLow3;\n const thetaD7 = thetaC5 ^ rotHigh3;\n const rotLow4 = thetaC0 << 1 | thetaC1 >>> 31;\n const rotHigh4 = thetaC1 << 1 | thetaC0 >>> 31;\n const thetaD8 = thetaC6 ^ rotLow4;\n const thetaD9 = thetaC7 ^ rotHigh4;\n state[0] ^= thetaD0;\n state[1] ^= thetaD1;\n state[2] ^= thetaD2;\n state[3] ^= thetaD3;\n state[4] ^= thetaD4;\n state[5] ^= thetaD5;\n state[6] ^= thetaD6;\n state[7] ^= thetaD7;\n state[8] ^= thetaD8;\n state[9] ^= thetaD9;\n state[10] ^= thetaD0;\n state[11] ^= thetaD1;\n state[12] ^= thetaD2;\n state[13] ^= thetaD3;\n state[14] ^= thetaD4;\n state[15] ^= thetaD5;\n state[16] ^= thetaD6;\n state[17] ^= thetaD7;\n state[18] ^= thetaD8;\n state[19] ^= thetaD9;\n state[20] ^= thetaD0;\n state[21] ^= thetaD1;\n state[22] ^= thetaD2;\n state[23] ^= thetaD3;\n state[24] ^= thetaD4;\n state[25] ^= thetaD5;\n state[26] ^= thetaD6;\n state[27] ^= thetaD7;\n state[28] ^= thetaD8;\n state[29] ^= thetaD9;\n state[30] ^= thetaD0;\n state[31] ^= thetaD1;\n state[32] ^= thetaD2;\n state[33] ^= thetaD3;\n state[34] ^= thetaD4;\n state[35] ^= thetaD5;\n state[36] ^= thetaD6;\n state[37] ^= thetaD7;\n state[38] ^= thetaD8;\n state[39] ^= thetaD9;\n state[40] ^= thetaD0;\n state[41] ^= thetaD1;\n state[42] ^= thetaD2;\n state[43] ^= thetaD3;\n state[44] ^= thetaD4;\n state[45] ^= thetaD5;\n state[46] ^= thetaD6;\n state[47] ^= thetaD7;\n state[48] ^= thetaD8;\n state[49] ^= thetaD9;\n const piResult0 = state[0];\n const piResult1 = state[1];\n const piResult20 = state[2] << 1 | state[3] >>> 31;\n const piResult21 = state[3] << 1 | state[2] >>> 31;\n const piResult40 = state[5] << 30 | state[4] >>> 2;\n const piResult41 = state[4] << 30 | state[5] >>> 2;\n const piResult10 = state[6] << 28 | state[7] >>> 4;\n const piResult11 = state[7] << 28 | state[6] >>> 4;\n const piResult30 = state[8] << 27 | state[9] >>> 5;\n const piResult31 = state[9] << 27 | state[8] >>> 5;\n const piResult32 = state[11] << 4 | state[10] >>> 28;\n const piResult33 = state[10] << 4 | state[11] >>> 28;\n const piResult2 = state[13] << 12 | state[12] >>> 20;\n const piResult3 = state[12] << 12 | state[13] >>> 20;\n const piResult22 = state[14] << 6 | state[15] >>> 26;\n const piResult23 = state[15] << 6 | state[14] >>> 26;\n const piResult42 = state[17] << 23 | state[16] >>> 9;\n const piResult43 = state[16] << 23 | state[17] >>> 9;\n const piResult12 = state[18] << 20 | state[19] >>> 12;\n const piResult13 = state[19] << 20 | state[18] >>> 12;\n const piResult14 = state[20] << 3 | state[21] >>> 29;\n const piResult15 = state[21] << 3 | state[20] >>> 29;\n const piResult34 = state[22] << 10 | state[23] >>> 22;\n const piResult35 = state[23] << 10 | state[22] >>> 22;\n const piResult4 = state[25] << 11 | state[24] >>> 21;\n const piResult5 = state[24] << 11 | state[25] >>> 21;\n const piResult24 = state[26] << 25 | state[27] >>> 7;\n const piResult25 = state[27] << 25 | state[26] >>> 7;\n const piResult44 = state[29] << 7 | state[28] >>> 25;\n const piResult45 = state[28] << 7 | state[29] >>> 25;\n const piResult46 = state[31] << 9 | state[30] >>> 23;\n const piResult47 = state[30] << 9 | state[31] >>> 23;\n const piResult16 = state[33] << 13 | state[32] >>> 19;\n const piResult17 = state[32] << 13 | state[33] >>> 19;\n const piResult36 = state[34] << 15 | state[35] >>> 17;\n const piResult37 = state[35] << 15 | state[34] >>> 17;\n const piResult6 = state[36] << 21 | state[37] >>> 11;\n const piResult7 = state[37] << 21 | state[36] >>> 11;\n const piResult26 = state[38] << 8 | state[39] >>> 24;\n const piResult27 = state[39] << 8 | state[38] >>> 24;\n const piResult28 = state[40] << 18 | state[41] >>> 14;\n const piResult29 = state[41] << 18 | state[40] >>> 14;\n const piResult48 = state[42] << 2 | state[43] >>> 30;\n const piResult49 = state[43] << 2 | state[42] >>> 30;\n const piResult18 = state[45] << 29 | state[44] >>> 3;\n const piResult19 = state[44] << 29 | state[45] >>> 3;\n const piResult38 = state[47] << 24 | state[46] >>> 8;\n const piResult39 = state[46] << 24 | state[47] >>> 8;\n const piResult8 = state[48] << 14 | state[49] >>> 18;\n const piResult9 = state[49] << 14 | state[48] >>> 18;\n state[0] = piResult0 ^ ~piResult2 & piResult4;\n state[1] = piResult1 ^ ~piResult3 & piResult5;\n state[2] = piResult2 ^ ~piResult4 & piResult6;\n state[3] = piResult3 ^ ~piResult5 & piResult7;\n state[4] = piResult4 ^ ~piResult6 & piResult8;\n state[5] = piResult5 ^ ~piResult7 & piResult9;\n state[6] = piResult6 ^ ~piResult8 & piResult0;\n state[7] = piResult7 ^ ~piResult9 & piResult1;\n state[8] = piResult8 ^ ~piResult0 & piResult2;\n state[9] = piResult9 ^ ~piResult1 & piResult3;\n state[10] = piResult10 ^ ~piResult12 & piResult14;\n state[11] = piResult11 ^ ~piResult13 & piResult15;\n state[12] = piResult12 ^ ~piResult14 & piResult16;\n state[13] = piResult13 ^ ~piResult15 & piResult17;\n state[14] = piResult14 ^ ~piResult16 & piResult18;\n state[15] = piResult15 ^ ~piResult17 & piResult19;\n state[16] = piResult16 ^ ~piResult18 & piResult10;\n state[17] = piResult17 ^ ~piResult19 & piResult11;\n state[18] = piResult18 ^ ~piResult10 & piResult12;\n state[19] = piResult19 ^ ~piResult11 & piResult13;\n state[20] = piResult20 ^ ~piResult22 & piResult24;\n state[21] = piResult21 ^ ~piResult23 & piResult25;\n state[22] = piResult22 ^ ~piResult24 & piResult26;\n state[23] = piResult23 ^ ~piResult25 & piResult27;\n state[24] = piResult24 ^ ~piResult26 & piResult28;\n state[25] = piResult25 ^ ~piResult27 & piResult29;\n state[26] = piResult26 ^ ~piResult28 & piResult20;\n state[27] = piResult27 ^ ~piResult29 & piResult21;\n state[28] = piResult28 ^ ~piResult20 & piResult22;\n state[29] = piResult29 ^ ~piResult21 & piResult23;\n state[30] = piResult30 ^ ~piResult32 & piResult34;\n state[31] = piResult31 ^ ~piResult33 & piResult35;\n state[32] = piResult32 ^ ~piResult34 & piResult36;\n state[33] = piResult33 ^ ~piResult35 & piResult37;\n state[34] = piResult34 ^ ~piResult36 & piResult38;\n state[35] = piResult35 ^ ~piResult37 & piResult39;\n state[36] = piResult36 ^ ~piResult38 & piResult30;\n state[37] = piResult37 ^ ~piResult39 & piResult31;\n state[38] = piResult38 ^ ~piResult30 & piResult32;\n state[39] = piResult39 ^ ~piResult31 & piResult33;\n state[40] = piResult40 ^ ~piResult42 & piResult44;\n state[41] = piResult41 ^ ~piResult43 & piResult45;\n state[42] = piResult42 ^ ~piResult44 & piResult46;\n state[43] = piResult43 ^ ~piResult45 & piResult47;\n state[44] = piResult44 ^ ~piResult46 & piResult48;\n state[45] = piResult45 ^ ~piResult47 & piResult49;\n state[46] = piResult46 ^ ~piResult48 & piResult40;\n state[47] = piResult47 ^ ~piResult49 & piResult41;\n state[48] = piResult48 ^ ~piResult40 & piResult42;\n state[49] = piResult49 ^ ~piResult41 & piResult43;\n state[0] ^= IOTA_CONSTANTS[round * 2];\n state[1] ^= IOTA_CONSTANTS[round * 2 + 1];\n }\n}\nfunction divideToBlocks(bytes, paddingByte) {\n if (!bytes.length) {\n const padding = new Uint8Array(136);\n padding[0] = paddingByte;\n padding[135] = 128;\n return [bytesToNumbers(padding)];\n }\n const blocks = partition(bytes, 136);\n const lastBlock = blocks[blocks.length - 1];\n if (lastBlock.length < 136) {\n const padded = new Uint8Array(136);\n padded.set(lastBlock);\n padded[lastBlock.length] = paddingByte;\n padded[135] = padded[135] | 128;\n blocks[blocks.length - 1] = padded;\n }\n if (lastBlock.length === 136) {\n const padding = new Uint8Array(136);\n padding[0] = paddingByte;\n padding[135] = 128;\n blocks.push(padding);\n }\n return blocks.map(bytesToNumbers);\n}\nfunction bytesToNumbers(bytes) {\n const numbers = [];\n for (let i = 0; i < bytes.length; i += 4) {\n numbers.push(bytes[i] | bytes[i + 1] << 8 | bytes[i + 2] << 16 | bytes[i + 3] << 24);\n }\n return numbers;\n}\nfunction squeeze(state) {\n return new Uint8Array([\n state[1],\n state[1] >> -24,\n state[1] >> -16,\n state[1] >> -8,\n state[0],\n state[0] >> 8,\n state[0] >> 16,\n state[0] >> 24,\n state[3],\n state[3] >> -24,\n state[3] >> -16,\n state[3] >> -8,\n state[2],\n state[2] >> 8,\n state[2] >> 16,\n state[2] >> 24,\n state[5],\n state[5] >> -24,\n state[5] >> -16,\n state[5] >> -8,\n state[4],\n state[4] >> 8,\n state[4] >> 16,\n state[4] >> 24,\n state[7],\n state[7] >> -24,\n state[7] >> -16,\n state[7] >> -8,\n state[6],\n state[6] >> 8,\n state[6] >> 16,\n state[6] >> 24\n ]);\n}\n\n// src/bytes/bytes.ts\nvar DECODER = new TextDecoder();\nvar ENCODER = new TextEncoder();\nvar HEX_PATTERN = /^(0x)?[0-9a-fA-F]*$/i;\nfunction hasToHexMethod(value) {\n return typeof value === \"object\" && value !== null && typeof value.toHex === \"function\";\n}\nvar Bytes = class _Bytes {\n bytes;\n length;\n /**\n * @param byteLength If given, throws unless the resulting length matches\n * (or, for an array, is one of) the expected length(s).\n */\n constructor(bytes, byteLength) {\n if (!bytes) {\n throw new Error(`Bytes#constructor: constructor parameter is falsy: ${bytes}`);\n }\n if (bytes instanceof _Bytes) {\n this.bytes = bytes.bytes;\n } else if (typeof bytes === \"string\") {\n if (!HEX_PATTERN.test(bytes) || bytes.replace(/^0x/i, \"\").length % 2 !== 0) {\n throw new Error(`Bytes#constructor: invalid hex string: ${bytes}`);\n }\n this.bytes = hexToUint8Array(bytes);\n } else if (bytes instanceof ArrayBuffer) {\n this.bytes = new Uint8Array(bytes);\n } else if (bytes instanceof Uint8Array) {\n this.bytes = bytes;\n } else {\n const unknownInput = bytes;\n if (hasToHexMethod(unknownInput)) {\n this.bytes = hexToUint8Array(unknownInput.toHex());\n } else {\n throw new Error(`Bytes#constructor: unsupported type: ${typeof bytes}`);\n }\n }\n this.length = this.bytes.length;\n if (byteLength !== void 0) {\n if (Array.isArray(byteLength)) {\n if (!byteLength.includes(this.length)) {\n throw new Error(\n `Bytes#checkByteLength: bytes length is ${this.length} but expected ${byteLength.join(\" or \")}`\n );\n }\n } else if (this.length !== byteLength) {\n throw new Error(`Bytes#checkByteLength: bytes length is ${this.length} but expected ${byteLength}`);\n }\n }\n }\n /**\n * Hashes `bytes` with keccak256 and wraps the 32-byte digest.\n */\n static keccak256(bytes) {\n return new _Bytes(keccak256(new _Bytes(bytes).toUint8Array()));\n }\n /**\n * Concatenates any number of byte arrays (or Bytes instances) into one new array.\n */\n static concat(...arrays) {\n const normalized = arrays.map((array) => array instanceof _Bytes ? array.toUint8Array() : array);\n const totalLength = normalized.reduce((sum, array) => sum + array.length, 0);\n const result = new Uint8Array(totalLength);\n let offset = 0;\n for (const array of normalized) {\n result.set(array, offset);\n offset += array.length;\n }\n return result;\n }\n /**\n * Wraps the UTF-8 encoding of a string.\n */\n static fromUtf8(utf8) {\n return new _Bytes(ENCODER.encode(utf8));\n }\n /**\n * Wraps a slice of `bytes` starting at `start`, running to the end unless\n * `length` is given.\n */\n static fromSlice(bytes, start, length) {\n if (length === void 0) {\n return new _Bytes(bytes.slice(start));\n }\n return new _Bytes(bytes.slice(start, start + length));\n }\n /**\n * Returns a copy of the bytes from `index` to the end.\n */\n offset(index) {\n return new Uint8Array(this.bytes.slice(index));\n }\n /**\n * Returns a copy of the underlying bytes.\n */\n toUint8Array() {\n return new Uint8Array(this.bytes);\n }\n /**\n * Encodes as a lowercase hex string, with no `0x` prefix.\n */\n toHex() {\n return uint8ArrayToHex(this.bytes);\n }\n /**\n * Encodes as a padded base64 string.\n */\n toBase64() {\n return uint8ArrayToBase64(this.bytes);\n }\n /**\n * Encodes as a padded base32 string.\n */\n toBase32() {\n return uint8ArrayToBase32(this.bytes);\n }\n /**\n * Same as {@link toHex}.\n */\n toString() {\n return this.toHex();\n }\n /**\n * Decodes the bytes as UTF-8 text.\n */\n toUtf8() {\n return DECODER.decode(this.bytes);\n }\n /**\n * Decodes the bytes as UTF-8 JSON.\n */\n toJSON() {\n return JSON.parse(this.toUtf8());\n }\n /**\n * Byte-wise equality against another Bytes instance, raw bytes, or hex string.\n */\n equals(other) {\n return this.toHex() === new _Bytes(other).toHex();\n }\n /**\n * Human-readable representation, used by debuggers/loggers. Same as {@link toHex}.\n */\n represent() {\n return this.toHex();\n }\n};\n\n// src/bytes/batch-id.ts\nvar BatchId = class extends Bytes {\n static LENGTH = 32;\n constructor(bytes) {\n super(bytes, 32);\n }\n};\n\n// src/crypto/keys.ts\nimport { secp256k1 } from \"@noble/curves/secp256k1.js\";\nvar SECP256K1_N = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141n;\nfunction privateKeyToPublicKey(privateKey) {\n if (privateKey <= 0n || privateKey >= SECP256K1_N) {\n throw new Error(\"Invalid private key\");\n }\n const point = secp256k1.Point.BASE.multiply(privateKey);\n return [point.x, point.y];\n}\nfunction compressPublicKey(publicKey) {\n return secp256k1.Point.fromAffine({ x: publicKey[0], y: publicKey[1] }).toBytes(true);\n}\nfunction publicKeyFromCompressed(compressed) {\n if (compressed.length !== 33 || compressed[0] !== 2 && compressed[0] !== 3) {\n throw new Error(\"Invalid compressed public key\");\n }\n const point = secp256k1.Point.fromBytes(compressed);\n return [point.x, point.y];\n}\nfunction publicKeyToAddress(publicKey) {\n const address = new Uint8Array(20);\n const hash = keccak256(Bytes.concat(numberToUint256(publicKey[0], \"BE\"), numberToUint256(publicKey[1], \"BE\")));\n address.set(hash.subarray(12));\n return address;\n}\nfunction checksumEncode(addressBytes) {\n const address = uint8ArrayToHex(addressBytes);\n const addressAscii = Uint8Array.from(address, (char) => char.charCodeAt(0));\n const hash = uint8ArrayToHex(keccak256(addressAscii));\n let result = \"0x\";\n for (let i = 0; i < address.length; i++) {\n result += parseInt(hash.charAt(i), 16) > 7 ? address.charAt(i).toUpperCase() : address.charAt(i);\n }\n return result;\n}\n\n// src/bytes/eth-address.ts\nvar EthAddress = class extends Bytes {\n static LENGTH = 20;\n constructor(bytes) {\n super(bytes, 20);\n }\n /**\n * EIP-55 checksum-cased hex representation (e.g. `0x5aAe...`).\n */\n toChecksum() {\n return checksumEncode(this.bytes);\n }\n};\n\n// src/bytes/feed-index.ts\nvar MAX_UINT64 = new Uint8Array(8).fill(255, 0, 8);\nvar FeedIndex = class _FeedIndex extends Bytes {\n static LENGTH = 8;\n /** Sentinel index (all bits set) some feed types use to mean \"no update yet\". */\n static MINUS_ONE = new _FeedIndex(MAX_UINT64);\n constructor(bytes) {\n super(bytes, 8);\n }\n /**\n * Encodes a bigint index as an 8-byte, big-endian FeedIndex.\n */\n static fromBigInt(value) {\n return new _FeedIndex(numberToUint64(value, \"BE\"));\n }\n /**\n * Decodes the index as a bigint.\n */\n toBigInt() {\n return uint64ToNumber(this.bytes, \"BE\");\n }\n /**\n * Returns the next sequential index, wrapping {@link MINUS_ONE} back to 0.\n */\n next() {\n if (uint8ArrayToHex(this.bytes) === uint8ArrayToHex(MAX_UINT64)) {\n return _FeedIndex.fromBigInt(0n);\n }\n return _FeedIndex.fromBigInt(this.toBigInt() + 1n);\n }\n};\n\n// src/bytes/identifier.ts\nvar ENCODER2 = new TextEncoder();\nvar Identifier = class _Identifier extends Bytes {\n static LENGTH = 32;\n constructor(bytes) {\n super(bytes, 32);\n }\n /**\n * Derives an identifier by hashing an arbitrary string with keccak256.\n */\n static fromString(value) {\n return new _Identifier(keccak256(ENCODER2.encode(value)));\n }\n};\n\n// src/bytes/peer-address.ts\nvar PeerAddress = class extends Bytes {\n static LENGTH = 32;\n constructor(bytes) {\n super(bytes, 32);\n }\n};\n\n// src/crypto/ecdsa.ts\nimport { secp256k1 as secp256k12 } from \"@noble/curves/secp256k1.js\";\nfunction signMessage(message, privateKey) {\n const signature = secp256k12.sign(keccak256(message), privateKey, { prehash: false });\n const v = signature.recovery === 0 ? 27n : 28n;\n return [signature.r, signature.s, v];\n}\nfunction signHash(hash, privateKey) {\n const hashBytes = new Uint8Array(32);\n let remaining = hash;\n for (let i = 31; i >= 0; i--) {\n hashBytes[i] = Number(remaining & 0xffn);\n remaining >>= 8n;\n }\n const signature = secp256k12.sign(hashBytes, privateKey, { prehash: false });\n const v = signature.recovery === 0 ? 27n : 28n;\n return [signature.r, signature.s, v];\n}\nfunction recoverPublicKey(message, r, s, v) {\n const recovery = v === 27n ? 0 : 1;\n const signature = new secp256k12.Signature(r, s, recovery);\n const point = signature.recoverPublicKey(keccak256(message));\n return [point.x, point.y];\n}\nfunction verifySignature(message, publicKey, r, s) {\n const signatureBytes = new secp256k12.Signature(r, s).toBytes(\"compact\");\n const publicKeyBytes = secp256k12.Point.fromAffine({ x: publicKey[0], y: publicKey[1] }).toBytes(true);\n return secp256k12.verify(signatureBytes, keccak256(message), publicKeyBytes, { prehash: false });\n}\n\n// src/bytes/public-key.ts\nvar PublicKey = class extends Bytes {\n static LENGTH = 64;\n constructor(bytes) {\n const uncompressed = new Bytes(bytes);\n if (uncompressed.length === 33) {\n const [x, y] = publicKeyFromCompressed(uncompressed.toUint8Array());\n super(Bytes.concat(numberToUint256(x, \"BE\"), numberToUint256(y, \"BE\")), 64);\n } else {\n super(bytes, 64);\n }\n }\n /**\n * Derives the corresponding Ethereum address (keccak256 of the\n * uncompressed key, last 20 bytes).\n */\n address() {\n const x = uint256ToNumber(this.bytes.slice(0, 32), \"BE\");\n const y = uint256ToNumber(this.bytes.slice(32, 64), \"BE\");\n return new EthAddress(publicKeyToAddress([x, y]));\n }\n /**\n * Encodes as a 33-byte compressed key (0x02/0x03 prefix || x).\n */\n toCompressedUint8Array() {\n const x = uint256ToNumber(this.bytes.slice(0, 32), \"BE\");\n const y = uint256ToNumber(this.bytes.slice(32, 64), \"BE\");\n return compressPublicKey([x, y]);\n }\n /**\n * Hex encoding of {@link toCompressedUint8Array}.\n */\n toCompressedHex() {\n return uint8ArrayToHex(this.toCompressedUint8Array());\n }\n};\n\n// src/bytes/signature.ts\nvar ENCODER3 = new TextEncoder();\nvar ETHEREUM_SIGNED_MESSAGE_PREFIX = ENCODER3.encode(\"\u0019Ethereum Signed Message:\\n32\");\nfunction personalSignDigest(data) {\n const bytes = data instanceof Uint8Array ? data : ENCODER3.encode(data);\n return Bytes.concat(ETHEREUM_SIGNED_MESSAGE_PREFIX, keccak256(bytes));\n}\nvar Signature = class _Signature extends Bytes {\n static LENGTH = 65;\n constructor(bytes) {\n super(bytes, 65);\n }\n /**\n * Reads a 65-byte Signature out of a larger buffer, starting at `start`.\n */\n static fromSlice(bytes, start) {\n return new _Signature(bytes.slice(start, start + _Signature.LENGTH));\n }\n /**\n * Recovers the public key that produced this signature over `digest`,\n * following the same personal_sign convention as {@link PrivateKey.sign}.\n */\n recoverPublicKey(digest) {\n const r = uint256ToNumber(this.bytes.slice(0, 32), \"BE\");\n const s = uint256ToNumber(this.bytes.slice(32, 64), \"BE\");\n const v = BigInt(this.bytes[64]);\n const [x, y] = recoverPublicKey(personalSignDigest(digest), r, s, v);\n return new PublicKey(Bytes.concat(numberToUint256(x, \"BE\"), numberToUint256(y, \"BE\")));\n }\n /**\n * Returns whether this signature over `digest` was produced by the owner\n * of `expectedAddress`.\n */\n isValid(digest, expectedAddress) {\n const publicKey = this.recoverPublicKey(digest);\n const address = publicKey.address();\n return address.equals(expectedAddress);\n }\n};\n\n// src/bytes/private-key.ts\nvar PrivateKey = class extends Bytes {\n static LENGTH = 32;\n constructor(bytes) {\n super(bytes, 32);\n }\n /**\n * Derives the corresponding (uncompressed) public key.\n */\n publicKey() {\n const [x, y] = privateKeyToPublicKey(this.toBigInt());\n return new PublicKey(Bytes.concat(numberToUint256(x, \"BE\"), numberToUint256(y, \"BE\")));\n }\n /**\n * Signs `data` following Ethereum's personal_sign convention (signs\n * keccak256(\"\\x19Ethereum Signed Message:\\n32\" || keccak256(data))).\n */\n sign(data) {\n const [r, s, v] = signMessage(personalSignDigest(data), this.toBigInt());\n return new Signature(Bytes.concat(numberToUint256(r, \"BE\"), numberToUint256(s, \"BE\"), new Uint8Array([Number(v)])));\n }\n /**\n * Decodes the private key as a bigint scalar, for use in ECDSA operations.\n */\n toBigInt() {\n return uint256ToNumber(this.bytes, \"BE\");\n }\n};\n\n// src/bytes/reference.ts\nvar SWARM_MANIFEST_CODEC = 250;\nvar SWARM_FEED_CODEC = 251;\nfunction decodeCid(cid) {\n const bytes = base32ToUint8Array(cid.toUpperCase().slice(1));\n const codec = bytes[1];\n if (codec !== SWARM_MANIFEST_CODEC && codec !== SWARM_FEED_CODEC) {\n throw new Error(\"Unknown codec\");\n }\n return bytes.slice(-32);\n}\nvar Reference = class _Reference extends Bytes {\n static LENGTH = 32;\n constructor(bytes) {\n if (typeof bytes === \"string\" && bytes.startsWith(\"bah5\")) {\n super(decodeCid(bytes), 32);\n } else {\n super(bytes, [32, 64]);\n }\n }\n /**\n * Encodes the reference as a `\"bah5...\"` CID string of the given type.\n */\n toCid(type) {\n const header = Bytes.concat(\n new Uint8Array([1]),\n // version\n new Uint8Array([type === \"feed\" ? SWARM_FEED_CODEC : SWARM_MANIFEST_CODEC]),\n new Uint8Array([1]),\n // \"unknown\" multihash\n new Uint8Array([27]),\n // sha256\n new Uint8Array([32])\n // 32-byte digest length\n );\n return `b${uint8ArrayToBase32(header).replace(/=+$/, \"\")}${this.toBase32().replace(/=+$/, \"\")}`.toLowerCase();\n }\n /**\n * Returns whether `value` parses as a valid Reference (raw hex, 32/64-byte\n * bytes, or a `\"bah5...\"` CID string).\n */\n static isValid(value) {\n try {\n new _Reference(value);\n return true;\n } catch {\n return false;\n }\n }\n};\n\n// src/bytes/span.ts\nvar Span = class _Span extends Bytes {\n static LENGTH = 8;\n constructor(bytes) {\n super(bytes, 8);\n }\n /**\n * Encodes a bigint byte count as an 8-byte, little-endian Span.\n */\n static fromBigInt(value) {\n return new _Span(numberToUint64(value, \"LE\"));\n }\n /**\n * Decodes the span as a bigint byte count.\n */\n toBigInt() {\n return uint64ToNumber(this.bytes, \"LE\");\n }\n /**\n * Reads an 8-byte Span out of a larger buffer, starting at `start`.\n */\n static fromSlice(bytes, start) {\n return new _Span(bytes.slice(start, start + _Span.LENGTH));\n }\n};\n\n// src/bytes/topic.ts\nvar ENCODER4 = new TextEncoder();\nvar Topic = class _Topic extends Bytes {\n static LENGTH = 32;\n constructor(bytes) {\n super(bytes, 32);\n }\n /**\n * Derives a topic by hashing an arbitrary string with keccak256.\n */\n static fromString(value) {\n return new _Topic(keccak256(ENCODER4.encode(value)));\n }\n};\n\n// src/bytes/transaction-id.ts\nvar TransactionId = class extends Bytes {\n static LENGTH = 32;\n constructor(bytes) {\n super(bytes, 32);\n }\n};\n\n// src/chunk/byte-cursor.ts\nvar Uint8ArrayReader = class {\n cursor = 0;\n buffer;\n constructor(buffer) {\n this.buffer = buffer;\n }\n /**\n * Reads (a view into) the next `size` bytes and advances the cursor.\n */\n read(size) {\n const data = this.buffer.subarray(this.cursor, this.cursor + size);\n this.cursor += size;\n return data;\n }\n /**\n * Returns the number of unread bytes remaining.\n */\n max() {\n return this.buffer.length - this.cursor;\n }\n};\nvar Uint8ArrayWriter = class {\n cursor = 0;\n buffer;\n constructor(buffer) {\n this.buffer = buffer;\n }\n /**\n * Copies as many bytes as fit from `reader` into the buffer at the\n * current cursor, advancing both. Returns the number of bytes written.\n */\n write(reader) {\n const max = Math.min(this.max(), reader.max());\n this.buffer.set(reader.read(max), this.cursor);\n this.cursor += max;\n return max;\n }\n /**\n * Returns the number of unwritten bytes remaining.\n */\n max() {\n return this.buffer.length - this.cursor;\n }\n};\n\n// src/encryption/stream-cipher.ts\nvar SPAN_ENCRYPT_INIT_CTR = 128;\nfunction encryptSegments(key, initCtr, data) {\n const out = new Uint8Array(data.length);\n const buf = new Uint8Array(36);\n buf.set(key);\n for (let i = 0, offset = 0; offset < data.length; i++, offset += 32) {\n const ctr = initCtr + i >>> 0;\n buf[32] = ctr & 255;\n buf[33] = ctr >>> 8 & 255;\n buf[34] = ctr >>> 16 & 255;\n buf[35] = ctr >>> 24 & 255;\n const segKey = keccak256(keccak256(buf));\n const end = Math.min(offset + 32, data.length);\n for (let j = offset; j < end; j++) {\n out[j] = data[j] ^ segKey[j - offset];\n }\n }\n return out;\n}\nfunction encryptSpan(key, spanBytes) {\n return encryptSegments(key, SPAN_ENCRYPT_INIT_CTR, spanBytes);\n}\nfunction encryptData(key, data) {\n return encryptSegments(key, 0, data);\n}\nfunction decryptChunk(encBytes, key) {\n return {\n span: uint64ToNumber(encryptSpan(key, encBytes.subarray(0, 8)), \"LE\"),\n data: encryptData(key, encBytes.subarray(8, 4104))\n };\n}\n\n// src/chunk/bmt.ts\nvar MAX_CHUNK_PAYLOAD_SIZE = 4096;\nvar SEGMENT_SIZE = 32;\nvar SPAN_LENGTH = 8;\nfunction calculateChunkAddress(chunkContent) {\n const span = chunkContent.subarray(0, SPAN_LENGTH);\n const payload = chunkContent.subarray(SPAN_LENGTH);\n const rootHash = calculateBmtRootHash(payload);\n return new Reference(keccak256(Bytes.concat(span, rootHash)));\n}\nfunction calculateBmtRootHash(payload) {\n if (payload.length > MAX_CHUNK_PAYLOAD_SIZE) {\n throw new Error(`payload size ${payload.length} exceeds maximum chunk payload size ${MAX_CHUNK_PAYLOAD_SIZE}`);\n }\n const input = new Uint8Array(MAX_CHUNK_PAYLOAD_SIZE);\n input.set(payload);\n let segments = partition(input, SEGMENT_SIZE);\n while (segments.length > 1) {\n const next = [];\n for (let i = 0; i < segments.length; i += 2) {\n next.push(keccak256(Bytes.concat(segments[i], segments[i + 1])));\n }\n segments = next;\n }\n return segments[0];\n}\n\n// src/chunk/soc.ts\nvar REPLICAS_OWNER = hexToUint8Array(\"dc5b20847f43d67928f49cd4f85d696b5a7617b5\");\nvar REPLICAS_PRIVATE_KEY = 1n << 248n;\nvar SIGNATURE_LENGTH = 65;\nvar SOC_SIGNATURE_OFFSET = Identifier.LENGTH;\nvar SOC_SPAN_OFFSET = Identifier.LENGTH + SIGNATURE_LENGTH;\nvar SOC_PAYLOAD_OFFSET = SOC_SPAN_OFFSET + Span.LENGTH;\nvar ETHEREUM_SIGNED_MESSAGE_PREFIX2 = new TextEncoder().encode(\"\u0019Ethereum Signed Message:\\n32\");\nvar REPLICA_COUNTS = [0, 2, 4, 8, 16];\nvar NEIGHBOURHOOD_BASES = [0, 2, 6, 14];\nfunction socSigningDigest(identifier, cacAddress) {\n const toSign = keccak256(Bytes.concat(identifier, cacAddress));\n return Bytes.concat(ETHEREUM_SIGNED_MESSAGE_PREFIX2, toSign);\n}\nfunction signSoc(identifier, cacAddress, privateKey) {\n const [r, s, v] = signMessage(socSigningDigest(identifier, cacAddress), privateKey);\n return Bytes.concat(numberToUint256(r, \"BE\"), numberToUint256(s, \"BE\"), new Uint8Array([Number(v)]));\n}\nfunction recoverSocOwner(identifier, cacAddress, signature) {\n const r = uint256ToNumber(signature.subarray(0, 32), \"BE\");\n const s = uint256ToNumber(signature.subarray(32, 64), \"BE\");\n const v = BigInt(signature[64]);\n const publicKey = recoverPublicKey(socSigningDigest(identifier, cacAddress), r, s, v);\n return publicKeyToAddress(publicKey);\n}\nfunction makeSOCAddress(identifier, owner) {\n const id = new Identifier(identifier);\n const ownerAddress = new EthAddress(owner);\n return new Reference(keccak256(Bytes.concat(id.toUint8Array(), ownerAddress.toUint8Array())));\n}\nfunction makeSingleOwnerChunk(chunk, identifier, privateKey) {\n const id = new Identifier(identifier);\n const signature = signSoc(id.toUint8Array(), chunk.address.toUint8Array(), privateKey);\n const owner = new EthAddress(publicKeyToAddress(privateKeyToPublicKey(privateKey)));\n const address = makeSOCAddress(id, owner);\n const data = Bytes.concat(id.toUint8Array(), signature, chunk.data);\n return {\n data,\n identifier: id,\n signature: new Signature(signature),\n span: chunk.span,\n payload: chunk.payload,\n address,\n owner\n };\n}\nfunction unmarshalSingleOwnerChunk(data, address) {\n const bytes = data instanceof Bytes ? data.toUint8Array() : data;\n const expectedAddress = new Reference(address);\n const identifier = new Identifier(Bytes.fromSlice(bytes, 0, Identifier.LENGTH));\n const signature = bytes.slice(SOC_SIGNATURE_OFFSET, SOC_SIGNATURE_OFFSET + SIGNATURE_LENGTH);\n const cacAddress = calculateChunkAddress(bytes.slice(SOC_SPAN_OFFSET));\n const owner = new EthAddress(recoverSocOwner(identifier.toUint8Array(), cacAddress.toUint8Array(), signature));\n const socAddress = makeSOCAddress(identifier, owner);\n if (!socAddress.equals(expectedAddress)) {\n throw new Error(\"SOC data does not match given address\");\n }\n const span = Span.fromSlice(bytes, SOC_SPAN_OFFSET);\n const payload = Bytes.fromSlice(bytes, SOC_PAYLOAD_OFFSET);\n return {\n data: bytes,\n identifier,\n signature: new Signature(signature),\n span,\n payload,\n address: socAddress,\n owner\n };\n}\nfunction neighbourhoodIndex(redundancyLevel, address) {\n return NEIGHBOURHOOD_BASES[redundancyLevel - 1] + (address[0] >> 8 - redundancyLevel);\n}\nfunction replicaIdentifiers(rootAddress, redundancyLevel) {\n const count = REPLICA_COUNTS[redundancyLevel];\n if (count === 0) return [];\n const covered = /* @__PURE__ */ new Set();\n const identifiers = [];\n for (let i = 0; i < 255 && identifiers.length < count; i++) {\n const identifier = new Uint8Array(32);\n identifier.set(rootAddress);\n identifier[0] = i;\n const address = makeSOCAddress(identifier, REPLICAS_OWNER).toUint8Array();\n const neighbourhood = neighbourhoodIndex(redundancyLevel, address);\n if (!covered.has(neighbourhood)) {\n covered.add(neighbourhood);\n identifiers.push(identifier);\n }\n }\n return identifiers;\n}\nfunction makeReplicas(rootChunk, redundancyLevel) {\n if (redundancyLevel === 0) return [];\n const rootAddress = rootChunk.hash().toUint8Array();\n const identifiers = replicaIdentifiers(rootAddress, redundancyLevel);\n return identifiers.map((identifier) => {\n const signature = signSoc(identifier, rootAddress, REPLICAS_PRIVATE_KEY);\n const data = Bytes.concat(identifier, signature, rootChunk.build());\n return { address: makeSOCAddress(identifier, REPLICAS_OWNER), data };\n });\n}\nfunction makeEncryptedReplicas(rootChunk, key, redundancyLevel) {\n if (redundancyLevel === 0) return [];\n const encryptedAddress = rootChunk.encryptedHash(key).address.toUint8Array();\n const identifiers = replicaIdentifiers(encryptedAddress, redundancyLevel);\n const encryptedBody = Bytes.concat(\n encryptSpan(key, numberToUint64(rootChunk.span, \"LE\")),\n encryptData(key, rootChunk.writer.buffer)\n );\n return identifiers.map((identifier) => {\n const signature = signSoc(identifier, encryptedAddress, REPLICAS_PRIVATE_KEY);\n const data = Bytes.concat(identifier, signature, encryptedBody);\n return { address: makeSOCAddress(identifier, REPLICAS_OWNER), data };\n });\n}\n\n// src/chunk/cac.ts\nvar MIN_PAYLOAD_SIZE = 1;\nvar MAX_PAYLOAD_SIZE = 4096;\nfunction makeContentAddressedChunk(rawPayload, span) {\n if (typeof rawPayload === \"string\") {\n rawPayload = Bytes.fromUtf8(rawPayload);\n }\n if (rawPayload.length < MIN_PAYLOAD_SIZE || rawPayload.length > MAX_PAYLOAD_SIZE) {\n throw new RangeError(`payload size ${rawPayload.length} exceeds limits [${MIN_PAYLOAD_SIZE}, ${MAX_PAYLOAD_SIZE}]`);\n }\n const typedSpan = span ? typeof span === \"bigint\" ? Span.fromBigInt(span) : span : Span.fromBigInt(BigInt(rawPayload.length));\n const payload = new Bytes(rawPayload);\n const data = Bytes.concat(typedSpan.toUint8Array(), payload.toUint8Array());\n const address = calculateChunkAddress(data);\n const chunk = {\n data,\n span: typedSpan,\n payload,\n address,\n toSingleOwnerChunk: (identifier, privateKey) => makeSingleOwnerChunk(chunk, identifier, new PrivateKey(privateKey).toBigInt())\n };\n return chunk;\n}\nfunction unmarshalContentAddressedChunk(data) {\n const bytes = new Bytes(data);\n return makeContentAddressedChunk(bytes.toUint8Array().slice(Span.LENGTH), Span.fromSlice(bytes.toUint8Array(), 0));\n}\n\n// src/chunk/splitter.ts\nvar ChunkBuilder = class {\n span;\n writer;\n constructor(span = 0n) {\n this.span = span;\n this.writer = new Uint8ArrayWriter(new Uint8Array(4096));\n }\n /**\n * Returns the raw chunk bytes: 8-byte span || 4096-byte payload buffer.\n */\n build() {\n return Bytes.concat(numberToUint64(this.span, \"LE\"), this.writer.buffer);\n }\n /**\n * Computes the unencrypted BMT address of this chunk.\n */\n hash() {\n return calculateChunkAddress(this.build());\n }\n /**\n * Encrypts this chunk with `key` (generating a random one if omitted) and\n * returns the resulting address alongside the key used.\n */\n encryptedHash(key) {\n if (!key) {\n key = new Uint8Array(32);\n crypto.getRandomValues(key);\n }\n const encSpan = encryptSpan(key, numberToUint64(this.span, \"LE\"));\n const encPayload = encryptData(key, this.writer.buffer);\n return { address: calculateChunkAddress(Bytes.concat(encSpan, encPayload)), key };\n }\n};\nvar ChunkSplitter = class _ChunkSplitter {\n static NOOP = async (_) => [];\n refSize;\n encrypted;\n maxShards;\n chunks;\n counters = [1];\n pending = [[]];\n onBatch;\n onIntermediateChunk;\n hasParity = [false];\n pendingEntries = [];\n /**\n * @param onBatch Called with each level's sealed chunks as a batch fills\n * up; return any parity entries to append as extra references (empty\n * array for no redundancy).\n * @param maxShards Max data-chunk references per intermediate node.\n * Defaults to as many as fit in one 4096-byte node; pass a smaller value\n * (e.g. via erasure-coding's getMaxShards) to leave room for parity refs.\n * @param onIntermediateChunk Called with each intermediate chunk as it's\n * sealed, so callers can tag it (e.g. encoding a redundancy level into its span).\n */\n constructor(onBatch, maxShards, encrypted = false, onIntermediateChunk) {\n this.encrypted = encrypted;\n this.refSize = encrypted ? 64 : 32;\n this.maxShards = maxShards ?? 4096 / this.refSize;\n this.chunks = [new ChunkBuilder()];\n this.onBatch = onBatch;\n this.onIntermediateChunk = onIntermediateChunk;\n }\n /**\n * Splits `data` into a chunk tree (no redundancy, no encryption, no\n * upload callback) and returns just its root chunk.\n */\n static async root(data) {\n const tree = new _ChunkSplitter(_ChunkSplitter.NOOP);\n await tree.append(data);\n return tree.finalize();\n }\n /**\n * Splits `data` into an encrypted chunk tree (no upload callback) and\n * returns the root's encrypted address and key.\n */\n static async encryptedRoot(data) {\n const tree = new _ChunkSplitter(_ChunkSplitter.NOOP, void 0, true);\n await tree.append(data);\n const root = await tree.finalize();\n return root.encryptedHash();\n }\n /**\n * Appends more data to the tree, sealing and elevating chunks as needed.\n * `level`/`spanIncrement` are internal - callers building a tree from raw\n * input data should always call this at the default level 0.\n */\n async append(data, level = 0, spanIncrement = 0n) {\n const reader = new Uint8ArrayReader(data);\n while (reader.max() > 0) {\n if (this.chunks[level].writer.max() === 0 || spanIncrement && this.chunks[level].writer.max() < data.length) {\n await this.elevate(level);\n }\n const written = this.chunks[level].writer.write(reader);\n if (spanIncrement) {\n this.chunks[level].span += spanIncrement;\n } else {\n this.chunks[0].span += BigInt(written);\n }\n }\n }\n async elevate(level) {\n this.counters[level] = (this.counters[level] + 1) % (4096 / this.refSize);\n if (!this.pending[level]) this.pending[level] = [];\n await this.sealParities(level);\n const originalSpan = this.chunks[level].span;\n if (level >= 1 && this.onIntermediateChunk) {\n this.onIntermediateChunk(this.chunks[level], this.hasParity[level] ?? false);\n this.hasParity[level] = false;\n }\n if (this.encrypted) {\n const { address, key } = this.chunks[level].encryptedHash();\n const ref = new Uint8Array(64);\n ref.set(address.toUint8Array());\n ref.set(key, 32);\n this.pending[level].push({ entry: { chunk: this.chunks[level], key }, ref, span: originalSpan });\n } else {\n this.pending[level].push({\n entry: { chunk: this.chunks[level] },\n ref: this.chunks[level].hash().toUint8Array(),\n span: originalSpan\n });\n }\n this.chunks[level] = new ChunkBuilder();\n if (this.pending[level].length >= this.maxShards) {\n await this.flushBatch(level);\n }\n }\n async sealParities(level) {\n const entries = this.pendingEntries[level];\n if (!entries?.length) return;\n this.pendingEntries[level] = [];\n const parities = await this.onBatch(entries);\n if (parities.length > 0) {\n this.hasParity[level] = true;\n for (const { chunk } of parities) {\n this.chunks[level].writer.write(new Uint8ArrayReader(chunk.hash().toUint8Array()));\n }\n }\n }\n async flushBatch(level) {\n if (!this.chunks[level + 1]) {\n this.chunks.push(new ChunkBuilder());\n this.counters.push(1);\n this.pending.push([]);\n this.hasParity.push(false);\n }\n const batch = this.pending[level];\n this.pending[level] = [];\n for (const { ref, span } of batch) {\n await this.append(ref, level + 1, span);\n }\n if (!this.pendingEntries[level + 1]) this.pendingEntries[level + 1] = [];\n this.pendingEntries[level + 1].push(...batch.map((p) => p.entry));\n if (batch.length >= this.maxShards) await this.sealParities(level + 1);\n }\n /**\n * Seals every level and returns the tree's root chunk. `level` is\n * internal - callers should always start at the default level 0.\n */\n async finalize(level = 0) {\n if (this.pending[level]?.length) {\n await this.flushBatch(level);\n }\n if (!this.chunks[level + 1]) {\n await this.sealParities(level);\n if (level >= 1 && this.onIntermediateChunk) {\n this.onIntermediateChunk(this.chunks[level], this.hasParity[level] ?? false);\n }\n return this.chunks[level];\n }\n if (this.counters[level] === 1) {\n await this.elevate(level + 1);\n await this.flushBatch(level + 1);\n this.chunks[level + 1] = this.chunks[level];\n return this.finalize(level + 1);\n }\n await this.elevate(level);\n await this.flushBatch(level);\n return this.finalize(level + 1);\n }\n};\n\n// src/erasure-coding/levels.ts\nvar ERASURE_TABLES = [\n [[], []],\n // NONE (0)\n [\n [95, 69, 47, 29, 15, 6, 2, 1],\n [9, 8, 7, 6, 5, 4, 3, 2]\n ],\n // MEDIUM (1)\n [\n [105, 96, 87, 78, 70, 62, 54, 47, 40, 33, 27, 21, 16, 11, 7, 4, 2, 1],\n [21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4]\n ],\n // STRONG (2)\n [\n [93, 88, 83, 78, 74, 69, 64, 60, 55, 51, 46, 42, 38, 34, 30, 27, 23, 20, 17, 14, 11, 9, 6, 4, 3, 2, 1],\n [31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5]\n ],\n // INSANE (3)\n [\n [\n 37,\n 36,\n 35,\n 34,\n 33,\n 32,\n 31,\n 30,\n 29,\n 28,\n 27,\n 26,\n 25,\n 24,\n 23,\n 22,\n 21,\n 20,\n 19,\n 18,\n 17,\n 16,\n 15,\n 14,\n 13,\n 12,\n 11,\n 10,\n 9,\n 8,\n 7,\n 6,\n 5,\n 4,\n 3,\n 2,\n 1\n ],\n [\n 89,\n 87,\n 86,\n 84,\n 83,\n 81,\n 80,\n 78,\n 76,\n 75,\n 73,\n 71,\n 70,\n 68,\n 66,\n 65,\n 63,\n 61,\n 59,\n 58,\n 56,\n 54,\n 52,\n 50,\n 48,\n 47,\n 45,\n 43,\n 40,\n 38,\n 36,\n 34,\n 31,\n 29,\n 26,\n 23,\n 19\n ]\n ]\n // PARANOID (4)\n];\nvar ENC_ERASURE_TABLES = [\n [[], []],\n // NONE (0)\n [\n [47, 34, 23, 14, 7, 3, 1],\n [9, 8, 7, 6, 5, 4, 3]\n ],\n // encMEDIUM (1)\n [\n [52, 48, 43, 39, 35, 31, 27, 23, 20, 16, 13, 10, 8, 5, 3, 2, 1],\n [21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5]\n ],\n // encSTRONG (2)\n [\n [46, 44, 41, 39, 37, 34, 32, 30, 27, 25, 23, 21, 19, 17, 15, 13, 11, 10, 8, 7, 5, 4, 3, 2, 1],\n [31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 6]\n ],\n // encINSANE (3)\n [\n [18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1],\n [87, 84, 81, 78, 75, 71, 68, 65, 61, 58, 54, 50, 47, 43, 38, 34, 29, 23]\n ]\n // encPARANOID (4)\n];\nfunction tableGetParities(table, shards) {\n const [thresholds, parities] = table;\n for (let i = 0; i < thresholds.length; i++) {\n if (shards >= thresholds[i]) return parities[i];\n }\n return 0;\n}\nfunction getParities(level, shards, encrypted) {\n if (level <= 0 || level > 4) return 0;\n return tableGetParities(encrypted ? ENC_ERASURE_TABLES[level] : ERASURE_TABLES[level], shards);\n}\nvar BRANCHES = 128;\nvar ENC_BRANCHES = 64;\nfunction getMaxShards(level, encrypted) {\n if (level <= 0) return encrypted ? ENC_BRANCHES : BRANCHES;\n if (encrypted) {\n const parities = getParities(level, ENC_BRANCHES, true);\n return Math.floor((BRANCHES - parities) / 2);\n }\n return BRANCHES - getParities(level, BRANCHES, false);\n}\nfunction approximateOverheadForRedundancyLevel(chunks, level, encrypted) {\n if (level <= 0 || chunks <= 0) {\n return 0;\n }\n return getParities(level, chunks, encrypted) / chunks;\n}\nvar MEDIUM_STAT = { label: \"medium\", value: 1, errorTolerance: 0.01 };\nvar STRONG_STAT = { label: \"strong\", value: 2, errorTolerance: 0.05 };\nvar INSANE_STAT = { label: \"insane\", value: 3, errorTolerance: 0.1 };\nvar PARANOID_STAT = { label: \"paranoid\", value: 4, errorTolerance: 0.5 };\nfunction getRedundancyStats() {\n return { medium: MEDIUM_STAT, strong: STRONG_STAT, insane: INSANE_STAT, paranoid: PARANOID_STAT };\n}\nfunction getRedundancyStat(level) {\n if (typeof level === \"string\") {\n switch (level.toLowerCase()) {\n case \"medium\":\n return MEDIUM_STAT;\n case \"strong\":\n return STRONG_STAT;\n case \"insane\":\n return INSANE_STAT;\n case \"paranoid\":\n return PARANOID_STAT;\n default:\n throw new Error(`Unknown redundancy level '${level}'`);\n }\n }\n switch (level) {\n case 1:\n return MEDIUM_STAT;\n case 2:\n return STRONG_STAT;\n case 3:\n return INSANE_STAT;\n case 4:\n return PARANOID_STAT;\n default:\n throw new Error(`Unknown redundancy level '${level}'`);\n }\n}\n\n// src/erasure-coding/span.ts\nvar CLEAR_TOP_BYTE_MASK = 0x00ffffffffffffffn;\nfunction encodeRedundancyLevel(span, level) {\n return span & CLEAR_TOP_BYTE_MASK | BigInt(level | 128) << 56n;\n}\nfunction decodeRedundancyLevel(span) {\n const topByte = Number(span >> 56n & 0xffn);\n if (topByte <= 128) {\n return { level: 0, span };\n }\n return { level: topByte & 127, span: span & CLEAR_TOP_BYTE_MASK };\n}\nfunction referenceCount(span, level, encrypted) {\n const maxShards = BigInt(getMaxShards(level, encrypted));\n let branchSize = 4096n;\n let branchLevel = 1;\n while (branchSize < span) {\n branchSize *= maxShards;\n branchLevel++;\n }\n let referenceSize = 4096n;\n for (let i = 1; i < branchLevel - 1; i++) {\n referenceSize *= maxShards;\n }\n let dataShardCount = 1;\n let spanOffset = referenceSize;\n while (spanOffset < span) {\n spanOffset += referenceSize;\n dataShardCount++;\n }\n return { dataShardCount, parityShardCount: getParities(level, dataShardCount, encrypted) };\n}\n\n// src/chunk/joiner.ts\nfunction isAllZero(bytes) {\n for (let i = 0; i < bytes.length; i++) {\n if (bytes[i] !== 0) return false;\n }\n return true;\n}\nvar ChunkJoiner = class _ChunkJoiner {\n refSize;\n encrypted;\n fetch;\n onData;\n constructor(fetch, onData, encrypted = false) {\n this.fetch = fetch;\n this.onData = onData;\n this.encrypted = encrypted;\n this.refSize = encrypted ? 64 : 32;\n }\n /**\n * Fetches and reconstructs the full data behind an unencrypted chunk tree.\n */\n static async collect(address, fetch) {\n const parts = [];\n await new _ChunkJoiner(fetch, async (data) => {\n parts.push(data);\n }).join(address);\n return Bytes.concat(...parts);\n }\n /**\n * Fetches and reconstructs the full data behind an encrypted chunk tree,\n * given the root's decryption key.\n */\n static async collectEncrypted(address, key, fetch) {\n const parts = [];\n await new _ChunkJoiner(\n fetch,\n async (data) => {\n parts.push(data);\n },\n true\n ).join(address, key);\n return Bytes.concat(...parts);\n }\n /**\n * Fetches the chunk at `address` and recursively descends into its\n * children (skipping any parity references), emitting leaf payloads to\n * `onData` in order as they're reached.\n */\n async join(address, key) {\n const raw = await this.fetch(address);\n let rawSpan;\n let data;\n if (this.encrypted && key) {\n ;\n ({ span: rawSpan, data } = decryptChunk(raw, key));\n } else {\n rawSpan = uint64ToNumber(raw.subarray(0, 8), \"LE\");\n data = raw.subarray(8, 4104);\n }\n const { level, span } = decodeRedundancyLevel(rawSpan);\n if (span <= 4096n) {\n await this.onData(data.subarray(0, Number(span)));\n return;\n }\n const maxRefs = Math.floor(4096 / this.refSize);\n const dataRefCount = level > 0 ? referenceCount(span, level, this.encrypted).dataShardCount : maxRefs;\n for (let i = 0; i < Math.min(dataRefCount, maxRefs); i++) {\n const ref = data.subarray(i * this.refSize, (i + 1) * this.refSize);\n const childAddress = ref.subarray(0, 32);\n if (level === 0 && isAllZero(childAddress)) break;\n await this.join(childAddress, this.encrypted ? ref.subarray(32, 64) : void 0);\n }\n }\n};\n\n// src/encryption/xor-cipher.ts\nfunction xorCypher(bytes, key) {\n const result = new Uint8Array(bytes.length);\n for (let i = 0; i < bytes.length; i++) {\n result[i] = bytes[i] ^ key[i % key.length];\n }\n return result;\n}\n\n// src/erasure-coding/reed-solomon.ts\nvar LOG_TABLE = new Uint8Array([\n 0,\n 0,\n 1,\n 25,\n 2,\n 50,\n 26,\n 198,\n 3,\n 223,\n 51,\n 238,\n 27,\n 104,\n 199,\n 75,\n 4,\n 100,\n 224,\n 14,\n 52,\n 141,\n 239,\n 129,\n 28,\n 193,\n 105,\n 248,\n 200,\n 8,\n 76,\n 113,\n 5,\n 138,\n 101,\n 47,\n 225,\n 36,\n 15,\n 33,\n 53,\n 147,\n 142,\n 218,\n 240,\n 18,\n 130,\n 69,\n 29,\n 181,\n 194,\n 125,\n 106,\n 39,\n 249,\n 185,\n 201,\n 154,\n 9,\n 120,\n 77,\n 228,\n 114,\n 166,\n 6,\n 191,\n 139,\n 98,\n 102,\n 221,\n 48,\n 253,\n 226,\n 152,\n 37,\n 179,\n 16,\n 145,\n 34,\n 136,\n 54,\n 208,\n 148,\n 206,\n 143,\n 150,\n 219,\n 189,\n 241,\n 210,\n 19,\n 92,\n 131,\n 56,\n 70,\n 64,\n 30,\n 66,\n 182,\n 163,\n 195,\n 72,\n 126,\n 110,\n 107,\n 58,\n 40,\n 84,\n 250,\n 133,\n 186,\n 61,\n 202,\n 94,\n 155,\n 159,\n 10,\n 21,\n 121,\n 43,\n 78,\n 212,\n 229,\n 172,\n 115,\n 243,\n 167,\n 87,\n 7,\n 112,\n 192,\n 247,\n 140,\n 128,\n 99,\n 13,\n 103,\n 74,\n 222,\n 237,\n 49,\n 197,\n 254,\n 24,\n 227,\n 165,\n 153,\n 119,\n 38,\n 184,\n 180,\n 124,\n 17,\n 68,\n 146,\n 217,\n 35,\n 32,\n 137,\n 46,\n 55,\n 63,\n 209,\n 91,\n 149,\n 188,\n 207,\n 205,\n 144,\n 135,\n 151,\n 178,\n 220,\n 252,\n 190,\n 97,\n 242,\n 86,\n 211,\n 171,\n 20,\n 42,\n 93,\n 158,\n 132,\n 60,\n 57,\n 83,\n 71,\n 109,\n 65,\n 162,\n 31,\n 45,\n 67,\n 216,\n 183,\n 123,\n 164,\n 118,\n 196,\n 23,\n 73,\n 236,\n 127,\n 12,\n 111,\n 246,\n 108,\n 161,\n 59,\n 82,\n 41,\n 157,\n 85,\n 170,\n 251,\n 96,\n 134,\n 177,\n 187,\n 204,\n 62,\n 90,\n 203,\n 89,\n 95,\n 176,\n 156,\n 169,\n 160,\n 81,\n 11,\n 245,\n 22,\n 235,\n 122,\n 117,\n 44,\n 215,\n 79,\n 174,\n 213,\n 233,\n 230,\n 231,\n 173,\n 232,\n 116,\n 214,\n 244,\n 234,\n 168,\n 80,\n 88,\n 175\n]);\nvar EXP_TABLE = new Uint8Array([\n 1,\n 2,\n 4,\n 8,\n 16,\n 32,\n 64,\n 128,\n 29,\n 58,\n 116,\n 232,\n 205,\n 135,\n 19,\n 38,\n 76,\n 152,\n 45,\n 90,\n 180,\n 117,\n 234,\n 201,\n 143,\n 3,\n 6,\n 12,\n 24,\n 48,\n 96,\n 192,\n 157,\n 39,\n 78,\n 156,\n 37,\n 74,\n 148,\n 53,\n 106,\n 212,\n 181,\n 119,\n 238,\n 193,\n 159,\n 35,\n 70,\n 140,\n 5,\n 10,\n 20,\n 40,\n 80,\n 160,\n 93,\n 186,\n 105,\n 210,\n 185,\n 111,\n 222,\n 161,\n 95,\n 190,\n 97,\n 194,\n 153,\n 47,\n 94,\n 188,\n 101,\n 202,\n 137,\n 15,\n 30,\n 60,\n 120,\n 240,\n 253,\n 231,\n 211,\n 187,\n 107,\n 214,\n 177,\n 127,\n 254,\n 225,\n 223,\n 163,\n 91,\n 182,\n 113,\n 226,\n 217,\n 175,\n 67,\n 134,\n 17,\n 34,\n 68,\n 136,\n 13,\n 26,\n 52,\n 104,\n 208,\n 189,\n 103,\n 206,\n 129,\n 31,\n 62,\n 124,\n 248,\n 237,\n 199,\n 147,\n 59,\n 118,\n 236,\n 197,\n 151,\n 51,\n 102,\n 204,\n 133,\n 23,\n 46,\n 92,\n 184,\n 109,\n 218,\n 169,\n 79,\n 158,\n 33,\n 66,\n 132,\n 21,\n 42,\n 84,\n 168,\n 77,\n 154,\n 41,\n 82,\n 164,\n 85,\n 170,\n 73,\n 146,\n 57,\n 114,\n 228,\n 213,\n 183,\n 115,\n 230,\n 209,\n 191,\n 99,\n 198,\n 145,\n 63,\n 126,\n 252,\n 229,\n 215,\n 179,\n 123,\n 246,\n 241,\n 255,\n 227,\n 219,\n 171,\n 75,\n 150,\n 49,\n 98,\n 196,\n 149,\n 55,\n 110,\n 220,\n 165,\n 87,\n 174,\n 65,\n 130,\n 25,\n 50,\n 100,\n 200,\n 141,\n 7,\n 14,\n 28,\n 56,\n 112,\n 224,\n 221,\n 167,\n 83,\n 166,\n 81,\n 162,\n 89,\n 178,\n 121,\n 242,\n 249,\n 239,\n 195,\n 155,\n 43,\n 86,\n 172,\n 69,\n 138,\n 9,\n 18,\n 36,\n 72,\n 144,\n 61,\n 122,\n 244,\n 245,\n 247,\n 243,\n 251,\n 235,\n 203,\n 139,\n 11,\n 22,\n 44,\n 88,\n 176,\n 125,\n 250,\n 233,\n 207,\n 131,\n 27,\n 54,\n 108,\n 216,\n 173,\n 71,\n 142\n]);\nfunction gfMul(a, b) {\n if (a === 0 || b === 0) return 0;\n return EXP_TABLE[(LOG_TABLE[a] + LOG_TABLE[b]) % 255];\n}\nfunction gfDiv(a, b) {\n if (a === 0) return 0;\n return EXP_TABLE[(LOG_TABLE[a] - LOG_TABLE[b] + 255) % 255];\n}\nfunction gfExp(a, n) {\n if (n === 0) return 1;\n if (a === 0) return 0;\n return EXP_TABLE[LOG_TABLE[a] * n % 255];\n}\nvar GFMatrix = class _GFMatrix {\n rows;\n cols;\n data;\n constructor(rows, cols, data) {\n this.rows = rows;\n this.cols = cols;\n this.data = data ?? new Uint8Array(rows * cols);\n }\n get(r, c) {\n return this.data[r * this.cols + c];\n }\n set(r, c, v) {\n this.data[r * this.cols + c] = v;\n }\n static identity(n) {\n const m = new _GFMatrix(n, n);\n for (let i = 0; i < n; i++) m.set(i, i, 1);\n return m;\n }\n // vandermonde[r][c] = gfExp(r, c)\n static vandermonde(rows, cols) {\n const m = new _GFMatrix(rows, cols);\n for (let r = 0; r < rows; r++) {\n for (let c = 0; c < cols; c++) {\n m.set(r, c, gfExp(r, c));\n }\n }\n return m;\n }\n multiply(right) {\n const result = new _GFMatrix(this.rows, right.cols);\n for (let r = 0; r < this.rows; r++) {\n for (let c = 0; c < right.cols; c++) {\n let val = 0;\n for (let i = 0; i < this.cols; i++) {\n val ^= gfMul(this.get(r, i), right.get(i, c));\n }\n result.set(r, c, val);\n }\n }\n return result;\n }\n augment(right) {\n const result = new _GFMatrix(this.rows, this.cols + right.cols);\n for (let r = 0; r < this.rows; r++) {\n for (let c = 0; c < this.cols; c++) result.set(r, c, this.get(r, c));\n for (let c = 0; c < right.cols; c++) result.set(r, this.cols + c, right.get(r, c));\n }\n return result;\n }\n subMatrix(rmin, cmin, rmax, cmax) {\n const result = new _GFMatrix(rmax - rmin, cmax - cmin);\n for (let r = rmin; r < rmax; r++) {\n for (let c = cmin; c < cmax; c++) {\n result.set(r - rmin, c - cmin, this.get(r, c));\n }\n }\n return result;\n }\n swapRows(r1, r2) {\n for (let c = 0; c < this.cols; c++) {\n const tmp = this.get(r1, c);\n this.set(r1, c, this.get(r2, c));\n this.set(r2, c, tmp);\n }\n }\n invert() {\n const size = this.rows;\n const work = this.augment(_GFMatrix.identity(size));\n work.gaussianElimination();\n return work.subMatrix(0, size, size, size * 2);\n }\n gaussianElimination() {\n const rows = this.rows;\n const cols = this.cols;\n for (let r = 0; r < rows; r++) {\n if (this.get(r, r) === 0) {\n for (let rowBelow = r + 1; rowBelow < rows; rowBelow++) {\n if (this.get(rowBelow, r) !== 0) {\n this.swapRows(r, rowBelow);\n break;\n }\n }\n }\n if (this.get(r, r) === 0) throw new Error(\"matrix is singular\");\n if (this.get(r, r) !== 1) {\n const scale = gfDiv(1, this.get(r, r));\n for (let c = 0; c < cols; c++) {\n this.set(r, c, gfMul(this.get(r, c), scale));\n }\n }\n for (let rowBelow = r + 1; rowBelow < rows; rowBelow++) {\n if (this.get(rowBelow, r) !== 0) {\n const scale = this.get(rowBelow, r);\n for (let c = 0; c < cols; c++) {\n this.set(rowBelow, c, this.get(rowBelow, c) ^ gfMul(scale, this.get(r, c)));\n }\n }\n }\n }\n for (let d = 0; d < rows; d++) {\n for (let rowAbove = 0; rowAbove < d; rowAbove++) {\n if (this.get(rowAbove, d) !== 0) {\n const scale = this.get(rowAbove, d);\n for (let c = 0; c < cols; c++) {\n this.set(rowAbove, c, this.get(rowAbove, c) ^ gfMul(scale, this.get(d, c)));\n }\n }\n }\n }\n }\n};\nvar matrixCache = /* @__PURE__ */ new Map();\nfunction buildMatrix(dataShards, parityShards) {\n const key = `${dataShards},${parityShards}`;\n let matrix = matrixCache.get(key);\n if (!matrix) {\n const totalShards = dataShards + parityShards;\n const vm = GFMatrix.vandermonde(totalShards, dataShards);\n const top = vm.subMatrix(0, 0, dataShards, dataShards);\n matrix = vm.multiply(top.invert());\n matrixCache.set(key, matrix);\n }\n return matrix;\n}\nfunction getParityRows(dataShards, parityShards) {\n const matrix = buildMatrix(dataShards, parityShards);\n const rows = [];\n for (let i = 0; i < parityShards; i++) {\n const row = [];\n for (let c = 0; c < dataShards; c++) row.push(matrix.get(dataShards + i, c));\n rows.push(row);\n }\n return rows;\n}\nfunction rsEncode(data, parityCount) {\n if (parityCount === 0) return [];\n const dataCount = data.length;\n const shardSize = data[0].length;\n const rows = getParityRows(dataCount, parityCount);\n return rows.map((row) => {\n const parity = new Uint8Array(shardSize);\n for (let j = 0; j < shardSize; j++) {\n let val = 0;\n for (let k = 0; k < dataCount; k++) {\n val ^= gfMul(row[k], data[k][j]);\n }\n parity[j] = val;\n }\n return parity;\n });\n}\nfunction rsDecode(shards, dataCount, parityCount) {\n const totalCount = dataCount + parityCount;\n if (shards.length !== totalCount) {\n throw new Error(`rsDecode: expected ${totalCount} shards, got ${shards.length}`);\n }\n let missingData = false;\n for (let i = 0; i < dataCount; i++) {\n if (!shards[i]) {\n missingData = true;\n break;\n }\n }\n if (!missingData) return shards.slice(0, dataCount);\n const presentRows = [];\n let shardSize = -1;\n for (let i = 0; i < totalCount && presentRows.length < dataCount; i++) {\n const shard = shards[i];\n if (shard) {\n presentRows.push(i);\n if (shardSize < 0) shardSize = shard.length;\n }\n }\n if (presentRows.length < dataCount) {\n throw new Error(`rsDecode: only ${presentRows.length} of ${dataCount} required shards present`);\n }\n const matrix = buildMatrix(dataCount, parityCount);\n const sub = new GFMatrix(dataCount, dataCount);\n for (let r = 0; r < dataCount; r++) {\n for (let c = 0; c < dataCount; c++) sub.set(r, c, matrix.get(presentRows[r], c));\n }\n const decodeMatrix = sub.invert();\n const result = [];\n for (let i = 0; i < dataCount; i++) {\n const existing = shards[i];\n if (existing) {\n result.push(existing);\n continue;\n }\n const out = new Uint8Array(shardSize);\n for (let j = 0; j < shardSize; j++) {\n let val = 0;\n for (let r = 0; r < dataCount; r++) {\n val ^= gfMul(decodeMatrix.get(i, r), shards[presentRows[r]][j]);\n }\n out[j] = val;\n }\n result.push(out);\n }\n return result;\n}\n\n// src/erasure-coding/batch.ts\nfunction chunkFromBytes(bytes) {\n const chunk = new ChunkBuilder(uint64ToNumber(bytes.subarray(0, 8), \"LE\"));\n chunk.writer.buffer.set(bytes.subarray(8, 4104));\n return chunk;\n}\nfunction makeIntermediateChunkHandler(level) {\n return (chunk, hasParity) => {\n if (hasParity && level > 0) {\n chunk.span = encodeRedundancyLevel(chunk.span, level);\n }\n };\n}\nfunction makeErasureBatch(level, encrypted, onChunk) {\n return async (batch) => {\n for (const { chunk, key } of batch) {\n await onChunk(chunk, key);\n }\n if (level <= 0) return [];\n if (encrypted) {\n const parityCount2 = getParities(level, batch.length, true);\n if (parityCount2 === 0) return [];\n const shardBytes = batch.map(\n ({ chunk, key }) => Bytes.concat(encryptSpan(key, numberToUint64(chunk.span, \"LE\")), encryptData(key, chunk.writer.buffer))\n );\n const parityShards2 = rsEncode(shardBytes, parityCount2);\n const parityEntries2 = [];\n for (const bytes of parityShards2) {\n const parityChunk = chunkFromBytes(bytes);\n await onChunk(parityChunk);\n parityEntries2.push({ chunk: parityChunk });\n }\n return parityEntries2;\n }\n const parityCount = getParities(level, batch.length, false);\n if (parityCount === 0) return [];\n const dataBytes = batch.map(({ chunk }) => chunk.build());\n const parityShards = rsEncode(dataBytes, parityCount);\n const parityEntries = [];\n for (const bytes of parityShards) {\n const chunk = chunkFromBytes(bytes);\n await onChunk(chunk);\n parityEntries.push({ chunk });\n }\n return parityEntries;\n };\n}\n\n// src/mantaray/node.ts\nvar ENCODER5 = new TextEncoder();\nvar DECODER2 = new TextDecoder();\nvar TYPE_VALUE = 2;\nvar TYPE_EDGE = 4;\nvar TYPE_WITH_PATH_SEPARATOR = 8;\nvar TYPE_WITH_METADATA = 16;\nvar PATH_SEPARATOR = new Uint8Array([47]);\nvar VERSION_02_HASH = hexToUint8Array(\"5768b3b6a7db56d21d1abff40d41cebfc83448fed8d7e9b06ec0d3b073f28f7b\");\nfunction setBit(bytes, index) {\n const byteIndex = Math.floor(index / 8);\n const bitIndex = index % 8;\n bytes[byteIndex] = bytes[byteIndex] | 1 << bitIndex;\n}\nfunction getBit(bytes, index) {\n const byteIndex = Math.floor(index / 8);\n const bitIndex = index % 8;\n return (bytes[byteIndex] >> bitIndex & 1) === 1;\n}\nvar MantarayNode = class _MantarayNode {\n obfuscationKey = new Uint8Array(32);\n selfAddress = null;\n targetAddress = new Uint8Array(32);\n metadata = null;\n path = new Uint8Array(0);\n forks = /* @__PURE__ */ new Map();\n parent = null;\n type = null;\n encrypt = false;\n constructor(options) {\n if (options?.encrypt) {\n this.encrypt = true;\n }\n if (options?.targetAddress) {\n this.targetAddress = options.targetAddress;\n } else if (this.encrypt) {\n this.targetAddress = new Uint8Array(64);\n }\n if (options?.selfAddress) {\n this.selfAddress = options.selfAddress;\n }\n if (options?.metadata) {\n this.metadata = options.metadata;\n }\n if (options?.obfuscationKey) {\n this.obfuscationKey = options.obfuscationKey;\n }\n if (options?.path) {\n this.path = options.path;\n }\n if (options?.parent) {\n this.parent = options.parent;\n }\n this.type = options?.type ?? null;\n }\n /**\n * The full path from the tree's root to this node, concatenating every\n * ancestor's own path segment.\n */\n get fullPath() {\n return Bytes.concat(this.parent?.fullPath ?? new Uint8Array(0), this.path);\n }\n /**\n * {@link fullPath} decoded as UTF-8.\n */\n get fullPathString() {\n return DECODER2.decode(this.fullPath);\n }\n /**\n * Gets the binary representation of the node.\n */\n async marshal() {\n for (const fork of this.forks.values()) {\n if (!fork.node.selfAddress) {\n fork.node.selfAddress = (await fork.node.calculateSelfAddress()).toUint8Array();\n }\n }\n if (this.encrypt && equals(this.obfuscationKey, new Uint8Array(32))) {\n this.obfuscationKey = new Uint8Array(32);\n crypto.getRandomValues(this.obfuscationKey);\n }\n const hasEntry = !equals(this.targetAddress, new Uint8Array(this.targetAddress.length));\n let refBytesSize = 0;\n if (hasEntry) {\n refBytesSize = this.targetAddress.length;\n } else {\n for (const fork of this.forks.values()) {\n if (fork.node.selfAddress && fork.node.selfAddress.length > 0) {\n refBytesSize = fork.node.selfAddress.length;\n break;\n }\n }\n }\n const header = new Uint8Array(32);\n header.set(VERSION_02_HASH, 0);\n header.set(numberToUint8(refBytesSize), 31);\n const entry = hasEntry ? this.targetAddress : new Uint8Array(refBytesSize);\n const forkBitmap = new Uint8Array(32);\n for (const fork of this.forks.keys()) {\n setBit(forkBitmap, fork);\n }\n const forks = [];\n for (let i = 0; i < 256; i++) {\n if (getBit(forkBitmap, i)) {\n forks.push(this.forks.get(i).marshal());\n }\n }\n const data = xorCypher(Bytes.concat(header, entry, forkBitmap, ...forks), this.obfuscationKey);\n return Bytes.concat(this.obfuscationKey, data);\n }\n /**\n * Unmarshals a MantarayNode from previously marshaled data. Each fork's\n * child node only carries its own `selfAddress` - fetch and unmarshal it\n * (e.g. via `saveRecursively`'s chunk store) to descend further.\n */\n static unmarshalFromData(data, selfAddress) {\n if (data.length < 64) {\n throw new Error(\"MantarayNode#unmarshalFromData data too short\");\n }\n const obfuscationKey = data.subarray(0, 32);\n const decrypted = xorCypher(data.subarray(32), obfuscationKey);\n const reader = new Uint8ArrayReader(decrypted);\n const versionHash = reader.read(31);\n if (!equals(versionHash, VERSION_02_HASH.slice(0, 31))) {\n throw new Error(\"MantarayNode#unmarshalFromData invalid version hash\");\n }\n const refBytesSize = uint8ToNumber(reader.read(1));\n const targetAddress = reader.read(refBytesSize);\n const node = new _MantarayNode({ selfAddress, targetAddress, obfuscationKey });\n const forkBitmap = reader.read(32);\n const forkRefSize = refBytesSize === 0 ? 32 : refBytesSize;\n for (let i = 0; i < 256; i++) {\n if (getBit(forkBitmap, i)) {\n const fork = Fork.unmarshal(reader, forkRefSize);\n node.forks.set(i, fork);\n fork.node.parent = node;\n }\n }\n return node;\n }\n /**\n * Adds a fork to the node.\n */\n addFork(path, reference, metadata) {\n this.selfAddress = null;\n this.type = null;\n path = path instanceof Uint8Array ? path : ENCODER5.encode(path);\n let tip = this;\n while (path.length) {\n const prefix = path.slice(0, 30);\n path = path.slice(30);\n const isLast = path.length === 0;\n const [bestMatch, matchedPath] = tip.findClosest(prefix);\n const remainingPath = prefix.slice(matchedPath.length);\n if (matchedPath.length) {\n tip = bestMatch;\n }\n if (!remainingPath.length) {\n continue;\n }\n const newFork = new Fork(\n remainingPath,\n new _MantarayNode({\n targetAddress: isLast ? new Reference(reference).toUint8Array() : void 0,\n metadata: isLast ? metadata : void 0,\n path: remainingPath,\n encrypt: this.encrypt\n })\n );\n const existing = bestMatch.forks.get(remainingPath[0]);\n if (existing) {\n const fork = Fork.split(newFork, existing);\n tip.forks.set(remainingPath[0], fork);\n fork.node.parent = tip;\n } else {\n tip.forks.set(remainingPath[0], newFork);\n newFork.node.parent = tip;\n }\n tip.selfAddress = null;\n tip.type = null;\n tip = newFork.node;\n }\n }\n /**\n * Removes a fork from the node.\n */\n removeFork(path) {\n this.selfAddress = null;\n this.type = null;\n path = path instanceof Uint8Array ? path : ENCODER5.encode(path);\n if (path.length === 0) {\n throw new Error(\"MantarayNode#removeFork path cannot be empty\");\n }\n const match = this.find(path);\n if (!match) {\n throw new Error(\"MantarayNode#removeFork fork not found\");\n }\n const [parent, matchedPath] = this.findClosest(path.slice(0, path.length - 1));\n parent.forks.delete(path.slice(matchedPath.length)[0]);\n for (const fork of match.forks.values()) {\n parent.addFork(Bytes.concat(match.path, fork.prefix), fork.node.targetAddress, fork.node.metadata);\n }\n }\n /**\n * Calculates the self address of the node.\n */\n async calculateSelfAddress() {\n if (this.selfAddress) {\n return new Reference(this.selfAddress);\n }\n if (this.encrypt) {\n throw new Error(\"MantarayNode#calculateSelfAddress is not supported for encrypted nodes - use saveRecursively\");\n }\n return (await ChunkSplitter.root(await this.marshal())).hash();\n }\n /**\n * Saves the node and its children recursively via the given `onChunk`\n * callback - no network client involved, the caller decides how and where\n * chunks get persisted.\n *\n * Returns the reference to the saved manifest (32 bytes, or 64 bytes -\n * address || key - for an encrypted manifest) and the root chunk, so\n * callers can also create dispersed replicas from it.\n */\n async saveRecursively(onChunk) {\n for (const fork of this.forks.values()) {\n await fork.node.saveRecursively(onChunk);\n }\n const onBatch = async (batch) => {\n for (const { chunk, key } of batch) {\n await onChunk(chunk, key);\n }\n return [];\n };\n const splitter = new ChunkSplitter(onBatch, void 0, this.encrypt);\n await splitter.append(await this.marshal());\n const rootChunk = await splitter.finalize();\n if (this.encrypt) {\n const { address, key } = rootChunk.encryptedHash();\n await onChunk(rootChunk, key);\n this.selfAddress = Bytes.concat(address.toUint8Array(), key);\n return { reference: this.selfAddress, rootChunk, encryptionKey: key };\n }\n await onChunk(rootChunk);\n this.selfAddress = rootChunk.hash().toUint8Array();\n return { reference: this.selfAddress, rootChunk };\n }\n /**\n * Finds a node in the tree by its path.\n */\n find(path) {\n const target = path instanceof Uint8Array ? path : ENCODER5.encode(path);\n const [closest, matched] = this.findClosest(target);\n return matched.length === target.length ? closest : null;\n }\n /**\n * Finds the closest node in the tree to the given path.\n */\n findClosest(path, current = new Uint8Array()) {\n path = path instanceof Uint8Array ? path : ENCODER5.encode(path);\n if (path.length === 0) {\n return [this, current];\n }\n const fork = this.forks.get(path[0]);\n if (fork && commonPrefix(fork.prefix, path).length === fork.prefix.length) {\n return fork.node.findClosest(path.slice(fork.prefix.length), Bytes.concat(current, fork.prefix));\n }\n return [this, current];\n }\n /**\n * Returns every node in the tree that has a target address set.\n */\n collect(nodes = []) {\n for (const fork of this.forks.values()) {\n if (!equals(fork.node.targetAddress, new Uint8Array(fork.node.targetAddress.length))) {\n nodes.push(fork.node);\n }\n fork.node.collect(nodes);\n }\n return nodes;\n }\n /**\n * Returns a path -> reference (hex) map of every node in the tree that has\n * a target address set.\n */\n collectAndMap() {\n const result = {};\n for (const node of this.collect()) {\n result[node.fullPathString] = new Reference(node.targetAddress).toHex();\n }\n return result;\n }\n /**\n * Computes this node's type byte (value/edge/path-separator/metadata\n * flags) from its current in-memory state.\n */\n determineType() {\n let type = 0;\n const nullAddress = new Uint8Array(this.targetAddress.length);\n if (!equals(this.targetAddress, nullAddress) || this.forks.size === 0) {\n type |= TYPE_VALUE;\n }\n if (this.forks.size > 0) {\n type |= TYPE_EDGE;\n }\n if (indexOf(this.path, PATH_SEPARATOR) > 0) {\n type |= TYPE_WITH_PATH_SEPARATOR;\n }\n if (this.metadata) {\n type |= TYPE_WITH_METADATA;\n }\n return type;\n }\n};\n\n// src/mantaray/fork.ts\nvar TYPE_WITH_METADATA2 = 16;\nvar ENCODER6 = new TextEncoder();\nvar DECODER3 = new TextDecoder();\nfunction isType(value, type) {\n return (value & type) === type;\n}\nfunction padEndToMultiple(bytes, multiple, paddingByte) {\n const remainder = bytes.length % multiple;\n if (remainder === 0) {\n return bytes;\n }\n const result = new Uint8Array(bytes.length + multiple - remainder).fill(paddingByte);\n result.set(bytes, 0);\n return result;\n}\nvar Fork = class _Fork {\n prefix;\n node;\n constructor(prefix, node) {\n this.prefix = prefix;\n this.node = node;\n }\n /**\n * Merges two forks that share a path prefix, splitting off a new\n * intermediate node at the point where their prefixes diverge.\n */\n static split(a, b) {\n const commonPart = commonPrefix(a.prefix, b.prefix);\n if (commonPart.length === a.prefix.length) {\n const remainingB = b.prefix.slice(commonPart.length);\n b.node.path = b.prefix.slice(commonPart.length);\n b.prefix = b.prefix.slice(commonPart.length);\n b.node.parent = a.node;\n a.node.forks.set(remainingB[0], b);\n return a;\n }\n if (commonPart.length === b.prefix.length) {\n const remainingA = a.prefix.slice(commonPart.length);\n a.node.path = a.prefix.slice(commonPart.length);\n a.prefix = a.prefix.slice(commonPart.length);\n a.node.parent = b.node;\n b.node.forks.set(remainingA[0], a);\n return b;\n }\n const node = new MantarayNode({ path: commonPart, encrypt: a.node.encrypt });\n const newAFork = new _Fork(a.prefix.slice(commonPart.length), a.node);\n const newBFork = new _Fork(b.prefix.slice(commonPart.length), b.node);\n a.node.path = a.prefix.slice(commonPart.length);\n b.node.path = b.prefix.slice(commonPart.length);\n a.prefix = a.prefix.slice(commonPart.length);\n b.prefix = b.prefix.slice(commonPart.length);\n node.forks.set(newAFork.prefix[0], newAFork);\n node.forks.set(newBFork.prefix[0], newBFork);\n newAFork.node.parent = node;\n newBFork.node.parent = node;\n return new _Fork(commonPart, node);\n }\n /**\n * Gets the binary representation of the fork (type byte, prefix, self\n * address, and optional metadata).\n */\n marshal() {\n if (!this.node.selfAddress) {\n throw new Error(\"Fork#marshal node.selfAddress is not set\");\n }\n const data = [];\n data.push(new Uint8Array([this.node.type ?? this.node.determineType()]));\n data.push(numberToUint8(this.prefix.length));\n data.push(this.prefix);\n if (this.prefix.length < 30) {\n data.push(new Uint8Array(30 - this.prefix.length));\n }\n data.push(this.node.selfAddress);\n if (this.node.metadata) {\n const metadataBytes = padEndToMultiple(\n Bytes.concat(new Uint8Array([0, 0]), ENCODER6.encode(JSON.stringify(this.node.metadata))),\n 32,\n 10\n );\n metadataBytes.set(numberToUint16(metadataBytes.length - 2, \"BE\"), 0);\n data.push(metadataBytes);\n }\n return Bytes.concat(...data);\n }\n /**\n * Reads a single fork (and its node's selfAddress/metadata) out of a\n * reader positioned at the start of the fork's bytes.\n */\n static unmarshal(reader, addressLength) {\n const type = uint8ToNumber(reader.read(1));\n const prefixLength = uint8ToNumber(reader.read(1));\n const prefix = reader.read(prefixLength);\n if (prefixLength < 30) {\n reader.read(30 - prefixLength);\n }\n const selfAddress = reader.read(addressLength);\n let metadata = void 0;\n if (isType(type, TYPE_WITH_METADATA2)) {\n const metadataLength = uint16ToNumber(reader.read(2), \"BE\");\n if (metadataLength > reader.max()) {\n throw new Error(\"Fork#unmarshal not enough bytes for metadata\");\n }\n metadata = JSON.parse(DECODER3.decode(reader.read(metadataLength)));\n }\n return new _Fork(prefix, new MantarayNode({ selfAddress, metadata, path: prefix, type }));\n }\n};\n\n// src/stamper/capacity.ts\nfunction getStampUsage(utilization, depth, bucketDepth) {\n return utilization / Math.pow(2, depth - bucketDepth);\n}\nfunction getStampTheoreticalBytes(depth) {\n return 4096 * 2 ** depth;\n}\nvar MAX_UTILIZATION = 0.9;\nfunction parseSizeToBytes(size) {\n const units = { B: 1, kB: 1e3, MB: 1e3 ** 2, GB: 1e3 ** 3, TB: 1e3 ** 4, PB: 1e3 ** 5 };\n const match = size.match(/^([\\d.]+)\\s*(B|kB|MB|GB|TB|PB)$/);\n if (!match) {\n throw new Error(`Invalid size format: ${size}`);\n }\n return Math.ceil(parseFloat(match[1]) * units[match[2]]);\n}\nvar DEFAULT_EFFECTIVE_SIZE_BREAKPOINTS = [\n [17, \"0.00004089 GB\"],\n [18, \"0.00609 GB\"],\n [19, \"0.10249 GB\"],\n [20, \"0.62891 GB\"],\n [21, \"2.38 GB\"],\n [22, \"7.07 GB\"],\n [23, \"18.24 GB\"],\n [24, \"43.04 GB\"],\n [25, \"96.5 GB\"],\n [26, \"208.52 GB\"],\n [27, \"435.98 GB\"],\n [28, \"908.81 GB\"],\n [29, \"1870 GB\"],\n [30, \"3810 GB\"],\n [31, \"7730 GB\"],\n [32, \"15610 GB\"],\n [33, \"31430 GB\"],\n [34, \"63150 GB\"]\n];\nvar ENCRYPTION_OFF_BREAKPOINTS = [\n [\n [17, \"44.70 kB\"],\n [18, \"6.66 MB\"],\n [19, \"112.06 MB\"],\n [20, \"687.62 MB\"],\n [21, \"2.60 GB\"],\n [22, \"7.73 GB\"],\n [23, \"19.94 GB\"],\n [24, \"47.06 GB\"],\n [25, \"105.51 GB\"],\n [26, \"227.98 GB\"],\n [27, \"476.68 GB\"],\n [28, \"993.65 GB\"],\n [29, \"2.04 TB\"],\n [30, \"4.17 TB\"],\n [31, \"8.45 TB\"],\n [32, \"17.07 TB\"],\n [33, \"34.36 TB\"],\n [34, \"69.04 TB\"],\n [35, \"138.54 TB\"],\n [36, \"277.72 TB\"],\n [37, \"556.35 TB\"],\n [38, \"1.11 PB\"],\n [39, \"2.23 PB\"],\n [40, \"4.46 PB\"],\n [41, \"8.93 PB\"]\n ],\n // NONE\n [\n [17, \"41.56 kB\"],\n [18, \"6.19 MB\"],\n [19, \"104.18 MB\"],\n [20, \"639.27 MB\"],\n [21, \"2.41 GB\"],\n [22, \"7.18 GB\"],\n [23, \"18.54 GB\"],\n [24, \"43.75 GB\"],\n [25, \"98.09 GB\"],\n [26, \"211.95 GB\"],\n [27, \"443.16 GB\"],\n [28, \"923.78 GB\"],\n [29, \"1.90 TB\"],\n [30, \"3.88 TB\"],\n [31, \"7.86 TB\"],\n [32, \"15.87 TB\"],\n [33, \"31.94 TB\"],\n [34, \"64.19 TB\"],\n [35, \"128.80 TB\"],\n [36, \"258.19 TB\"],\n [37, \"517.23 TB\"],\n [38, \"1.04 PB\"],\n [39, \"2.07 PB\"],\n [40, \"4.15 PB\"],\n [41, \"8.30 PB\"]\n ],\n // MEDIUM\n [\n [17, \"37.37 kB\"],\n [18, \"5.57 MB\"],\n [19, \"93.68 MB\"],\n [20, \"574.81 MB\"],\n [21, \"2.17 GB\"],\n [22, \"6.46 GB\"],\n [23, \"16.67 GB\"],\n [24, \"39.34 GB\"],\n [25, \"88.20 GB\"],\n [26, \"190.58 GB\"],\n [27, \"398.47 GB\"],\n [28, \"830.63 GB\"],\n [29, \"1.71 TB\"],\n [30, \"3.49 TB\"],\n [31, \"7.07 TB\"],\n [32, \"14.27 TB\"],\n [33, \"28.72 TB\"],\n [34, \"57.71 TB\"],\n [35, \"115.81 TB\"],\n [36, \"232.16 TB\"],\n [37, \"465.07 TB\"],\n [38, \"931.23 TB\"],\n [39, \"1.86 PB\"],\n [40, \"3.73 PB\"],\n [41, \"7.46 PB\"]\n ],\n // STRONG\n [\n [17, \"33.88 kB\"],\n [18, \"5.05 MB\"],\n [19, \"84.92 MB\"],\n [20, \"521.09 MB\"],\n [21, \"1.97 GB\"],\n [22, \"5.86 GB\"],\n [23, \"15.11 GB\"],\n [24, \"35.66 GB\"],\n [25, \"79.96 GB\"],\n [26, \"172.77 GB\"],\n [27, \"361.23 GB\"],\n [28, \"753.00 GB\"],\n [29, \"1.55 TB\"],\n [30, \"3.16 TB\"],\n [31, \"6.41 TB\"],\n [32, \"12.93 TB\"],\n [33, \"26.04 TB\"],\n [34, \"52.32 TB\"],\n [35, \"104.99 TB\"],\n [36, \"210.46 TB\"],\n [37, \"421.61 TB\"],\n [38, \"844.20 TB\"],\n [39, \"1.69 PB\"],\n [40, \"3.38 PB\"],\n [41, \"6.77 PB\"]\n ],\n // INSANE\n [\n [17, \"13.27 kB\"],\n [18, \"1.98 MB\"],\n [19, \"33.27 MB\"],\n [20, \"204.14 MB\"],\n [21, \"771.13 MB\"],\n [22, \"2.29 GB\"],\n [23, \"5.92 GB\"],\n [24, \"13.97 GB\"],\n [25, \"31.32 GB\"],\n [26, \"67.68 GB\"],\n [27, \"141.51 GB\"],\n [28, \"294.99 GB\"],\n [29, \"606.90 GB\"],\n [30, \"1.24 TB\"],\n [31, \"2.51 TB\"],\n [32, \"5.07 TB\"],\n [33, \"10.20 TB\"],\n [34, \"20.50 TB\"],\n [35, \"41.13 TB\"],\n [36, \"82.45 TB\"],\n [37, \"165.17 TB\"],\n [38, \"330.72 TB\"],\n [39, \"661.97 TB\"],\n [40, \"1.32 PB\"],\n [41, \"2.65 PB\"]\n ]\n // PARANOID\n];\nvar ENCRYPTION_ON_BREAKPOINTS = [\n [\n [17, \"44.35 kB\"],\n [18, \"6.61 MB\"],\n [19, \"111.18 MB\"],\n [20, \"682.21 MB\"],\n [21, \"2.58 GB\"],\n [22, \"7.67 GB\"],\n [23, \"19.78 GB\"],\n [24, \"46.69 GB\"],\n [25, \"104.68 GB\"],\n [26, \"226.19 GB\"],\n [27, \"472.93 GB\"],\n [28, \"985.83 GB\"],\n [29, \"2.03 TB\"],\n [30, \"4.14 TB\"],\n [31, \"8.39 TB\"],\n [32, \"16.93 TB\"],\n [33, \"34.09 TB\"],\n [34, \"68.50 TB\"],\n [35, \"137.45 TB\"],\n [36, \"275.53 TB\"],\n [37, \"551.97 TB\"],\n [38, \"1.11 PB\"],\n [39, \"2.21 PB\"],\n [40, \"4.43 PB\"],\n [41, \"8.86 PB\"]\n ],\n // NONE\n [\n [17, \"40.89 kB\"],\n [18, \"6.09 MB\"],\n [19, \"102.49 MB\"],\n [20, \"628.91 MB\"],\n [21, \"2.38 GB\"],\n [22, \"7.07 GB\"],\n [23, \"18.24 GB\"],\n [24, \"43.04 GB\"],\n [25, \"96.50 GB\"],\n [26, \"208.52 GB\"],\n [27, \"435.98 GB\"],\n [28, \"908.81 GB\"],\n [29, \"1.87 TB\"],\n [30, \"3.81 TB\"],\n [31, \"7.73 TB\"],\n [32, \"15.61 TB\"],\n [33, \"31.43 TB\"],\n [34, \"63.15 TB\"],\n [35, \"126.71 TB\"],\n [36, \"254.01 TB\"],\n [37, \"508.85 TB\"],\n [38, \"1.02 PB\"],\n [39, \"2.04 PB\"],\n [40, \"4.08 PB\"],\n [41, \"8.17 PB\"]\n ],\n // MEDIUM\n [\n [17, \"36.73 kB\"],\n [18, \"5.47 MB\"],\n [19, \"92.07 MB\"],\n [20, \"564.95 MB\"],\n [21, \"2.13 GB\"],\n [22, \"6.35 GB\"],\n [23, \"16.38 GB\"],\n [24, \"38.66 GB\"],\n [25, \"86.69 GB\"],\n [26, \"187.31 GB\"],\n [27, \"391.64 GB\"],\n [28, \"816.39 GB\"],\n [29, \"1.68 TB\"],\n [30, \"3.43 TB\"],\n [31, \"6.94 TB\"],\n [32, \"14.02 TB\"],\n [33, \"28.23 TB\"],\n [34, \"56.72 TB\"],\n [35, \"113.82 TB\"],\n [36, \"228.18 TB\"],\n [37, \"457.10 TB\"],\n [38, \"915.26 TB\"],\n [39, \"1.83 PB\"],\n [40, \"3.67 PB\"],\n [41, \"7.34 PB\"]\n ],\n // STRONG\n [\n [17, \"33.26 kB\"],\n [18, \"4.96 MB\"],\n [19, \"83.38 MB\"],\n [20, \"511.65 MB\"],\n [21, \"1.93 GB\"],\n [22, \"5.75 GB\"],\n [23, \"14.84 GB\"],\n [24, \"35.02 GB\"],\n [25, \"78.51 GB\"],\n [26, \"169.64 GB\"],\n [27, \"354.69 GB\"],\n [28, \"739.37 GB\"],\n [29, \"1.52 TB\"],\n [30, \"3.10 TB\"],\n [31, \"6.29 TB\"],\n [32, \"12.70 TB\"],\n [33, \"25.57 TB\"],\n [34, \"51.37 TB\"],\n [35, \"103.08 TB\"],\n [36, \"206.65 TB\"],\n [37, \"413.98 TB\"],\n [38, \"828.91 TB\"],\n [39, \"1.66 PB\"],\n [40, \"3.32 PB\"],\n [41, \"6.64 PB\"]\n ],\n // INSANE\n [\n [17, \"13.17 kB\"],\n [18, \"1.96 MB\"],\n [19, \"33.01 MB\"],\n [20, \"202.53 MB\"],\n [21, \"765.05 MB\"],\n [22, \"2.28 GB\"],\n [23, \"5.87 GB\"],\n [24, \"13.86 GB\"],\n [25, \"31.08 GB\"],\n [26, \"67.15 GB\"],\n [27, \"140.40 GB\"],\n [28, \"292.67 GB\"],\n [29, \"602.12 GB\"],\n [30, \"1.23 TB\"],\n [31, \"2.49 TB\"],\n [32, \"5.03 TB\"],\n [33, \"10.12 TB\"],\n [34, \"20.34 TB\"],\n [35, \"40.80 TB\"],\n [36, \"81.80 TB\"],\n [37, \"163.87 TB\"],\n [38, \"328.11 TB\"],\n [39, \"656.76 TB\"],\n [40, \"1.31 PB\"],\n [41, \"2.63 PB\"]\n ]\n // PARANOID\n];\nfunction getStampEffectiveBytes(depth, encryption, erasureCodeLevel) {\n if (depth < 17) {\n return 0;\n }\n if (encryption !== void 0 && erasureCodeLevel !== void 0) {\n const breakpoints = (encryption ? ENCRYPTION_ON_BREAKPOINTS : ENCRYPTION_OFF_BREAKPOINTS)[erasureCodeLevel];\n const entry = breakpoints?.find(([batchDepth]) => batchDepth === depth);\n if (entry) {\n return parseSizeToBytes(entry[1]);\n }\n } else {\n const entry = DEFAULT_EFFECTIVE_SIZE_BREAKPOINTS.find(([batchDepth]) => batchDepth === depth);\n if (entry) {\n return parseSizeToBytes(entry[1]);\n }\n }\n return Math.ceil(getStampTheoreticalBytes(depth) * MAX_UTILIZATION);\n}\nfunction getStampEffectiveBytesBreakpoints(encryption, erasureCodeLevel) {\n const map = /* @__PURE__ */ new Map();\n for (let depth = 17; depth < 35; depth++) {\n map.set(depth, getStampEffectiveBytes(depth, encryption, erasureCodeLevel));\n }\n return map;\n}\nfunction getDepthForSize(size, encryption, erasureCodeLevel) {\n if (encryption !== void 0 && erasureCodeLevel !== void 0) {\n const breakpoints = (encryption ? ENCRYPTION_ON_BREAKPOINTS : ENCRYPTION_OFF_BREAKPOINTS)[erasureCodeLevel];\n const entry = breakpoints?.find(([, effectiveVolume]) => size <= parseSizeToBytes(effectiveVolume));\n if (entry) {\n return entry[0];\n }\n } else {\n for (const [depth, effectiveVolume] of DEFAULT_EFFECTIVE_SIZE_BREAKPOINTS) {\n if (size <= parseSizeToBytes(effectiveVolume)) {\n return depth;\n }\n }\n }\n return 35;\n}\n\n// src/stamper/marshal.ts\nfunction marshalStamp(signature, batchId, timestamp, index) {\n if (signature.length !== 65) {\n throw new Error(\"invalid signature length\");\n }\n if (batchId.length !== 32) {\n throw new Error(\"invalid batch ID length\");\n }\n if (timestamp.length !== 8) {\n throw new Error(\"invalid timestamp length\");\n }\n if (index.length !== 8) {\n throw new Error(\"invalid index length\");\n }\n return new Bytes(Bytes.concat(batchId, index, timestamp, signature));\n}\nfunction convertEnvelopeToMarshaledStamp(envelope) {\n return marshalStamp(\n envelope.signature.toUint8Array(),\n envelope.batchId.toUint8Array(),\n envelope.timestamp,\n envelope.index\n );\n}\n\n// src/stamper/stamper.ts\nfunction stamp(signer, batchId, address, slot, timestampMs = Date.now()) {\n const privateKey = new PrivateKey(signer);\n const batch = new BatchId(batchId);\n const bucket = uint16ToNumber(address, \"BE\");\n const index = Bytes.concat(numberToUint32(bucket, \"BE\"), numberToUint32(slot, \"BE\"));\n const timestamp = numberToUint64(BigInt(timestampMs) * 1000000n, \"BE\");\n const signature = privateKey.sign(Bytes.concat(address, batch.toUint8Array(), index, timestamp));\n return {\n batchId: batch,\n index,\n issuer: privateKey.publicKey().address(),\n signature,\n timestamp\n };\n}\nvar Stamper = class _Stamper {\n signer;\n batchId;\n buckets;\n depth;\n maxSlot;\n constructor(signer, batchId, buckets, depth) {\n this.signer = signer;\n this.batchId = batchId;\n this.buckets = buckets;\n this.depth = depth;\n this.maxSlot = 2 ** (depth - 16);\n }\n /**\n * Creates a fresh Stamper for a batch with no chunks stamped yet.\n */\n static fromBlank(signer, batchId, depth) {\n return new _Stamper(new PrivateKey(signer), new BatchId(batchId), new Uint32Array(65536), depth);\n }\n /**\n * Resumes a Stamper from a previously persisted bucket state (see {@link getState}).\n */\n static fromState(signer, batchId, buckets, depth) {\n return new _Stamper(new PrivateKey(signer), new BatchId(batchId), buckets, depth);\n }\n /**\n * Stamps a chunk address, automatically picking and reserving the next\n * free slot in its bucket. Throws once a bucket reaches its depth-derived capacity.\n */\n stamp(address, timestampMs) {\n const bucket = uint16ToNumber(address, \"BE\");\n const height = this.buckets[bucket];\n if (height >= this.maxSlot) {\n throw new Error(\"Stamper#stamp bucket is full\");\n }\n this.buckets[bucket] = height + 1;\n return stamp(this.signer, this.batchId, address, height, timestampMs);\n }\n /**\n * Returns the live bucket-height state, for persisting and later resuming\n * via {@link fromState}.\n */\n getState() {\n return this.buckets;\n }\n};\nexport {\n BatchId,\n Bytes,\n ChunkBuilder,\n ChunkJoiner,\n ChunkSplitter,\n EthAddress,\n FeedIndex,\n Fork,\n Identifier,\n MAX_PAYLOAD_SIZE,\n MIN_PAYLOAD_SIZE,\n MantarayNode,\n PeerAddress,\n PrivateKey,\n PublicKey,\n REPLICAS_OWNER,\n Reference,\n Signature,\n Span,\n Stamper,\n Topic,\n TransactionId,\n Uint8ArrayReader,\n Uint8ArrayWriter,\n approximateOverheadForRedundancyLevel,\n base32ToUint8Array,\n base64ToUint8Array,\n binaryToUint8Array,\n calculateChunkAddress,\n checksumEncode,\n commonPrefix,\n compressPublicKey,\n convertEnvelopeToMarshaledStamp,\n decodeRedundancyLevel,\n decryptChunk,\n encodeRedundancyLevel,\n encryptData,\n encryptSegments,\n encryptSpan,\n equals,\n getDepthForSize,\n getMaxShards,\n getParities,\n getRedundancyStat,\n getRedundancyStats,\n getStampEffectiveBytes,\n getStampEffectiveBytesBreakpoints,\n getStampTheoreticalBytes,\n getStampUsage,\n hexToUint8Array,\n indexOf,\n keccak256,\n makeContentAddressedChunk,\n makeEncryptedReplicas,\n makeErasureBatch,\n makeIntermediateChunkHandler,\n makeReplicas,\n makeSOCAddress,\n makeSingleOwnerChunk,\n marshalStamp,\n numberToUint16,\n numberToUint256,\n numberToUint32,\n numberToUint64,\n numberToUint8,\n partition,\n privateKeyToPublicKey,\n publicKeyFromCompressed,\n publicKeyToAddress,\n recoverPublicKey,\n referenceCount,\n rsDecode,\n rsEncode,\n signHash,\n signMessage,\n sliceBytes,\n stamp,\n uint16ToNumber,\n uint256ToNumber,\n uint32ToNumber,\n uint64ToNumber,\n uint8ArrayToBase32,\n uint8ArrayToBase64,\n uint8ArrayToBinary,\n uint8ArrayToHex,\n uint8ToNumber,\n unmarshalContentAddressedChunk,\n unmarshalSingleOwnerChunk,\n verifySignature,\n xorCypher\n};\n//# sourceMappingURL=index.js.map\n","var _a;\n/** A special constant with type `never` */\nexport const NEVER = /*@__PURE__*/ Object.freeze({\n status: \"aborted\",\n});\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, params) {\n function init(inst, def) {\n if (!inst._zod) {\n Object.defineProperty(inst, \"_zod\", {\n value: {\n def,\n constr: _,\n traits: new Set(),\n },\n enumerable: false,\n });\n }\n if (inst._zod.traits.has(name)) {\n return;\n }\n inst._zod.traits.add(name);\n initializer(inst, def);\n // support prototype modifications\n const proto = _.prototype;\n const keys = Object.keys(proto);\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n if (!(k in inst)) {\n inst[k] = proto[k].bind(inst);\n }\n }\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 class $ZodEncodeError extends Error {\n constructor(name) {\n super(`Encountered unidirectional transform during encode: ${name}`);\n this.name = \"ZodEncodeError\";\n }\n}\n(_a = globalThis).__zod_globalConfig ?? (_a.__zod_globalConfig = {});\nexport const globalConfig = globalThis.__zod_globalConfig;\nexport function config(newConfig) {\n if (newConfig)\n Object.assign(globalConfig, newConfig);\n return globalConfig;\n}\n","import { globalConfig } from \"./core.js\";\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(\"Unexpected value in exhaustive check\");\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 ratio = val / step;\n const roundedRatio = Math.round(ratio);\n // Use a relative epsilon scaled to the magnitude of the result\n const tolerance = Number.EPSILON * Math.max(Math.abs(ratio), 1);\n if (Math.abs(ratio - roundedRatio) < tolerance)\n return 0;\n return ratio - roundedRatio;\n}\nconst EVALUATING = /* @__PURE__*/ Symbol(\"evaluating\");\nexport function defineLazy(object, key, getter) {\n let value = undefined;\n Object.defineProperty(object, key, {\n get() {\n if (value === EVALUATING) {\n // Circular reference detected, return undefined to break the cycle\n return undefined;\n }\n if (value === undefined) {\n value = EVALUATING;\n value = getter();\n }\n return value;\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 objectClone(obj) {\n return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));\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 mergeDefs(...defs) {\n const mergedDescriptors = {};\n for (const def of defs) {\n const descriptors = Object.getOwnPropertyDescriptors(def);\n Object.assign(mergedDescriptors, descriptors);\n }\n return Object.defineProperties({}, mergedDescriptors);\n}\nexport function cloneDef(schema) {\n return mergeDefs(schema._zod.def);\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 function slugify(input) {\n return input\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, \"\")\n .replace(/[\\s_-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\nexport const captureStackTrace = (\"captureStackTrace\" in Error ? Error.captureStackTrace : (..._args) => { });\nexport function isObject(data) {\n return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = /* @__PURE__*/ cached(() => {\n // Skip the probe under `jitless`: strict CSPs report the caught `new Function`\n // as a `securitypolicyviolation` even though the throw is swallowed.\n if (globalConfig.jitless) {\n return false;\n }\n // @ts-ignore\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 if (typeof ctor !== \"function\")\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 shallowClone(o) {\n if (isPlainObject(o))\n return { ...o };\n if (Array.isArray(o))\n return [...o];\n if (o instanceof Map)\n return new Map(o);\n if (o instanceof Set)\n return new Set(o);\n return o;\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 // @ts-ignore\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 = /* @__PURE__*/ new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = /* @__PURE__*/ new Set([\n \"string\",\n \"number\",\n \"bigint\",\n \"boolean\",\n \"symbol\",\n \"undefined\",\n]);\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 currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".pick() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = {};\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 newShape[key] = currDef.shape[key];\n }\n assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function omit(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".omit() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = { ...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 assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\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 checks = schema._zod.def.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n // Only throw if new shape overlaps with existing shape\n // Use getOwnPropertyDescriptor to check key existence without accessing values\n const existingShape = schema._zod.def.shape;\n for (const key in shape) {\n if (Object.getOwnPropertyDescriptor(existingShape, key) !== undefined) {\n throw new Error(\"Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.\");\n }\n }\n }\n const def = mergeDefs(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 });\n return clone(schema, def);\n}\nexport function safeExtend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to safeExtend: expected a plain object\");\n }\n const def = mergeDefs(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 });\n return clone(schema, def);\n}\nexport function merge(a, b) {\n if (a._zod.def.checks?.length) {\n throw new Error(\".merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.\");\n }\n const def = mergeDefs(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 get catchall() {\n return b._zod.def.catchall;\n },\n checks: b._zod.def.checks ?? [],\n });\n return clone(a, def);\n}\nexport function partial(Class, schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".partial() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\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 assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function required(Class, schema, mask) {\n const def = mergeDefs(schema._zod.def, {\n get shape() {\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 assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n });\n return clone(schema, def);\n}\n// invalid_type | too_big | too_small | invalid_format | not_multiple_of | unrecognized_keys | invalid_union | invalid_key | invalid_element | invalid_value | custom\nexport function aborted(x, startIndex = 0) {\n if (x.aborted === true)\n return true;\n for (let i = startIndex; i < x.issues.length; i++) {\n if (x.issues[i]?.continue !== true) {\n return true;\n }\n }\n return false;\n}\n// Checks for explicit abort (continue === false), as opposed to implicit abort (continue === undefined).\n// Used to respect `abort: true` in .refine() even for checks that have a `when` function.\nexport function explicitlyAborted(x, startIndex = 0) {\n if (x.aborted === true)\n return true;\n for (let i = startIndex; i < x.issues.length; i++) {\n if (x.issues[i]?.continue === false) {\n return true;\n }\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 message = iss.message\n ? iss.message\n : (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 const { inst: _inst, continue: _continue, input: _input, ...rest } = iss;\n rest.path ?? (rest.path = []);\n rest.message = message;\n if (ctx?.reportInput) {\n rest.input = _input;\n }\n return rest;\n}\nexport function getSizableOrigin(input) {\n if (input instanceof Set)\n return \"set\";\n if (input instanceof Map)\n return \"map\";\n // @ts-ignore\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 parsedType(data) {\n const t = typeof data;\n switch (t) {\n case \"number\": {\n return Number.isNaN(data) ? \"nan\" : \"number\";\n }\n case \"object\": {\n if (data === null) {\n return \"null\";\n }\n if (Array.isArray(data)) {\n return \"array\";\n }\n const obj = data;\n if (obj && Object.getPrototypeOf(obj) !== Object.prototype && \"constructor\" in obj && obj.constructor) {\n return obj.constructor.name;\n }\n }\n }\n return t;\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// Codec utility functions\nexport function base64ToUint8Array(base64) {\n const binaryString = atob(base64);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes;\n}\nexport function uint8ArrayToBase64(bytes) {\n let binaryString = \"\";\n for (let i = 0; i < bytes.length; i++) {\n binaryString += String.fromCharCode(bytes[i]);\n }\n return btoa(binaryString);\n}\nexport function base64urlToUint8Array(base64url) {\n const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const padding = \"=\".repeat((4 - (base64.length % 4)) % 4);\n return base64ToUint8Array(base64 + padding);\n}\nexport function uint8ArrayToBase64url(bytes) {\n return uint8ArrayToBase64(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nexport function hexToUint8Array(hex) {\n const cleanHex = hex.replace(/^0x/, \"\");\n if (cleanHex.length % 2 !== 0) {\n throw new Error(\"Invalid hex string length\");\n }\n const bytes = new Uint8Array(cleanHex.length / 2);\n for (let i = 0; i < cleanHex.length; i += 2) {\n bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);\n }\n return bytes;\n}\nexport function uint8ArrayToHex(bytes) {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\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 inst.message = JSON.stringify(def, util.jsonStringifyReplacer, 2);\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 = (issue) => issue.message) {\n const fieldErrors = { _errors: [] };\n const processError = (error, path = []) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n issue.errors.map((issues) => processError({ issues }, [...path, ...issue.path]));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues }, [...path, ...issue.path]);\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues }, [...path, ...issue.path]);\n }\n else {\n const fullpath = [...path, ...issue.path];\n if (fullpath.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < fullpath.length) {\n const el = fullpath[i];\n const terminal = i === fullpath.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 };\n processError(error);\n return fieldErrors;\n}\nexport function treeifyError(error, mapper = (issue) => issue.message) {\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 }, [...path, ...issue.path]));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues }, [...path, ...issue.path]);\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues }, [...path, ...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 const path = _path.map((seg) => (typeof seg === \"object\" ? seg.key : seg));\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 ? { ..._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 ? { ..._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 ? { ..._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);\nexport const _encode = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n return _parse(_Err)(schema, value, ctx);\n};\nexport const encode = /* @__PURE__*/ _encode(errors.$ZodRealError);\nexport const _decode = (_Err) => (schema, value, _ctx) => {\n return _parse(_Err)(schema, value, _ctx);\n};\nexport const decode = /* @__PURE__*/ _decode(errors.$ZodRealError);\nexport const _encodeAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n return _parseAsync(_Err)(schema, value, ctx);\n};\nexport const encodeAsync = /* @__PURE__*/ _encodeAsync(errors.$ZodRealError);\nexport const _decodeAsync = (_Err) => async (schema, value, _ctx) => {\n return _parseAsync(_Err)(schema, value, _ctx);\n};\nexport const decodeAsync = /* @__PURE__*/ _decodeAsync(errors.$ZodRealError);\nexport const _safeEncode = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n return _safeParse(_Err)(schema, value, ctx);\n};\nexport const safeEncode = /* @__PURE__*/ _safeEncode(errors.$ZodRealError);\nexport const _safeDecode = (_Err) => (schema, value, _ctx) => {\n return _safeParse(_Err)(schema, value, _ctx);\n};\nexport const safeDecode = /* @__PURE__*/ _safeDecode(errors.$ZodRealError);\nexport const _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n return _safeParseAsync(_Err)(schema, value, ctx);\n};\nexport const safeEncodeAsync = /* @__PURE__*/ _safeEncodeAsync(errors.$ZodRealError);\nexport const _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {\n return _safeParseAsync(_Err)(schema, value, _ctx);\n};\nexport const safeDecodeAsync = /* @__PURE__*/ _safeDecodeAsync(errors.$ZodRealError);\n","import * as util from \"./util.js\";\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link cuid2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport const cuid = /^[cC][0-9a-z]{6,}$/;\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 9562/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|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;\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 idnEmail = unicodeEmail;\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}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;\nexport const mac = (delimiter) => {\n const escapedDelim = util.escapeRegex(delimiter ?? \":\");\n return new RegExp(`^(?:[0-9A-F]{2}${escapedDelim}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${escapedDelim}){5}[0-9a-f]{2}$`);\n};\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 = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexport const hostname = /^(?=.{1,253}\\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\\.?$/;\nexport const domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$/;\nexport const httpProtocol = /^https?$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces)\n// E.164: leading digit must be 1-9; total digits (excluding '+') between 7-15\nexport const e164 = /^\\+[1-9]\\d{6,14}$/;\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) opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n if (args.offset)\n opts.push(`([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)`);\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+)?$/;\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// regex for hexadecimal strings (any length)\nexport const hex = /^[0-9a-fA-F]*$/;\n// Hash regexes for different algorithms and encodings\n// Helper function to create base64 regex with exact length and padding\nfunction fixedBase64(bodyLength, padding) {\n return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`);\n}\n// Helper function to create base64url regex with exact length (no padding)\nfunction fixedBase64url(length) {\n return new RegExp(`^[A-Za-z0-9_-]{${length}}$`);\n}\n// MD5 (16 bytes): base64 = 24 chars total (22 + \"==\")\nexport const md5_hex = /^[0-9a-fA-F]{32}$/;\nexport const md5_base64 = /*@__PURE__*/ fixedBase64(22, \"==\");\nexport const md5_base64url = /*@__PURE__*/ fixedBase64url(22);\n// SHA1 (20 bytes): base64 = 28 chars total (27 + \"=\")\nexport const sha1_hex = /^[0-9a-fA-F]{40}$/;\nexport const sha1_base64 = /*@__PURE__*/ fixedBase64(27, \"=\");\nexport const sha1_base64url = /*@__PURE__*/ fixedBase64url(27);\n// SHA256 (32 bytes): base64 = 44 chars total (43 + \"=\")\nexport const sha256_hex = /^[0-9a-fA-F]{64}$/;\nexport const sha256_base64 = /*@__PURE__*/ fixedBase64(43, \"=\");\nexport const sha256_base64url = /*@__PURE__*/ fixedBase64url(43);\n// SHA384 (48 bytes): base64 = 64 chars total (no padding)\nexport const sha384_hex = /^[0-9a-fA-F]{96}$/;\nexport const sha384_base64 = /*@__PURE__*/ fixedBase64(64, \"\");\nexport const sha384_base64url = /*@__PURE__*/ fixedBase64url(64);\n// SHA512 (64 bytes): base64 = 88 chars total (86 + \"==\")\nexport const sha512_hex = /^[0-9a-fA-F]{128}$/;\nexport const sha512_base64 = /*@__PURE__*/ fixedBase64(86, \"==\");\nexport const sha512_base64url = /*@__PURE__*/ fixedBase64url(86);\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: typeof def.value === \"object\" ? def.value.getTime() : 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: typeof def.value === \"object\" ? def.value.getTime() : 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 continue: false,\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 inclusive: true,\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 inclusive: true,\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 inclusive: true,\n inst,\n continue: !def.abort,\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 inclusive: true,\n inst,\n continue: !def.abort,\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 inclusive: true,\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 inclusive: true,\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 continue: !def.abort,\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: 4,\n patch: 3,\n};\n","import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { parse, parseAsync, 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 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 if (util.explicitlyAborted(payload))\n continue;\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 const handleCanaryResult = (canary, payload, ctx) => {\n // abort if the canary is aborted\n if (util.aborted(canary)) {\n canary.aborted = true;\n return canary;\n }\n // run checks first, then\n const checkResult = runChecks(payload, checks, ctx);\n if (checkResult instanceof Promise) {\n if (ctx.async === false)\n throw new core.$ZodAsyncError();\n return checkResult.then((checkResult) => inst._zod.parse(checkResult, ctx));\n }\n return inst._zod.parse(checkResult, ctx);\n };\n inst._zod.run = (payload, ctx) => {\n if (ctx.skipChecks) {\n return inst._zod.parse(payload, ctx);\n }\n if (ctx.direction === \"backward\") {\n // run canary\n // initial pass (no checks)\n const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true });\n if (canary instanceof Promise) {\n return canary.then((canary) => {\n return handleCanaryResult(canary, payload, ctx);\n });\n }\n return handleCanaryResult(canary, payload, ctx);\n }\n // forward\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 // Lazy initialize ~standard to avoid creating objects for every schema\n util.defineLazy(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 // Trim whitespace from input\n const trimmed = payload.value.trim();\n // When normalize is off, require :// for http/https URLs\n // This prevents strings like \"http:example.com\" or \"https:/path\" from being silently accepted\n if (!def.normalize && def.protocol?.source === regexes.httpProtocol.source) {\n if (!/^https?:\\/\\//i.test(trimmed)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid URL format\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n return;\n }\n }\n // @ts-ignore\n const url = new URL(trimmed);\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: def.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 // Set the output value based on normalize flag\n if (def.normalize) {\n // Use normalized URL\n payload.value = url.href;\n }\n else {\n // Preserve the original input (trimmed)\n payload.value = trimmed;\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});\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link $ZodCUID2} instead.\n * See https://github.com/paralleldrive/cuid.\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.bag.format = `ipv4`;\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.bag.format = `ipv6`;\n inst._zod.check = (payload) => {\n try {\n // @ts-ignore\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 $ZodMAC = /*@__PURE__*/ core.$constructor(\"$ZodMAC\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.mac(def.delimiter));\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `mac`;\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 parts = payload.value.split(\"/\");\n try {\n if (parts.length !== 2)\n throw new Error();\n const [address, prefix] = parts;\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 // @ts-ignore\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 // atob ignores whitespace, so reject it up front.\n if (/\\s/.test(data))\n return false;\n if (data.length % 4 !== 0)\n return false;\n try {\n // @ts-ignore\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.bag.contentEncoding = \"base64\";\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.bag.contentEncoding = \"base64url\";\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 // @ts-ignore\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(\"$ZodNumberFormat\", (inst, def) => {\n checks.$ZodCheckNumberFormat.init(inst, def);\n $ZodNumber.init(inst, def); // no format checks\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(\"$ZodBigIntFormat\", (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.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 handlePropertyResult(result, final, key, input, isOptionalIn, isOptionalOut) {\n const isPresent = key in input;\n if (result.issues.length) {\n // For optional-in/out schemas, ignore errors on absent keys.\n if (isOptionalIn && isOptionalOut && !isPresent) {\n return;\n }\n final.issues.push(...util.prefixIssues(key, result.issues));\n }\n if (!isPresent && !isOptionalIn) {\n if (!result.issues.length) {\n final.issues.push({\n code: \"invalid_type\",\n expected: \"nonoptional\",\n input: undefined,\n path: [key],\n });\n }\n return;\n }\n if (result.value === undefined) {\n if (isPresent) {\n final.value[key] = undefined;\n }\n }\n else {\n final.value[key] = result.value;\n }\n}\nfunction normalizeDef(def) {\n const keys = Object.keys(def.shape);\n for (const k of keys) {\n if (!def.shape?.[k]?._zod?.traits?.has(\"$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 ...def,\n keys,\n keySet: new Set(keys),\n numKeys: keys.length,\n optionalKeys: new Set(okeys),\n };\n}\nfunction handleCatchall(proms, input, payload, ctx, def, inst) {\n const unrecognized = [];\n const keySet = def.keySet;\n const _catchall = def.catchall._zod;\n const t = _catchall.def.type;\n const isOptionalIn = _catchall.optin === \"optional\";\n const isOptionalOut = _catchall.optout === \"optional\";\n for (const key in input) {\n // skip __proto__ so it can't replace the result prototype via the\n // assignment setter on the plain {} we build into\n if (key === \"__proto__\")\n continue;\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) => handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut)));\n }\n else {\n handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut);\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}\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 sh = def.shape;\n const desc = Object.getOwnPropertyDescriptor(def, \"shape\");\n if (!desc?.get) {\n const sh = def.shape;\n Object.defineProperty(def, \"shape\", {\n get: () => {\n const newSh = { ...sh };\n Object.defineProperty(def, \"shape\", {\n value: newSh,\n });\n return newSh;\n },\n });\n }\n const _normalized = util.cached(() => normalizeDef(def));\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 isObject = util.isObject;\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 payload.value = {};\n const proms = [];\n const shape = value.shape;\n for (const key of value.keys) {\n const el = shape[key];\n const isOptionalIn = el._zod.optin === \"optional\";\n const isOptionalOut = el._zod.optout === \"optional\";\n const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut)));\n }\n else {\n handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut);\n }\n }\n if (!catchall) {\n return proms.length ? Promise.all(proms).then(() => payload) : payload;\n }\n return handleCatchall(proms, input, payload, ctx, _normalized.value, inst);\n };\n});\nexport const $ZodObjectJIT = /*@__PURE__*/ core.$constructor(\"$ZodObjectJIT\", (inst, def) => {\n // requires cast because technically $ZodObject doesn't extend\n $ZodObject.init(inst, def);\n const superParse = inst._zod.parse;\n const _normalized = util.cached(() => normalizeDef(def));\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 const id = ids[key];\n const k = util.esc(key);\n const schema = shape[key];\n const isOptionalIn = schema?._zod?.optin === \"optional\";\n const isOptionalOut = schema?._zod?.optout === \"optional\";\n doc.write(`const ${id} = ${parseStr(key)};`);\n if (isOptionalIn && isOptionalOut) {\n // For optional-in/out schemas, ignore errors on absent keys\n doc.write(`\n if (${id}.issues.length) {\n if (${k} in input) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n }\n \n if (${id}.value === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n \n `);\n }\n else if (!isOptionalIn) {\n doc.write(`\n const ${id}_present = ${k} in input;\n if (${id}.issues.length) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n if (!${id}_present && !${id}.issues.length) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"nonoptional\",\n input: undefined,\n path: [${k}]\n });\n }\n\n if (${id}_present) {\n if (${id}.value === undefined) {\n newResult[${k}] = undefined;\n } else {\n newResult[${k}] = ${id}.value;\n }\n }\n\n `);\n }\n else {\n doc.write(`\n if (${id}.issues.length) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n \n if (${id}.value === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n \n `);\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 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 if (!catchall)\n return payload;\n return handleCatchall([], input, payload, ctx, value, inst);\n }\n return superParse(payload, ctx);\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 const nonaborted = results.filter((r) => !util.aborted(r));\n if (nonaborted.length === 1) {\n final.value = nonaborted[0].value;\n return nonaborted[0];\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 const first = def.options.length === 1 ? def.options[0]._zod.run : null;\n inst._zod.parse = (payload, ctx) => {\n if (first) {\n return first(payload, ctx);\n }\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});\nfunction handleExclusiveUnionResults(results, final, inst, ctx) {\n const successes = results.filter((r) => r.issues.length === 0);\n if (successes.length === 1) {\n final.value = successes[0].value;\n return final;\n }\n if (successes.length === 0) {\n // No matches - same as regular union\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 }\n else {\n // Multiple matches - exclusive union failure\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: [],\n inclusive: false,\n });\n }\n return final;\n}\nexport const $ZodXor = /*@__PURE__*/ core.$constructor(\"$ZodXor\", (inst, def) => {\n $ZodUnion.init(inst, def);\n def.inclusive = false;\n const first = def.options.length === 1 ? def.options[0]._zod.run : null;\n inst._zod.parse = (payload, ctx) => {\n if (first) {\n return first(payload, ctx);\n }\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 results.push(result);\n }\n }\n if (!async)\n return handleExclusiveUnionResults(results, payload, inst, ctx);\n return Promise.all(results).then((results) => {\n return handleExclusiveUnionResults(results, payload, inst, ctx);\n });\n };\n});\nexport const $ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n def.inclusive = false;\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 // Fall back to union matching when the fast discriminator path fails:\n // - explicitly enabled via unionFallback, or\n // - during backward direction (encode), since codec-based discriminators\n // have different values in forward vs backward directions\n if (def.unionFallback || ctx.direction === \"backward\") {\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 discriminator: def.discriminator,\n options: Array.from(disc.value.keys()),\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 // Track which side(s) report each key as unrecognized\n const unrecKeys = new Map();\n let unrecIssue;\n for (const iss of left.issues) {\n if (iss.code === \"unrecognized_keys\") {\n unrecIssue ?? (unrecIssue = iss);\n for (const k of iss.keys) {\n if (!unrecKeys.has(k))\n unrecKeys.set(k, {});\n unrecKeys.get(k).l = true;\n }\n }\n else {\n result.issues.push(iss);\n }\n }\n for (const iss of right.issues) {\n if (iss.code === \"unrecognized_keys\") {\n for (const k of iss.keys) {\n if (!unrecKeys.has(k))\n unrecKeys.set(k, {});\n unrecKeys.get(k).r = true;\n }\n }\n else {\n result.issues.push(iss);\n }\n }\n // Report only keys unrecognized by BOTH sides\n const bothKeys = [...unrecKeys].filter(([, f]) => f.l && f.r).map(([k]) => k);\n if (bothKeys.length && unrecIssue) {\n result.issues.push({ ...unrecIssue, keys: bothKeys });\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 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 const optinStart = getTupleOptStart(items, \"optin\");\n const optoutStart = getTupleOptStart(items, \"optout\");\n if (!def.rest) {\n if (input.length < optinStart) {\n payload.issues.push({\n code: \"too_small\",\n minimum: optinStart,\n inclusive: true,\n input,\n inst,\n origin: \"array\",\n });\n return payload;\n }\n if (input.length > items.length) {\n payload.issues.push({\n code: \"too_big\",\n maximum: items.length,\n inclusive: true,\n input,\n inst,\n origin: \"array\",\n });\n }\n }\n // Run every item in parallel, collecting results into an indexed\n // array. The post-processing in `handleTupleResults` walks them in\n // order so it can decide whether an absent optional-output error can\n // truncate the tail or must be reported to preserve required output.\n const itemResults = new Array(items.length);\n for (let i = 0; i < items.length; i++) {\n const r = items[i]._zod.run({ value: input[i], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((rr) => {\n itemResults[i] = rr;\n }));\n }\n else {\n itemResults[i] = r;\n }\n }\n if (def.rest) {\n let i = items.length - 1;\n const rest = input.slice(items.length);\n for (const el of rest) {\n i++;\n const result = def.rest._zod.run({ value: el, issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((r) => handleTupleResult(r, payload, i)));\n }\n else {\n handleTupleResult(result, payload, i);\n }\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => handleTupleResults(itemResults, payload, items, input, optoutStart));\n }\n return handleTupleResults(itemResults, payload, items, input, optoutStart);\n };\n});\nfunction getTupleOptStart(items, key) {\n for (let i = items.length - 1; i >= 0; i--) {\n if (items[i]._zod[key] !== \"optional\")\n return i + 1;\n }\n return 0;\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}\nfunction handleTupleResults(itemResults, final, items, input, optoutStart) {\n // Walk results in order. Mirror $ZodObject's swallow-on-absent-optional\n // rule, but only after `optoutStart`: the first index where the output\n // tuple tail can be absent.\n for (let i = 0; i < items.length; i++) {\n const r = itemResults[i];\n const isPresent = i < input.length;\n if (r.issues.length) {\n if (!isPresent && i >= optoutStart) {\n final.value.length = i;\n break;\n }\n final.issues.push(...util.prefixIssues(i, r.issues));\n }\n final.value[i] = r.value;\n }\n // Drop trailing slots that produced `undefined` for absent input\n // (the array analog of an absent optional key on an object). The\n // `i >= input.length` floor is critical: an explicit `undefined`\n // *inside* the input must be preserved even when the schema is\n // optional-out (e.g. `z.string().or(z.undefined())` accepting an\n // explicit undefined value).\n for (let i = final.value.length - 1; i >= input.length; i--) {\n if (items[i]._zod.optout === \"optional\" && final.value[i] === undefined) {\n final.value.length = i;\n }\n else {\n break;\n }\n }\n return final;\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 const values = def.keyType._zod.values;\n if (values) {\n payload.value = {};\n const recordKeys = new Set();\n for (const key of values) {\n if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n recordKeys.add(typeof key === \"number\" ? key.toString() : key);\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 code: \"invalid_key\",\n origin: \"record\",\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n input: key,\n path: [key],\n inst,\n });\n continue;\n }\n const outKey = keyResult.value;\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[outKey] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[outKey] = result.value;\n }\n }\n }\n let unrecognized;\n for (const key in input) {\n if (!recordKeys.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 // Reflect.ownKeys for Symbol-key support; filter non-enumerable to match z.object()\n for (const key of Reflect.ownKeys(input)) {\n if (key === \"__proto__\")\n continue;\n if (!Object.prototype.propertyIsEnumerable.call(input, key))\n continue;\n let 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 // Numeric string fallback: if key is a numeric string and failed, retry with Number(key)\n // This handles z.number(), z.literal([1, 2, 3]), and unions containing numeric literals\n const checkNumericKey = typeof key === \"string\" && regexes.number.test(key) && keyResult.issues.length;\n if (checkNumericKey) {\n const retryResult = def.keyType._zod.run({ value: Number(key), issues: [] }, ctx);\n if (retryResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n if (retryResult.issues.length === 0) {\n keyResult = retryResult;\n }\n }\n if (keyResult.issues.length) {\n if (def.mode === \"loose\") {\n // Pass through unchanged\n payload.value[key] = input[key];\n }\n else {\n // Default \"strict\" behavior: error on invalid key\n payload.issues.push({\n code: \"invalid_key\",\n origin: \"record\",\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n input: key,\n path: [key],\n inst,\n });\n }\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 code: \"invalid_key\",\n origin: \"map\",\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 const valuesSet = new Set(values);\n inst._zod.values = valuesSet;\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 (valuesSet.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 if (def.values.length === 0) {\n throw new Error(\"Cannot create literal schema with no valid values\");\n }\n const values = new Set(def.values);\n inst._zod.values = values;\n inst._zod.pattern = new RegExp(`^(${def.values\n .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o ? util.escapeRegex(o.toString()) : String(o)))\n .join(\"|\")})$`);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (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 // @ts-ignore\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.optin = \"optional\";\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(inst.constructor.name);\n }\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 payload.fallback = true;\n return payload;\n });\n }\n if (_out instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n payload.value = _out;\n payload.fallback = true;\n return payload;\n };\n});\nfunction handleOptionalResult(result, input) {\n if (input === undefined && (result.issues.length || result.fallback)) {\n return { issues: [], value: undefined };\n }\n return result;\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 const input = payload.value;\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise)\n return result.then((r) => handleOptionalResult(r, input));\n return handleOptionalResult(result, input);\n }\n if (payload.value === undefined) {\n return payload;\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodExactOptional = /*@__PURE__*/ core.$constructor(\"$ZodExactOptional\", (inst, def) => {\n // Call parent init - inherits optin/optout = \"optional\"\n $ZodOptional.init(inst, def);\n // Override values/pattern to NOT add undefined\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n util.defineLazy(inst._zod, \"pattern\", () => def.innerType._zod.pattern);\n // Override parse to just delegate (no undefined handling)\n inst._zod.parse = (payload, ctx) => {\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 // Forward direction (decode): allow null to pass through\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 (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply defaults for undefined input\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n /**\n * $ZodDefault returns the default value immediately in forward direction.\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 // Forward direction: continue with default handling\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 (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply prefault for undefined input\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 if (ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(\"ZodSuccess\");\n }\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 if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply catch logic\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 payload.fallback = true;\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 payload.fallback = true;\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 if (ctx.direction === \"backward\") {\n const right = def.out._zod.run(payload, ctx);\n if (right instanceof Promise) {\n return right.then((right) => handlePipeResult(right, def.in, ctx));\n }\n return handlePipeResult(right, def.in, ctx);\n }\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handlePipeResult(left, def.out, ctx));\n }\n return handlePipeResult(left, def.out, ctx);\n };\n});\nfunction handlePipeResult(left, next, ctx) {\n if (left.issues.length) {\n // prevent further checks\n left.aborted = true;\n return left;\n }\n return next._zod.run({ value: left.value, issues: left.issues, fallback: left.fallback }, ctx);\n}\nexport const $ZodCodec = /*@__PURE__*/ core.$constructor(\"$ZodCodec\", (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 direction = ctx.direction || \"forward\";\n if (direction === \"forward\") {\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handleCodecAResult(left, def, ctx));\n }\n return handleCodecAResult(left, def, ctx);\n }\n else {\n const right = def.out._zod.run(payload, ctx);\n if (right instanceof Promise) {\n return right.then((right) => handleCodecAResult(right, def, ctx));\n }\n return handleCodecAResult(right, def, ctx);\n }\n };\n});\nfunction handleCodecAResult(result, def, ctx) {\n if (result.issues.length) {\n // prevent further checks\n result.aborted = true;\n return result;\n }\n const direction = ctx.direction || \"forward\";\n if (direction === \"forward\") {\n const transformed = def.transform(result.value, result);\n if (transformed instanceof Promise) {\n return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx));\n }\n return handleCodecTxResult(result, transformed, def.out, ctx);\n }\n else {\n const transformed = def.reverseTransform(result.value, result);\n if (transformed instanceof Promise) {\n return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx));\n }\n return handleCodecTxResult(result, transformed, def.in, ctx);\n }\n}\nfunction handleCodecTxResult(left, value, nextSchema, ctx) {\n // Check if transform added any issues\n if (left.issues.length) {\n left.aborted = true;\n return left;\n }\n return nextSchema._zod.run({ value, issues: left.issues }, ctx);\n}\nexport const $ZodPreprocess = /*@__PURE__*/ core.$constructor(\"$ZodPreprocess\", (inst, def) => {\n $ZodPipe.init(inst, def);\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 if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\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 (typeof part === \"object\" && part !== null) {\n // is Zod schema\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: \"string\",\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 $ZodFunction = /*@__PURE__*/ core.$constructor(\"$ZodFunction\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._def = def;\n inst._zod.def = def;\n inst.implement = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implement() must be called with a function\");\n }\n return function (...args) {\n const parsedArgs = inst._def.input ? parse(inst._def.input, args) : args;\n const result = Reflect.apply(func, this, parsedArgs);\n if (inst._def.output) {\n return parse(inst._def.output, result);\n }\n return result;\n };\n };\n inst.implementAsync = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implementAsync() must be called with a function\");\n }\n return async function (...args) {\n const parsedArgs = inst._def.input ? await parseAsync(inst._def.input, args) : args;\n const result = await Reflect.apply(func, this, parsedArgs);\n if (inst._def.output) {\n return await parseAsync(inst._def.output, result);\n }\n return result;\n };\n };\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"function\") {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"function\",\n input: payload.value,\n inst,\n });\n return payload;\n }\n // Check if output is a promise type to determine if we should use async implementation\n const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === \"promise\";\n if (hasPromiseOutput) {\n payload.value = inst.implementAsync(payload.value);\n }\n else {\n payload.value = inst.implement(payload.value);\n }\n return payload;\n };\n inst.input = (...args) => {\n const F = inst.constructor;\n if (Array.isArray(args[0])) {\n return new F({\n type: \"function\",\n input: new $ZodTuple({\n type: \"tuple\",\n items: args[0],\n rest: args[1],\n }),\n output: inst._def.output,\n });\n }\n return new F({\n type: \"function\",\n input: args[0],\n output: inst._def.output,\n });\n };\n inst.output = (output) => {\n const F = inst.constructor;\n return new F({\n type: \"function\",\n input: inst._def.input,\n output,\n });\n };\n return inst;\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 // Cache the resolved inner type on the shared `def` so all clones of this\n // lazy (e.g. via `.describe()`/`.meta()`) share the same inner instance,\n // preserving identity for cycle detection on recursive schemas.\n util.defineLazy(inst._zod, \"innerType\", () => {\n const d = def;\n if (!d._cachedInner)\n d._cachedInner = def.getter();\n return d._cachedInner;\n });\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 ?? undefined);\n util.defineLazy(inst._zod, \"optout\", () => inst._zod.innerType?._zod?.optout ?? undefined);\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","var _a;\nexport const $output = Symbol(\"ZodOutput\");\nexport const $input = Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n constructor() {\n this._map = new WeakMap();\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 this._idmap.set(meta.id, schema);\n }\n return this;\n }\n clear() {\n this._map = new WeakMap();\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 const f = { ...pm, ...this._map.get(schema) };\n return Object.keys(f).length ? f : undefined;\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}\n(_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());\nexport const globalRegistry = globalThis.__zod_globalRegistry;\n","import * as checks from \"./checks.js\";\nimport * as registries from \"./registries.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\n// @__NO_SIDE_EFFECTS__\nexport function _string(Class, params) {\n return new Class({\n type: \"string\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedString(Class, params) {\n return new Class({\n type: \"string\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\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}\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link _cuid2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\nexport function _mac(Class, params) {\n return new Class({\n type: \"string\",\n format: \"mac\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\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};\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\nexport function _number(Class, params) {\n return new Class({\n type: \"number\",\n checks: [],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedNumber(Class, params) {\n return new Class({\n type: \"number\",\n coerce: true,\n checks: [],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\nexport function _boolean(Class, params) {\n return new Class({\n type: \"boolean\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBoolean(Class, params) {\n return new Class({\n type: \"boolean\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _bigint(Class, params) {\n return new Class({\n type: \"bigint\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBigint(Class, params) {\n return new Class({\n type: \"bigint\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\nexport function _symbol(Class, params) {\n return new Class({\n type: \"symbol\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _undefined(Class, params) {\n return new Class({\n type: \"undefined\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _null(Class, params) {\n return new Class({\n type: \"null\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _any(Class) {\n return new Class({\n type: \"any\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _unknown(Class) {\n return new Class({\n type: \"unknown\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _never(Class, params) {\n return new Class({\n type: \"never\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _void(Class, params) {\n return new Class({\n type: \"void\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _date(Class, params) {\n return new Class({\n type: \"date\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedDate(Class, params) {\n return new Class({\n type: \"date\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nan(Class, params) {\n return new Class({\n type: \"nan\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\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, };\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\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, };\n// @__NO_SIDE_EFFECTS__\nexport function _positive(params) {\n return _gt(0, params);\n}\n// negative\n// @__NO_SIDE_EFFECTS__\nexport function _negative(params) {\n return _lt(0, params);\n}\n// nonpositive\n// @__NO_SIDE_EFFECTS__\nexport function _nonpositive(params) {\n return _lte(0, params);\n}\n// nonnegative\n// @__NO_SIDE_EFFECTS__\nexport function _nonnegative(params) {\n return _gte(0, params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function _multipleOf(value, params) {\n return new checks.$ZodCheckMultipleOf({\n check: \"multiple_of\",\n ...util.normalizeParams(params),\n value,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxSize(maximum, params) {\n return new checks.$ZodCheckMaxSize({\n check: \"max_size\",\n ...util.normalizeParams(params),\n maximum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minSize(minimum, params) {\n return new checks.$ZodCheckMinSize({\n check: \"min_size\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _size(size, params) {\n return new checks.$ZodCheckSizeEquals({\n check: \"size_equals\",\n ...util.normalizeParams(params),\n size,\n });\n}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\nexport function _minLength(minimum, params) {\n return new checks.$ZodCheckMinLength({\n check: \"min_length\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _length(length, params) {\n return new checks.$ZodCheckLengthEquals({\n check: \"length_equals\",\n ...util.normalizeParams(params),\n length,\n });\n}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\nexport function _lowercase(params) {\n return new checks.$ZodCheckLowerCase({\n check: \"string_format\",\n format: \"lowercase\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uppercase(params) {\n return new checks.$ZodCheckUpperCase({\n check: \"string_format\",\n format: \"uppercase\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\nexport function _property(property, schema, params) {\n return new checks.$ZodCheckProperty({\n check: \"property\",\n property,\n schema,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mime(types, params) {\n return new checks.$ZodCheckMimeType({\n check: \"mime_type\",\n mime: types,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _overwrite(tx) {\n return new checks.$ZodCheckOverwrite({\n check: \"overwrite\",\n tx,\n });\n}\n// normalize\n// @__NO_SIDE_EFFECTS__\nexport function _normalize(form) {\n return _overwrite((input) => input.normalize(form));\n}\n// trim\n// @__NO_SIDE_EFFECTS__\nexport function _trim() {\n return _overwrite((input) => input.trim());\n}\n// toLowerCase\n// @__NO_SIDE_EFFECTS__\nexport function _toLowerCase() {\n return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\n// @__NO_SIDE_EFFECTS__\nexport function _toUpperCase() {\n return _overwrite((input) => input.toUpperCase());\n}\n// slugify\n// @__NO_SIDE_EFFECTS__\nexport function _slugify() {\n return _overwrite((input) => util.slugify(input));\n}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\nexport function _union(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n ...util.normalizeParams(params),\n });\n}\nexport function _xor(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n inclusive: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n return new Class({\n type: \"union\",\n options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\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>;\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\nexport function _record(Class, keyType, valueType, params) {\n return new Class({\n type: \"record\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _map(Class, keyType, valueType, params) {\n return new Class({\n type: \"map\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _set(Class, valueType, params) {\n return new Class({\n type: \"set\",\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\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// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\nexport function _file(Class, params) {\n return new Class({\n type: \"file\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _transform(Class, fn) {\n return new Class({\n type: \"transform\",\n transform: fn,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _optional(Class, innerType) {\n return new Class({\n type: \"optional\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nullable(Class, innerType) {\n return new Class({\n type: \"nullable\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _default(Class, innerType, defaultValue) {\n return new Class({\n type: \"default\",\n innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nonoptional(Class, innerType, params) {\n return new Class({\n type: \"nonoptional\",\n innerType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _success(Class, innerType) {\n return new Class({\n type: \"success\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _catch(Class, innerType, catchValue) {\n return new Class({\n type: \"catch\",\n innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _pipe(Class, in_, out) {\n return new Class({\n type: \"pipe\",\n in: in_,\n out,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _readonly(Class, innerType) {\n return new Class({\n type: \"readonly\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _templateLiteral(Class, parts, params) {\n return new Class({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lazy(Class, getter) {\n return new Class({\n type: \"lazy\",\n getter,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _promise(Class, innerType) {\n return new Class({\n type: \"promise\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\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// same as _custom but defaults to abort:false\n// @__NO_SIDE_EFFECTS__\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}\n// @__NO_SIDE_EFFECTS__\nexport function _superRefine(fn, params) {\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); // abort is always undefined, so this is always true...\n payload.issues.push(util.issue(_issue));\n }\n };\n return fn(payload.value, payload);\n }, params);\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _check(fn, params) {\n const ch = new checks.$ZodCheck({\n check: \"custom\",\n ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function describe(description) {\n const ch = new checks.$ZodCheck({ check: \"describe\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, description });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function meta(metadata) {\n const ch = new checks.$ZodCheck({ check: \"meta\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, ...metadata });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\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 _Codec = Classes.Codec ?? schemas.$ZodCodec;\n const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n const _String = Classes.String ?? schemas.$ZodString;\n const stringSchema = new _String({ type: \"string\", error: params.error });\n const booleanSchema = new _Boolean({ type: \"boolean\", error: params.error });\n const codec = new _Codec({\n type: \"pipe\",\n in: stringSchema,\n out: booleanSchema,\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: codec,\n continue: false,\n });\n return {};\n }\n }),\n reverseTransform: ((input, _payload) => {\n if (input === true) {\n return truthyArray[0] || \"true\";\n }\n else {\n return falsyArray[0] || \"false\";\n }\n }),\n error: params.error,\n });\n return codec;\n}\n// @__NO_SIDE_EFFECTS__\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 { globalRegistry } from \"./registries.js\";\n// function initializeContext<T extends schemas.$ZodType>(inputs: JSONSchemaGeneratorParams<T>): ToJSONSchemaContext<T> {\n// return {\n// processor: inputs.processor,\n// metadataRegistry: inputs.metadata ?? globalRegistry,\n// target: inputs.target ?? \"draft-2020-12\",\n// unrepresentable: inputs.unrepresentable ?? \"throw\",\n// };\n// }\nexport function initializeContext(params) {\n // Normalize target: convert old non-hyphenated versions to hyphenated versions\n let target = params?.target ?? \"draft-2020-12\";\n if (target === \"draft-4\")\n target = \"draft-04\";\n if (target === \"draft-7\")\n target = \"draft-07\";\n return {\n processors: params.processors ?? {},\n metadataRegistry: params?.metadata ?? globalRegistry,\n target,\n unrepresentable: params?.unrepresentable ?? \"throw\",\n override: params?.override ?? (() => { }),\n io: params?.io ?? \"output\",\n counter: 0,\n seen: new Map(),\n cycles: params?.cycles ?? \"ref\",\n reused: params?.reused ?? \"inline\",\n external: params?.external ?? undefined,\n };\n}\nexport function process(schema, ctx, _params = { path: [], schemaPath: [] }) {\n var _a;\n const def = schema._zod.def;\n // check for schema in seens\n const seen = ctx.seen.get(schema);\n if (seen) {\n seen.count++;\n // check if cycle\n const isCycle = _params.schemaPath.includes(schema);\n if (isCycle) {\n seen.cycle = _params.path;\n }\n return seen.schema;\n }\n // initialize\n const result = { schema: {}, count: 1, cycle: undefined, path: _params.path };\n ctx.seen.set(schema, result);\n // custom method overrides default behavior\n const overrideSchema = schema._zod.toJSONSchema?.();\n if (overrideSchema) {\n result.schema = overrideSchema;\n }\n else {\n const params = {\n ..._params,\n schemaPath: [..._params.schemaPath, schema],\n path: _params.path,\n };\n if (schema._zod.processJSONSchema) {\n schema._zod.processJSONSchema(ctx, result.schema, params);\n }\n else {\n const _json = result.schema;\n const processor = ctx.processors[def.type];\n if (!processor) {\n throw new Error(`[toJSONSchema]: Non-representable type encountered: ${def.type}`);\n }\n processor(schema, ctx, _json, params);\n }\n const parent = schema._zod.parent;\n if (parent) {\n // Also set ref if processor didn't (for inheritance)\n if (!result.ref)\n result.ref = parent;\n process(parent, ctx, params);\n ctx.seen.get(parent).isParent = true;\n }\n }\n // metadata\n const meta = ctx.metadataRegistry.get(schema);\n if (meta)\n Object.assign(result.schema, meta);\n if (ctx.io === \"input\" && isTransforming(schema)) {\n // examples/defaults only apply to output type of pipe\n delete result.schema.examples;\n delete result.schema.default;\n }\n // set prefault as default\n if (ctx.io === \"input\" && \"_prefault\" in result.schema)\n (_a = result.schema).default ?? (_a.default = result.schema._prefault);\n delete result.schema._prefault;\n // pulling fresh from ctx.seen in case it was overwritten\n const _result = ctx.seen.get(schema);\n return _result.schema;\n}\nexport function extractDefs(ctx, schema\n// params: EmitParams\n) {\n // iterate over seen map;\n const root = ctx.seen.get(schema);\n if (!root)\n throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n // Track ids to detect duplicates across different schemas\n const idToSchema = new Map();\n for (const entry of ctx.seen.entries()) {\n const id = ctx.metadataRegistry.get(entry[0])?.id;\n if (id) {\n const existing = idToSchema.get(id);\n if (existing && existing !== entry[0]) {\n throw new Error(`Duplicate schema id \"${id}\" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);\n }\n idToSchema.set(id, entry[0]);\n }\n }\n // returns a ref to the schema\n // defId will be empty if the ref points to an external schema (or #)\n const makeURI = (entry) => {\n // comparing the seen objects because sometimes\n // multiple schemas map to the same seen object.\n // e.g. lazy\n // external is configured\n const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n if (ctx.external) {\n const externalId = ctx.external.registry.get(entry[0])?.id; // ?? \"__shared\";// `__schema${ctx.counter++}`;\n // check if schema is in the external registry\n const uriGenerator = ctx.external.uri ?? ((id) => id);\n if (externalId) {\n return { ref: uriGenerator(externalId) };\n }\n // otherwise, add to __shared\n const id = entry[1].defId ?? entry[1].schema.id ?? `schema${ctx.counter++}`;\n entry[1].defId = id; // set defId so it will be reused if needed\n return { defId: id, ref: `${uriGenerator(\"__shared\")}#/${defsSegment}/${id}` };\n }\n if (entry[1] === root) {\n return { ref: \"#\" };\n }\n // self-contained schema\n const uriPrefix = `#`;\n const defUriPrefix = `${uriPrefix}/${defsSegment}/`;\n const defId = entry[1].schema.id ?? `__schema${ctx.counter++}`;\n return { defId, ref: defUriPrefix + defId };\n };\n // stored cached version in `def` property\n // remove all properties, set $ref\n const extractToDef = (entry) => {\n // if the schema is already a reference, do not extract it\n if (entry[1].schema.$ref) {\n return;\n }\n const seen = entry[1];\n const { ref, defId } = makeURI(entry);\n seen.def = { ...seen.schema };\n // defId won't be set if the schema is a reference to an external schema\n // or if the schema is the root schema\n if (defId)\n seen.defId = defId;\n // wipe away all properties except $ref\n const schema = seen.schema;\n for (const key in schema) {\n delete schema[key];\n }\n schema.$ref = ref;\n };\n // throw on cycles\n // break cycles\n if (ctx.cycles === \"throw\") {\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n if (seen.cycle) {\n throw new Error(\"Cycle detected: \" +\n `#/${seen.cycle?.join(\"/\")}/<root>` +\n '\\n\\nSet the `cycles` parameter to `\"ref\"` to resolve cyclical schemas with defs.');\n }\n }\n }\n // extract schemas into $defs\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n // convert root schema to # $ref\n if (schema === entry[0]) {\n extractToDef(entry); // this has special handling for the root schema\n continue;\n }\n // extract schemas that are in the external registry\n if (ctx.external) {\n const ext = ctx.external.registry.get(entry[0])?.id;\n if (schema !== entry[0] && ext) {\n extractToDef(entry);\n continue;\n }\n }\n // extract schemas with `id` meta\n const id = ctx.metadataRegistry.get(entry[0])?.id;\n if (id) {\n extractToDef(entry);\n continue;\n }\n // break cycles\n if (seen.cycle) {\n // any\n extractToDef(entry);\n continue;\n }\n // extract reused schemas\n if (seen.count > 1) {\n if (ctx.reused === \"ref\") {\n extractToDef(entry);\n // biome-ignore lint:\n continue;\n }\n }\n }\n}\nexport function finalize(ctx, schema) {\n const root = ctx.seen.get(schema);\n if (!root)\n throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n // flatten refs - inherit properties from parent schemas\n const flattenRef = (zodSchema) => {\n const seen = ctx.seen.get(zodSchema);\n // already processed\n if (seen.ref === null)\n return;\n const schema = seen.def ?? seen.schema;\n const _cached = { ...schema };\n const ref = seen.ref;\n seen.ref = null; // prevent infinite recursion\n if (ref) {\n flattenRef(ref);\n const refSeen = ctx.seen.get(ref);\n const refSchema = refSeen.schema;\n // merge referenced schema into current\n if (refSchema.$ref && (ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\")) {\n // older drafts can't combine $ref with other properties\n schema.allOf = schema.allOf ?? [];\n schema.allOf.push(refSchema);\n }\n else {\n Object.assign(schema, refSchema);\n }\n // restore child's own properties (child wins)\n Object.assign(schema, _cached);\n const isParentRef = zodSchema._zod.parent === ref;\n // For parent chain, child is a refinement - remove parent-only properties\n if (isParentRef) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (!(key in _cached)) {\n delete schema[key];\n }\n }\n }\n // When ref was extracted to $defs, remove properties that match the definition\n if (refSchema.$ref && refSeen.def) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (key in refSeen.def && JSON.stringify(schema[key]) === JSON.stringify(refSeen.def[key])) {\n delete schema[key];\n }\n }\n }\n }\n // If parent was extracted (has $ref), propagate $ref to this schema\n // This handles cases like: readonly().meta({id}).describe()\n // where processor sets ref to innerType but parent should be referenced\n const parent = zodSchema._zod.parent;\n if (parent && parent !== ref) {\n // Ensure parent is processed first so its def has inherited properties\n flattenRef(parent);\n const parentSeen = ctx.seen.get(parent);\n if (parentSeen?.schema.$ref) {\n schema.$ref = parentSeen.schema.$ref;\n // De-duplicate with parent's definition\n if (parentSeen.def) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (key in parentSeen.def && JSON.stringify(schema[key]) === JSON.stringify(parentSeen.def[key])) {\n delete schema[key];\n }\n }\n }\n }\n }\n // execute overrides\n ctx.override({\n zodSchema: zodSchema,\n jsonSchema: schema,\n path: seen.path ?? [],\n });\n };\n for (const entry of [...ctx.seen.entries()].reverse()) {\n flattenRef(entry[0]);\n }\n const result = {};\n if (ctx.target === \"draft-2020-12\") {\n result.$schema = \"https://json-schema.org/draft/2020-12/schema\";\n }\n else if (ctx.target === \"draft-07\") {\n result.$schema = \"http://json-schema.org/draft-07/schema#\";\n }\n else if (ctx.target === \"draft-04\") {\n result.$schema = \"http://json-schema.org/draft-04/schema#\";\n }\n else if (ctx.target === \"openapi-3.0\") {\n // OpenAPI 3.0 schema objects should not include a $schema property\n }\n else {\n // Arbitrary string values are allowed but won't have a $schema property set\n }\n if (ctx.external?.uri) {\n const id = ctx.external.registry.get(schema)?.id;\n if (!id)\n throw new Error(\"Schema is missing an `id` property\");\n result.$id = ctx.external.uri(id);\n }\n Object.assign(result, root.def ?? root.schema);\n // The `id` in `.meta()` is a Zod-specific registration tag used to extract\n // schemas into $defs — it is not user-facing JSON Schema metadata. Strip it\n // from the output body where it would otherwise leak. The id is preserved\n // implicitly via the $defs key (and via $ref paths).\n const rootMetaId = ctx.metadataRegistry.get(schema)?.id;\n if (rootMetaId !== undefined && result.id === rootMetaId)\n delete result.id;\n // build defs object\n const defs = ctx.external?.defs ?? {};\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n if (seen.def && seen.defId) {\n if (seen.def.id === seen.defId)\n delete seen.def.id;\n defs[seen.defId] = seen.def;\n }\n }\n // set definitions in result\n if (ctx.external) {\n }\n else {\n if (Object.keys(defs).length > 0) {\n if (ctx.target === \"draft-2020-12\") {\n result.$defs = defs;\n }\n else {\n result.definitions = defs;\n }\n }\n }\n try {\n // this \"finalizes\" this schema and ensures all cycles are removed\n // each call to finalize() is functionally independent\n // though the seen map is shared\n const finalized = JSON.parse(JSON.stringify(result));\n Object.defineProperty(finalized, \"~standard\", {\n value: {\n ...schema[\"~standard\"],\n jsonSchema: {\n input: createStandardJSONSchemaMethod(schema, \"input\", ctx.processors),\n output: createStandardJSONSchemaMethod(schema, \"output\", ctx.processors),\n },\n },\n enumerable: false,\n writable: false,\n });\n return finalized;\n }\n catch (_err) {\n throw new Error(\"Error converting schema to JSON.\");\n }\n}\nfunction isTransforming(_schema, _ctx) {\n const ctx = _ctx ?? { seen: new Set() };\n if (ctx.seen.has(_schema))\n return false;\n ctx.seen.add(_schema);\n const def = _schema._zod.def;\n if (def.type === \"transform\")\n return true;\n if (def.type === \"array\")\n return isTransforming(def.element, ctx);\n if (def.type === \"set\")\n return isTransforming(def.valueType, ctx);\n if (def.type === \"lazy\")\n return isTransforming(def.getter(), ctx);\n if (def.type === \"promise\" ||\n def.type === \"optional\" ||\n def.type === \"nonoptional\" ||\n def.type === \"nullable\" ||\n def.type === \"readonly\" ||\n def.type === \"default\" ||\n def.type === \"prefault\") {\n return isTransforming(def.innerType, ctx);\n }\n if (def.type === \"intersection\") {\n return isTransforming(def.left, ctx) || isTransforming(def.right, ctx);\n }\n if (def.type === \"record\" || def.type === \"map\") {\n return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);\n }\n if (def.type === \"pipe\") {\n if (_schema._zod.traits.has(\"$ZodCodec\"))\n return true;\n return isTransforming(def.in, ctx) || isTransforming(def.out, ctx);\n }\n if (def.type === \"object\") {\n for (const key in def.shape) {\n if (isTransforming(def.shape[key], ctx))\n return true;\n }\n return false;\n }\n if (def.type === \"union\") {\n for (const option of def.options) {\n if (isTransforming(option, ctx))\n return true;\n }\n return false;\n }\n if (def.type === \"tuple\") {\n for (const item of def.items) {\n if (isTransforming(item, ctx))\n return true;\n }\n if (def.rest && isTransforming(def.rest, ctx))\n return true;\n return false;\n }\n return false;\n}\n/**\n * Creates a toJSONSchema method for a schema instance.\n * This encapsulates the logic of initializing context, processing, extracting defs, and finalizing.\n */\nexport const createToJSONSchemaMethod = (schema, processors = {}) => (params) => {\n const ctx = initializeContext({ ...params, processors });\n process(schema, ctx);\n extractDefs(ctx, schema);\n return finalize(ctx, schema);\n};\nexport const createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) => {\n const { libraryOptions, target } = params ?? {};\n const ctx = initializeContext({ ...(libraryOptions ?? {}), target, io, processors });\n process(schema, ctx);\n extractDefs(ctx, schema);\n return finalize(ctx, schema);\n};\n","import { extractDefs, finalize, initializeContext, process, } from \"./to-json-schema.js\";\nimport { getEnumValues } from \"./util.js\";\nconst formatMap = {\n guid: \"uuid\",\n url: \"uri\",\n datetime: \"date-time\",\n json_string: \"json-string\",\n regex: \"\", // do not set\n};\n// ==================== SIMPLE TYPE PROCESSORS ====================\nexport const stringProcessor = (schema, ctx, _json, _params) => {\n const json = _json;\n json.type = \"string\";\n const { minimum, maximum, format, patterns, contentEncoding } = schema._zod\n .bag;\n if (typeof minimum === \"number\")\n json.minLength = minimum;\n if (typeof maximum === \"number\")\n json.maxLength = maximum;\n // custom pattern overrides format\n if (format) {\n json.format = formatMap[format] ?? format;\n if (json.format === \"\")\n delete json.format; // empty format is not valid\n // JSON Schema format: \"time\" requires a full time with offset or Z\n // z.iso.time() does not include timezone information, so format: \"time\" should never be used\n if (format === \"time\") {\n delete json.format;\n }\n }\n if (contentEncoding)\n json.contentEncoding = contentEncoding;\n if (patterns && patterns.size > 0) {\n const regexes = [...patterns];\n if (regexes.length === 1)\n json.pattern = regexes[0].source;\n else if (regexes.length > 1) {\n json.allOf = [\n ...regexes.map((regex) => ({\n ...(ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\"\n ? { type: \"string\" }\n : {}),\n pattern: regex.source,\n })),\n ];\n }\n }\n};\nexport const numberProcessor = (schema, ctx, _json, _params) => {\n const json = _json;\n const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag;\n if (typeof format === \"string\" && format.includes(\"int\"))\n json.type = \"integer\";\n else\n json.type = \"number\";\n // when both minimum and exclusiveMinimum exist, pick the more restrictive one\n const exMin = typeof exclusiveMinimum === \"number\" && exclusiveMinimum >= (minimum ?? Number.NEGATIVE_INFINITY);\n const exMax = typeof exclusiveMaximum === \"number\" && exclusiveMaximum <= (maximum ?? Number.POSITIVE_INFINITY);\n const legacy = ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\";\n if (exMin) {\n if (legacy) {\n json.minimum = exclusiveMinimum;\n json.exclusiveMinimum = true;\n }\n else {\n json.exclusiveMinimum = exclusiveMinimum;\n }\n }\n else if (typeof minimum === \"number\") {\n json.minimum = minimum;\n }\n if (exMax) {\n if (legacy) {\n json.maximum = exclusiveMaximum;\n json.exclusiveMaximum = true;\n }\n else {\n json.exclusiveMaximum = exclusiveMaximum;\n }\n }\n else if (typeof maximum === \"number\") {\n json.maximum = maximum;\n }\n if (typeof multipleOf === \"number\")\n json.multipleOf = multipleOf;\n};\nexport const booleanProcessor = (_schema, _ctx, json, _params) => {\n json.type = \"boolean\";\n};\nexport const bigintProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"BigInt cannot be represented in JSON Schema\");\n }\n};\nexport const symbolProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Symbols cannot be represented in JSON Schema\");\n }\n};\nexport const nullProcessor = (_schema, ctx, json, _params) => {\n if (ctx.target === \"openapi-3.0\") {\n json.type = \"string\";\n json.nullable = true;\n json.enum = [null];\n }\n else {\n json.type = \"null\";\n }\n};\nexport const undefinedProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Undefined cannot be represented in JSON Schema\");\n }\n};\nexport const voidProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Void cannot be represented in JSON Schema\");\n }\n};\nexport const neverProcessor = (_schema, _ctx, json, _params) => {\n json.not = {};\n};\nexport const anyProcessor = (_schema, _ctx, _json, _params) => {\n // empty schema accepts anything\n};\nexport const unknownProcessor = (_schema, _ctx, _json, _params) => {\n // empty schema accepts anything\n};\nexport const dateProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Date cannot be represented in JSON Schema\");\n }\n};\nexport const enumProcessor = (schema, _ctx, json, _params) => {\n const def = schema._zod.def;\n const values = getEnumValues(def.entries);\n // Number enums can have both string and number values\n if (values.every((v) => typeof v === \"number\"))\n json.type = \"number\";\n if (values.every((v) => typeof v === \"string\"))\n json.type = \"string\";\n json.enum = values;\n};\nexport const literalProcessor = (schema, ctx, json, _params) => {\n const def = schema._zod.def;\n const vals = [];\n for (const val of def.values) {\n if (val === undefined) {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Literal `undefined` cannot be represented in JSON Schema\");\n }\n else {\n // do not add to vals\n }\n }\n else if (typeof val === \"bigint\") {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"BigInt literals cannot be represented in JSON Schema\");\n }\n else {\n vals.push(Number(val));\n }\n }\n else {\n vals.push(val);\n }\n }\n if (vals.length === 0) {\n // do nothing (an undefined literal was stripped)\n }\n else if (vals.length === 1) {\n const val = vals[0];\n json.type = val === null ? \"null\" : typeof val;\n if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n json.enum = [val];\n }\n else {\n json.const = val;\n }\n }\n else {\n if (vals.every((v) => typeof v === \"number\"))\n json.type = \"number\";\n if (vals.every((v) => typeof v === \"string\"))\n json.type = \"string\";\n if (vals.every((v) => typeof v === \"boolean\"))\n json.type = \"boolean\";\n if (vals.every((v) => v === null))\n json.type = \"null\";\n json.enum = vals;\n }\n};\nexport const nanProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"NaN cannot be represented in JSON Schema\");\n }\n};\nexport const templateLiteralProcessor = (schema, _ctx, json, _params) => {\n const _json = json;\n const pattern = schema._zod.pattern;\n if (!pattern)\n throw new Error(\"Pattern not found in template literal\");\n _json.type = \"string\";\n _json.pattern = pattern.source;\n};\nexport const fileProcessor = (schema, _ctx, json, _params) => {\n const _json = json;\n const file = {\n type: \"string\",\n format: \"binary\",\n contentEncoding: \"binary\",\n };\n const { minimum, maximum, mime } = schema._zod.bag;\n if (minimum !== undefined)\n file.minLength = minimum;\n if (maximum !== undefined)\n file.maxLength = maximum;\n if (mime) {\n if (mime.length === 1) {\n file.contentMediaType = mime[0];\n Object.assign(_json, file);\n }\n else {\n Object.assign(_json, file); // shared props at root\n _json.anyOf = mime.map((m) => ({ contentMediaType: m })); // only contentMediaType differs\n }\n }\n else {\n Object.assign(_json, file);\n }\n};\nexport const successProcessor = (_schema, _ctx, json, _params) => {\n json.type = \"boolean\";\n};\nexport const customProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Custom types cannot be represented in JSON Schema\");\n }\n};\nexport const functionProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Function types cannot be represented in JSON Schema\");\n }\n};\nexport const transformProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Transforms cannot be represented in JSON Schema\");\n }\n};\nexport const mapProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Map cannot be represented in JSON Schema\");\n }\n};\nexport const setProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Set cannot be represented in JSON Schema\");\n }\n};\n// ==================== COMPOSITE TYPE PROCESSORS ====================\nexport const arrayProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n const { minimum, maximum } = schema._zod.bag;\n if (typeof minimum === \"number\")\n json.minItems = minimum;\n if (typeof maximum === \"number\")\n json.maxItems = maximum;\n json.type = \"array\";\n json.items = process(def.element, ctx, {\n ...params,\n path: [...params.path, \"items\"],\n });\n};\nexport const objectProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"object\";\n json.properties = {};\n const shape = def.shape;\n for (const key in shape) {\n json.properties[key] = process(shape[key], ctx, {\n ...params,\n path: [...params.path, \"properties\", key],\n });\n }\n // required keys\n const allKeys = new Set(Object.keys(shape));\n const requiredKeys = new Set([...allKeys].filter((key) => {\n const v = def.shape[key]._zod;\n if (ctx.io === \"input\") {\n return v.optin === undefined;\n }\n else {\n return v.optout === undefined;\n }\n }));\n if (requiredKeys.size > 0) {\n json.required = Array.from(requiredKeys);\n }\n // catchall\n if (def.catchall?._zod.def.type === \"never\") {\n // strict\n json.additionalProperties = false;\n }\n else if (!def.catchall) {\n // regular\n if (ctx.io === \"output\")\n json.additionalProperties = false;\n }\n else if (def.catchall) {\n json.additionalProperties = process(def.catchall, ctx, {\n ...params,\n path: [...params.path, \"additionalProperties\"],\n });\n }\n};\nexport const unionProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n // Exclusive unions (inclusive === false) use oneOf (exactly one match) instead of anyOf (one or more matches)\n // This includes both z.xor() and discriminated unions\n const isExclusive = def.inclusive === false;\n const options = def.options.map((x, i) => process(x, ctx, {\n ...params,\n path: [...params.path, isExclusive ? \"oneOf\" : \"anyOf\", i],\n }));\n if (isExclusive) {\n json.oneOf = options;\n }\n else {\n json.anyOf = options;\n }\n};\nexport const intersectionProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n const a = process(def.left, ctx, {\n ...params,\n path: [...params.path, \"allOf\", 0],\n });\n const b = process(def.right, ctx, {\n ...params,\n path: [...params.path, \"allOf\", 1],\n });\n const isSimpleIntersection = (val) => \"allOf\" in val && Object.keys(val).length === 1;\n const allOf = [\n ...(isSimpleIntersection(a) ? a.allOf : [a]),\n ...(isSimpleIntersection(b) ? b.allOf : [b]),\n ];\n json.allOf = allOf;\n};\nexport const tupleProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"array\";\n const prefixPath = ctx.target === \"draft-2020-12\" ? \"prefixItems\" : \"items\";\n const restPath = ctx.target === \"draft-2020-12\" ? \"items\" : ctx.target === \"openapi-3.0\" ? \"items\" : \"additionalItems\";\n const prefixItems = def.items.map((x, i) => process(x, ctx, {\n ...params,\n path: [...params.path, prefixPath, i],\n }));\n const rest = def.rest\n ? process(def.rest, ctx, {\n ...params,\n path: [...params.path, restPath, ...(ctx.target === \"openapi-3.0\" ? [def.items.length] : [])],\n })\n : null;\n if (ctx.target === \"draft-2020-12\") {\n json.prefixItems = prefixItems;\n if (rest) {\n json.items = rest;\n }\n }\n else if (ctx.target === \"openapi-3.0\") {\n json.items = {\n anyOf: prefixItems,\n };\n if (rest) {\n json.items.anyOf.push(rest);\n }\n json.minItems = prefixItems.length;\n if (!rest) {\n json.maxItems = prefixItems.length;\n }\n }\n else {\n json.items = prefixItems;\n if (rest) {\n json.additionalItems = rest;\n }\n }\n // length\n const { minimum, maximum } = schema._zod.bag;\n if (typeof minimum === \"number\")\n json.minItems = minimum;\n if (typeof maximum === \"number\")\n json.maxItems = maximum;\n};\nexport const recordProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"object\";\n // For looseRecord with regex patterns, use patternProperties\n // This correctly represents \"only validate keys matching the pattern\" semantics\n // and composes well with allOf (intersections)\n const keyType = def.keyType;\n const keyBag = keyType._zod.bag;\n const patterns = keyBag?.patterns;\n if (def.mode === \"loose\" && patterns && patterns.size > 0) {\n // Use patternProperties for looseRecord with regex patterns\n const valueSchema = process(def.valueType, ctx, {\n ...params,\n path: [...params.path, \"patternProperties\", \"*\"],\n });\n json.patternProperties = {};\n for (const pattern of patterns) {\n json.patternProperties[pattern.source] = valueSchema;\n }\n }\n else {\n // Default behavior: use propertyNames + additionalProperties\n if (ctx.target === \"draft-07\" || ctx.target === \"draft-2020-12\") {\n json.propertyNames = process(def.keyType, ctx, {\n ...params,\n path: [...params.path, \"propertyNames\"],\n });\n }\n json.additionalProperties = process(def.valueType, ctx, {\n ...params,\n path: [...params.path, \"additionalProperties\"],\n });\n }\n // Add required for keys with discrete values (enum, literal, etc.)\n const keyValues = keyType._zod.values;\n if (keyValues) {\n const validKeyValues = [...keyValues].filter((v) => typeof v === \"string\" || typeof v === \"number\");\n if (validKeyValues.length > 0) {\n json.required = validKeyValues;\n }\n }\n};\nexport const nullableProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n const inner = process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n if (ctx.target === \"openapi-3.0\") {\n seen.ref = def.innerType;\n json.nullable = true;\n }\n else {\n json.anyOf = [inner, { type: \"null\" }];\n }\n};\nexport const nonoptionalProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const defaultProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n json.default = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const prefaultProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n if (ctx.io === \"input\")\n json._prefault = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const catchProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n let catchValue;\n try {\n catchValue = def.catchValue(undefined);\n }\n catch {\n throw new Error(\"Dynamic catch values are not supported in JSON Schema\");\n }\n json.default = catchValue;\n};\nexport const pipeProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n const inIsTransform = def.in._zod.traits.has(\"$ZodTransform\");\n const innerType = ctx.io === \"input\" ? (inIsTransform ? def.out : def.in) : def.out;\n process(innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = innerType;\n};\nexport const readonlyProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n json.readOnly = true;\n};\nexport const promiseProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const optionalProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const lazyProcessor = (schema, ctx, _json, params) => {\n const innerType = schema._zod.innerType;\n process(innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = innerType;\n};\n// ==================== ALL PROCESSORS ====================\nexport const allProcessors = {\n string: stringProcessor,\n number: numberProcessor,\n boolean: booleanProcessor,\n bigint: bigintProcessor,\n symbol: symbolProcessor,\n null: nullProcessor,\n undefined: undefinedProcessor,\n void: voidProcessor,\n never: neverProcessor,\n any: anyProcessor,\n unknown: unknownProcessor,\n date: dateProcessor,\n enum: enumProcessor,\n literal: literalProcessor,\n nan: nanProcessor,\n template_literal: templateLiteralProcessor,\n file: fileProcessor,\n success: successProcessor,\n custom: customProcessor,\n function: functionProcessor,\n transform: transformProcessor,\n map: mapProcessor,\n set: setProcessor,\n array: arrayProcessor,\n object: objectProcessor,\n union: unionProcessor,\n intersection: intersectionProcessor,\n tuple: tupleProcessor,\n record: recordProcessor,\n nullable: nullableProcessor,\n nonoptional: nonoptionalProcessor,\n default: defaultProcessor,\n prefault: prefaultProcessor,\n catch: catchProcessor,\n pipe: pipeProcessor,\n readonly: readonlyProcessor,\n promise: promiseProcessor,\n optional: optionalProcessor,\n lazy: lazyProcessor,\n};\nexport function toJSONSchema(input, params) {\n if (\"_idmap\" in input) {\n // Registry case\n const registry = input;\n const ctx = initializeContext({ ...params, processors: allProcessors });\n const defs = {};\n // First pass: process all schemas to build the seen map\n for (const entry of registry._idmap.entries()) {\n const [_, schema] = entry;\n process(schema, ctx);\n }\n const schemas = {};\n const external = {\n registry,\n uri: params?.uri,\n defs,\n };\n // Update the context with external configuration\n ctx.external = external;\n // Second pass: emit each schema\n for (const entry of registry._idmap.entries()) {\n const [key, schema] = entry;\n extractDefs(ctx, schema);\n schemas[key] = finalize(ctx, schema);\n }\n if (Object.keys(defs).length > 0) {\n const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n schemas.__shared = {\n [defsSegment]: defs,\n };\n }\n return { schemas };\n }\n // Single schema case\n const ctx = initializeContext({ ...params, processors: allProcessors });\n process(input, ctx);\n extractDefs(ctx, input);\n return finalize(ctx, input);\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\";\nimport * as util from \"../core/util.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) => {\n inst.issues.push(issue);\n inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n },\n // enumerable: false,\n },\n addIssues: {\n value: (issues) => {\n inst.issues.push(...issues);\n inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n },\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 = /*@__PURE__*/ core.$constructor(\"ZodError\", initializer);\nexport const ZodRealError = /*@__PURE__*/ 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// Codec functions\nexport const encode = /* @__PURE__ */ core._encode(ZodRealError);\nexport const decode = /* @__PURE__ */ core._decode(ZodRealError);\nexport const encodeAsync = /* @__PURE__ */ core._encodeAsync(ZodRealError);\nexport const decodeAsync = /* @__PURE__ */ core._decodeAsync(ZodRealError);\nexport const safeEncode = /* @__PURE__ */ core._safeEncode(ZodRealError);\nexport const safeDecode = /* @__PURE__ */ core._safeDecode(ZodRealError);\nexport const safeEncodeAsync = /* @__PURE__ */ core._safeEncodeAsync(ZodRealError);\nexport const safeDecodeAsync = /* @__PURE__ */ core._safeDecodeAsync(ZodRealError);\n","import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as processors from \"../core/json-schema-processors.js\";\nimport { createStandardJSONSchemaMethod, createToJSONSchemaMethod } from \"../core/to-json-schema.js\";\nimport * as checks from \"./checks.js\";\nimport * as iso from \"./iso.js\";\nimport * as parse from \"./parse.js\";\n// Lazy-bind builder methods.\n//\n// Builder methods (`.optional`, `.array`, `.refine`, ...) live as\n// non-enumerable getters on each concrete schema constructor's\n// prototype. On first access from an instance the getter allocates\n// `fn.bind(this)` and caches it as an own property on that instance,\n// so detached usage (`const m = schema.optional; m()`) still works\n// and the per-instance allocation only happens for methods actually\n// touched.\n//\n// One install per (prototype, group), memoized by `_installedGroups`.\nconst _installedGroups = /* @__PURE__ */ new WeakMap();\nfunction _installLazyMethods(inst, group, methods) {\n const proto = Object.getPrototypeOf(inst);\n let installed = _installedGroups.get(proto);\n if (!installed) {\n installed = new Set();\n _installedGroups.set(proto, installed);\n }\n if (installed.has(group))\n return;\n installed.add(group);\n for (const key in methods) {\n const fn = methods[key];\n Object.defineProperty(proto, key, {\n configurable: true,\n enumerable: false,\n get() {\n const bound = fn.bind(this);\n Object.defineProperty(this, key, {\n configurable: true,\n writable: true,\n enumerable: true,\n value: bound,\n });\n return bound;\n },\n set(v) {\n Object.defineProperty(this, key, {\n configurable: true,\n writable: true,\n enumerable: true,\n value: v,\n });\n },\n });\n }\n}\nexport const ZodType = /*@__PURE__*/ core.$constructor(\"ZodType\", (inst, def) => {\n core.$ZodType.init(inst, def);\n Object.assign(inst[\"~standard\"], {\n jsonSchema: {\n input: createStandardJSONSchemaMethod(inst, \"input\"),\n output: createStandardJSONSchemaMethod(inst, \"output\"),\n },\n });\n inst.toJSONSchema = createToJSONSchemaMethod(inst, {});\n inst.def = def;\n inst.type = def.type;\n Object.defineProperty(inst, \"_def\", { value: def });\n // Parse-family is intentionally kept as per-instance closures: these are\n // the hot path AND the most-detached methods (`arr.map(schema.parse)`,\n // `const { parse } = schema`, etc.). Eager closures here mean callers pay\n // ~12 closure allocations per schema but get monomorphic call sites and\n // detached usage that \"just works\".\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 inst.encode = (data, params) => parse.encode(inst, data, params);\n inst.decode = (data, params) => parse.decode(inst, data, params);\n inst.encodeAsync = async (data, params) => parse.encodeAsync(inst, data, params);\n inst.decodeAsync = async (data, params) => parse.decodeAsync(inst, data, params);\n inst.safeEncode = (data, params) => parse.safeEncode(inst, data, params);\n inst.safeDecode = (data, params) => parse.safeDecode(inst, data, params);\n inst.safeEncodeAsync = async (data, params) => parse.safeEncodeAsync(inst, data, params);\n inst.safeDecodeAsync = async (data, params) => parse.safeDecodeAsync(inst, data, params);\n // All builder methods are placed on the internal prototype as lazy-bind\n // getters. On first access per-instance, a bound thunk is allocated and\n // cached as an own property; subsequent accesses skip the getter. This\n // means: no per-instance allocation for unused methods, full\n // detachability preserved (`const m = schema.optional; m()` works), and\n // shared underlying function references across all instances.\n _installLazyMethods(inst, \"ZodType\", {\n check(...chks) {\n const def = this.def;\n return this.clone(util.mergeDefs(def, {\n checks: [\n ...(def.checks ?? []),\n ...chks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n ],\n }), { parent: true });\n },\n with(...chks) {\n return this.check(...chks);\n },\n clone(def, params) {\n return core.clone(this, def, params);\n },\n brand() {\n return this;\n },\n register(reg, meta) {\n reg.add(this, meta);\n return this;\n },\n refine(check, params) {\n return this.check(refine(check, params));\n },\n superRefine(refinement, params) {\n return this.check(superRefine(refinement, params));\n },\n overwrite(fn) {\n return this.check(checks.overwrite(fn));\n },\n optional() {\n return optional(this);\n },\n exactOptional() {\n return exactOptional(this);\n },\n nullable() {\n return nullable(this);\n },\n nullish() {\n return optional(nullable(this));\n },\n nonoptional(params) {\n return nonoptional(this, params);\n },\n array() {\n return array(this);\n },\n or(arg) {\n return union([this, arg]);\n },\n and(arg) {\n return intersection(this, arg);\n },\n transform(tx) {\n return pipe(this, transform(tx));\n },\n default(d) {\n return _default(this, d);\n },\n prefault(d) {\n return prefault(this, d);\n },\n catch(params) {\n return _catch(this, params);\n },\n pipe(target) {\n return pipe(this, target);\n },\n readonly() {\n return readonly(this);\n },\n describe(description) {\n const cl = this.clone();\n core.globalRegistry.add(cl, { description });\n return cl;\n },\n meta(...args) {\n // overloaded: meta() returns the registered metadata, meta(data)\n // returns a clone with `data` registered. The mapped type picks\n // up the second overload, so we accept variadic any-args and\n // return `any` to satisfy both at runtime.\n if (args.length === 0)\n return core.globalRegistry.get(this);\n const cl = this.clone();\n core.globalRegistry.add(cl, args[0]);\n return cl;\n },\n isOptional() {\n return this.safeParse(undefined).success;\n },\n isNullable() {\n return this.safeParse(null).success;\n },\n apply(fn) {\n return fn(this);\n },\n });\n Object.defineProperty(inst, \"description\", {\n get() {\n return core.globalRegistry.get(inst)?.description;\n },\n configurable: true,\n });\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 inst._zod.processJSONSchema = (ctx, json, params) => processors.stringProcessor(inst, ctx, json, params);\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 _installLazyMethods(inst, \"_ZodString\", {\n regex(...args) {\n return this.check(checks.regex(...args));\n },\n includes(...args) {\n return this.check(checks.includes(...args));\n },\n startsWith(...args) {\n return this.check(checks.startsWith(...args));\n },\n endsWith(...args) {\n return this.check(checks.endsWith(...args));\n },\n min(...args) {\n return this.check(checks.minLength(...args));\n },\n max(...args) {\n return this.check(checks.maxLength(...args));\n },\n length(...args) {\n return this.check(checks.length(...args));\n },\n nonempty(...args) {\n return this.check(checks.minLength(1, ...args));\n },\n lowercase(params) {\n return this.check(checks.lowercase(params));\n },\n uppercase(params) {\n return this.check(checks.uppercase(params));\n },\n trim() {\n return this.check(checks.trim());\n },\n normalize(...args) {\n return this.check(checks.normalize(...args));\n },\n toLowerCase() {\n return this.check(checks.toLowerCase());\n },\n toUpperCase() {\n return this.check(checks.toUpperCase());\n },\n slugify() {\n return this.check(checks.slugify());\n },\n });\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 function httpUrl(params) {\n return core._url(ZodURL, {\n protocol: core.regexes.httpProtocol,\n hostname: core.regexes.domain,\n ...util.normalizeParams(params),\n });\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}\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link ZodCUID2} instead.\n * See https://github.com/paralleldrive/cuid.\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});\n/**\n * Validates a CUID v1 string.\n *\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link cuid2 | `z.cuid2()`} instead.\n * See https://github.com/paralleldrive/cuid.\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 ZodMAC = /*@__PURE__*/ core.$constructor(\"ZodMAC\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodMAC.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function mac(params) {\n return core._mac(ZodMAC, 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 function hostname(_params) {\n return core._stringFormat(ZodCustomStringFormat, \"hostname\", core.regexes.hostname, _params);\n}\nexport function hex(_params) {\n return core._stringFormat(ZodCustomStringFormat, \"hex\", core.regexes.hex, _params);\n}\nexport function hash(alg, params) {\n const enc = params?.enc ?? \"hex\";\n const format = `${alg}_${enc}`;\n const regex = core.regexes[format];\n if (!regex)\n throw new Error(`Unrecognized hash format: ${format}`);\n return core._stringFormat(ZodCustomStringFormat, format, regex, params);\n}\nexport const ZodNumber = /*@__PURE__*/ core.$constructor(\"ZodNumber\", (inst, def) => {\n core.$ZodNumber.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.numberProcessor(inst, ctx, json, params);\n _installLazyMethods(inst, \"ZodNumber\", {\n gt(value, params) {\n return this.check(checks.gt(value, params));\n },\n gte(value, params) {\n return this.check(checks.gte(value, params));\n },\n min(value, params) {\n return this.check(checks.gte(value, params));\n },\n lt(value, params) {\n return this.check(checks.lt(value, params));\n },\n lte(value, params) {\n return this.check(checks.lte(value, params));\n },\n max(value, params) {\n return this.check(checks.lte(value, params));\n },\n int(params) {\n return this.check(int(params));\n },\n safe(params) {\n return this.check(int(params));\n },\n positive(params) {\n return this.check(checks.gt(0, params));\n },\n nonnegative(params) {\n return this.check(checks.gte(0, params));\n },\n negative(params) {\n return this.check(checks.lt(0, params));\n },\n nonpositive(params) {\n return this.check(checks.lte(0, params));\n },\n multipleOf(value, params) {\n return this.check(checks.multipleOf(value, params));\n },\n step(value, params) {\n return this.check(checks.multipleOf(value, params));\n },\n finite() {\n return this;\n },\n });\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 inst._zod.processJSONSchema = (ctx, json, params) => processors.booleanProcessor(inst, ctx, json, params);\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._zod.processJSONSchema = (ctx, json, params) => processors.bigintProcessor(inst, ctx, json, 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.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 inst._zod.processJSONSchema = (ctx, json, params) => processors.symbolProcessor(inst, ctx, json, params);\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 inst._zod.processJSONSchema = (ctx, json, params) => processors.undefinedProcessor(inst, ctx, json, params);\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 inst._zod.processJSONSchema = (ctx, json, params) => processors.nullProcessor(inst, ctx, json, params);\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 inst._zod.processJSONSchema = (ctx, json, params) => processors.anyProcessor(inst, ctx, json, params);\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 inst._zod.processJSONSchema = (ctx, json, params) => processors.unknownProcessor(inst, ctx, json, params);\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 inst._zod.processJSONSchema = (ctx, json, params) => processors.neverProcessor(inst, ctx, json, params);\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 inst._zod.processJSONSchema = (ctx, json, params) => processors.voidProcessor(inst, ctx, json, params);\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._zod.processJSONSchema = (ctx, json, params) => processors.dateProcessor(inst, ctx, json, params);\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._zod.processJSONSchema = (ctx, json, params) => processors.arrayProcessor(inst, ctx, json, params);\n inst.element = def.element;\n _installLazyMethods(inst, \"ZodArray\", {\n min(n, params) {\n return this.check(checks.minLength(n, params));\n },\n nonempty(params) {\n return this.check(checks.minLength(1, params));\n },\n max(n, params) {\n return this.check(checks.maxLength(n, params));\n },\n length(n, params) {\n return this.check(checks.length(n, params));\n },\n unwrap() {\n return this.element;\n },\n });\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 _enum(Object.keys(shape));\n}\nexport const ZodObject = /*@__PURE__*/ core.$constructor(\"ZodObject\", (inst, def) => {\n core.$ZodObjectJIT.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.objectProcessor(inst, ctx, json, params);\n util.defineLazy(inst, \"shape\", () => {\n return def.shape;\n });\n _installLazyMethods(inst, \"ZodObject\", {\n keyof() {\n return _enum(Object.keys(this._zod.def.shape));\n },\n catchall(catchall) {\n return this.clone({ ...this._zod.def, catchall: catchall });\n },\n passthrough() {\n return this.clone({ ...this._zod.def, catchall: unknown() });\n },\n loose() {\n return this.clone({ ...this._zod.def, catchall: unknown() });\n },\n strict() {\n return this.clone({ ...this._zod.def, catchall: never() });\n },\n strip() {\n return this.clone({ ...this._zod.def, catchall: undefined });\n },\n extend(incoming) {\n return util.extend(this, incoming);\n },\n safeExtend(incoming) {\n return util.safeExtend(this, incoming);\n },\n merge(other) {\n return util.merge(this, other);\n },\n pick(mask) {\n return util.pick(this, mask);\n },\n omit(mask) {\n return util.omit(this, mask);\n },\n partial(...args) {\n return util.partial(ZodOptional, this, args[0]);\n },\n required(...args) {\n return util.required(ZodNonOptional, this, args[0]);\n },\n });\n});\nexport function object(shape, params) {\n const def = {\n type: \"object\",\n shape: shape ?? {},\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 shape,\n catchall: never(),\n ...util.normalizeParams(params),\n });\n}\n// looseObject\nexport function looseObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n shape,\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._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\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 ZodXor = /*@__PURE__*/ core.$constructor(\"ZodXor\", (inst, def) => {\n ZodUnion.init(inst, def);\n core.$ZodXor.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n inst.options = def.options;\n});\n/** Creates an exclusive union (XOR) where exactly one option must match.\n * Unlike regular unions that succeed when any option matches, xor fails if\n * zero or more than one option matches the input. */\nexport function xor(options, params) {\n return new ZodXor({\n type: \"union\",\n options: options,\n inclusive: false,\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 inst._zod.processJSONSchema = (ctx, json, params) => processors.intersectionProcessor(inst, ctx, json, params);\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._zod.processJSONSchema = (ctx, json, params) => processors.tupleProcessor(inst, ctx, json, params);\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._zod.processJSONSchema = (ctx, json, params) => processors.recordProcessor(inst, ctx, json, params);\n inst.keyType = def.keyType;\n inst.valueType = def.valueType;\n});\nexport function record(keyType, valueType, params) {\n // v3-compat: z.record(valueType, params?) — defaults keyType to z.string()\n if (!valueType || !valueType._zod) {\n return new ZodRecord({\n type: \"record\",\n keyType: string(),\n valueType: keyType,\n ...util.normalizeParams(valueType),\n });\n }\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 const k = core.clone(keyType);\n k._zod.values = undefined;\n return new ZodRecord({\n type: \"record\",\n keyType: k,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport function looseRecord(keyType, valueType, params) {\n return new ZodRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n mode: \"loose\",\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._zod.processJSONSchema = (ctx, json, params) => processors.mapProcessor(inst, ctx, json, params);\n inst.keyType = def.keyType;\n inst.valueType = def.valueType;\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 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._zod.processJSONSchema = (ctx, json, params) => processors.setProcessor(inst, ctx, json, params);\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._zod.processJSONSchema = (ctx, json, params) => processors.enumProcessor(inst, ctx, json, params);\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._zod.processJSONSchema = (ctx, json, params) => processors.literalProcessor(inst, ctx, json, params);\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._zod.processJSONSchema = (ctx, json, params) => processors.fileProcessor(inst, ctx, json, params);\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.processJSONSchema = (ctx, json, params) => processors.transformProcessor(inst, ctx, json, params);\n inst._zod.parse = (payload, _ctx) => {\n if (_ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(inst.constructor.name);\n }\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 ??= 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 payload.fallback = true;\n return payload;\n });\n }\n payload.value = output;\n payload.fallback = true;\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._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\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 ZodExactOptional = /*@__PURE__*/ core.$constructor(\"ZodExactOptional\", (inst, def) => {\n core.$ZodExactOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function exactOptional(innerType) {\n return new ZodExactOptional({\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._zod.processJSONSchema = (ctx, json, params) => processors.nullableProcessor(inst, ctx, json, params);\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._zod.processJSONSchema = (ctx, json, params) => processors.defaultProcessor(inst, ctx, json, params);\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() : util.shallowClone(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._zod.processJSONSchema = (ctx, json, params) => processors.prefaultProcessor(inst, ctx, json, params);\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() : util.shallowClone(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._zod.processJSONSchema = (ctx, json, params) => processors.nonoptionalProcessor(inst, ctx, json, params);\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._zod.processJSONSchema = (ctx, json, params) => processors.successProcessor(inst, ctx, json, params);\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._zod.processJSONSchema = (ctx, json, params) => processors.catchProcessor(inst, ctx, json, params);\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 inst._zod.processJSONSchema = (ctx, json, params) => processors.nanProcessor(inst, ctx, json, params);\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._zod.processJSONSchema = (ctx, json, params) => processors.pipeProcessor(inst, ctx, json, params);\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 ZodCodec = /*@__PURE__*/ core.$constructor(\"ZodCodec\", (inst, def) => {\n ZodPipe.init(inst, def);\n core.$ZodCodec.init(inst, def);\n});\nexport function codec(in_, out, params) {\n return new ZodCodec({\n type: \"pipe\",\n in: in_,\n out: out,\n transform: params.decode,\n reverseTransform: params.encode,\n });\n}\nexport function invertCodec(codec) {\n const def = codec._zod.def;\n return new ZodCodec({\n type: \"pipe\",\n in: def.out,\n out: def.in,\n transform: def.reverseTransform,\n reverseTransform: def.transform,\n });\n}\nexport const ZodPreprocess = /*@__PURE__*/ core.$constructor(\"ZodPreprocess\", (inst, def) => {\n ZodPipe.init(inst, def);\n core.$ZodPreprocess.init(inst, def);\n});\nexport const ZodReadonly = /*@__PURE__*/ core.$constructor(\"ZodReadonly\", (inst, def) => {\n core.$ZodReadonly.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.readonlyProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\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 inst._zod.processJSONSchema = (ctx, json, params) => processors.templateLiteralProcessor(inst, ctx, json, params);\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._zod.processJSONSchema = (ctx, json, params) => processors.lazyProcessor(inst, ctx, json, params);\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._zod.processJSONSchema = (ctx, json, params) => processors.promiseProcessor(inst, ctx, json, params);\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 ZodFunction = /*@__PURE__*/ core.$constructor(\"ZodFunction\", (inst, def) => {\n core.$ZodFunction.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.functionProcessor(inst, ctx, json, params);\n});\nexport function _function(params) {\n return new ZodFunction({\n type: \"function\",\n input: Array.isArray(params?.input) ? tuple(params?.input) : (params?.input ?? array(unknown())),\n output: params?.output ?? unknown(),\n });\n}\nexport { _function as function };\nexport const ZodCustom = /*@__PURE__*/ core.$constructor(\"ZodCustom\", (inst, def) => {\n core.$ZodCustom.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.customProcessor(inst, ctx, json, params);\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, params) {\n return core._superRefine(fn, params);\n}\n// Re-export describe and meta from core\nexport const describe = core.describe;\nexport const meta = core.meta;\nfunction _instanceof(cls, params = {}) {\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 // Override check to emit invalid_type instead of custom\n inst._zod.check = (payload) => {\n if (!(payload.value instanceof cls)) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: cls.name,\n input: payload.value,\n inst,\n path: [...(inst._zod.def.path ?? [])],\n });\n }\n };\n return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n Codec: ZodCodec,\n Boolean: ZodBoolean,\n String: ZodString,\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\nexport function preprocess(fn, schema) {\n return new ZodPreprocess({\n type: \"pipe\",\n in: transform(fn),\n out: schema,\n });\n}\n","import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport function string(params) {\n return core._coercedString(schemas.ZodString, params);\n}\nexport function number(params) {\n return core._coercedNumber(schemas.ZodNumber, params);\n}\nexport function boolean(params) {\n return core._coercedBoolean(schemas.ZodBoolean, params);\n}\nexport function bigint(params) {\n return core._coercedBigint(schemas.ZodBigInt, params);\n}\nexport function date(params) {\n return core._coercedDate(schemas.ZodDate, params);\n}\n","import { z } from 'zod';\nimport { hexToUint8Array } from '@ethersphere/core-sdk';\nexport const PostEnvelopeBodyResponse = z.object({\n issuer: z.string().transform(s => hexToUint8Array(s)),\n index: z.string().transform(s => hexToUint8Array(s)),\n timestamp: z.string().transform(s => hexToUint8Array(s)),\n signature: z.string().transform(s => hexToUint8Array(s))\n});","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","import { Objects, Strings, System } from 'cafe-utility';\nimport _debug from 'debug';\nimport { BeeResponseError } from \"../index.js\";\nconst debug = _debug('bee-js:http');\nconst MAX_FAILED_ATTEMPTS = 100000;\nconst DELAY_FAST = 200;\nconst DELAY_SLOW = 1000;\nconst FAST_RETRY_COUNT = 300;\nexport const DEFAULT_HTTP_CONFIG = {\n headers: {\n accept: 'application/json, text/plain, */*'\n }\n};\n/**\n * Main function to make HTTP requests.\n * @param options User defined settings\n * @param config Internal settings and/or Bee settings\n */\nexport async function http(options, config) {\n const rawData = config.data;\n const requestConfig = Objects.deepMerge3(DEFAULT_HTTP_CONFIG, {\n ...config,\n data: undefined\n }, options);\n requestConfig.data = rawData;\n if (options.signal) {\n requestConfig.signal = options.signal;\n }\n attachBody(requestConfig);\n if (requestConfig.params) {\n for (const k of Object.keys(requestConfig.params)) {\n if (requestConfig.params[k] === undefined) delete requestConfig.params[k];\n }\n }\n const url = buildUrl(requestConfig);\n const method = (requestConfig.method || 'GET').toUpperCase();\n requestConfig.method = method;\n options.onRequest?.({\n method,\n url: Strings.joinUrl([requestConfig.baseURL ?? '', requestConfig.url ?? '']),\n headers: {\n ...requestConfig.headers\n },\n params: requestConfig.params\n });\n let failedAttempts = 0;\n while (failedAttempts < MAX_FAILED_ATTEMPTS) {\n try {\n debug(`${method} ${url}`, {\n headers: requestConfig.headers,\n params: requestConfig.params\n });\n const res = await fetch(url, requestConfig);\n if (!res.ok) await throwHttpError(method, url, res, requestConfig.responseType);\n return toBeeResponse(res, requestConfig.responseType);\n } catch (e) {\n if (e instanceof BeeResponseError) throw e;\n const err = e;\n if (err.name === 'TimeoutError' && options.endlesslyRetry) {\n failedAttempts++;\n await System.sleepMillis(failedAttempts < FAST_RETRY_COUNT ? DELAY_FAST : DELAY_SLOW);\n } else {\n throw toBeeError(err, method, url);\n }\n }\n }\n throw Error('Max number of failed attempts reached');\n}\nfunction attachBody(config) {\n if (config.data === undefined) return;\n const data = config.data;\n const isJsonShape = data !== null && typeof data === 'object' && data.constructor === Object || Array.isArray(data);\n if (isJsonShape) {\n config.body = JSON.stringify(data);\n config.headers = {\n 'content-type': 'application/json',\n ...config.headers\n };\n } else {\n config.body = data;\n config.duplex = 'half';\n const ct = data instanceof Blob && data.type ? data.type : 'application/octet-stream';\n config.headers = {\n 'content-type': ct,\n ...config.headers\n };\n }\n}\nasync function throwHttpError(method, url, res, responseType) {\n const errBody = await toBeeResponse(res, responseType).catch(() => ({\n data: undefined\n }));\n const bodyMsg = typeof errBody.data === 'string' ? errBody.data : JSON.stringify(errBody.data);\n const message = bodyMsg && bodyMsg !== 'undefined' ? `${res.statusText}: ${bodyMsg}` : res.statusText;\n throw new BeeResponseError(method, url, message, errBody.data, res.status, res.statusText);\n}\nfunction toBeeError(err, method, url) {\n if (err.name === 'AbortError') {\n return new BeeResponseError(method, url, 'Request aborted', undefined, undefined, 'ERR_CANCELED');\n }\n const cause = err.cause;\n const message = cause?.message ? `${err.message}: ${cause.message}` : err.message;\n return new BeeResponseError(method, url, message);\n}\nexport async function toBeeResponse(res, responseType = 'json') {\n let data;\n switch (responseType) {\n case 'arraybuffer':\n data = await res.arrayBuffer();\n break;\n case 'text':\n data = await res.text();\n break;\n case 'blob':\n data = await res.blob();\n break;\n case 'stream':\n data = res.body;\n break;\n case 'json':\n default:\n {\n const text = await res.text();\n data = text ? JSON.parse(text) : null;\n }\n }\n return {\n data: data,\n status: res.status,\n statusText: res.statusText,\n headers: Object.fromEntries(res.headers.entries()),\n raw: res\n };\n}\nfunction buildUrl(config) {\n let url = Strings.joinUrl([config.baseURL ?? '', config.url ?? '']);\n if (config.params) {\n const qs = new URLSearchParams(Object.entries(config.params).filter(([, v]) => v !== undefined).map(([k, v]) => [k, String(v)])).toString();\n if (qs) url += `?${qs}`;\n }\n return url;\n}","import { z } from 'zod';\nexport const RchashResponse = z.object({\n durationSeconds: z.number()\n});","import { Reference } from '@ethersphere/core-sdk';\nimport { z } from 'zod';\nexport const UploadResultBody = z.object({\n reference: z.string().transform(s => new Reference(s))\n});","export class BeeError extends Error {\n constructor(message) {\n super(message);\n }\n}\nexport class BeeArgumentError extends BeeError {\n constructor(message, value) {\n super(message);\n this.value = value;\n }\n}\nexport class BeeResponseError extends BeeError {\n constructor(method, url, message, responseBody, status, statusText) {\n super(message);\n this.method = method;\n this.url = url;\n this.responseBody = responseBody;\n this.status = status;\n this.statusText = statusText;\n this.response = {\n status,\n data: responseBody,\n statusText\n };\n }\n}","import { Dates } from 'cafe-utility';\nexport class Duration {\n constructor(seconds) {\n this.seconds = Math.ceil(seconds);\n if (seconds < 0) {\n this.seconds = 0;\n }\n }\n static fromMilliseconds(milliseconds) {\n return new Duration(milliseconds / 1000);\n }\n static fromSeconds(seconds) {\n return new Duration(seconds);\n }\n static fromHours(hours) {\n return new Duration(hours * 60 * 60);\n }\n static fromDays(days) {\n return new Duration(days * 24 * 60 * 60);\n }\n static fromWeeks(weeks) {\n return new Duration(weeks * 7 * 24 * 60 * 60);\n }\n static fromYears(years) {\n return new Duration(years * 365 * 24 * 60 * 60);\n }\n static fromEndDate(endDate, startDate) {\n return new Duration((endDate.getTime() - (startDate ?? new Date()).getTime()) / 1000);\n }\n /**\n * Parses a duration string and returns a `Duration` instance.\n *\n * Case insensitive. E.g. both `\"28h\"` and `\"1D\"` are valid.\n *\n * Whitespaces are ignored. E.g. both `\"5 d\"` and `\"2weeks\"` are valid.\n *\n * Decimal numbers are supported. E.g. `\"1.5h\"` is valid.\n *\n * Supported units:\n *\n * - ms, milli, millis, millisecond, milliseconds\n * - s, sec, second, seconds\n * - m, min, minute, minutes\n * - h, hour, hours\n * - d, day, days\n * - w, week, weeks\n * - month, months\n * - y, year, years\n *\n * @param duration - A string representing a duration\n * @returns a `Duration` instance\n */\n static parseFromString(duration) {\n return Duration.fromSeconds(Dates.make(duration) / 1000);\n }\n toSeconds() {\n return this.seconds;\n }\n toHours() {\n return this.seconds / 60 / 60;\n }\n toDays() {\n return this.seconds / 24 / 60 / 60;\n }\n toWeeks() {\n return this.seconds / 7 / 24 / 60 / 60;\n }\n toYears() {\n return this.seconds / 365 / 24 / 60 / 60;\n }\n toEndDate(startDate) {\n return new Date((startDate ?? new Date()).getTime() + this.seconds * 1000);\n }\n represent() {\n return Dates.secondsToHumanTime(this.seconds);\n }\n isZero() {\n return this.seconds === 0;\n }\n}\nDuration.ZERO = new Duration(0);","import { FixedPointNumber } from 'cafe-utility';\nexport class BZZ {\n constructor(state) {\n this.state = state;\n }\n static fromDecimalString(string) {\n return new BZZ(FixedPointNumber.fromDecimalString(string, BZZ.DIGITS));\n }\n static fromPLUR(plur) {\n return new BZZ(new FixedPointNumber(plur, BZZ.DIGITS));\n }\n static fromFloat(float) {\n return new BZZ(FixedPointNumber.fromFloat(float, BZZ.DIGITS));\n }\n toPLURString() {\n return this.state.toString();\n }\n toPLURBigInt() {\n return this.state.value;\n }\n toDecimalString() {\n return this.state.toDecimalString();\n }\n toFloat() {\n return this.state.toFloat();\n }\n toSignificantDigits(digits) {\n return this.toDecimalString().slice(0, this.toDecimalString().indexOf('.') + digits + 1);\n }\n /**\n * Does not mutate the current BZZ instance.\n *\n * @param other BZZ instance, or amount in PLUR\n * @returns New BZZ instance\n */\n plus(other) {\n return new BZZ(this.state.add(other instanceof BZZ ? other.state : new FixedPointNumber(other, BZZ.DIGITS)));\n }\n /**\n * Does not mutate the current BZZ instance.\n *\n * @param other BZZ instance, or amount in PLUR\n * @returns New BZZ instance\n */\n minus(other) {\n return new BZZ(this.state.subtract(other instanceof BZZ ? other.state : new FixedPointNumber(other, BZZ.DIGITS)));\n }\n /**\n * Does not mutate the current BZZ instance.\n *\n * @param other Divisor\n * @returns New BZZ instance\n */\n divide(other) {\n return new BZZ(this.state.divmod(other)[0]);\n }\n gt(other) {\n return this.state.compare(other.state) === 1;\n }\n gte(other) {\n return this.state.compare(other.state) !== -1;\n }\n lt(other) {\n return this.state.compare(other.state) === -1;\n }\n lte(other) {\n return this.state.compare(other.state) !== 1;\n }\n eq(other) {\n return this.state.compare(other.state) === 0;\n }\n exchangeToDAI(daiPerBzz) {\n return DAI.fromWei(this.state.exchange('*', new FixedPointNumber(daiPerBzz.toWeiBigInt(), DAI.DIGITS), DAI.DIGITS).value);\n }\n}\nBZZ.DIGITS = 16;\nexport class DAI {\n constructor(state) {\n this.state = state;\n }\n static fromDecimalString(string) {\n return new DAI(FixedPointNumber.fromDecimalString(string, DAI.DIGITS));\n }\n static fromWei(wei) {\n return new DAI(new FixedPointNumber(wei, DAI.DIGITS));\n }\n static fromFloat(float) {\n return new DAI(FixedPointNumber.fromFloat(float, DAI.DIGITS));\n }\n toWeiString() {\n return this.state.toString();\n }\n toWeiBigInt() {\n return this.state.value;\n }\n toDecimalString() {\n return this.state.toDecimalString();\n }\n toSignificantDigits(digits) {\n return this.toDecimalString().slice(0, this.toDecimalString().indexOf('.') + digits + 1);\n }\n toFloat() {\n return this.state.toFloat();\n }\n /**\n * Does not mutate the current DAI instance.\n *\n * @param other DAI instance, or amount in PLUR\n * @returns New DAI instance\n */\n plus(other) {\n return new DAI(this.state.add(other instanceof DAI ? other.state : new FixedPointNumber(other, DAI.DIGITS)));\n }\n /**\n * Does not mutate the current DAI instance.\n *\n * @param other DAI instance, or amount in PLUR\n * @returns New DAI instance\n */\n minus(other) {\n return new DAI(this.state.subtract(other instanceof DAI ? other.state : new FixedPointNumber(other, DAI.DIGITS)));\n }\n /**\n * Does not mutate the current DAI instance.\n *\n * @param other Divisor\n * @returns New DAI instance\n */\n divide(other) {\n return new DAI(this.state.divmod(other)[0]);\n }\n gt(other) {\n return this.state.compare(other.state) === 1;\n }\n gte(other) {\n return this.state.compare(other.state) !== -1;\n }\n lt(other) {\n return this.state.compare(other.state) === -1;\n }\n lte(other) {\n return this.state.compare(other.state) !== 1;\n }\n eq(other) {\n return this.state.compare(other.state) === 0;\n }\n exchangeToBZZ(daiPerBzz) {\n return BZZ.fromPLUR(this.state.exchange('/', new FixedPointNumber(daiPerBzz.toWeiBigInt(), DAI.DIGITS), BZZ.DIGITS).value);\n }\n}\nDAI.DIGITS = 18;","/**\n * Compatibility functions for working with File API objects\n *\n * https://developer.mozilla.org/en-US/docs/Web/API/File\n */\nexport function isFile(file) {\n // browser\n if (typeof File === 'function' && file instanceof File) {\n return true;\n }\n // node.js\n const f = file;\n return typeof f === 'object' && typeof f.name === 'string' && (typeof f.stream === 'function' || typeof f.arrayBuffer === 'function');\n}\n/**\n * Compatibility helper for browsers where the `arrayBuffer function is\n * missing from `File` objects.\n *\n * @param file A File object\n */\nexport async function fileArrayBuffer(file) {\n if (file.arrayBuffer) {\n return file.arrayBuffer();\n }\n // workaround for Safari where arrayBuffer is not supported on Files\n return new Promise(resolve => {\n const fr = new FileReader();\n fr.onload = () => resolve(fr.result);\n fr.readAsArrayBuffer(file);\n });\n}","export var BeeModes;\n(function (BeeModes) {\n BeeModes[\"FULL\"] = \"full\";\n BeeModes[\"LIGHT\"] = \"light\";\n BeeModes[\"ULTRA_LIGHT\"] = \"ultra-light\";\n BeeModes[\"DEV\"] = \"dev\";\n})(BeeModes || (BeeModes = {}));\nexport function toBeeMode(value) {\n switch (value) {\n case 'full':\n return BeeModes.FULL;\n case 'light':\n return BeeModes.LIGHT;\n case 'ultra-light':\n return BeeModes.ULTRA_LIGHT;\n case 'dev':\n return BeeModes.DEV;\n default:\n throw new Error(`Unknown Bee mode: ${value}`);\n }\n}","export * from \"./debug.js\";\nexport const SECTION_SIZE = 32;\nexport const BRANCHES = 128;\nexport const CHUNK_SIZE = SECTION_SIZE * BRANCHES;\nexport const PSS_TARGET_HEX_LENGTH_MAX = 4;\n/**\n * Minimum postage batch depth.\n */\nexport const STAMPS_DEPTH_MIN = 17;\n/**\n * Maximum postage batch depth.\n */\nexport const STAMPS_DEPTH_MAX = 255;\n/**\n * Minimum tags API page size.\n */\nexport const TAGS_LIMIT_MIN = 1;\n/**\n * Maximum tags API page size.\n */\nexport const TAGS_LIMIT_MAX = 1000;\n/**\n * Add redundancy to the data being uploaded so that downloaders can download it with better UX.\n * 0 value is default and does not add any redundancy to the file.\n */\nexport var RedundancyLevel;\n(function (RedundancyLevel) {\n RedundancyLevel[RedundancyLevel[\"OFF\"] = 0] = \"OFF\";\n RedundancyLevel[RedundancyLevel[\"MEDIUM\"] = 1] = \"MEDIUM\";\n RedundancyLevel[RedundancyLevel[\"STRONG\"] = 2] = \"STRONG\";\n RedundancyLevel[RedundancyLevel[\"INSANE\"] = 3] = \"INSANE\";\n RedundancyLevel[RedundancyLevel[\"PARANOID\"] = 4] = \"PARANOID\";\n})(RedundancyLevel || (RedundancyLevel = {}));\n/**\n * Specify the retrieve strategy on redundant data.\n * The possible values are NONE, DATA, PROX and RACE.\n * Strategy NONE means no prefetching takes place.\n * Strategy DATA means only data chunks are prefetched.\n * Strategy PROX means only chunks that are close to the node are prefetched.\n * Strategy RACE means all chunks are prefetched: n data chunks and k parity chunks. The first n chunks to arrive are used to reconstruct the file.\n * Multiple strategies can be used in a fallback cascade if the swarm redundancy fallback mode is set to true.\n * The default strategy is NONE, DATA, falling back to PROX, falling back to RACE\n */\nexport var RedundancyStrategy;\n(function (RedundancyStrategy) {\n RedundancyStrategy[RedundancyStrategy[\"NONE\"] = 0] = \"NONE\";\n RedundancyStrategy[RedundancyStrategy[\"DATA\"] = 1] = \"DATA\";\n RedundancyStrategy[RedundancyStrategy[\"PROX\"] = 2] = \"PROX\";\n RedundancyStrategy[RedundancyStrategy[\"RACE\"] = 3] = \"RACE\";\n})(RedundancyStrategy || (RedundancyStrategy = {}));\nexport const capacityBreakpoints = {\n ENCRYPTION_OFF: {\n [RedundancyLevel.OFF]: [{\n theoreticalVolume: '536.87 MB',\n effectiveVolume: '44.70 kB',\n batchDepth: 17,\n utilizationRate: '0.01%'\n }, {\n theoreticalVolume: '1.07 GB',\n effectiveVolume: '6.66 MB',\n batchDepth: 18,\n utilizationRate: '0.61%'\n }, {\n theoreticalVolume: '2.15 GB',\n effectiveVolume: '112.06 MB',\n batchDepth: 19,\n utilizationRate: '5.09%'\n }, {\n theoreticalVolume: '4.29 GB',\n effectiveVolume: '687.62 MB',\n batchDepth: 20,\n utilizationRate: '15.65%'\n }, {\n theoreticalVolume: '8.59 GB',\n effectiveVolume: '2.60 GB',\n batchDepth: 21,\n utilizationRate: '30.27%'\n }, {\n theoreticalVolume: '17.18 GB',\n effectiveVolume: '7.73 GB',\n batchDepth: 22,\n utilizationRate: '44.99%'\n }, {\n theoreticalVolume: '34.36 GB',\n effectiveVolume: '19.94 GB',\n batchDepth: 23,\n utilizationRate: '58.03%'\n }, {\n theoreticalVolume: '68.72 GB',\n effectiveVolume: '47.06 GB',\n batchDepth: 24,\n utilizationRate: '68.48%'\n }, {\n theoreticalVolume: '137.44 GB',\n effectiveVolume: '105.51 GB',\n batchDepth: 25,\n utilizationRate: '76.77%'\n }, {\n theoreticalVolume: '274.88 GB',\n effectiveVolume: '227.98 GB',\n batchDepth: 26,\n utilizationRate: '82.94%'\n }, {\n theoreticalVolume: '549.76 GB',\n effectiveVolume: '476.68 GB',\n batchDepth: 27,\n utilizationRate: '86.71%'\n }, {\n theoreticalVolume: '1.10 TB',\n effectiveVolume: '993.65 GB',\n batchDepth: 28,\n utilizationRate: '88.37%'\n }, {\n theoreticalVolume: '2.20 TB',\n effectiveVolume: '2.04 TB',\n batchDepth: 29,\n utilizationRate: '92.88%'\n }, {\n theoreticalVolume: '4.40 TB',\n effectiveVolume: '4.17 TB',\n batchDepth: 30,\n utilizationRate: '94.81%'\n }, {\n theoreticalVolume: '8.80 TB',\n effectiveVolume: '8.45 TB',\n batchDepth: 31,\n utilizationRate: '96.06%'\n }, {\n theoreticalVolume: '17.59 TB',\n effectiveVolume: '17.07 TB',\n batchDepth: 32,\n utilizationRate: '97.01%'\n }, {\n theoreticalVolume: '35.18 TB',\n effectiveVolume: '34.36 TB',\n batchDepth: 33,\n utilizationRate: '97.65%'\n }, {\n theoreticalVolume: '70.37 TB',\n effectiveVolume: '69.04 TB',\n batchDepth: 34,\n utilizationRate: '98.11%'\n }, {\n theoreticalVolume: '140.74 TB',\n effectiveVolume: '138.54 TB',\n batchDepth: 35,\n utilizationRate: '98.44%'\n }, {\n theoreticalVolume: '281.47 TB',\n effectiveVolume: '277.72 TB',\n batchDepth: 36,\n utilizationRate: '98.67%'\n }, {\n theoreticalVolume: '562.95 TB',\n effectiveVolume: '556.35 TB',\n batchDepth: 37,\n utilizationRate: '98.83%'\n }, {\n theoreticalVolume: '1.13 PB',\n effectiveVolume: '1.11 PB',\n batchDepth: 38,\n utilizationRate: '98.91%'\n }, {\n theoreticalVolume: '2.25 PB',\n effectiveVolume: '2.23 PB',\n batchDepth: 39,\n utilizationRate: '98.96%'\n }, {\n theoreticalVolume: '4.50 PB',\n effectiveVolume: '4.46 PB',\n batchDepth: 40,\n utilizationRate: '98.98%'\n }, {\n theoreticalVolume: '9.01 PB',\n effectiveVolume: '8.93 PB',\n batchDepth: 41,\n utilizationRate: '99.11%'\n }],\n [RedundancyLevel.MEDIUM]: [{\n theoreticalVolume: '536.87 MB',\n effectiveVolume: '41.56 kB',\n batchDepth: 17,\n utilizationRate: '0.01%'\n }, {\n theoreticalVolume: '1.07 GB',\n effectiveVolume: '6.19 MB',\n batchDepth: 18,\n utilizationRate: '0.57%'\n }, {\n theoreticalVolume: '2.15 GB',\n effectiveVolume: '104.18 MB',\n batchDepth: 19,\n utilizationRate: '4.73%'\n }, {\n theoreticalVolume: '4.29 GB',\n effectiveVolume: '639.27 MB',\n batchDepth: 20,\n utilizationRate: '14.54%'\n }, {\n theoreticalVolume: '8.59 GB',\n effectiveVolume: '2.41 GB',\n batchDepth: 21,\n utilizationRate: '28.11%'\n }, {\n theoreticalVolume: '17.18 GB',\n effectiveVolume: '7.18 GB',\n batchDepth: 22,\n utilizationRate: '41.79%'\n }, {\n theoreticalVolume: '34.36 GB',\n effectiveVolume: '18.54 GB',\n batchDepth: 23,\n utilizationRate: '53.95%'\n }, {\n theoreticalVolume: '68.72 GB',\n effectiveVolume: '43.75 GB',\n batchDepth: 24,\n utilizationRate: '63.66%'\n }, {\n theoreticalVolume: '137.44 GB',\n effectiveVolume: '98.09 GB',\n batchDepth: 25,\n utilizationRate: '71.37%'\n }, {\n theoreticalVolume: '274.88 GB',\n effectiveVolume: '211.95 GB',\n batchDepth: 26,\n utilizationRate: '77.11%'\n }, {\n theoreticalVolume: '549.76 GB',\n effectiveVolume: '443.16 GB',\n batchDepth: 27,\n utilizationRate: '80.61%'\n }, {\n theoreticalVolume: '1.10 TB',\n effectiveVolume: '923.78 GB',\n batchDepth: 28,\n utilizationRate: '82.16%'\n }, {\n theoreticalVolume: '2.20 TB',\n effectiveVolume: '1.90 TB',\n batchDepth: 29,\n utilizationRate: '86.30%'\n }, {\n theoreticalVolume: '4.40 TB',\n effectiveVolume: '3.88 TB',\n batchDepth: 30,\n utilizationRate: '88.14%'\n }, {\n theoreticalVolume: '8.80 TB',\n effectiveVolume: '7.86 TB',\n batchDepth: 31,\n utilizationRate: '89.26%'\n }, {\n theoreticalVolume: '17.59 TB',\n effectiveVolume: '15.87 TB',\n batchDepth: 32,\n utilizationRate: '90.21%'\n }, {\n theoreticalVolume: '35.18 TB',\n effectiveVolume: '31.94 TB',\n batchDepth: 33,\n utilizationRate: '90.77%'\n }, {\n theoreticalVolume: '70.37 TB',\n effectiveVolume: '64.19 TB',\n batchDepth: 34,\n utilizationRate: '91.22%'\n }, {\n theoreticalVolume: '140.74 TB',\n effectiveVolume: '128.80 TB',\n batchDepth: 35,\n utilizationRate: '91.52%'\n }, {\n theoreticalVolume: '281.47 TB',\n effectiveVolume: '258.19 TB',\n batchDepth: 36,\n utilizationRate: '91.73%'\n }, {\n theoreticalVolume: '562.95 TB',\n effectiveVolume: '517.23 TB',\n batchDepth: 37,\n utilizationRate: '91.88%'\n }, {\n theoreticalVolume: '1.13 PB',\n effectiveVolume: '1.04 PB',\n batchDepth: 38,\n utilizationRate: '91.95%'\n }, {\n theoreticalVolume: '2.25 PB',\n effectiveVolume: '2.07 PB',\n batchDepth: 39,\n utilizationRate: '92.00%'\n }, {\n theoreticalVolume: '4.50 PB',\n effectiveVolume: '4.15 PB',\n batchDepth: 40,\n utilizationRate: '92.15%'\n }, {\n theoreticalVolume: '9.01 PB',\n effectiveVolume: '8.30 PB',\n batchDepth: 41,\n utilizationRate: '92.14%'\n }],\n [RedundancyLevel.STRONG]: [{\n theoreticalVolume: '536.87 MB',\n effectiveVolume: '37.37 kB',\n batchDepth: 17,\n utilizationRate: '0.01%'\n }, {\n theoreticalVolume: '1.07 GB',\n effectiveVolume: '5.57 MB',\n batchDepth: 18,\n utilizationRate: '0.51%'\n }, {\n theoreticalVolume: '2.15 GB',\n effectiveVolume: '93.68 MB',\n batchDepth: 19,\n utilizationRate: '4.25%'\n }, {\n theoreticalVolume: '4.29 GB',\n effectiveVolume: '574.81 MB',\n batchDepth: 20,\n utilizationRate: '13.07%'\n }, {\n theoreticalVolume: '8.59 GB',\n effectiveVolume: '2.17 GB',\n batchDepth: 21,\n utilizationRate: '25.26%'\n }, {\n theoreticalVolume: '17.18 GB',\n effectiveVolume: '6.46 GB',\n batchDepth: 22,\n utilizationRate: '37.58%'\n }, {\n theoreticalVolume: '34.36 GB',\n effectiveVolume: '16.67 GB',\n batchDepth: 23,\n utilizationRate: '48.50%'\n }, {\n theoreticalVolume: '68.72 GB',\n effectiveVolume: '39.34 GB',\n batchDepth: 24,\n utilizationRate: '57.24%'\n }, {\n theoreticalVolume: '137.44 GB',\n effectiveVolume: '88.20 GB',\n batchDepth: 25,\n utilizationRate: '64.17%'\n }, {\n theoreticalVolume: '274.88 GB',\n effectiveVolume: '190.58 GB',\n batchDepth: 26,\n utilizationRate: '69.33%'\n }, {\n theoreticalVolume: '549.76 GB',\n effectiveVolume: '398.47 GB',\n batchDepth: 27,\n utilizationRate: '72.48%'\n }, {\n theoreticalVolume: '1.10 TB',\n effectiveVolume: '830.63 GB',\n batchDepth: 28,\n utilizationRate: '73.85%'\n }, {\n theoreticalVolume: '2.20 TB',\n effectiveVolume: '1.71 TB',\n batchDepth: 29,\n utilizationRate: '77.59%'\n }, {\n theoreticalVolume: '4.40 TB',\n effectiveVolume: '3.49 TB',\n batchDepth: 30,\n utilizationRate: '79.27%'\n }, {\n theoreticalVolume: '8.80 TB',\n effectiveVolume: '7.07 TB',\n batchDepth: 31,\n utilizationRate: '80.34%'\n }, {\n theoreticalVolume: '17.59 TB',\n effectiveVolume: '14.27 TB',\n batchDepth: 32,\n utilizationRate: '81.12%'\n }, {\n theoreticalVolume: '35.18 TB',\n effectiveVolume: '28.72 TB',\n batchDepth: 33,\n utilizationRate: '81.63%'\n }, {\n theoreticalVolume: '70.37 TB',\n effectiveVolume: '57.71 TB',\n batchDepth: 34,\n utilizationRate: '82.01%'\n }, {\n theoreticalVolume: '140.74 TB',\n effectiveVolume: '115.81 TB',\n batchDepth: 35,\n utilizationRate: '82.29%'\n }, {\n theoreticalVolume: '281.47 TB',\n effectiveVolume: '232.16 TB',\n batchDepth: 36,\n utilizationRate: '82.48%'\n }, {\n theoreticalVolume: '562.95 TB',\n effectiveVolume: '465.07 TB',\n batchDepth: 37,\n utilizationRate: '82.61%'\n }, {\n theoreticalVolume: '1.13 PB',\n effectiveVolume: '931.23 TB',\n batchDepth: 38,\n utilizationRate: '82.67%'\n }, {\n theoreticalVolume: '2.25 PB',\n effectiveVolume: '1.86 PB',\n batchDepth: 39,\n utilizationRate: '82.71%'\n }, {\n theoreticalVolume: '4.50 PB',\n effectiveVolume: '3.73 PB',\n batchDepth: 40,\n utilizationRate: '82.78%'\n }, {\n theoreticalVolume: '9.01 PB',\n effectiveVolume: '7.46 PB',\n batchDepth: 41,\n utilizationRate: '82.79%'\n }],\n [RedundancyLevel.INSANE]: [{\n theoreticalVolume: '536.87 MB',\n effectiveVolume: '33.88 kB',\n batchDepth: 17,\n utilizationRate: '0.01%'\n }, {\n theoreticalVolume: '1.07 GB',\n effectiveVolume: '5.05 MB',\n batchDepth: 18,\n utilizationRate: '0.46%'\n }, {\n theoreticalVolume: '2.15 GB',\n effectiveVolume: '84.92 MB',\n batchDepth: 19,\n utilizationRate: '3.86%'\n }, {\n theoreticalVolume: '4.29 GB',\n effectiveVolume: '521.09 MB',\n batchDepth: 20,\n utilizationRate: '11.85%'\n }, {\n theoreticalVolume: '8.59 GB',\n effectiveVolume: '1.97 GB',\n batchDepth: 21,\n utilizationRate: '22.90%'\n }, {\n theoreticalVolume: '17.18 GB',\n effectiveVolume: '5.86 GB',\n batchDepth: 22,\n utilizationRate: '34.09%'\n }, {\n theoreticalVolume: '34.36 GB',\n effectiveVolume: '15.11 GB',\n batchDepth: 23,\n utilizationRate: '43.97%'\n }, {\n theoreticalVolume: '68.72 GB',\n effectiveVolume: '35.66 GB',\n batchDepth: 24,\n utilizationRate: '51.90%'\n }, {\n theoreticalVolume: '137.44 GB',\n effectiveVolume: '79.96 GB',\n batchDepth: 25,\n utilizationRate: '58.18%'\n }, {\n theoreticalVolume: '274.88 GB',\n effectiveVolume: '172.77 GB',\n batchDepth: 26,\n utilizationRate: '62.85%'\n }, {\n theoreticalVolume: '549.76 GB',\n effectiveVolume: '361.23 GB',\n batchDepth: 27,\n utilizationRate: '65.70%'\n }, {\n theoreticalVolume: '1.10 TB',\n effectiveVolume: '753.00 GB',\n batchDepth: 28,\n utilizationRate: '66.95%'\n }, {\n theoreticalVolume: '2.20 TB',\n effectiveVolume: '1.55 TB',\n batchDepth: 29,\n utilizationRate: '70.38%'\n }, {\n theoreticalVolume: '4.40 TB',\n effectiveVolume: '3.16 TB',\n batchDepth: 30,\n utilizationRate: '71.92%'\n }, {\n theoreticalVolume: '8.80 TB',\n effectiveVolume: '6.41 TB',\n batchDepth: 31,\n utilizationRate: '72.85%'\n }, {\n theoreticalVolume: '17.59 TB',\n effectiveVolume: '12.93 TB',\n batchDepth: 32,\n utilizationRate: '73.53%'\n }, {\n theoreticalVolume: '35.18 TB',\n effectiveVolume: '26.04 TB',\n batchDepth: 33,\n utilizationRate: '74.01%'\n }, {\n theoreticalVolume: '70.37 TB',\n effectiveVolume: '52.32 TB',\n batchDepth: 34,\n utilizationRate: '74.35%'\n }, {\n theoreticalVolume: '140.74 TB',\n effectiveVolume: '104.99 TB',\n batchDepth: 35,\n utilizationRate: '74.60%'\n }, {\n theoreticalVolume: '281.47 TB',\n effectiveVolume: '210.46 TB',\n batchDepth: 36,\n utilizationRate: '74.77%'\n }, {\n theoreticalVolume: '562.95 TB',\n effectiveVolume: '421.61 TB',\n batchDepth: 37,\n utilizationRate: '74.89%'\n }, {\n theoreticalVolume: '1.13 PB',\n effectiveVolume: '844.20 TB',\n batchDepth: 38,\n utilizationRate: '74.94%'\n }, {\n theoreticalVolume: '2.25 PB',\n effectiveVolume: '1.69 PB',\n batchDepth: 39,\n utilizationRate: '74.98%'\n }, {\n theoreticalVolume: '4.50 PB',\n effectiveVolume: '3.38 PB',\n batchDepth: 40,\n utilizationRate: '75.03%'\n }, {\n theoreticalVolume: '9.01 PB',\n effectiveVolume: '6.77 PB',\n batchDepth: 41,\n utilizationRate: '75.10%'\n }],\n [RedundancyLevel.PARANOID]: [{\n theoreticalVolume: '536.87 MB',\n effectiveVolume: '13.27 kB',\n batchDepth: 17,\n utilizationRate: '0.00%'\n }, {\n theoreticalVolume: '1.07 GB',\n effectiveVolume: '1.98 MB',\n batchDepth: 18,\n utilizationRate: '0.18%'\n }, {\n theoreticalVolume: '2.15 GB',\n effectiveVolume: '33.27 MB',\n batchDepth: 19,\n utilizationRate: '1.51%'\n }, {\n theoreticalVolume: '4.29 GB',\n effectiveVolume: '204.14 MB',\n batchDepth: 20,\n utilizationRate: '4.64%'\n }, {\n theoreticalVolume: '8.59 GB',\n effectiveVolume: '771.13 MB',\n batchDepth: 21,\n utilizationRate: '8.75%'\n }, {\n theoreticalVolume: '17.18 GB',\n effectiveVolume: '2.29 GB',\n batchDepth: 22,\n utilizationRate: '13.34%'\n }, {\n theoreticalVolume: '34.36 GB',\n effectiveVolume: '5.92 GB',\n batchDepth: 23,\n utilizationRate: '17.22%'\n }, {\n theoreticalVolume: '68.72 GB',\n effectiveVolume: '13.97 GB',\n batchDepth: 24,\n utilizationRate: '20.33%'\n }, {\n theoreticalVolume: '137.44 GB',\n effectiveVolume: '31.32 GB',\n batchDepth: 25,\n utilizationRate: '22.79%'\n }, {\n theoreticalVolume: '274.88 GB',\n effectiveVolume: '67.68 GB',\n batchDepth: 26,\n utilizationRate: '24.62%'\n }, {\n theoreticalVolume: '549.76 GB',\n effectiveVolume: '141.51 GB',\n batchDepth: 27,\n utilizationRate: '25.74%'\n }, {\n theoreticalVolume: '1.10 TB',\n effectiveVolume: '294.99 GB',\n batchDepth: 28,\n utilizationRate: '26.23%'\n }, {\n theoreticalVolume: '2.20 TB',\n effectiveVolume: '606.90 GB',\n batchDepth: 29,\n utilizationRate: '27.56%'\n }, {\n theoreticalVolume: '4.40 TB',\n effectiveVolume: '1.24 TB',\n batchDepth: 30,\n utilizationRate: '28.15%'\n }, {\n theoreticalVolume: '8.80 TB',\n effectiveVolume: '2.51 TB',\n batchDepth: 31,\n utilizationRate: '28.54%'\n }, {\n theoreticalVolume: '17.59 TB',\n effectiveVolume: '5.07 TB',\n batchDepth: 32,\n utilizationRate: '28.82%'\n }, {\n theoreticalVolume: '35.18 TB',\n effectiveVolume: '10.20 TB',\n batchDepth: 33,\n utilizationRate: '28.99%'\n }, {\n theoreticalVolume: '70.37 TB',\n effectiveVolume: '20.50 TB',\n batchDepth: 34,\n utilizationRate: '29.13%'\n }, {\n theoreticalVolume: '140.74 TB',\n effectiveVolume: '41.13 TB',\n batchDepth: 35,\n utilizationRate: '29.22%'\n }, {\n theoreticalVolume: '281.47 TB',\n effectiveVolume: '82.45 TB',\n batchDepth: 36,\n utilizationRate: '29.29%'\n }, {\n theoreticalVolume: '562.95 TB',\n effectiveVolume: '165.17 TB',\n batchDepth: 37,\n utilizationRate: '29.34%'\n }, {\n theoreticalVolume: '1.13 PB',\n effectiveVolume: '330.72 TB',\n batchDepth: 38,\n utilizationRate: '29.37%'\n }, {\n theoreticalVolume: '2.25 PB',\n effectiveVolume: '661.97 TB',\n batchDepth: 39,\n utilizationRate: '29.39%'\n }, {\n theoreticalVolume: '4.50 PB',\n effectiveVolume: '1.32 PB',\n batchDepth: 40,\n utilizationRate: '29.41%'\n }, {\n theoreticalVolume: '9.01 PB',\n effectiveVolume: '2.65 PB',\n batchDepth: 41,\n utilizationRate: '29.43%'\n }]\n },\n ENCRYPTION_ON: {\n [RedundancyLevel.OFF]: [{\n theoreticalVolume: '536.87 MB',\n effectiveVolume: '44.35 kB',\n batchDepth: 17,\n utilizationRate: '0.01%'\n }, {\n theoreticalVolume: '1.07 GB',\n effectiveVolume: '6.61 MB',\n batchDepth: 18,\n utilizationRate: '0.60%'\n }, {\n theoreticalVolume: '2.15 GB',\n effectiveVolume: '111.18 MB',\n batchDepth: 19,\n utilizationRate: '5.05%'\n }, {\n theoreticalVolume: '4.29 GB',\n effectiveVolume: '682.21 MB',\n batchDepth: 20,\n utilizationRate: '15.52%'\n }, {\n theoreticalVolume: '8.59 GB',\n effectiveVolume: '2.58 GB',\n batchDepth: 21,\n utilizationRate: '30.04%'\n }, {\n theoreticalVolume: '17.18 GB',\n effectiveVolume: '7.67 GB',\n batchDepth: 22,\n utilizationRate: '44.62%'\n }, {\n theoreticalVolume: '34.36 GB',\n effectiveVolume: '19.78 GB',\n batchDepth: 23,\n utilizationRate: '57.56%'\n }, {\n theoreticalVolume: '68.72 GB',\n effectiveVolume: '46.69 GB',\n batchDepth: 24,\n utilizationRate: '67.93%'\n }, {\n theoreticalVolume: '137.44 GB',\n effectiveVolume: '104.68 GB',\n batchDepth: 25,\n utilizationRate: '76.16%'\n }, {\n theoreticalVolume: '274.88 GB',\n effectiveVolume: '226.19 GB',\n batchDepth: 26,\n utilizationRate: '82.29%'\n }, {\n theoreticalVolume: '549.76 GB',\n effectiveVolume: '472.93 GB',\n batchDepth: 27,\n utilizationRate: '86.02%'\n }, {\n theoreticalVolume: '1.10 TB',\n effectiveVolume: '985.83 GB',\n batchDepth: 28,\n utilizationRate: '87.66%'\n }, {\n theoreticalVolume: '2.20 TB',\n effectiveVolume: '2.03 TB',\n batchDepth: 29,\n utilizationRate: '92.25%'\n }, {\n theoreticalVolume: '4.40 TB',\n effectiveVolume: '4.14 TB',\n batchDepth: 30,\n utilizationRate: '94.21%'\n }, {\n theoreticalVolume: '8.80 TB',\n effectiveVolume: '8.39 TB',\n batchDepth: 31,\n utilizationRate: '95.37%'\n }, {\n theoreticalVolume: '17.59 TB',\n effectiveVolume: '16.93 TB',\n batchDepth: 32,\n utilizationRate: '96.22%'\n }, {\n theoreticalVolume: '35.18 TB',\n effectiveVolume: '34.09 TB',\n batchDepth: 33,\n utilizationRate: '96.88%'\n }, {\n theoreticalVolume: '70.37 TB',\n effectiveVolume: '68.50 TB',\n batchDepth: 34,\n utilizationRate: '97.34%'\n }, {\n theoreticalVolume: '140.74 TB',\n effectiveVolume: '137.45 TB',\n batchDepth: 35,\n utilizationRate: '97.67%'\n }, {\n theoreticalVolume: '281.47 TB',\n effectiveVolume: '275.53 TB',\n batchDepth: 36,\n utilizationRate: '97.89%'\n }, {\n theoreticalVolume: '562.95 TB',\n effectiveVolume: '551.97 TB',\n batchDepth: 37,\n utilizationRate: '98.05%'\n }, {\n theoreticalVolume: '1.13 PB',\n effectiveVolume: '1.11 PB',\n batchDepth: 38,\n utilizationRate: '98.13%'\n }, {\n theoreticalVolume: '2.25 PB',\n effectiveVolume: '2.21 PB',\n batchDepth: 39,\n utilizationRate: '98.18%'\n }, {\n theoreticalVolume: '4.50 PB',\n effectiveVolume: '4.43 PB',\n batchDepth: 40,\n utilizationRate: '98.36%'\n }, {\n theoreticalVolume: '9.01 PB',\n effectiveVolume: '8.86 PB',\n batchDepth: 41,\n utilizationRate: '98.37%'\n }],\n [RedundancyLevel.MEDIUM]: [{\n theoreticalVolume: '536.87 MB',\n effectiveVolume: '40.89 kB',\n batchDepth: 17,\n utilizationRate: '0.01%'\n }, {\n theoreticalVolume: '1.07 GB',\n effectiveVolume: '6.09 MB',\n batchDepth: 18,\n utilizationRate: '0.56%'\n }, {\n theoreticalVolume: '2.15 GB',\n effectiveVolume: '102.49 MB',\n batchDepth: 19,\n utilizationRate: '4.65%'\n }, {\n theoreticalVolume: '4.29 GB',\n effectiveVolume: '628.91 MB',\n batchDepth: 20,\n utilizationRate: '14.30%'\n }, {\n theoreticalVolume: '8.59 GB',\n effectiveVolume: '2.38 GB',\n batchDepth: 21,\n utilizationRate: '27.68%'\n }, {\n theoreticalVolume: '17.18 GB',\n effectiveVolume: '7.07 GB',\n batchDepth: 22,\n utilizationRate: '41.15%'\n }, {\n theoreticalVolume: '34.36 GB',\n effectiveVolume: '18.24 GB',\n batchDepth: 23,\n utilizationRate: '53.09%'\n }, {\n theoreticalVolume: '68.72 GB',\n effectiveVolume: '43.04 GB',\n batchDepth: 24,\n utilizationRate: '62.63%'\n }, {\n theoreticalVolume: '137.44 GB',\n effectiveVolume: '96.50 GB',\n batchDepth: 25,\n utilizationRate: '70.21%'\n }, {\n theoreticalVolume: '274.88 GB',\n effectiveVolume: '208.52 GB',\n batchDepth: 26,\n utilizationRate: '75.86%'\n }, {\n theoreticalVolume: '549.76 GB',\n effectiveVolume: '435.98 GB',\n batchDepth: 27,\n utilizationRate: '79.30%'\n }, {\n theoreticalVolume: '1.10 TB',\n effectiveVolume: '908.81 GB',\n batchDepth: 28,\n utilizationRate: '80.82%'\n }, {\n theoreticalVolume: '2.20 TB',\n effectiveVolume: '1.87 TB',\n batchDepth: 29,\n utilizationRate: '84.98%'\n }, {\n theoreticalVolume: '4.40 TB',\n effectiveVolume: '3.81 TB',\n batchDepth: 30,\n utilizationRate: '86.67%'\n }, {\n theoreticalVolume: '8.80 TB',\n effectiveVolume: '7.73 TB',\n batchDepth: 31,\n utilizationRate: '87.84%'\n }, {\n theoreticalVolume: '17.59 TB',\n effectiveVolume: '15.61 TB',\n batchDepth: 32,\n utilizationRate: '88.74%'\n }, {\n theoreticalVolume: '35.18 TB',\n effectiveVolume: '31.43 TB',\n batchDepth: 33,\n utilizationRate: '89.34%'\n }, {\n theoreticalVolume: '70.37 TB',\n effectiveVolume: '63.15 TB',\n batchDepth: 34,\n utilizationRate: '89.74%'\n }, {\n theoreticalVolume: '140.74 TB',\n effectiveVolume: '126.71 TB',\n batchDepth: 35,\n utilizationRate: '90.03%'\n }, {\n theoreticalVolume: '281.47 TB',\n effectiveVolume: '254.01 TB',\n batchDepth: 36,\n utilizationRate: '90.24%'\n }, {\n theoreticalVolume: '562.95 TB',\n effectiveVolume: '508.85 TB',\n batchDepth: 37,\n utilizationRate: '90.39%'\n }, {\n theoreticalVolume: '1.13 PB',\n effectiveVolume: '1.02 PB',\n batchDepth: 38,\n utilizationRate: '90.47%'\n }, {\n theoreticalVolume: '2.25 PB',\n effectiveVolume: '2.04 PB',\n batchDepth: 39,\n utilizationRate: '90.51%'\n }, {\n theoreticalVolume: '4.50 PB',\n effectiveVolume: '4.08 PB',\n batchDepth: 40,\n utilizationRate: '90.64%'\n }, {\n theoreticalVolume: '9.01 PB',\n effectiveVolume: '8.17 PB',\n batchDepth: 41,\n utilizationRate: '90.65%'\n }],\n [RedundancyLevel.STRONG]: [{\n theoreticalVolume: '536.87 MB',\n effectiveVolume: '36.73 kB',\n batchDepth: 17,\n utilizationRate: '0.01%'\n }, {\n theoreticalVolume: '1.07 GB',\n effectiveVolume: '5.47 MB',\n batchDepth: 18,\n utilizationRate: '0.50%'\n }, {\n theoreticalVolume: '2.15 GB',\n effectiveVolume: '92.07 MB',\n batchDepth: 19,\n utilizationRate: '4.18%'\n }, {\n theoreticalVolume: '4.29 GB',\n effectiveVolume: '564.95 MB',\n batchDepth: 20,\n utilizationRate: '12.85%'\n }, {\n theoreticalVolume: '8.59 GB',\n effectiveVolume: '2.13 GB',\n batchDepth: 21,\n utilizationRate: '24.86%'\n }, {\n theoreticalVolume: '17.18 GB',\n effectiveVolume: '6.35 GB',\n batchDepth: 22,\n utilizationRate: '36.97%'\n }, {\n theoreticalVolume: '34.36 GB',\n effectiveVolume: '16.38 GB',\n batchDepth: 23,\n utilizationRate: '47.67%'\n }, {\n theoreticalVolume: '68.72 GB',\n effectiveVolume: '38.66 GB',\n batchDepth: 24,\n utilizationRate: '56.26%'\n }, {\n theoreticalVolume: '137.44 GB',\n effectiveVolume: '86.69 GB',\n batchDepth: 25,\n utilizationRate: '63.07%'\n }, {\n theoreticalVolume: '274.88 GB',\n effectiveVolume: '187.31 GB',\n batchDepth: 26,\n utilizationRate: '68.14%'\n }, {\n theoreticalVolume: '549.76 GB',\n effectiveVolume: '391.64 GB',\n batchDepth: 27,\n utilizationRate: '71.24%'\n }, {\n theoreticalVolume: '1.10 TB',\n effectiveVolume: '816.39 GB',\n batchDepth: 28,\n utilizationRate: '72.59%'\n }, {\n theoreticalVolume: '2.20 TB',\n effectiveVolume: '1.68 TB',\n batchDepth: 29,\n utilizationRate: '76.34%'\n }, {\n theoreticalVolume: '4.40 TB',\n effectiveVolume: '3.43 TB',\n batchDepth: 30,\n utilizationRate: '77.89%'\n }, {\n theoreticalVolume: '8.80 TB',\n effectiveVolume: '6.94 TB',\n batchDepth: 31,\n utilizationRate: '78.86%'\n }, {\n theoreticalVolume: '17.59 TB',\n effectiveVolume: '14.02 TB',\n batchDepth: 32,\n utilizationRate: '79.71%'\n }, {\n theoreticalVolume: '35.18 TB',\n effectiveVolume: '28.23 TB',\n batchDepth: 33,\n utilizationRate: '80.23%'\n }, {\n theoreticalVolume: '70.37 TB',\n effectiveVolume: '56.72 TB',\n batchDepth: 34,\n utilizationRate: '80.60%'\n }, {\n theoreticalVolume: '140.74 TB',\n effectiveVolume: '113.82 TB',\n batchDepth: 35,\n utilizationRate: '80.88%'\n }, {\n theoreticalVolume: '281.47 TB',\n effectiveVolume: '228.18 TB',\n batchDepth: 36,\n utilizationRate: '81.06%'\n }, {\n theoreticalVolume: '562.95 TB',\n effectiveVolume: '457.10 TB',\n batchDepth: 37,\n utilizationRate: '81.20%'\n }, {\n theoreticalVolume: '1.13 PB',\n effectiveVolume: '915.26 TB',\n batchDepth: 38,\n utilizationRate: '81.26%'\n }, {\n theoreticalVolume: '2.25 PB',\n effectiveVolume: '1.83 PB',\n batchDepth: 39,\n utilizationRate: '81.30%'\n }, {\n theoreticalVolume: '4.50 PB',\n effectiveVolume: '3.67 PB',\n batchDepth: 40,\n utilizationRate: '81.43%'\n }, {\n theoreticalVolume: '9.01 PB',\n effectiveVolume: '7.34 PB',\n batchDepth: 41,\n utilizationRate: '81.45%'\n }],\n [RedundancyLevel.INSANE]: [{\n theoreticalVolume: '536.87 MB',\n effectiveVolume: '33.26 kB',\n batchDepth: 17,\n utilizationRate: '0.01%'\n }, {\n theoreticalVolume: '1.07 GB',\n effectiveVolume: '4.96 MB',\n batchDepth: 18,\n utilizationRate: '0.45%'\n }, {\n theoreticalVolume: '2.15 GB',\n effectiveVolume: '83.38 MB',\n batchDepth: 19,\n utilizationRate: '3.79%'\n }, {\n theoreticalVolume: '4.29 GB',\n effectiveVolume: '511.65 MB',\n batchDepth: 20,\n utilizationRate: '11.64%'\n }, {\n theoreticalVolume: '8.59 GB',\n effectiveVolume: '1.93 GB',\n batchDepth: 21,\n utilizationRate: '22.52%'\n }, {\n theoreticalVolume: '17.18 GB',\n effectiveVolume: '5.75 GB',\n batchDepth: 22,\n utilizationRate: '33.50%'\n }, {\n theoreticalVolume: '34.36 GB',\n effectiveVolume: '14.84 GB',\n batchDepth: 23,\n utilizationRate: '43.19%'\n }, {\n theoreticalVolume: '68.72 GB',\n effectiveVolume: '35.02 GB',\n batchDepth: 24,\n utilizationRate: '50.96%'\n }, {\n theoreticalVolume: '137.44 GB',\n effectiveVolume: '78.51 GB',\n batchDepth: 25,\n utilizationRate: '57.12%'\n }, {\n theoreticalVolume: '274.88 GB',\n effectiveVolume: '169.64 GB',\n batchDepth: 26,\n utilizationRate: '61.71%'\n }, {\n theoreticalVolume: '549.76 GB',\n effectiveVolume: '354.69 GB',\n batchDepth: 27,\n utilizationRate: '64.52%'\n }, {\n theoreticalVolume: '1.10 TB',\n effectiveVolume: '739.37 GB',\n batchDepth: 28,\n utilizationRate: '65.74%'\n }, {\n theoreticalVolume: '2.20 TB',\n effectiveVolume: '1.52 TB',\n batchDepth: 29,\n utilizationRate: '69.15%'\n }, {\n theoreticalVolume: '4.40 TB',\n effectiveVolume: '3.10 TB',\n batchDepth: 30,\n utilizationRate: '70.56%'\n }, {\n theoreticalVolume: '8.80 TB',\n effectiveVolume: '6.29 TB',\n batchDepth: 31,\n utilizationRate: '71.48%'\n }, {\n theoreticalVolume: '17.59 TB',\n effectiveVolume: '12.70 TB',\n batchDepth: 32,\n utilizationRate: '72.18%'\n }, {\n theoreticalVolume: '35.18 TB',\n effectiveVolume: '25.57 TB',\n batchDepth: 33,\n utilizationRate: '72.67%'\n }, {\n theoreticalVolume: '70.37 TB',\n effectiveVolume: '51.37 TB',\n batchDepth: 34,\n utilizationRate: '73.00%'\n }, {\n theoreticalVolume: '140.74 TB',\n effectiveVolume: '103.08 TB',\n batchDepth: 35,\n utilizationRate: '73.24%'\n }, {\n theoreticalVolume: '281.47 TB',\n effectiveVolume: '206.65 TB',\n batchDepth: 36,\n utilizationRate: '73.42%'\n }, {\n theoreticalVolume: '562.95 TB',\n effectiveVolume: '413.98 TB',\n batchDepth: 37,\n utilizationRate: '73.54%'\n }, {\n theoreticalVolume: '1.13 PB',\n effectiveVolume: '828.91 TB',\n batchDepth: 38,\n utilizationRate: '73.59%'\n }, {\n theoreticalVolume: '2.25 PB',\n effectiveVolume: '1.66 PB',\n batchDepth: 39,\n utilizationRate: '73.62%'\n }, {\n theoreticalVolume: '4.50 PB',\n effectiveVolume: '3.32 PB',\n batchDepth: 40,\n utilizationRate: '73.72%'\n }, {\n theoreticalVolume: '9.01 PB',\n effectiveVolume: '6.64 PB',\n batchDepth: 41,\n utilizationRate: '73.74%'\n }],\n [RedundancyLevel.PARANOID]: [{\n theoreticalVolume: '536.87 MB',\n effectiveVolume: '13.17 kB',\n batchDepth: 17,\n utilizationRate: '0.00%'\n }, {\n theoreticalVolume: '1.07 GB',\n effectiveVolume: '1.96 MB',\n batchDepth: 18,\n utilizationRate: '0.18%'\n }, {\n theoreticalVolume: '2.15 GB',\n effectiveVolume: '33.01 MB',\n batchDepth: 19,\n utilizationRate: '1.50%'\n }, {\n theoreticalVolume: '4.29 GB',\n effectiveVolume: '202.53 MB',\n batchDepth: 20,\n utilizationRate: '4.61%'\n }, {\n theoreticalVolume: '8.59 GB',\n effectiveVolume: '765.05 MB',\n batchDepth: 21,\n utilizationRate: '8.68%'\n }, {\n theoreticalVolume: '17.18 GB',\n effectiveVolume: '2.28 GB',\n batchDepth: 22,\n utilizationRate: '13.27%'\n }, {\n theoreticalVolume: '34.36 GB',\n effectiveVolume: '5.87 GB',\n batchDepth: 23,\n utilizationRate: '17.08%'\n }, {\n theoreticalVolume: '68.72 GB',\n effectiveVolume: '13.86 GB',\n batchDepth: 24,\n utilizationRate: '20.17%'\n }, {\n theoreticalVolume: '137.44 GB',\n effectiveVolume: '31.08 GB',\n batchDepth: 25,\n utilizationRate: '22.61%'\n }, {\n theoreticalVolume: '274.88 GB',\n effectiveVolume: '67.15 GB',\n batchDepth: 26,\n utilizationRate: '24.43%'\n }, {\n theoreticalVolume: '549.76 GB',\n effectiveVolume: '140.40 GB',\n batchDepth: 27,\n utilizationRate: '25.54%'\n }, {\n theoreticalVolume: '1.10 TB',\n effectiveVolume: '292.67 GB',\n batchDepth: 28,\n utilizationRate: '26.03%'\n }, {\n theoreticalVolume: '2.20 TB',\n effectiveVolume: '602.12 GB',\n batchDepth: 29,\n utilizationRate: '27.35%'\n }, {\n theoreticalVolume: '4.40 TB',\n effectiveVolume: '1.23 TB',\n batchDepth: 30,\n utilizationRate: '27.94%'\n }, {\n theoreticalVolume: '8.80 TB',\n effectiveVolume: '2.49 TB',\n batchDepth: 31,\n utilizationRate: '28.32%'\n }, {\n theoreticalVolume: '17.59 TB',\n effectiveVolume: '5.03 TB',\n batchDepth: 32,\n utilizationRate: '28.60%'\n }, {\n theoreticalVolume: '35.18 TB',\n effectiveVolume: '10.12 TB',\n batchDepth: 33,\n utilizationRate: '28.77%'\n }, {\n theoreticalVolume: '70.37 TB',\n effectiveVolume: '20.34 TB',\n batchDepth: 34,\n utilizationRate: '28.91%'\n }, {\n theoreticalVolume: '140.74 TB',\n effectiveVolume: '40.80 TB',\n batchDepth: 35,\n utilizationRate: '29.00%'\n }, {\n theoreticalVolume: '281.47 TB',\n effectiveVolume: '81.80 TB',\n batchDepth: 36,\n utilizationRate: '29.06%'\n }, {\n theoreticalVolume: '562.95 TB',\n effectiveVolume: '163.87 TB',\n batchDepth: 37,\n utilizationRate: '29.11%'\n }, {\n theoreticalVolume: '1.13 PB',\n effectiveVolume: '328.11 TB',\n batchDepth: 38,\n utilizationRate: '29.14%'\n }, {\n theoreticalVolume: '2.25 PB',\n effectiveVolume: '656.76 TB',\n batchDepth: 39,\n utilizationRate: '29.16%'\n }, {\n theoreticalVolume: '4.50 PB',\n effectiveVolume: '1.31 PB',\n batchDepth: 40,\n utilizationRate: '29.18%'\n }, {\n theoreticalVolume: '9.01 PB',\n effectiveVolume: '2.63 PB',\n batchDepth: 41,\n utilizationRate: '29.19%'\n }]\n }\n};","import { z } from 'zod';\nexport const HexStringSchema = z.string().regex(/^(?:0x)?[0-9a-fA-F]*$/i, 'expected hex string').refine(s => s.replace(/^0x/i, '').length % 2 === 0, 'expected even-length hex string');","import { PublicKey, Reference } from '@ethersphere/core-sdk';\nimport { z } from 'zod';\nimport { TAGS_LIMIT_MAX, TAGS_LIMIT_MIN } from \"../types/index.js\";\nexport { HexStringSchema } from \"./hex-schema.js\";\nconst fnField = z.any().refine(v => z.function().safeParse(v).success, 'expected a function');\nconst integerStringField = z.any().transform(v => {\n if (z.bigint().safeParse(v).success) v = String(v);\n return z.string().regex(/^-?\\d+$/, 'expected integer string').parse(v);\n});\nconst nonNegativeIntegerStringField = z.any().transform(v => {\n if (z.bigint().safeParse(v).success) v = String(v);\n return z.string().regex(/^\\d+$/, 'expected non-negative integer string').parse(v);\n});\nexport const BeeRequestOptionsSchema = z.object({\n baseURL: z.string().optional(),\n timeout: z.number().int().min(0).optional(),\n headers: z.record(z.string(), z.string()).optional(),\n onRequest: fnField.optional(),\n httpAgent: z.unknown().optional(),\n httpsAgent: z.unknown().optional(),\n endlesslyRetry: z.boolean().optional(),\n signal: z.any().optional()\n});\nexport const DownloadOptionsSchema = z.object({\n redundancyStrategy: z.number().int().optional(),\n fallback: z.boolean().optional(),\n timeoutMs: z.number().int().min(0).optional(),\n actPublisher: z.optional(z.any().transform(v => new PublicKey(v))),\n actHistoryAddress: z.optional(z.any().transform(v => new Reference(v))),\n actTimestamp: z.coerce.number().optional()\n});\nexport const UploadOptionsSchema = z.object({\n act: z.boolean().optional(),\n actHistoryAddress: z.optional(z.any().transform(v => new Reference(v))),\n deferred: z.boolean().optional(),\n encrypt: z.boolean().optional(),\n pin: z.boolean().optional(),\n tag: z.number().int().min(0).optional()\n});\nexport const RedundantUploadOptionsSchema = UploadOptionsSchema.extend({\n redundancyLevel: z.number().int().min(0).optional()\n});\nexport const FileUploadOptionsSchema = UploadOptionsSchema.extend({\n size: z.number().int().min(0).optional(),\n contentType: z.string().optional(),\n redundancyLevel: z.number().int().min(0).optional()\n});\nexport const CollectionUploadOptionsSchema = UploadOptionsSchema.extend({\n errorDocument: z.string().optional(),\n indexDocument: z.string().optional(),\n redundancyLevel: z.number().int().min(0).optional()\n});\nexport const TagInputSchema = z.object({\n uid: z.number().int()\n});\nexport const TagUidSchema = z.coerce.number().min(0);\nexport const PssMessageHandlerSchema = z.object({\n onMessage: fnField,\n onError: fnField,\n onClose: fnField\n});\nexport const GsocMessageHandlerSchema = z.object({\n onMessage: fnField,\n onError: fnField,\n onClose: fnField\n});\nexport const PostageBatchOptionsSchema = z.object({\n gasPrice: integerStringField.optional(),\n immutableFlag: z.boolean().optional(),\n label: z.string().optional(),\n waitForUsable: z.boolean().optional(),\n waitForUsableTimeout: z.number().int().min(0).optional()\n});\nexport const TransactionOptionsSchema = z.object({\n gasLimit: nonNegativeIntegerStringField.optional(),\n gasPrice: nonNegativeIntegerStringField.optional()\n});\nexport const AllTagsOptionsSchema = z.object({\n limit: z.number().int().min(TAGS_LIMIT_MIN).max(TAGS_LIMIT_MAX).optional(),\n offset: z.number().int().min(0).optional()\n});","import * as stream from 'stream';\nimport { isFile } from \"./file.js\";\nimport { TagInputSchema, TagUidSchema } from \"./schema.js\";\nexport function isReadable(value) {\n return typeof stream.Readable !== 'undefined' && value instanceof stream.Readable;\n}\nexport function asNumberString(value, options) {\n if (typeof value === 'bigint') {\n value = value.toString();\n }\n if (typeof value !== 'string' || !/^-?\\d+$/.test(value)) {\n throw new TypeError(`${options?.name ?? 'value'} is not a valid integer string, got: ${value}`);\n }\n if (options?.min !== undefined && BigInt(value) < options.min) {\n throw new RangeError(`${options?.name ?? 'value'} must be >= ${options.min}, got: ${value}`);\n }\n if (options?.max !== undefined && BigInt(value) > options.max) {\n throw new RangeError(`${options?.name ?? 'value'} must be <= ${options.max}, got: ${value}`);\n }\n return value;\n}\nexport function isTag(value) {\n return TagInputSchema.safeParse(value).success;\n}\n/**\n * Check whether the given parameter is valid data to upload\n * @param value\n * @throws TypeError if not valid\n */\nexport function assertData(value) {\n if (typeof value !== 'string' && !(value instanceof Uint8Array) && !(value instanceof Blob) && !isReadable(value)) {\n throw new TypeError('Data must be either string, Uint8Array, Blob or Readable!');\n }\n}\n/**\n * Check whether the given parameter is a correct file representation to file upload.\n * @param value\n * @throws TypeError if not valid\n */\nexport function assertFileData(value) {\n if (typeof value !== 'string' && !(value instanceof Uint8Array) && !isFile(value) && !isReadable(value)) {\n throw new TypeError('Data must be either string, Readable, Uint8Array or File!');\n }\n}\n/**\n * Utility functions that return Tag UID\n * @param tagUid\n */\nexport function makeTagUid(tagUid) {\n if (tagUid === undefined || tagUid === null) {\n throw new TypeError(`Expected number | Tag | string from tagUid, got: ${tagUid}`);\n }\n if (isTag(tagUid)) {\n return tagUid.uid;\n } else if (typeof tagUid === 'number' || typeof tagUid === 'string') {\n return TagUidSchema.parse(tagUid);\n }\n throw new TypeError(`Expected number | Tag | string from tagUid, got: ${tagUid}`);\n}","// TODO: Remove this file after the issue is fixed\nexport function normalizeBatchTTL(batchTTL) {\n if (!Number.isInteger(batchTTL)) {\n return 1;\n }\n if (batchTTL < 1) {\n return 1;\n }\n // Cap `batchTTL` (represents seconds) to 100 years.\n // We can assume `storagePrice` is invalid (e.g. 1).\n // This is needed to prevent Date objects breaking.\n if (batchTTL > 3155695200) {\n return 3155695200;\n }\n return batchTTL;\n}\nexport function normalizeCurrentPrice(currentPrice) {\n if (!Number.isInteger(currentPrice)) {\n return 24000;\n }\n if (currentPrice < 24000) {\n return 24000;\n }\n return currentPrice;\n}","import { z } from 'zod';\nimport { BZZ } from \"../../utils/tokens.js\";\nimport { asNumberString } from \"../../utils/type.js\";\nconst PeerBalanceSchema = z.object({\n peer: z.string(),\n balance: z.string().transform(s => BZZ.fromPLUR(asNumberString(s, {\n name: 'balance'\n })))\n});\nexport const GetAllBalancesResponse = z.object({\n balances: z.array(PeerBalanceSchema)\n});\nexport const GetPeerBalanceResponse = PeerBalanceSchema;","import { EthAddress, TransactionId } from '@ethersphere/core-sdk';\nimport { z } from 'zod';\nimport { BZZ } from \"../../utils/tokens.js\";\nimport { asNumberString } from \"../../utils/type.js\";\nconst ChequeSchema = z.object({\n beneficiary: z.string().transform(s => new EthAddress(s)),\n chequebook: z.string().transform(s => new EthAddress(s)),\n payout: z.string().transform(s => BZZ.fromPLUR(asNumberString(s, {\n name: 'payout'\n })))\n});\nconst CashoutResultSchema = z.object({\n recipient: z.string(),\n lastPayout: z.string().transform(s => BZZ.fromPLUR(asNumberString(s, {\n name: 'lastPayout'\n }))),\n bounced: z.boolean()\n});\nexport const GetChequebookAddressResponse = z.object({\n chequebookAddress: z.string().transform(s => new EthAddress(s))\n});\nexport const GetChequebookBalanceResponse = z.object({\n availableBalance: z.string().transform(s => BZZ.fromPLUR(asNumberString(s, {\n name: 'availableBalance'\n }))),\n totalBalance: z.string().transform(s => BZZ.fromPLUR(asNumberString(s, {\n name: 'totalBalance'\n })))\n});\nexport const GetLastCashoutActionResponse = z.object({\n peer: z.string(),\n uncashedAmount: z.string().transform(s => BZZ.fromPLUR(asNumberString(s, {\n name: 'uncashedAmount'\n }))),\n transactionHash: z.string().nullish().transform(v => v ?? null),\n lastCashedCheque: ChequeSchema.nullish().transform(v => v ?? null),\n result: CashoutResultSchema.nullish().transform(v => v ?? null)\n});\nexport const GetLastChequesForPeerResponse = z.object({\n peer: z.string(),\n lastreceived: ChequeSchema.nullish().transform(v => v ?? null),\n lastsent: ChequeSchema.nullish().transform(v => v ?? null)\n});\nexport const GetLastChequesResponse = z.object({\n lastcheques: z.array(z.object({\n peer: z.string(),\n lastreceived: ChequeSchema.nullish().transform(v => v ?? null),\n lastsent: ChequeSchema.nullish().transform(v => v ?? null)\n }))\n});\nexport const TransactionHashResponse = z.object({\n transactionHash: z.string().transform(s => new TransactionId(s))\n});","import { EthAddress, PeerAddress, PublicKey } from '@ethersphere/core-sdk';\nimport { z } from 'zod';\nconst PeerSchema = z.object({\n address: z.string(),\n fullNode: z.boolean()\n});\nconst BinSchema = z.object({\n population: z.number(),\n connected: z.number(),\n connectedPeers: z.array(z.object({\n address: z.string()\n })).nullish().transform(v => v ?? []),\n disconnectedPeers: z.array(z.object({\n address: z.string()\n })).nullish().transform(v => v ?? [])\n});\nconst BinRecord = z.record(z.string(), BinSchema);\nexport const GetNodeAddressesResponse = z.object({\n overlay: z.string().transform(s => new PeerAddress(s)),\n underlay: z.array(z.string()),\n ethereum: z.string().transform(s => new EthAddress(s)),\n publicKey: z.string().transform(s => new PublicKey(s)),\n pssPublicKey: z.string().transform(s => new PublicKey(s))\n});\nexport const GetPeersResponse = z.object({\n peers: z.array(PeerSchema)\n});\nexport const GetBlocklistResponse = z.object({\n peers: z.array(PeerSchema)\n});\nexport const GetTopologyResponse = z.object({\n baseAddr: z.string(),\n population: z.number(),\n connected: z.number(),\n timestamp: z.string(),\n nnLowWatermark: z.number(),\n depth: z.number(),\n reachability: z.string(),\n networkAvailability: z.string(),\n bins: BinRecord\n});","import { z } from 'zod';\nimport { toBeeMode } from \"../debug.js\";\nexport const GetDebugStatusResponse = z.object({\n overlay: z.string(),\n proximity: z.number(),\n beeMode: z.string().transform(toBeeMode),\n reserveSize: z.number(),\n reserveSizeWithinRadius: z.number(),\n pullsyncRate: z.number(),\n storageRadius: z.number(),\n connectedPeers: z.number(),\n neighborhoodSize: z.number(),\n batchCommitment: z.number(),\n isReachable: z.boolean(),\n lastSyncedBlock: z.number(),\n committedDepth: z.number(),\n isWarmingUp: z.boolean()\n});\nexport const GetHealthResponse = z.object({\n apiVersion: z.string(),\n version: z.string(),\n status: z.literal('ok')\n});\nexport const GetReadinessResponse = z.object({\n apiVersion: z.string(),\n version: z.string(),\n status: z.enum(['ready', 'notReady'])\n});\nexport const GetNodeInfoResponse = z.object({\n beeMode: z.string().transform(toBeeMode),\n chequebookEnabled: z.boolean(),\n swapEnabled: z.boolean()\n});\nexport const IsGatewayResponse = z.object({\n gateway: z.boolean()\n});","import { z } from 'zod';\nexport const IsRetrievableResponse = z.object({\n isRetrievable: z.boolean()\n});","import { PublicKey, Reference } from '@ethersphere/core-sdk';\nimport { z } from 'zod';\nexport const GetGranteesBodyResponse = z.array(z.string().transform(s => new PublicKey(s)));\nexport const GranteesResultBodyResponse = z.object({\n ref: z.string().transform(s => new Reference(s)),\n historyref: z.string().transform(s => new Reference(s))\n});","// https://github.com/maxogden/websocket-stream/blob/48dc3ddf943e5ada668c31ccd94e9186f02fafbd/ws-fallback.js\n\nvar ws = null\n\nif (typeof WebSocket !== 'undefined') {\n ws = WebSocket\n} else if (typeof MozWebSocket !== 'undefined') {\n ws = MozWebSocket\n} else if (typeof global !== 'undefined') {\n ws = global.WebSocket || global.MozWebSocket\n} else if (typeof window !== 'undefined') {\n ws = window.WebSocket || window.MozWebSocket\n} else if (typeof self !== 'undefined') {\n ws = self.WebSocket || self.MozWebSocket\n}\n\nexport default ws\n","import { z } from 'zod';\nexport const GetAllPinsResponse = z.object({\n references: z.array(z.string()).nullable()\n});","import { z } from 'zod';\nimport { BZZ } from \"../../utils/tokens.js\";\nimport { asNumberString } from \"../../utils/type.js\";\nconst SettlementSchema = z.object({\n peer: z.string(),\n sent: z.string().transform(s => BZZ.fromPLUR(asNumberString(s, {\n name: 'sent'\n }))),\n received: z.string().transform(s => BZZ.fromPLUR(asNumberString(s, {\n name: 'received'\n })))\n});\nexport const GetSettlementsResponse = SettlementSchema;\nexport const GetAllSettlementsResponse = z.object({\n totalSent: z.string().transform(s => BZZ.fromPLUR(asNumberString(s, {\n name: 'totalSent'\n }))),\n totalReceived: z.string().transform(s => BZZ.fromPLUR(asNumberString(s, {\n name: 'totalReceived'\n }))),\n settlements: z.array(SettlementSchema)\n});","import { TransactionId } from '@ethersphere/core-sdk';\nimport { z } from 'zod';\nimport { BZZ, DAI } from \"../../utils/tokens.js\";\nimport { asNumberString } from \"../../utils/type.js\";\nexport const GetStakeResponse = z.object({\n stakedAmount: z.string().transform(s => BZZ.fromPLUR(asNumberString(s, {\n name: 'stakedAmount'\n })))\n});\nexport const GetWithdrawableStakeResponse = z.object({\n withdrawableAmount: z.string().transform(s => BZZ.fromPLUR(asNumberString(s, {\n name: 'withdrawableAmount'\n })))\n});\nexport const TxHashResponse = z.object({\n txHash: z.string().transform(s => new TransactionId(s))\n});\nexport const GetRedistributionStateResponse = z.object({\n minimumGasFunds: z.string().transform(s => DAI.fromWei(asNumberString(s, {\n name: 'minimumGasFunds'\n }))),\n hasSufficientFunds: z.boolean(),\n isFrozen: z.boolean(),\n isFullySynced: z.boolean(),\n phase: z.string(),\n round: z.number(),\n lastWonRound: z.number(),\n lastPlayedRound: z.number(),\n lastFrozenRound: z.number(),\n lastSelectedRound: z.number(),\n lastSampleDurationSeconds: z.number(),\n block: z.number(),\n reward: z.string().transform(s => BZZ.fromPLUR(asNumberString(s, {\n name: 'reward'\n }))),\n fees: z.string().transform(s => DAI.fromWei(asNumberString(s, {\n name: 'fees'\n }))),\n isHealthy: z.boolean()\n});","import { BatchId, EthAddress } from '@ethersphere/core-sdk';\nimport { z } from 'zod';\nimport { asNumberString } from \"../../utils/type.js\";\nexport const RawPostageBatchSchema = z.object({\n batchID: z.string(),\n utilization: z.number(),\n utilizationRatio: z.number().optional(),\n usable: z.boolean(),\n label: z.string(),\n depth: z.number(),\n amount: z.string(),\n bucketDepth: z.number(),\n blockNumber: z.number(),\n immutableFlag: z.boolean(),\n batchTTL: z.number()\n});\nexport const GetGlobalPostageBatchResponse = z.object({\n batchID: z.string().transform(s => new BatchId(s)),\n batchTTL: z.number(),\n bucketDepth: z.number(),\n depth: z.number(),\n immutable: z.boolean(),\n owner: z.string().transform(s => new EthAddress(s)),\n start: z.number(),\n value: z.string().transform(s => asNumberString(s, {\n name: 'value'\n }))\n});\nexport const GetGlobalPostageBatchesResponse = z.object({\n batches: z.array(GetGlobalPostageBatchResponse)\n});\nexport const GetAllPostageBatchesResponse = z.object({\n stamps: z.array(RawPostageBatchSchema)\n});\nexport const GetPostageBatchResponse = RawPostageBatchSchema;\nexport const GetPostageBatchBucketsResponse = z.object({\n depth: z.number(),\n bucketDepth: z.number(),\n bucketUpperBound: z.number(),\n buckets: z.array(z.object({\n bucketID: z.number(),\n collisions: z.number()\n }))\n});\nexport const BatchIdResponse = z.object({\n batchID: z.string().transform(s => new BatchId(s))\n});","'use strict'\n\nconst debug = (\n typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n : () => {}\n\nmodule.exports = debug\n","'use strict'\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n 'major',\n 'premajor',\n 'minor',\n 'preminor',\n 'patch',\n 'prepatch',\n 'prerelease',\n]\n\nmodule.exports = {\n MAX_LENGTH,\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_SAFE_INTEGER,\n RELEASE_TYPES,\n SEMVER_SPEC_VERSION,\n FLAG_INCLUDE_PRERELEASE: 0b001,\n FLAG_LOOSE: 0b010,\n}\n","'use strict'\n\nconst {\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst safeSrc = exports.safeSrc = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n ['\\\\s', 1],\n ['\\\\d', MAX_LENGTH],\n [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n for (const [token, max] of safeRegexReplacements) {\n value = value\n .split(`${token}*`).join(`${token}{0,${max}}`)\n .split(`${token}+`).join(`${token}{1,${max}}`)\n }\n return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n const safe = makeSafeRegex(value)\n const index = R++\n debug(name, index, value)\n t[name] = index\n src[index] = value\n safeSrc[index] = safe\n re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n// Non-numeric identifiers include numeric identifiers but can be longer.\n// Therefore non-numeric identifiers must go first.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifier, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:${src[t.PRERELEASE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:${src[t.PRERELEASELOOSE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCEPLAIN', `${'(^|[^\\\\d])' +\n '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`)\ncreateToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`)\ncreateToken('COERCEFULL', src[t.COERCEPLAIN] +\n `(?:${src[t.PRERELEASE]})?` +\n `(?:${src[t.BUILD]})?` +\n `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\ncreateToken('COERCERTLFULL', src[t.COERCEFULL], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAIN]})` +\n `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n","'use strict'\n\nconst debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\n\nconst isPrereleaseIdentifier = (prerelease, identifier) => {\n const identifiers = identifier.split('.')\n if (identifiers.length > prerelease.length) {\n return false\n }\n\n for (let i = 0; i < identifiers.length; i++) {\n if (compareIdentifiers(prerelease[i], identifiers[i]) !== 0) {\n return false\n }\n }\n\n return true\n}\n\nclass SemVer {\n constructor (version, options) {\n options = parseOptions(options)\n\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose &&\n version.includePrerelease === !!options.includePrerelease) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError(\n `version is longer than ${MAX_LENGTH} characters`\n )\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n // this isn't actually relevant for versions, but keep it so that we\n // don't run into trouble passing this.options around.\n this.includePrerelease = !!options.includePrerelease\n\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map((id) => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n }\n\n format () {\n this.version = `${this.major}.${this.minor}.${this.patch}`\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join('.')}`\n }\n return this.version\n }\n\n toString () {\n return this.version\n }\n\n compare (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n if (typeof other === 'string' && other === this.version) {\n return 0\n }\n other = new SemVer(other, this.options)\n }\n\n if (other.version === this.version) {\n return 0\n }\n\n return this.compareMain(other) || this.comparePre(other)\n }\n\n compareMain (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n if (this.major < other.major) {\n return -1\n }\n if (this.major > other.major) {\n return 1\n }\n if (this.minor < other.minor) {\n return -1\n }\n if (this.minor > other.minor) {\n return 1\n }\n if (this.patch < other.patch) {\n return -1\n }\n if (this.patch > other.patch) {\n return 1\n }\n return 0\n }\n\n comparePre (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n let i = 0\n do {\n const a = this.prerelease[i]\n const b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n compareBuild (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n let i = 0\n do {\n const a = this.build[i]\n const b = other.build[i]\n debug('build compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc (release, identifier, identifierBase) {\n if (release.startsWith('pre')) {\n if (!identifier && identifierBase === false) {\n throw new Error('invalid increment argument: identifier is empty')\n }\n // Avoid an invalid semver results\n if (identifier) {\n const match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE])\n if (!match || match[1] !== identifier) {\n throw new Error(`invalid identifier: ${identifier}`)\n }\n }\n }\n\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier, identifierBase)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier, identifierBase)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier, identifierBase)\n this.inc('pre', identifier, identifierBase)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier, identifierBase)\n }\n this.inc('pre', identifier, identifierBase)\n break\n case 'release':\n if (this.prerelease.length === 0) {\n throw new Error(`version ${this.raw} is not a prerelease`)\n }\n this.prerelease.length = 0\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (\n this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0\n ) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n case 'pre': {\n const base = Number(identifierBase) ? 1 : 0\n\n if (this.prerelease.length === 0) {\n this.prerelease = [base]\n } else {\n let i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n if (identifier === this.prerelease.join('.') && identifierBase === false) {\n throw new Error('invalid increment argument: identifier already exists')\n }\n this.prerelease.push(base)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n let prerelease = [identifier, base]\n if (identifierBase === false) {\n prerelease = [identifier]\n }\n if (isPrereleaseIdentifier(this.prerelease, identifier)) {\n const prereleaseBase = this.prerelease[identifier.split('.').length]\n if (isNaN(prereleaseBase)) {\n this.prerelease = prerelease\n }\n } else {\n this.prerelease = prerelease\n }\n }\n break\n }\n default:\n throw new Error(`invalid increment argument: ${release}`)\n }\n this.raw = this.format()\n if (this.build.length) {\n this.raw += `+${this.build.join('.')}`\n }\n return this\n }\n}\n\nmodule.exports = SemVer\n","'use strict'\n\n// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n if (!options) {\n return emptyOpts\n }\n\n if (typeof options !== 'object') {\n return looseOption\n }\n\n return options\n}\nmodule.exports = parseOptions\n","'use strict'\n\nconst numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n if (typeof a === 'number' && typeof b === 'number') {\n return a === b ? 0 : a < b ? -1 : 1\n }\n\n const anum = numeric.test(a)\n const bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n compareIdentifiers,\n rcompareIdentifiers,\n}\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n","// AUTO-GENERATED from package.json \"engines\" by scripts/generate-version.cjs — do not edit by hand.\n// Run `npm run generate:version` to regenerate.\n/** Exact supported Bee version, including the commit hash suffix. */\nexport const SUPPORTED_BEE_VERSION_EXACT = '2.8.1-7cf53193';\n/** Supported Bee version without the commit hash suffix. */\nexport const SUPPORTED_BEE_VERSION = SUPPORTED_BEE_VERSION_EXACT.split('-')[0];\n/** Supported Bee API version. */\nexport const SUPPORTED_API_VERSION = '8.1.0';","import { TransactionId } from '@ethersphere/core-sdk';\nimport { z } from 'zod';\nimport { BZZ, DAI } from \"../../utils/tokens.js\";\nimport { asNumberString } from \"../../utils/type.js\";\nimport { normalizeCurrentPrice } from \"../../utils/workaround.js\";\nexport const GetReserveStateResponse = z.object({\n commitment: z.number(),\n radius: z.number(),\n storageRadius: z.number(),\n reserveCapacityDoubling: z.number()\n});\nexport const GetChainStateResponse = z.object({\n block: z.number(),\n chainTip: z.number(),\n totalAmount: z.string().transform(s => asNumberString(s, {\n name: 'totalAmount'\n })),\n currentPrice: z.string().transform(Number).transform(s => normalizeCurrentPrice(s)),\n minimumValidityBlocks: z.number().optional()\n});\nexport const GetWalletBalanceResponse = z.object({\n bzzBalance: z.string().transform(s => BZZ.fromPLUR(asNumberString(s, {\n name: 'bzzBalance'\n }))),\n nativeTokenBalance: z.string().transform(s => DAI.fromWei(asNumberString(s, {\n name: 'nativeTokenBalance'\n }))),\n chainID: z.number(),\n chequebookContractAddress: z.string(),\n walletAddress: z.string()\n});\nexport const WithdrawResponse = z.object({\n transactionHash: z.string().transform(s => new TransactionId(s))\n});","import { z } from 'zod';\nexport const TagSchema = z.object({\n address: z.string().nullish().transform(v => v ?? ''),\n seen: z.number(),\n sent: z.number(),\n split: z.number(),\n startedAt: z.string(),\n stored: z.number(),\n synced: z.number(),\n uid: z.number()\n});\nexport const GetAllTagsResponse = z.object({\n tags: z.array(TagSchema)\n});","import { TransactionId } from '@ethersphere/core-sdk';\nimport { z } from 'zod';\nimport { asNumberString } from \"../../utils/type.js\";\nconst TransactionInfoSchema = z.object({\n transactionHash: z.string().transform(s => new TransactionId(s)),\n to: z.string(),\n nonce: z.number(),\n gasPrice: z.string().transform(s => asNumberString(s, {\n name: 'gasPrice'\n })),\n gasLimit: z.number(),\n data: z.string(),\n created: z.string(),\n description: z.string(),\n value: z.string().transform(s => asNumberString(s, {\n name: 'value'\n }))\n});\nexport const GetAllTransactionsResponse = z.object({\n pendingTransactions: z.array(TransactionInfoSchema)\n});\nexport const GetTransactionResponse = TransactionInfoSchema;\nexport const TransactionHashResponse = z.object({\n transactionHash: z.string().transform(s => new TransactionId(s))\n});","import { BatchId, Topic } from '@ethersphere/core-sdk';\nexport const SWARM_GATEWAY_URL = 'https://api.gateway.ethswarm.org';\nexport const NULL_STAMP = new BatchId('0000000000000000000000000000000000000000000000000000000000000000');\nexport const NULL_TOPIC = new Topic('0000000000000000000000000000000000000000000000000000000000000000');\nexport const NULL_ADDRESS = new Uint8Array(32);\nexport const NULL_IDENTIFIER = new Uint8Array(32);\nexport const NULL_OWNER = new Uint8Array(20);","// Copyright 2026 The Swarm Authors. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { AppMetadata } from \"../types\"\n\n/**\n * Normalize a URL by removing trailing slash.\n */\nexport function normalizeUrl(url: string): string {\n return url.endsWith(\"/\") ? url.slice(0, -1) : url\n}\n\n/**\n * True only for a well-formed `http:`/`https:` URL. Unlike a bare\n * `new URL(value)` / zod `.url()` check, this rejects a scheme-less paste like\n * `localhost:1633` (which `new URL` happily parses with protocol `localhost:`)\n * — the single validator shared by the network-settings schema and its editor\n * dialog so a broken Bee/RPC endpoint can't be saved or persisted.\n */\nexport function isHttpUrl(value: string): boolean {\n try {\n const { protocol } = new URL(value)\n return protocol === \"http:\" || protocol === \"https:\"\n } catch {\n return false\n }\n}\n\n/**\n * True for an address a site may name as its Bee node: an `http:` or\n * `https:` URL, optionally with a path, the way a gateway in front of Bee is\n * often mounted. Refused besides what `isHttpUrl` refuses: credentials, which\n * `fetch` will not send from a URL and throws on, and a query or fragment,\n * which bee-js would put in the middle of every request path it appends.\n */\nexport function isBeeApiUrl(value: string): boolean {\n if (!isHttpUrl(value) || /[\\s?#]/.test(value)) return false\n const { username, password } = new URL(value)\n return username === \"\" && password === \"\"\n}\n\n/**\n * Configuration options for building the authentication URL.\n */\nexport interface BuildAuthUrlOptions {\n /**\n * Challenge string for storage partitioning detection. When present, the popup checks\n * if it can read this challenge from localStorage to determine whether\n * storage is partitioned.\n */\n challenge?: string\n}\n\n/**\n * Build the authentication URL for connecting to Swarm ID\n *\n * This function creates the same URL format as used by SwarmIdProxy.openAuthPopup()\n * to ensure consistency across the library.\n *\n * @param baseUrl - The base URL where the authentication page is hosted\n * @param origin - The origin of the parent application requesting authentication\n * @param metadata - Optional application metadata to display during authentication\n * @param options - Optional configuration for the auth URL\n * @returns The complete authentication URL with hash parameters\n *\n * @example\n * ```typescript\n * const url = buildAuthUrl(\n * \"https://swarm-id.example.com\",\n * \"https://myapp.example.com\",\n * { name: \"My App\", description: \"A decentralized application\" }\n * )\n * // Returns: \"https://swarm-id.example.com/connect#origin=https%3A%2F%2Fmyapp.example.com&appName=My+App&appDescription=A+decentralized+application\"\n * ```\n */\nexport function buildAuthUrl(\n baseUrl: string,\n origin: string,\n metadata?: AppMetadata,\n options?: BuildAuthUrlOptions,\n): string {\n // Build URL with hash parameters (avoids re-renders in SPA)\n const params = new URLSearchParams()\n params.set(\"origin\", origin)\n\n if (metadata) {\n params.set(\"appName\", metadata.name)\n if (metadata.description) {\n params.set(\"appDescription\", metadata.description)\n }\n if (metadata.icon) {\n params.set(\"appIcon\", metadata.icon)\n }\n }\n\n if (options?.challenge) {\n params.set(\"challenge\", options.challenge)\n }\n\n return `${baseUrl}/connect#${params.toString()}`\n}\n","function number(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error(`Wrong positive integer: ${n}`);\n}\nfunction bool(b) {\n if (typeof b !== 'boolean')\n throw new Error(`Expected boolean, not ${b}`);\n}\nfunction bytes(b, ...lengths) {\n if (!(b instanceof Uint8Array))\n throw new Error('Expected Uint8Array');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error(`Expected Uint8Array of length ${lengths}, not of length=${b.length}`);\n}\nfunction hash(hash) {\n if (typeof hash !== 'function' || typeof hash.create !== 'function')\n throw new Error('Hash should be wrapped by utils.wrapConstructor');\n number(hash.outputLen);\n number(hash.blockLen);\n}\nfunction exists(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}\nfunction output(out, instance) {\n bytes(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}\nexport { number, bool, bytes, hash, exists, output };\nconst assert = { number, bool, bytes, hash, exists, output };\nexport default assert;\n//# sourceMappingURL=_assert.js.map","export const crypto = typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\n//# sourceMappingURL=crypto.js.map","/*! 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, we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\nconst u8a = (a) => a instanceof Uint8Array;\n// Cast array to different type\nexport const u8 = (arr) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr) => new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n// Cast array to view\nexport const createView = (arr) => new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word, shift) => (word << (32 - shift)) | (word >>> shift);\n// big-endian hardware is rare. Just in case someone still decides to run hashes:\n// early-throw an error because we don't support BE yet.\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\nif (!isLE)\n throw new Error('Non little-endian hardware is not supported');\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes) {\n if (!u8a(bytes))\n throw new Error('Uint8Array expected');\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/**\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 const len = hex.length;\n if (len % 2)\n throw new Error('padded hex string expected, got unpadded hex of length ' + len);\n const array = new Uint8Array(len / 2);\n for (let i = 0; i < array.length; i++) {\n const j = i * 2;\n const hexByte = hex.slice(j, j + 2);\n const byte = Number.parseInt(hexByte, 16);\n if (Number.isNaN(byte) || byte < 0)\n throw new Error('Invalid byte sequence');\n array[i] = byte;\n }\n return array;\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.\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 * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\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 if (!u8a(data))\n throw new Error(`expected Uint8Array, got ${typeof data}`);\n return data;\n}\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays) {\n const r = new Uint8Array(arrays.reduce((sum, a) => sum + a.length, 0));\n let pad = 0; // walk through each item, ensure they have proper type\n arrays.forEach((a) => {\n if (!u8a(a))\n throw new Error('Uint8Array expected');\n r.set(a, pad);\n pad += a.length;\n });\n return r;\n}\n// For runtime check if class implements interface\nexport class Hash {\n // Safe version that clones internal state\n clone() {\n return this._cloneInto();\n }\n}\nconst toStr = {}.toString;\nexport function checkOpts(defaults, opts) {\n if (opts !== undefined && toStr.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}\nexport function wrapConstructor(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 wrapConstructorWithOpts(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 wrapXOFConstructorWithOpts(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}\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nexport function randomBytes(bytesLength = 32) {\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n//# sourceMappingURL=utils.js.map","import { exists, output } from './_assert.js';\nimport { Hash, createView, toBytes } from './utils.js';\n// Polyfill for Safari 14\nfunction 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// Base SHA2 class (RFC 6234)\nexport class SHA2 extends Hash {\n constructor(blockLen, outputLen, padOffset, isLE) {\n super();\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.finished = false;\n this.length = 0;\n this.pos = 0;\n this.destroyed = false;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data) {\n exists(this);\n const { view, buffer, blockLen } = this;\n data = toBytes(data);\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 exists(this);\n output(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 this.buffer.subarray(pos).fill(0);\n // we have less than padOffset left in buffer, so we cannot put length in 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.length = length;\n to.pos = pos;\n to.finished = finished;\n to.destroyed = destroyed;\n if (length % blockLen)\n to.buffer.set(buffer);\n return to;\n }\n}\n//# sourceMappingURL=_sha2.js.map","import { SHA2 } from './_sha2.js';\nimport { rotr, wrapConstructor } from './utils.js';\n// SHA2-256 need to try 2^128 hashes to execute birthday attack.\n// BTC network is doing 2^67 hashes/sec as per early 2023.\n// Choice: a ? b : c\nconst Chi = (a, b, c) => (a & b) ^ (~a & c);\n// Majority function, true if any two inpust is true\nconst Maj = (a, b, c) => (a & b) ^ (a & c) ^ (b & c);\n// Round constants:\n// first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311)\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ new Uint32Array([\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// Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):\n// prettier-ignore\nconst IV = /* @__PURE__ */ new Uint32Array([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n]);\n// Temporary buffer, not used to store anything between runs\n// Named this way because it matches specification.\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nclass SHA256 extends SHA2 {\n constructor() {\n super(64, 32, 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 = IV[0] | 0;\n this.B = IV[1] | 0;\n this.C = IV[2] | 0;\n this.D = IV[3] | 0;\n this.E = IV[4] | 0;\n this.F = IV[5] | 0;\n this.G = IV[6] | 0;\n this.H = 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 SHA256_W.fill(0);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n this.buffer.fill(0);\n }\n}\n// Constants from https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf\nclass SHA224 extends SHA256 {\n constructor() {\n super();\n this.A = 0xc1059ed8 | 0;\n this.B = 0x367cd507 | 0;\n this.C = 0x3070dd17 | 0;\n this.D = 0xf70e5939 | 0;\n this.E = 0xffc00b31 | 0;\n this.F = 0x68581511 | 0;\n this.G = 0x64f98fa7 | 0;\n this.H = 0xbefa4fa4 | 0;\n this.outputLen = 28;\n }\n}\n/**\n * SHA2-256 hash function\n * @param message - data that would be hashed\n */\nexport const sha256 = /* @__PURE__ */ wrapConstructor(() => new SHA256());\nexport const sha224 = /* @__PURE__ */ wrapConstructor(() => new SHA224());\n//# sourceMappingURL=sha256.js.map","/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// 100 lines of code in the file are duplicated from noble-hashes (utils).\n// This is OK: `abstract` directory does not use noble-hashes.\n// User may opt-in into using different hashing library. This way, noble-hashes\n// won't be included into their bundle.\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst u8a = (a) => a instanceof Uint8Array;\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes) {\n if (!u8a(bytes))\n throw new Error('Uint8Array expected');\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}\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 // Big Endian\n return BigInt(hex === '' ? '0' : `0x${hex}`);\n}\n/**\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 const len = hex.length;\n if (len % 2)\n throw new Error('padded hex string expected, got unpadded hex of length ' + len);\n const array = new Uint8Array(len / 2);\n for (let i = 0; i < array.length; i++) {\n const j = i * 2;\n const hexByte = hex.slice(j, j + 2);\n const byte = Number.parseInt(hexByte, 16);\n if (Number.isNaN(byte) || byte < 0)\n throw new Error('Invalid byte sequence');\n array[i] = byte;\n }\n return array;\n}\n// BE: Big Endian, LE: Little Endian\nexport function bytesToNumberBE(bytes) {\n return hexToNumber(bytesToHex(bytes));\n}\nexport function bytesToNumberLE(bytes) {\n if (!u8a(bytes))\n throw new Error('Uint8Array expected');\n return hexToNumber(bytesToHex(Uint8Array.from(bytes).reverse()));\n}\nexport function numberToBytesBE(n, len) {\n return hexToBytes(n.toString(16).padStart(len * 2, '0'));\n}\nexport function numberToBytesLE(n, len) {\n return numberToBytesBE(n, len).reverse();\n}\n// Unpadded, rarely used\nexport function numberToVarBytesBE(n) {\n return hexToBytes(numberToHexUnpadded(n));\n}\n/**\n * Takes hex string or Uint8Array, converts to Uint8Array.\n * Validates output length.\n * Will throw error for other types.\n * @param title descriptive title for an error e.g. 'private key'\n * @param hex hex string or Uint8Array\n * @param expectedLength optional, will compare to result array's length\n * @returns\n */\nexport function ensureBytes(title, hex, expectedLength) {\n let res;\n if (typeof hex === 'string') {\n try {\n res = hexToBytes(hex);\n }\n catch (e) {\n throw new Error(`${title} must be valid hex string, got \"${hex}\". Cause: ${e}`);\n }\n }\n else if (u8a(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} expected ${expectedLength} bytes, got ${len}`);\n return res;\n}\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays) {\n const r = new Uint8Array(arrays.reduce((sum, a) => sum + a.length, 0));\n let pad = 0; // walk through each item, ensure they have proper type\n arrays.forEach((a) => {\n if (!u8a(a))\n throw new Error('Uint8Array expected');\n r.set(a, pad);\n pad += a.length;\n });\n return r;\n}\nexport function equalBytes(b1, b2) {\n // We don't care about timing attacks here\n if (b1.length !== b2.length)\n return false;\n for (let i = 0; i < b1.length; i++)\n if (b1[i] !== b2[i])\n return false;\n return true;\n}\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n// Bit operations\n/**\n * Calculates amount of bits in a bigint.\n * Same as `n.toString(2).length`\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 const 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) => (_2n << BigInt(n - 1)) - _1n;\n// DRBG\nconst u8n = (data) => new Uint8Array(data); // creates Uint8Array\nconst u8fr = (arr) => Uint8Array.from(arr); // another shortcut\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 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()) => {\n // HMAC-DRBG reseed() function. Steps D-G\n k = h(u8fr([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(u8fr([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' || val instanceof Uint8Array,\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 \"${type}\", expected function`);\n const val = object[fieldName];\n if (isOptional && val === undefined)\n return;\n if (!checkVal(val, object)) {\n throw new Error(`Invalid param ${String(fieldName)}=${val} (${typeof val}), expected ${type}`);\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' });\n//# sourceMappingURL=utils.js.map","/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Utilities for modular arithmetics and finite fields\nimport { bitMask, numberToBytesBE, numberToBytesLE, bytesToNumberBE, bytesToNumberLE, ensureBytes, validateObject, } from './utils.js';\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3);\n// prettier-ignore\nconst _4n = BigInt(4), _5n = BigInt(5), _8n = BigInt(8);\n// prettier-ignore\nconst _9n = BigInt(9), _16n = 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 */\n// TODO: use field version && remove\nexport function pow(num, power, modulo) {\n if (modulo <= _0n || power < _0n)\n throw new Error('Expected power/modulo > 0');\n if (modulo === _1n)\n return _0n;\n let res = _1n;\n while (power > _0n) {\n if (power & _1n)\n res = (res * num) % modulo;\n num = (num * num) % modulo;\n power >>= _1n;\n }\n return res;\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// Inverses number over modulo\nexport function invert(number, modulo) {\n if (number === _0n || modulo <= _0n) {\n throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);\n }\n // Euclidean GCD https://brilliant.org/wiki/extended-euclidean-algorithm/\n // Fermat's little theorem \"CT-like\" version inv(n) = n^(m-2) mod m is 30x slower.\n let a = mod(number, modulo);\n let b = modulo;\n // prettier-ignore\n let x = _0n, y = _1n, u = _1n, v = _0n;\n while (a !== _0n) {\n // JIT applies optimization if those two lines follow each other\n const q = b / a;\n const r = b % a;\n const m = x - u * q;\n const n = y - v * q;\n // prettier-ignore\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n const gcd = b;\n if (gcd !== _1n)\n throw new Error('invert: does not exist');\n return mod(x, modulo);\n}\n/**\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 * Will start an infinite loop if field order P is not prime.\n * @param P field order\n * @returns function that takes field Fp (created from P) and number n\n */\nexport function tonelliShanks(P) {\n // Legendre constant: used to calculate Legendre symbol (a | p),\n // which denotes the value of a^((p-1)/2) (mod p).\n // (a | p) ≡ 1 if a is a square (mod p)\n // (a | p) ≡ -1 if a is not a square (mod p)\n // (a | p) ≡ 0 if a ≡ 0 (mod p)\n const legendreC = (P - _1n) / _2n;\n let Q, S, Z;\n // Step 1: By factoring out powers of 2 from p - 1,\n // find q and s such that p - 1 = q*(2^s) with q odd\n for (Q = P - _1n, S = 0; Q % _2n === _0n; Q /= _2n, S++)\n ;\n // Step 2: Select a non-square z such that (z | p) ≡ -1 and set c ≡ zq\n for (Z = _2n; Z < P && pow(Z, legendreC, P) !== P - _1n; Z++)\n ;\n // Fast-path\n if (S === 1) {\n const p1div4 = (P + _1n) / _4n;\n return function tonelliFast(Fp, n) {\n const root = Fp.pow(n, p1div4);\n if (!Fp.eql(Fp.sqr(root), n))\n throw new Error('Cannot find square root');\n return root;\n };\n }\n // Slow-path\n const Q1div2 = (Q + _1n) / _2n;\n return function tonelliSlow(Fp, n) {\n // Step 0: Check that n is indeed a square: (n | p) should not be ≡ -1\n if (Fp.pow(n, legendreC) === Fp.neg(Fp.ONE))\n throw new Error('Cannot find square root');\n let r = S;\n // TODO: will fail at Fp2/etc\n let g = Fp.pow(Fp.mul(Fp.ONE, Z), Q); // will update both x and b\n let x = Fp.pow(n, Q1div2); // first guess at the square root\n let b = Fp.pow(n, Q); // first guess at the fudge factor\n while (!Fp.eql(b, Fp.ONE)) {\n if (Fp.eql(b, Fp.ZERO))\n return Fp.ZERO; // https://en.wikipedia.org/wiki/Tonelli%E2%80%93Shanks_algorithm (4. If t = 0, return r = 0)\n // Find m such b^(2^m)==1\n let m = 1;\n for (let t2 = Fp.sqr(b); m < r; m++) {\n if (Fp.eql(t2, Fp.ONE))\n break;\n t2 = Fp.sqr(t2); // t2 *= t2\n }\n // NOTE: r-m-1 can be bigger than 32, need to convert to bigint before shift, otherwise there will be overflow\n const ge = Fp.pow(g, _1n << BigInt(r - m - 1)); // ge = 2^(r-m-1)\n g = Fp.sqr(ge); // g = ge * ge\n x = Fp.mul(x, ge); // x *= ge\n b = Fp.mul(b, g); // b *= g\n r = m;\n }\n return x;\n };\n}\nexport function FpSqrt(P) {\n // NOTE: 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 // P ≡ 3 (mod 4)\n // √n = n^((P+1)/4)\n if (P % _4n === _3n) {\n // Not all roots possible!\n // const ORDER =\n // 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaabn;\n // const NUM = 72057594037927816n;\n const p1div4 = (P + _1n) / _4n;\n return function sqrt3mod4(Fp, n) {\n const root = Fp.pow(n, p1div4);\n // Throw if root**2 != n\n if (!Fp.eql(Fp.sqr(root), n))\n throw new Error('Cannot find square root');\n return root;\n };\n }\n // Atkin algorithm for q ≡ 5 (mod 8), https://eprint.iacr.org/2012/685.pdf (page 10)\n if (P % _8n === _5n) {\n const c1 = (P - _5n) / _8n;\n return function sqrt5mod8(Fp, n) {\n const n2 = Fp.mul(n, _2n);\n const v = Fp.pow(n2, c1);\n const nv = Fp.mul(n, v);\n const i = Fp.mul(Fp.mul(nv, _2n), v);\n const root = Fp.mul(nv, Fp.sub(i, Fp.ONE));\n if (!Fp.eql(Fp.sqr(root), n))\n throw new Error('Cannot find square root');\n return root;\n };\n }\n // P ≡ 9 (mod 16)\n if (P % _16n === _9n) {\n // NOTE: tonelli is too slow for bls-Fp2 calculations even on start\n // Means we cannot use sqrt for constants at all!\n //\n // const c1 = Fp.sqrt(Fp.negate(Fp.ONE)); // 1. c1 = sqrt(-1) in F, i.e., (c1^2) == -1 in F\n // const c2 = Fp.sqrt(c1); // 2. c2 = sqrt(c1) in F, i.e., (c2^2) == c1 in F\n // const c3 = Fp.sqrt(Fp.negate(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 // sqrt = (x) => {\n // let tv1 = Fp.pow(x, c4); // 1. tv1 = x^c4\n // let tv2 = Fp.mul(c1, tv1); // 2. tv2 = c1 * tv1\n // const tv3 = Fp.mul(c2, tv1); // 3. tv3 = c2 * tv1\n // let tv4 = Fp.mul(c3, tv1); // 4. tv4 = c3 * tv1\n // const e1 = Fp.equals(Fp.square(tv2), x); // 5. e1 = (tv2^2) == x\n // const e2 = Fp.equals(Fp.square(tv3), x); // 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.equals(Fp.square(tv2), x); // 9. e3 = (tv2^2) == x\n // return Fp.cmov(tv1, tv2, e3); // 10. z = CMOV(tv1, tv2, e3) # Select the sqrt from tv1 and tv2\n // }\n }\n // Other cases: 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: 'isSafeInteger',\n BITS: 'isSafeInteger',\n };\n const opts = FIELD_FIELDS.reduce((map, val) => {\n map[val] = 'function';\n return map;\n }, initial);\n return validateObject(field, opts);\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(f, num, power) {\n // Should have same speed as pow for bigints\n // TODO: benchmark!\n if (power < _0n)\n throw new Error('Expected power > 0');\n if (power === _0n)\n return f.ONE;\n if (power === _1n)\n return num;\n let p = f.ONE;\n let d = num;\n while (power > _0n) {\n if (power & _1n)\n p = f.mul(p, d);\n d = f.sqr(d);\n power >>= _1n;\n }\n return p;\n}\n/**\n * Efficiently invert an array of Field elements.\n * `inv(0)` will return `undefined` here: make sure to throw an error.\n */\nexport function FpInvertBatch(f, nums) {\n const tmp = new Array(nums.length);\n // Walk from first to last, multiply them by each other MOD p\n const lastMultiplied = nums.reduce((acc, num, i) => {\n if (f.is0(num))\n return acc;\n tmp[i] = acc;\n return f.mul(acc, num);\n }, f.ONE);\n // Invert last element\n const inverted = f.inv(lastMultiplied);\n // Walk from last to first, multiply them by inverted each other MOD p\n nums.reduceRight((acc, num, i) => {\n if (f.is0(num))\n return acc;\n tmp[i] = f.mul(acc, tmp[i]);\n return f.mul(acc, num);\n }, inverted);\n return tmp;\n}\nexport function FpDiv(f, lhs, rhs) {\n return f.mul(lhs, typeof rhs === 'bigint' ? invert(rhs, f.ORDER) : f.inv(rhs));\n}\n// This function returns True whenever the value x is a square in the field F.\nexport function FpIsSquare(f) {\n const legendreConst = (f.ORDER - _1n) / _2n; // Integer arithmetic\n return (x) => {\n const p = f.pow(x, legendreConst);\n return f.eql(p, f.ZERO) || f.eql(p, f.ONE);\n };\n}\n// CURVE.n lengths\nexport function nLength(n, nBitLength) {\n // Bit size, byte size of CURVE.n\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 * Initializes a finite field over prime. **Non-primes are not supported.**\n * Do not init in loop: slow. Very fragile: always run a benchmark on a change.\n * Major performance optimizations:\n * * a) denormalized operations like mulN instead of mul\n * * b) same object shape: never add or remove keys\n * * c) Object.freeze\n * @param ORDER prime positive bigint\n * @param bitLen how many bits the field consumes\n * @param isLE (def: 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, bitLen, isLE = false, redef = {}) {\n if (ORDER <= _0n)\n throw new Error(`Expected Field ORDER > 0, got ${ORDER}`);\n const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, bitLen);\n if (BYTES > 2048)\n throw new Error('Field lengths over 2048 bytes are not supported');\n const sqrtP = FpSqrt(ORDER);\n const f = Object.freeze({\n ORDER,\n BITS,\n BYTES,\n MASK: bitMask(BITS),\n ZERO: _0n,\n ONE: _1n,\n create: (num) => mod(num, ORDER),\n isValid: (num) => {\n if (typeof num !== 'bigint')\n throw new Error(`Invalid field element: expected bigint, got ${typeof num}`);\n return _0n <= num && num < ORDER; // 0 is valid element, but it's not invertible\n },\n is0: (num) => num === _0n,\n 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: redef.sqrt || ((n) => sqrtP(f, n)),\n invertBatch: (lst) => FpInvertBatch(f, lst),\n // TODO: do we really need constant cmov?\n // We don't have const-time bigints anyway, so probably will be not very useful\n cmov: (a, b, c) => (c ? b : a),\n toBytes: (num) => (isLE ? numberToBytesLE(num, BYTES) : numberToBytesBE(num, BYTES)),\n fromBytes: (bytes) => {\n if (bytes.length !== BYTES)\n throw new Error(`Fp.fromBytes: expected ${BYTES}, got ${bytes.length}`);\n return isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n },\n });\n return Object.freeze(f);\n}\nexport function FpSqrtOdd(Fp, elm) {\n if (!Fp.isOdd)\n throw new Error(`Field doesn't have isOdd`);\n const root = Fp.sqrt(elm);\n return Fp.isOdd(root) ? root : Fp.neg(root);\n}\nexport function FpSqrtEven(Fp, elm) {\n if (!Fp.isOdd)\n throw new Error(`Field doesn't have isOdd`);\n const root = Fp.sqrt(elm);\n return Fp.isOdd(root) ? Fp.neg(root) : root;\n}\n/**\n * \"Constant-time\" private key generation utility.\n * Same as mapKeyToField, but accepts less bytes (40 instead of 48 for 32-byte field).\n * Which makes it slightly more biased, less secure.\n * @deprecated use mapKeyToField instead\n */\nexport function hashToPrivateScalar(hash, groupOrder, isLE = false) {\n hash = ensureBytes('privateHash', hash);\n const hashLen = hash.length;\n const minLen = nLength(groupOrder).nByteLength + 8;\n if (minLen < 24 || hashLen < minLen || hashLen > 1024)\n throw new Error(`hashToPrivateScalar: expected ${minLen}-1024 bytes of input, got ${hashLen}`);\n const num = isLE ? bytesToNumberLE(hash) : bytesToNumberBE(hash);\n return mod(num, groupOrder - _1n) + _1n;\n}\n/**\n * Returns total number of bytes consumed by the field element.\n * For example, 32 bytes for usual 256-bit weierstrass curve.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of field\n */\nexport function getFieldBytesLength(fieldOrder) {\n if (typeof fieldOrder !== 'bigint')\n throw new Error('field order must be bigint');\n const bitLength = fieldOrder.toString(2).length;\n return Math.ceil(bitLength / 8);\n}\n/**\n * Returns minimal amount of bytes that can be safely reduced\n * by field order.\n * Should be 2^-128 for 128-bit curve such as P256.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of target hash\n */\nexport function getMinHashLength(fieldOrder) {\n const length = getFieldBytesLength(fieldOrder);\n return length + Math.ceil(length / 2);\n}\n/**\n * \"Constant-time\" private key generation utility.\n * Can take (n + n/2) or more bytes of uniform input e.g. from CSPRNG or KDF\n * and convert them into private scalar, with the modulo bias being negligible.\n * Needs at least 48 bytes of input for 32-byte private key.\n * https://research.kudelskisecurity.com/2020/07/28/the-definitive-guide-to-modulo-bias-and-how-to-avoid-it/\n * FIPS 186-5, A.2 https://csrc.nist.gov/publications/detail/fips/186/5/final\n * RFC 9380, https://www.rfc-editor.org/rfc/rfc9380#section-5\n * @param hash hash output from SHA3 or a similar function\n * @param groupOrder size of subgroup - (e.g. secp256k1.CURVE.n)\n * @param isLE interpret hash bytes as LE num\n * @returns valid private scalar\n */\nexport function mapHashToField(key, fieldOrder, isLE = false) {\n const len = key.length;\n const fieldLen = getFieldBytesLength(fieldOrder);\n const minLen = getMinHashLength(fieldOrder);\n // No small numbers: need to understand bias story. No huge numbers: easier to detect JS timings.\n if (len < 16 || len < minLen || len > 1024)\n throw new Error(`expected ${minLen}-1024 bytes of input, got ${len}`);\n const num = isLE ? bytesToNumberBE(key) : bytesToNumberLE(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","/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Abelian group utilities\nimport { validateField, nLength } from './modular.js';\nimport { validateObject } from './utils.js';\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\n// Elliptic curve multiplication of Point by scalar. Fragile.\n// Scalars should always be less than curve order: this should be checked inside of a curve itself.\n// Creates precomputation tables for fast multiplication:\n// - private scalar is split by fixed size windows of W bits\n// - every window point is collected from window's table & added to accumulator\n// - since windows are different, same point inside tables won't be accessed more than once per calc\n// - each multiplication is 'Math.ceil(CURVE_ORDER / 𝑊) + 1' point additions (fixed for any scalar)\n// - +1 window is neccessary for wNAF\n// - wNAF reduces table size: 2x less memory + 2x faster generation, but 10% slower multiplication\n// TODO: Research returning 2d JS array of windows, instead of a single window. This would allow\n// windows to be in different memory locations\nexport function wNAF(c, bits) {\n const constTimeNegate = (condition, item) => {\n const neg = item.negate();\n return condition ? neg : item;\n };\n const opts = (W) => {\n const windows = Math.ceil(bits / W) + 1; // +1, because\n const windowSize = 2 ** (W - 1); // -1 because we skip zero\n return { windows, windowSize };\n };\n return {\n constTimeNegate,\n // non-const time multiplication ladder\n unsafeLadder(elm, n) {\n let p = c.ZERO;\n let d = elm;\n while (n > _0n) {\n if (n & _1n)\n p = p.add(d);\n d = d.double();\n n >>= _1n;\n }\n return p;\n },\n /**\n * Creates a wNAF precomputation window. Used for caching.\n * Default window size is set by `utils.precompute()` and is equal to 8.\n * Number of precomputed points depends on the curve size:\n * 2^(𝑊−1) * (Math.ceil(𝑛 / 𝑊) + 1), where:\n * - 𝑊 is the window size\n * - 𝑛 is the bitlength of the curve order.\n * For a 256-bit curve and window size 8, the number of precomputed points is 128 * 33 = 4224.\n * @returns precomputed point tables flattened to a single array\n */\n precomputeWindow(elm, W) {\n const { windows, windowSize } = opts(W);\n const points = [];\n let p = elm;\n let base = p;\n for (let window = 0; window < windows; window++) {\n base = p;\n points.push(base);\n // =1, because we skip zero\n for (let i = 1; i < windowSize; i++) {\n base = base.add(p);\n points.push(base);\n }\n p = base.double();\n }\n return points;\n },\n /**\n * Implements ec multiplication using precomputed tables and w-ary non-adjacent form.\n * @param W window size\n * @param precomputes precomputed tables\n * @param n scalar (we don't check here, but should be less than curve order)\n * @returns real and fake (for const-time) points\n */\n wNAF(W, precomputes, n) {\n // TODO: maybe check that scalar is less than group order? wNAF behavious is undefined otherwise\n // But need to carefully remove other checks before wNAF. ORDER == bits here\n const { windows, windowSize } = opts(W);\n let p = c.ZERO;\n let f = c.BASE;\n const mask = BigInt(2 ** W - 1); // Create mask with W ones: 0b1111 for W=4 etc.\n const maxNumber = 2 ** W;\n const shiftBy = BigInt(W);\n for (let window = 0; window < windows; window++) {\n const offset = window * windowSize;\n // Extract W bits.\n let wbits = Number(n & mask);\n // Shift number by W bits.\n n >>= shiftBy;\n // If the bits are bigger than max size, we'll split those.\n // +224 => 256 - 32\n if (wbits > windowSize) {\n wbits -= maxNumber;\n n += _1n;\n }\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 // Check if we're onto Zero point.\n // Add random point inside current window to f.\n const offset1 = offset;\n const offset2 = offset + Math.abs(wbits) - 1; // -1 because we skip zero\n const cond1 = window % 2 !== 0;\n const cond2 = wbits < 0;\n if (wbits === 0) {\n // The most important part for const-time getPublicKey\n f = f.add(constTimeNegate(cond1, precomputes[offset1]));\n }\n else {\n p = p.add(constTimeNegate(cond2, precomputes[offset2]));\n }\n }\n // JIT-compiler should not eliminate f here, since it will later be used in normalizeZ()\n // Even if the variable is still unused, there are some checks which will\n // throw an exception, so compiler needs to prove they won't happen, which is hard.\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 wNAFCached(P, precomputesMap, n, transform) {\n // @ts-ignore\n const W = P._WINDOW_SIZE || 1;\n // Calculate precomputes on a first run, reuse them after\n let comp = precomputesMap.get(P);\n if (!comp) {\n comp = this.precomputeWindow(P, W);\n if (W !== 1) {\n precomputesMap.set(P, transform(comp));\n }\n }\n return this.wNAF(W, comp, n);\n },\n };\n}\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}\n//# sourceMappingURL=curve.js.map","/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Short Weierstrass curve. The formula is: y² = x³ + ax + b\nimport * as mod from './modular.js';\nimport * as ut from './utils.js';\nimport { ensureBytes } from './utils.js';\nimport { wNAF, validateBasic } from './curve.js';\nfunction validatePointOpts(curve) {\n const opts = validateBasic(curve);\n ut.validateObject(opts, {\n a: 'field',\n b: 'field',\n }, {\n allowedPrivateKeyLengths: 'array',\n wrapPrivateKey: 'boolean',\n isTorsionFree: 'function',\n clearCofactor: 'function',\n allowInfinityPoint: 'boolean',\n fromBytes: 'function',\n toBytes: 'function',\n });\n const { endo, Fp, a } = opts;\n if (endo) {\n if (!Fp.eql(a, Fp.ZERO)) {\n throw new Error('Endomorphism can only be defined for Koblitz curves that have a=0');\n }\n if (typeof endo !== 'object' ||\n typeof endo.beta !== 'bigint' ||\n typeof endo.splitScalar !== 'function') {\n throw new Error('Expected endomorphism with beta: bigint and splitScalar: function');\n }\n }\n return Object.freeze({ ...opts });\n}\n// ASN.1 DER encoding utilities\nconst { bytesToNumberBE: b2n, hexToBytes: h2b } = ut;\nexport const DER = {\n // asn.1 DER encoding utils\n Err: class DERErr extends Error {\n constructor(m = '') {\n super(m);\n }\n },\n _parseInt(data) {\n const { Err: E } = DER;\n if (data.length < 2 || data[0] !== 0x02)\n throw new E('Invalid signature integer tag');\n const len = data[1];\n const res = data.subarray(2, len + 2);\n if (!len || res.length !== len)\n throw new E('Invalid signature integer: wrong length');\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 if (res[0] & 0b10000000)\n throw new E('Invalid signature integer: negative');\n if (res[0] === 0x00 && !(res[1] & 0b10000000))\n throw new E('Invalid signature integer: unnecessary leading zero');\n return { d: b2n(res), l: data.subarray(len + 2) }; // d is data, l is left\n },\n toSig(hex) {\n // parse DER signature\n const { Err: E } = DER;\n const data = typeof hex === 'string' ? h2b(hex) : hex;\n if (!(data instanceof Uint8Array))\n throw new Error('ui8a expected');\n let l = data.length;\n if (l < 2 || data[0] != 0x30)\n throw new E('Invalid signature tag');\n if (data[1] !== l - 2)\n throw new E('Invalid signature: incorrect length');\n const { d: r, l: sBytes } = DER._parseInt(data.subarray(2));\n const { d: s, l: rBytesLeft } = DER._parseInt(sBytes);\n if (rBytesLeft.length)\n throw new E('Invalid signature: left bytes after parsing');\n return { r, s };\n },\n hexFromSig(sig) {\n // Add leading zero if first byte has negative bit enabled. More details in '_parseInt'\n const slice = (s) => (Number.parseInt(s[0], 16) & 0b1000 ? '00' + s : s);\n const h = (num) => {\n const hex = num.toString(16);\n return hex.length & 1 ? `0${hex}` : hex;\n };\n const s = slice(h(sig.s));\n const r = slice(h(sig.r));\n const shl = s.length / 2;\n const rhl = r.length / 2;\n const sl = h(shl);\n const rl = h(rhl);\n return `30${h(rhl + shl + 4)}02${rl}${r}02${sl}${s}`;\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);\nexport function weierstrassPoints(opts) {\n const CURVE = validatePointOpts(opts);\n const { Fp } = CURVE; // All curves has same field / group length as for now, but they can differ\n const toBytes = CURVE.toBytes ||\n ((_c, point, _isCompressed) => {\n const a = point.toAffine();\n return ut.concatBytes(Uint8Array.from([0x04]), Fp.toBytes(a.x), Fp.toBytes(a.y));\n });\n const fromBytes = CURVE.fromBytes ||\n ((bytes) => {\n // const head = bytes[0];\n const tail = bytes.subarray(1);\n // if (head !== 0x04) throw new Error('Only non-compressed encoding is supported');\n const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n return { x, y };\n });\n /**\n * y² = x³ + ax + b: Short weierstrass curve formula\n * @returns y²\n */\n function weierstrassEquation(x) {\n const { a, b } = CURVE;\n const x2 = Fp.sqr(x); // x * x\n const x3 = Fp.mul(x2, x); // x2 * x\n return Fp.add(Fp.add(x3, Fp.mul(x, a)), b); // x3 + a * x + b\n }\n // Validate whether the passed curve params are valid.\n // We check if curve equation works for generator point.\n // `assertValidity()` won't work: `isTorsionFree()` is not available at this point in bls12-381.\n // ProjectivePoint class has not been initialized yet.\n if (!Fp.eql(Fp.sqr(CURVE.Gy), weierstrassEquation(CURVE.Gx)))\n throw new Error('bad generator point: equation left != right');\n // Valid group elements reside in range 1..n-1\n function isWithinCurveOrder(num) {\n return typeof num === 'bigint' && _0n < num && num < CURVE.n;\n }\n function assertGE(num) {\n if (!isWithinCurveOrder(num))\n throw new Error('Expected valid bigint: 0 < bigint < curve.n');\n }\n // Validates if priv key is valid and converts it to bigint.\n // Supports options allowedPrivateKeyLengths and wrapPrivateKey.\n function normPrivateKeyToScalar(key) {\n const { allowedPrivateKeyLengths: lengths, nByteLength, wrapPrivateKey, n } = CURVE;\n if (lengths && typeof key !== 'bigint') {\n if (key instanceof Uint8Array)\n key = ut.bytesToHex(key);\n // Normalize to hex string, pad. E.g. P521 would norm 130-132 char hex to 132-char bytes\n if (typeof key !== 'string' || !lengths.includes(key.length))\n throw new Error('Invalid key');\n key = key.padStart(nByteLength * 2, '0');\n }\n let num;\n try {\n num =\n typeof key === 'bigint'\n ? key\n : ut.bytesToNumberBE(ensureBytes('private key', key, nByteLength));\n }\n catch (error) {\n throw new Error(`private key must be ${nByteLength} bytes, hex or bigint, not ${typeof key}`);\n }\n if (wrapPrivateKey)\n num = mod.mod(num, n); // disabled by default, enabled for BLS\n assertGE(num); // num in range [1..N-1]\n return num;\n }\n const pointPrecomputes = new Map();\n function assertPrjPoint(other) {\n if (!(other instanceof Point))\n throw new Error('ProjectivePoint expected');\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 constructor(px, py, pz) {\n this.px = px;\n this.py = py;\n this.pz = pz;\n if (px == null || !Fp.isValid(px))\n throw new Error('x required');\n if (py == null || !Fp.isValid(py))\n throw new Error('y required');\n if (pz == null || !Fp.isValid(pz))\n throw new Error('z required');\n }\n // Does not validate if the point is on-curve.\n // Use fromHex instead, or call assertValidity() later.\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 const is0 = (i) => Fp.eql(i, Fp.ZERO);\n // fromAffine(x:0, y:0) would produce (x:0, y:0, z:1), but we need (x:0, y:1, z:0)\n if (is0(x) && 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 /**\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 */\n static normalizeZ(points) {\n const toInv = Fp.invertBatch(points.map((p) => p.pz));\n return points.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n }\n /**\n * Converts hash string or Uint8Array to Point.\n * @param hex short/long ECDSA hex\n */\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(normPrivateKeyToScalar(privateKey));\n }\n // \"Private method\", don't use it directly\n _setWindowSize(windowSize) {\n this._WINDOW_SIZE = windowSize;\n pointPrecomputes.delete(this);\n }\n // A point on curve is valid if it conforms to equation.\n assertValidity() {\n if (this.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 wrong representation of ZERO and is always invalid.\n if (CURVE.allowInfinityPoint && !Fp.is0(this.py))\n return;\n throw new Error('bad point: ZERO');\n }\n // Some 3rd-party test vectors require different wording between here & `fromCompressedHex`\n const { x, y } = this.toAffine();\n // Check if x, y are valid field elements\n if (!Fp.isValid(x) || !Fp.isValid(y))\n throw new Error('bad point: x or y not FE');\n const left = Fp.sqr(y); // y²\n const right = weierstrassEquation(x); // x³ + ax + b\n if (!Fp.eql(left, right))\n throw new Error('bad point: equation left != right');\n if (!this.isTorsionFree())\n throw new Error('bad point: not in prime-order subgroup');\n }\n hasEvenY() {\n const { y } = this.toAffine();\n if (Fp.isOdd)\n return !Fp.isOdd(y);\n throw new Error(\"Field doesn't support isOdd\");\n }\n /**\n * Compare one point to another.\n */\n equals(other) {\n assertPrjPoint(other);\n const { px: X1, py: Y1, pz: Z1 } = this;\n const { px: X2, py: Y2, pz: Z2 } = other;\n const U1 = Fp.eql(Fp.mul(X1, Z2), Fp.mul(X2, Z1));\n const U2 = Fp.eql(Fp.mul(Y1, Z2), Fp.mul(Y2, Z1));\n return U1 && U2;\n }\n /**\n * Flips point to one corresponding to (x, -y) in Affine coordinates.\n */\n negate() {\n return new Point(this.px, Fp.neg(this.py), this.pz);\n }\n // Renes-Costello-Batina exception-free doubling formula.\n // There is 30% faster Jacobian formula, but it is not complete.\n // https://eprint.iacr.org/2015/1060, algorithm 3\n // Cost: 8M + 3S + 3*a + 2*b3 + 15add.\n double() {\n const { a, b } = CURVE;\n const b3 = Fp.mul(b, _3n);\n const { px: X1, py: Y1, pz: Z1 } = this;\n let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n let t0 = Fp.mul(X1, X1); // step 1\n let t1 = Fp.mul(Y1, Y1);\n let t2 = Fp.mul(Z1, Z1);\n let t3 = Fp.mul(X1, Y1);\n t3 = Fp.add(t3, t3); // step 5\n Z3 = Fp.mul(X1, Z1);\n Z3 = Fp.add(Z3, Z3);\n X3 = Fp.mul(a, Z3);\n Y3 = Fp.mul(b3, t2);\n Y3 = Fp.add(X3, Y3); // step 10\n X3 = Fp.sub(t1, Y3);\n Y3 = Fp.add(t1, Y3);\n Y3 = Fp.mul(X3, Y3);\n X3 = Fp.mul(t3, X3);\n Z3 = Fp.mul(b3, Z3); // step 15\n t2 = Fp.mul(a, t2);\n t3 = Fp.sub(t0, t2);\n t3 = Fp.mul(a, t3);\n t3 = Fp.add(t3, Z3);\n Z3 = Fp.add(t0, t0); // step 20\n t0 = Fp.add(Z3, t0);\n t0 = Fp.add(t0, t2);\n t0 = Fp.mul(t0, t3);\n Y3 = Fp.add(Y3, t0);\n t2 = Fp.mul(Y1, Z1); // step 25\n t2 = Fp.add(t2, t2);\n t0 = Fp.mul(t2, t3);\n X3 = Fp.sub(X3, t0);\n Z3 = Fp.mul(t2, t1);\n Z3 = Fp.add(Z3, Z3); // step 30\n Z3 = Fp.add(Z3, Z3);\n return new Point(X3, Y3, Z3);\n }\n // Renes-Costello-Batina exception-free addition formula.\n // There is 30% faster Jacobian formula, but it is not complete.\n // https://eprint.iacr.org/2015/1060, algorithm 1\n // Cost: 12M + 0S + 3*a + 3*b3 + 23add.\n add(other) {\n assertPrjPoint(other);\n const { px: X1, py: Y1, pz: Z1 } = this;\n const { px: X2, py: Y2, pz: Z2 } = other;\n let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n const a = CURVE.a;\n const b3 = Fp.mul(CURVE.b, _3n);\n let t0 = Fp.mul(X1, X2); // step 1\n let t1 = Fp.mul(Y1, Y2);\n let t2 = Fp.mul(Z1, Z2);\n let t3 = Fp.add(X1, Y1);\n let t4 = Fp.add(X2, Y2); // step 5\n t3 = Fp.mul(t3, t4);\n t4 = Fp.add(t0, t1);\n t3 = Fp.sub(t3, t4);\n t4 = Fp.add(X1, Z1);\n let t5 = Fp.add(X2, Z2); // step 10\n t4 = Fp.mul(t4, t5);\n t5 = Fp.add(t0, t2);\n t4 = Fp.sub(t4, t5);\n t5 = Fp.add(Y1, Z1);\n X3 = Fp.add(Y2, Z2); // step 15\n t5 = Fp.mul(t5, X3);\n X3 = Fp.add(t1, t2);\n t5 = Fp.sub(t5, X3);\n Z3 = Fp.mul(a, t4);\n X3 = Fp.mul(b3, t2); // step 20\n Z3 = Fp.add(X3, Z3);\n X3 = Fp.sub(t1, Z3);\n Z3 = Fp.add(t1, Z3);\n Y3 = Fp.mul(X3, Z3);\n t1 = Fp.add(t0, t0); // step 25\n t1 = Fp.add(t1, t0);\n t2 = Fp.mul(a, t2);\n t4 = Fp.mul(b3, t4);\n t1 = Fp.add(t1, t2);\n t2 = Fp.sub(t0, t2); // step 30\n t2 = Fp.mul(a, t2);\n t4 = Fp.add(t4, t2);\n t0 = Fp.mul(t1, t4);\n Y3 = Fp.add(Y3, t0);\n t0 = Fp.mul(t5, t4); // step 35\n X3 = Fp.mul(t3, X3);\n X3 = Fp.sub(X3, t0);\n t0 = Fp.mul(t3, t1);\n Z3 = Fp.mul(t5, Z3);\n Z3 = Fp.add(Z3, t0); // step 40\n return new Point(X3, Y3, Z3);\n }\n subtract(other) {\n return this.add(other.negate());\n }\n is0() {\n return this.equals(Point.ZERO);\n }\n wNAF(n) {\n return wnaf.wNAFCached(this, pointPrecomputes, n, (comp) => {\n const toInv = Fp.invertBatch(comp.map((p) => p.pz));\n return comp.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n });\n }\n /**\n * Non-constant-time multiplication. Uses double-and-add algorithm.\n * It's faster, but should only be used when you don't care about\n * an exposed private key e.g. sig verification, which works over *public* keys.\n */\n multiplyUnsafe(n) {\n const I = Point.ZERO;\n if (n === _0n)\n return I;\n assertGE(n); // Will throw on 0\n if (n === _1n)\n return this;\n const { endo } = CURVE;\n if (!endo)\n return wnaf.unsafeLadder(this, n);\n // Apply endomorphism\n let { k1neg, k1, k2neg, k2 } = endo.splitScalar(n);\n let k1p = I;\n let k2p = I;\n let d = this;\n while (k1 > _0n || k2 > _0n) {\n if (k1 & _1n)\n k1p = k1p.add(d);\n if (k2 & _1n)\n k2p = k2p.add(d);\n d = d.double();\n k1 >>= _1n;\n k2 >>= _1n;\n }\n if (k1neg)\n k1p = k1p.negate();\n if (k2neg)\n k2p = k2p.negate();\n k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n return k1p.add(k2p);\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 assertGE(scalar);\n let n = scalar;\n let point, fake; // Fake point is used to const-time mult\n const { endo } = CURVE;\n if (endo) {\n const { k1neg, k1, k2neg, k2 } = endo.splitScalar(n);\n let { p: k1p, f: f1p } = this.wNAF(k1);\n let { p: k2p, f: f2p } = this.wNAF(k2);\n k1p = wnaf.constTimeNegate(k1neg, k1p);\n k2p = wnaf.constTimeNegate(k2neg, k2p);\n k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n point = k1p.add(k2p);\n fake = f1p.add(f2p);\n }\n else {\n const { p, f } = this.wNAF(n);\n point = p;\n fake = f;\n }\n // Normalize `z` for both points, but return only real one\n return Point.normalizeZ([point, fake])[0];\n }\n /**\n * Efficiently calculate `aP + bQ`. Unsafe, can expose private key, if used incorrectly.\n * Not using Strauss-Shamir trick: precomputation tables are faster.\n * The trick could be useful if both P and Q are not G (not in our case).\n * @returns non-zero affine point\n */\n multiplyAndAddUnsafe(Q, a, b) {\n const G = Point.BASE; // No Strauss-Shamir trick: we have 10% faster G precomputes\n const mul = (P, a // Select faster multiply() method\n ) => (a === _0n || a === _1n || !P.equals(G) ? P.multiplyUnsafe(a) : P.multiply(a));\n const sum = mul(this, a).add(mul(Q, b));\n return sum.is0() ? undefined : sum;\n }\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 toAffine(iz) {\n const { px: x, py: y, pz: z } = this;\n const is0 = this.is0();\n // If invZ was 0, we return zero point. However we still want to execute\n // all operations, so we replace invZ with a random number, 1.\n if (iz == null)\n iz = is0 ? Fp.ONE : Fp.inv(z);\n const ax = Fp.mul(x, iz);\n const ay = Fp.mul(y, iz);\n const zz = Fp.mul(z, iz);\n if (is0)\n return { x: Fp.ZERO, y: Fp.ZERO };\n if (!Fp.eql(zz, Fp.ONE))\n throw new Error('invZ was invalid');\n return { x: ax, y: ay };\n }\n isTorsionFree() {\n const { h: cofactor, isTorsionFree } = CURVE;\n if (cofactor === _1n)\n return true; // No subgroups, always torsion-free\n if (isTorsionFree)\n return isTorsionFree(Point, this);\n throw new Error('isTorsionFree() has not been declared for the elliptic curve');\n }\n clearCofactor() {\n const { h: cofactor, clearCofactor } = CURVE;\n if (cofactor === _1n)\n return this; // Fast-path\n if (clearCofactor)\n return clearCofactor(Point, this);\n return this.multiplyUnsafe(CURVE.h);\n }\n toRawBytes(isCompressed = true) {\n this.assertValidity();\n return toBytes(Point, this, isCompressed);\n }\n toHex(isCompressed = true) {\n return ut.bytesToHex(this.toRawBytes(isCompressed));\n }\n }\n Point.BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);\n Point.ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO);\n const _bits = CURVE.nBitLength;\n const wnaf = wNAF(Point, CURVE.endo ? Math.ceil(_bits / 2) : _bits);\n // Validate if generator point is on curve\n return {\n CURVE,\n ProjectivePoint: Point,\n normPrivateKeyToScalar,\n weierstrassEquation,\n isWithinCurveOrder,\n };\n}\nfunction validateOpts(curve) {\n const opts = validateBasic(curve);\n ut.validateObject(opts, {\n hash: 'hash',\n hmac: 'function',\n randomBytes: 'function',\n }, {\n bits2int: 'function',\n bits2int_modN: 'function',\n lowS: 'boolean',\n });\n return Object.freeze({ lowS: true, ...opts });\n}\nexport function weierstrass(curveDef) {\n const CURVE = validateOpts(curveDef);\n const { Fp, n: CURVE_ORDER } = CURVE;\n const compressedLen = Fp.BYTES + 1; // e.g. 33 for 32\n const uncompressedLen = 2 * Fp.BYTES + 1; // e.g. 65 for 32\n function isValidFieldElement(num) {\n return _0n < num && num < Fp.ORDER; // 0 is banned since it's not invertible FE\n }\n function modN(a) {\n return mod.mod(a, CURVE_ORDER);\n }\n function invN(a) {\n return mod.invert(a, CURVE_ORDER);\n }\n const { ProjectivePoint: Point, normPrivateKeyToScalar, weierstrassEquation, isWithinCurveOrder, } = weierstrassPoints({\n ...CURVE,\n toBytes(_c, point, isCompressed) {\n const a = point.toAffine();\n const x = Fp.toBytes(a.x);\n const cat = ut.concatBytes;\n if (isCompressed) {\n return cat(Uint8Array.from([point.hasEvenY() ? 0x02 : 0x03]), x);\n }\n else {\n return cat(Uint8Array.from([0x04]), x, Fp.toBytes(a.y));\n }\n },\n fromBytes(bytes) {\n const len = bytes.length;\n const head = bytes[0];\n const tail = bytes.subarray(1);\n // this.assertValidity() is done inside of fromHex\n if (len === compressedLen && (head === 0x02 || head === 0x03)) {\n const x = ut.bytesToNumberBE(tail);\n if (!isValidFieldElement(x))\n throw new Error('Point is not on curve');\n const y2 = weierstrassEquation(x); // y² = x³ + ax + b\n let y = Fp.sqrt(y2); // y = y² ^ (p+1)/4\n const isYOdd = (y & _1n) === _1n;\n // ECDSA\n const isHeadOdd = (head & 1) === 1;\n if (isHeadOdd !== isYOdd)\n y = Fp.neg(y);\n return { x, y };\n }\n else if (len === uncompressedLen && head === 0x04) {\n const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n return { x, y };\n }\n else {\n throw new Error(`Point of length ${len} was invalid. Expected ${compressedLen} compressed bytes or ${uncompressedLen} uncompressed bytes`);\n }\n },\n });\n const numToNByteStr = (num) => ut.bytesToHex(ut.numberToBytesBE(num, CURVE.nByteLength));\n function isBiggerThanHalfOrder(number) {\n const HALF = CURVE_ORDER >> _1n;\n return number > HALF;\n }\n function normalizeS(s) {\n return isBiggerThanHalfOrder(s) ? modN(-s) : s;\n }\n // slice bytes num\n const slcNum = (b, from, to) => ut.bytesToNumberBE(b.slice(from, to));\n /**\n * ECDSA signature with its (r, s) properties. Supports DER & compact representations.\n */\n class Signature {\n constructor(r, s, recovery) {\n this.r = r;\n this.s = s;\n this.recovery = recovery;\n this.assertValidity();\n }\n // pair (bytes of r, bytes of s)\n static fromCompact(hex) {\n const l = CURVE.nByteLength;\n hex = ensureBytes('compactSignature', hex, l * 2);\n return new Signature(slcNum(hex, 0, l), slcNum(hex, l, 2 * l));\n }\n // DER encoded ECDSA signature\n // https://bitcoin.stackexchange.com/questions/57644/what-are-the-parts-of-a-bitcoin-transaction-input-script\n static fromDER(hex) {\n const { r, s } = DER.toSig(ensureBytes('DER', hex));\n return new Signature(r, s);\n }\n assertValidity() {\n // can use assertGE here\n if (!isWithinCurveOrder(this.r))\n throw new Error('r must be 0 < r < CURVE.n');\n if (!isWithinCurveOrder(this.s))\n throw new Error('s must be 0 < s < CURVE.n');\n }\n addRecoveryBit(recovery) {\n return new Signature(this.r, this.s, recovery);\n }\n recoverPublicKey(msgHash) {\n const { r, s, recovery: rec } = this;\n const h = bits2int_modN(ensureBytes('msgHash', msgHash)); // Truncate hash\n if (rec == null || ![0, 1, 2, 3].includes(rec))\n throw new Error('recovery id invalid');\n const radj = rec === 2 || rec === 3 ? r + CURVE.n : r;\n if (radj >= Fp.ORDER)\n throw new Error('recovery id 2 or 3 invalid');\n const prefix = (rec & 1) === 0 ? '02' : '03';\n const R = Point.fromHex(prefix + numToNByteStr(radj));\n const ir = invN(radj); // r^-1\n const u1 = modN(-h * ir); // -hr^-1\n const u2 = modN(s * ir); // sr^-1\n const Q = Point.BASE.multiplyAndAddUnsafe(R, u1, u2); // (sr^-1)R-(hr^-1)G = -(hr^-1)G + (sr^-1)\n if (!Q)\n throw new Error('point at infinify'); // unsafe is fine: no priv data leaked\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, modN(-this.s), this.recovery) : this;\n }\n // DER-encoded\n toDERRawBytes() {\n return ut.hexToBytes(this.toDERHex());\n }\n toDERHex() {\n return DER.hexFromSig({ r: this.r, s: this.s });\n }\n // padded bytes of r, then padded bytes of s\n toCompactRawBytes() {\n return ut.hexToBytes(this.toCompactHex());\n }\n toCompactHex() {\n return numToNByteStr(this.r) + numToNByteStr(this.s);\n }\n }\n const utils = {\n isValidPrivateKey(privateKey) {\n try {\n normPrivateKeyToScalar(privateKey);\n return true;\n }\n catch (error) {\n return false;\n }\n },\n normPrivateKeyToScalar: normPrivateKeyToScalar,\n /**\n * Produces cryptographically secure private key from random of size\n * (groupLen + ceil(groupLen / 2)) with modulo bias being negligible.\n */\n randomPrivateKey: () => {\n const length = mod.getMinHashLength(CURVE.n);\n return mod.mapHashToField(CURVE.randomBytes(length), CURVE.n);\n },\n /**\n * Creates precompute table for an arbitrary EC point. Makes point \"cached\".\n * Allows to massively speed-up `point.multiply(scalar)`.\n * @returns cached point\n * @example\n * const fast = utils.precompute(8, ProjectivePoint.fromHex(someonesPubKey));\n * fast.multiply(privKey); // much faster ECDH now\n */\n precompute(windowSize = 8, point = Point.BASE) {\n point._setWindowSize(windowSize);\n point.multiply(BigInt(3)); // 3 is arbitrary, just need any number here\n return point;\n },\n };\n /**\n * Computes public key for a private key. Checks for validity of the private key.\n * @param privateKey private key\n * @param isCompressed whether to return compact (default), or full key\n * @returns Public key, full when isCompressed=false; short when isCompressed=true\n */\n function getPublicKey(privateKey, isCompressed = true) {\n return Point.fromPrivateKey(privateKey).toRawBytes(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 const arr = item instanceof Uint8Array;\n const str = typeof item === 'string';\n const len = (arr || str) && item.length;\n if (arr)\n return len === compressedLen || len === uncompressedLen;\n if (str)\n return len === 2 * compressedLen || len === 2 * uncompressedLen;\n if (item instanceof Point)\n return true;\n return false;\n }\n /**\n * ECDH (Elliptic Curve Diffie Hellman).\n * Computes shared public key from private key and public key.\n * Checks: 1) private key validity 2) shared key is on-curve.\n * Does NOT hash the result.\n * @param privateA private key\n * @param publicB different public key\n * @param isCompressed whether to return compact (default), or full key\n * @returns shared public key\n */\n function getSharedSecret(privateA, publicB, isCompressed = true) {\n if (isProbPub(privateA))\n throw new Error('first arg must be private key');\n if (!isProbPub(publicB))\n throw new Error('second arg must be public key');\n const b = Point.fromHex(publicB); // check for being on-curve\n return b.multiply(normPrivateKeyToScalar(privateA)).toRawBytes(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 = CURVE.bits2int ||\n function (bytes) {\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 = ut.bytesToNumberBE(bytes); // check for == u8 done here\n const delta = bytes.length * 8 - CURVE.nBitLength; // truncate to nBitLength leftmost bits\n return delta > 0 ? num >> BigInt(delta) : num;\n };\n const bits2int_modN = CURVE.bits2int_modN ||\n function (bytes) {\n return modN(bits2int(bytes)); // can't use bytesToNumberBE here\n };\n // NOTE: pads output with zero as per spec\n const ORDER_MASK = ut.bitMask(CURVE.nBitLength);\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 if (typeof num !== 'bigint')\n throw new Error('bigint expected');\n if (!(_0n <= num && num < ORDER_MASK))\n throw new Error(`bigint expected < 2^${CURVE.nBitLength}`);\n // works with order, can have different size than numToField!\n return ut.numberToBytesBE(num, CURVE.nByteLength);\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, this will be wrong at least for P521.\n // Also it can be bigger for P224 + SHA256\n function prepSig(msgHash, privateKey, opts = defaultSigOpts) {\n if (['recovered', 'canonical'].some((k) => k in opts))\n throw new Error('sign() legacy options not supported');\n const { hash, randomBytes } = CURVE;\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 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 nBitLength % 8 !== 0. Because of that, we unwrap it here as int2octets call.\n // const bits2octets = (bits) => int2octets(bits2int_modN(bits))\n const h1int = bits2int_modN(msgHash);\n const d = normPrivateKeyToScalar(privateKey); // validate private key, convert to bigint\n const seedArgs = [int2octets(d), int2octets(h1int)];\n // extraEntropy. RFC6979 3.6: additional k' (optional).\n if (ent != null) {\n // K = HMAC_K(V || 0x00 || int2octets(x) || bits2octets(h1) || k')\n const e = ent === true ? randomBytes(Fp.BYTES) : ent; // generate random bytes OR pass as-is\n seedArgs.push(ensureBytes('extraEntropy', e)); // check for being bytes\n }\n const seed = ut.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 function k2sig(kBytes) {\n // RFC 6979 Section 3.2, step 3: k = bits2int(T)\n const k = bits2int(kBytes); // Cannot use fields methods, since it is group element\n if (!isWithinCurveOrder(k))\n return; // Important: all mod() calls here must be done over N\n const ik = invN(k); // k^-1 mod n\n const q = Point.BASE.multiply(k).toAffine(); // q = Gk\n const r = modN(q.x); // r = q.x mod n\n if (r === _0n)\n return;\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 const s = modN(ik * modN(m + r * d)); // Not using blinding here\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: CURVE.lowS, prehash: false };\n const defaultVerOpts = { lowS: CURVE.lowS, prehash: false };\n /**\n * Signs message hash with a private key.\n * ```\n * sign(m, d, k) where\n * (x, y) = G × k\n * r = x mod n\n * s = (m + dr)/k mod n\n * ```\n * @param msgHash NOT message. msg needs to be hashed to `msgHash`, or use `prehash`.\n * @param privKey private key\n * @param opts lowS for non-malleable sigs. extraEntropy for mixing randomness into k. prehash will hash first arg.\n * @returns signature with recovery param\n */\n function sign(msgHash, privKey, opts = defaultSigOpts) {\n const { seed, k2sig } = prepSig(msgHash, privKey, opts); // Steps A, D of RFC6979 3.2.\n const C = CURVE;\n const drbg = ut.createHmacDrbg(C.hash.outputLen, C.nByteLength, C.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._setWindowSize(8);\n // utils.precompute(8, ProjectivePoint.BASE)\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 if ('strict' in opts)\n throw new Error('options.strict was renamed to lowS');\n const { lowS, prehash } = opts;\n let _sig = undefined;\n let P;\n try {\n if (typeof sg === 'string' || sg instanceof Uint8Array) {\n // Signature can be represented in 2 ways: compact (2*nByteLength) & DER (variable-length).\n // Since DER can also be 2*nByteLength 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 _sig = Signature.fromCompact(sg);\n }\n }\n else if (typeof sg === 'object' && typeof sg.r === 'bigint' && typeof sg.s === 'bigint') {\n const { r, s } = sg;\n _sig = new Signature(r, s);\n }\n else {\n throw new Error('PARSE');\n }\n P = Point.fromHex(publicKey);\n }\n catch (error) {\n if (error.message === 'PARSE')\n throw new Error(`signature must be Signature instance, Uint8Array or hex string`);\n return false;\n }\n if (lowS && _sig.hasHighS())\n return false;\n if (prehash)\n msgHash = CURVE.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 = invN(s); // s^-1\n const u1 = modN(h * is); // u1 = hs^-1 mod n\n const u2 = modN(r * is); // u2 = rs^-1 mod n\n const R = Point.BASE.multiplyAndAddUnsafe(P, u1, u2)?.toAffine(); // R = u1⋅G + u2⋅P\n if (!R)\n return false;\n const v = modN(R.x);\n return v === r;\n }\n return {\n CURVE,\n getPublicKey,\n getSharedSecret,\n sign,\n verify,\n ProjectivePoint: Point,\n Signature,\n utils,\n };\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 mod.validateField(Fp);\n if (!Fp.isValid(opts.A) || !Fp.isValid(opts.B) || !Fp.isValid(opts.Z))\n throw new Error('mapToCurveSimpleSWU: invalid opts');\n const sqrtRatio = SWUFpSqrtRatio(Fp, opts.Z);\n if (!Fp.isOdd)\n throw new Error('Fp.isOdd is not implemented!');\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, opts.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, opts.B); // 6. tv3 = B * tv3\n tv4 = Fp.cmov(opts.Z, Fp.neg(tv2), !Fp.eql(tv2, Fp.ZERO)); // 7. tv4 = CMOV(Z, -tv2, tv2 != 0)\n tv4 = Fp.mul(tv4, opts.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, opts.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, opts.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 x = Fp.div(x, tv4); // 25. x = x / tv4\n return { x, y };\n };\n}\n//# sourceMappingURL=weierstrass.js.map","import { hash as assertHash, bytes as assertBytes, exists as assertExists } from './_assert.js';\nimport { Hash, toBytes } from './utils.js';\n// HMAC (RFC 2104)\nexport class HMAC extends Hash {\n constructor(hash, _key) {\n super();\n this.finished = false;\n this.destroyed = false;\n assertHash(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 pad.fill(0);\n }\n update(buf) {\n assertExists(this);\n this.iHash.update(buf);\n return this;\n }\n digestInto(out) {\n assertExists(this);\n assertBytes(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 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 */\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","/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { hmac } from '@noble/hashes/hmac';\nimport { concatBytes, randomBytes } from '@noble/hashes/utils';\nimport { weierstrass } from './abstract/weierstrass.js';\n// connects noble-curves to noble-hashes\nexport function getHash(hash) {\n return {\n hash,\n hmac: (key, ...msgs) => hmac(hash, key, concatBytes(...msgs)),\n randomBytes,\n };\n}\nexport function createCurve(curveDef, defHash) {\n const create = (hash) => weierstrass({ ...curveDef, ...getHash(hash) });\n return Object.freeze({ ...create(defHash), create });\n}\n//# sourceMappingURL=_shortw_utils.js.map","/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha256 } from '@noble/hashes/sha256';\nimport { randomBytes } from '@noble/hashes/utils';\nimport { Field, mod, pow2 } from './abstract/modular.js';\nimport { mapToCurveSimpleSWU } from './abstract/weierstrass.js';\nimport { bytesToNumberBE, concatBytes, ensureBytes, numberToBytesBE } from './abstract/utils.js';\nimport { createHasher, isogenyMap } from './abstract/hash-to-curve.js';\nimport { createCurve } from './_shortw_utils.js';\nconst secp256k1P = BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f');\nconst secp256k1N = BigInt('0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141');\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst divNearest = (a, b) => (a + b / _2n) / b;\n/**\n * √n = n^((p+1)/4) for fields p = 3 mod 4. We unwrap the loop and multiply bit-by-bit.\n * (P+1n/4n).toString(2) would produce bits [223x 1, 0, 22x 1, 4x 0, 11, 00]\n */\nfunction sqrtMod(y) {\n const P = secp256k1P;\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 (!Fp.eql(Fp.sqr(root), y))\n throw new Error('Cannot find square root');\n return root;\n}\nconst Fp = Field(secp256k1P, undefined, undefined, { sqrt: sqrtMod });\nexport const secp256k1 = createCurve({\n a: BigInt(0),\n b: BigInt(7),\n Fp,\n n: secp256k1N,\n // Base point (x, y) aka generator point\n Gx: BigInt('55066263022277343669578718895168534326250603453777594175500187360389116729240'),\n Gy: BigInt('32670510020758816978083085130507043184471273380659243275938904335757337482424'),\n h: BigInt(1),\n lowS: true,\n /**\n * secp256k1 belongs to Koblitz curves: it has efficiently computable endomorphism.\n * Endomorphism uses 2x less RAM, speeds up precomputation by 2x and ECDH / key recovery by 20%.\n * For precomputed wNAF it trades off 1/2 init time & 1/3 ram for 20% perf hit.\n * Explanation: https://gist.github.com/paulmillr/eb670806793e84df628a7c434a873066\n */\n endo: {\n beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'),\n splitScalar: (k) => {\n const n = secp256k1N;\n const a1 = BigInt('0x3086d221a7d46bcde86c90e49284eb15');\n const b1 = -_1n * BigInt('0xe4437ed6010e88286f547fa90abfe4c3');\n const a2 = BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8');\n const b2 = a1;\n const POW_2_128 = BigInt('0x100000000000000000000000000000000'); // (2n**128n).toString(16)\n const c1 = divNearest(b2 * k, n);\n const c2 = divNearest(-b1 * k, n);\n let k1 = mod(k - c1 * a1 - c2 * a2, n);\n let k2 = mod(-c1 * b1 - c2 * b2, n);\n const k1neg = k1 > POW_2_128;\n const k2neg = k2 > POW_2_128;\n if (k1neg)\n k1 = n - k1;\n if (k2neg)\n k2 = n - k2;\n if (k1 > POW_2_128 || k2 > POW_2_128) {\n throw new Error('splitScalar: Endomorphism failed, k=' + k);\n }\n return { k1neg, k1, k2neg, k2 };\n },\n },\n}, sha256);\n// Schnorr signatures are superior to ECDSA from above. Below is Schnorr-specific BIP0340 code.\n// https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki\nconst _0n = BigInt(0);\nconst fe = (x) => typeof x === 'bigint' && _0n < x && x < secp256k1P;\nconst ge = (x) => typeof x === 'bigint' && _0n < x && x < secp256k1N;\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.toRawBytes(true).slice(1);\nconst numTo32b = (n) => numberToBytesBE(n, 32);\nconst modP = (x) => mod(x, secp256k1P);\nconst modN = (x) => mod(x, secp256k1N);\nconst Point = secp256k1.ProjectivePoint;\nconst GmulAdd = (Q, a, b) => Point.BASE.multiplyAndAddUnsafe(Q, a, b);\n// Calculate point, scalar and bytes\nfunction schnorrGetExtPubKey(priv) {\n let d_ = secp256k1.utils.normPrivateKeyToScalar(priv); // same method executed in fromPrivateKey\n let p = Point.fromPrivateKey(d_); // P = d'⋅G; 0 < d' < n check is done inside\n const scalar = p.hasEvenY() ? d_ : modN(-d_);\n return { scalar: scalar, bytes: pointToBytes(p) };\n}\n/**\n * lift_x from BIP340. Convert 32-byte x coordinate to elliptic curve point.\n * @returns valid point checked for being on-curve\n */\nfunction lift_x(x) {\n if (!fe(x))\n throw new Error('bad x: need 0 < x < 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 (y % _2n !== _0n)\n y = modP(-y); // Return the unique point P such that x(P) = x and\n const p = new Point(x, y, _1n); // y(P) = y if y mod 2 = 0 or y(P) = p-y otherwise.\n p.assertValidity();\n return p;\n}\n/**\n * Create tagged hash, convert it to bigint, reduce modulo-n.\n */\nfunction challenge(...args) {\n return modN(bytesToNumberBE(taggedHash('BIP0340/challenge', ...args)));\n}\n/**\n * Schnorr public key is just `x` coordinate of Point as per BIP340.\n */\nfunction schnorrGetPublicKey(privateKey) {\n return schnorrGetExtPubKey(privateKey).bytes; // d'=int(sk). Fail if d'=0 or d'≥n. Ret bytes(d'⋅G)\n}\n/**\n * Creates Schnorr signature as per BIP340. Verifies itself before returning anything.\n * auxRand is optional and is not the sole source of k generation: bad CSPRNG won't be dangerous.\n */\nfunction schnorrSign(message, privateKey, auxRand = randomBytes(32)) {\n const m = ensureBytes('message', message);\n const { bytes: px, scalar: d } = schnorrGetExtPubKey(privateKey); // checks for isWithinCurveOrder\n const a = ensureBytes('auxRand', auxRand, 32); // Auxiliary random data a: a 32-byte array\n const t = numTo32b(d ^ bytesToNumberBE(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(bytesToNumberBE(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(bytesToNumberBE(pub)); // P = lift_x(int(pk)); fail if that fails\n const r = bytesToNumberBE(sig.subarray(0, 32)); // Let r = int(sig[0:32]); fail if r ≥ p.\n if (!fe(r))\n return false;\n const s = bytesToNumberBE(sig.subarray(32, 64)); // Let s = int(sig[32:64]); fail if s ≥ n.\n if (!ge(s))\n return false;\n const e = challenge(numTo32b(r), pointToBytes(P), m); // int(challenge(bytes(r)||bytes(P)||m))%n\n const R = GmulAdd(P, s, modN(-e)); // R = s⋅G - e⋅P\n if (!R || !R.hasEvenY() || R.toAffine().x !== r)\n return false; // -eP == (n-e)P\n return true; // Fail if is_infinite(R) / not has_even_y(R) / x(R) ≠ r.\n }\n catch (error) {\n return false;\n }\n}\nexport const schnorr = /* @__PURE__ */ (() => ({\n getPublicKey: schnorrGetPublicKey,\n sign: schnorrSign,\n verify: schnorrVerify,\n utils: {\n randomPrivateKey: secp256k1.utils.randomPrivateKey,\n lift_x,\n pointToBytes,\n numberToBytesBE,\n bytesToNumberBE,\n taggedHash,\n mod,\n },\n}))();\nconst isoMap = /* @__PURE__ */ (() => isogenyMap(Fp, [\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(Fp, {\n A: BigInt('0x3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533'),\n B: BigInt('1771'),\n Z: Fp.create(BigInt('-11')),\n}))();\nconst htf = /* @__PURE__ */ (() => createHasher(secp256k1.ProjectivePoint, (scalars) => {\n const { x, y } = mapSWU(Fp.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: Fp.ORDER,\n m: 1,\n k: 128,\n expand: 'xmd',\n hash: sha256,\n}))();\nexport const hashToCurve = /* @__PURE__ */ (() => htf.hashToCurve)();\nexport const encodeToCurve = /* @__PURE__ */ (() => htf.encodeToCurve)();\n//# sourceMappingURL=secp256k1.js.map","const U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n// We are not using BigUint64Array, because they are extremely slow as per 2022\nfunction fromBig(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\nfunction split(lst, le = false) {\n let Ah = new Uint32Array(lst.length);\n let Al = new Uint32Array(lst.length);\n for (let i = 0; i < lst.length; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\nconst toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h, _l, s) => h >>> s;\nconst shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h, l) => l;\nconst rotr32L = (h, _l) => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n// prettier-ignore\nexport { fromBig, split, toBig, shrSH, shrSL, rotrSH, rotrSL, rotrBH, rotrBL, rotr32H, rotr32L, rotlSH, rotlSL, rotlBH, rotlBL, add, add3L, add3H, add4L, add4H, add5H, add5L, };\n// prettier-ignore\nconst u64 = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n//# sourceMappingURL=_u64.js.map","import { bytes, exists, number, output } from './_assert.js';\nimport { rotlBH, rotlBL, rotlSH, rotlSL, split } from './_u64.js';\nimport { Hash, u32, toBytes, wrapConstructor, wrapXOFConstructorWithOpts, } from './utils.js';\n// SHA3 (keccak) is based on a new design: basically, the internal state is bigger than output size.\n// It's called a sponge function.\n// Various per round constants calculations\nconst [SHA3_PI, SHA3_ROTL, _SHA3_IOTA] = [[], [], []];\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nconst _2n = /* @__PURE__ */ BigInt(2);\nconst _7n = /* @__PURE__ */ BigInt(7);\nconst _256n = /* @__PURE__ */ BigInt(256);\nconst _0x71n = /* @__PURE__ */ BigInt(0x71);\nfor (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {\n // Pi\n [x, y] = [y, (2 * x + 3 * y) % 5];\n SHA3_PI.push(2 * (5 * y + x));\n // Rotational\n SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n // Iota\n let t = _0n;\n for (let j = 0; j < 7; j++) {\n R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n if (R & _2n)\n t ^= _1n << ((_1n << /* @__PURE__ */ BigInt(j)) - _1n);\n }\n _SHA3_IOTA.push(t);\n}\nconst [SHA3_IOTA_H, SHA3_IOTA_L] = /* @__PURE__ */ split(_SHA3_IOTA, true);\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h, l, s) => (s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s));\nconst rotlL = (h, l, s) => (s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s));\n// Same as keccakf1600, but allows to skip some rounds\nexport function keccakP(s, rounds = 24) {\n const B = new Uint32Array(5 * 2);\n // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n for (let round = 24 - rounds; round < 24; round++) {\n // Theta θ\n for (let x = 0; x < 10; x++)\n B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n for (let x = 0; x < 10; x += 2) {\n const idx1 = (x + 8) % 10;\n const idx0 = (x + 2) % 10;\n const B0 = B[idx0];\n const B1 = B[idx0 + 1];\n const Th = rotlH(B0, B1, 1) ^ B[idx1];\n const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n for (let y = 0; y < 50; y += 10) {\n s[x + y] ^= Th;\n s[x + y + 1] ^= Tl;\n }\n }\n // Rho (ρ) and Pi (π)\n let curH = s[2];\n let curL = s[3];\n for (let t = 0; t < 24; t++) {\n const shift = SHA3_ROTL[t];\n const Th = rotlH(curH, curL, shift);\n const Tl = rotlL(curH, curL, shift);\n const PI = SHA3_PI[t];\n curH = s[PI];\n curL = s[PI + 1];\n s[PI] = Th;\n s[PI + 1] = Tl;\n }\n // Chi (χ)\n for (let y = 0; y < 50; y += 10) {\n for (let x = 0; x < 10; x++)\n B[x] = s[y + x];\n for (let x = 0; x < 10; x++)\n s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n }\n // Iota (ι)\n s[0] ^= SHA3_IOTA_H[round];\n s[1] ^= SHA3_IOTA_L[round];\n }\n B.fill(0);\n}\nexport class Keccak extends Hash {\n // NOTE: we accept arguments in bytes instead of bits here.\n constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24) {\n super();\n this.blockLen = blockLen;\n this.suffix = suffix;\n this.outputLen = outputLen;\n this.enableXOF = enableXOF;\n this.rounds = rounds;\n this.pos = 0;\n this.posOut = 0;\n this.finished = false;\n this.destroyed = false;\n // Can be passed from user as dkLen\n number(outputLen);\n // 1600 = 5x5 matrix of 64bit. 1600 bits === 200 bytes\n if (0 >= this.blockLen || this.blockLen >= 200)\n throw new Error('Sha3 supports only keccak-f1600 function');\n this.state = new Uint8Array(200);\n this.state32 = u32(this.state);\n }\n keccak() {\n keccakP(this.state32, this.rounds);\n this.posOut = 0;\n this.pos = 0;\n }\n update(data) {\n exists(this);\n const { blockLen, state } = this;\n data = toBytes(data);\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n for (let i = 0; i < take; i++)\n state[this.pos++] ^= data[pos++];\n if (this.pos === blockLen)\n this.keccak();\n }\n return this;\n }\n finish() {\n if (this.finished)\n return;\n this.finished = true;\n const { state, suffix, pos, blockLen } = this;\n // Do the padding\n state[pos] ^= suffix;\n if ((suffix & 0x80) !== 0 && pos === blockLen - 1)\n this.keccak();\n state[blockLen - 1] ^= 0x80;\n this.keccak();\n }\n writeInto(out) {\n exists(this, false);\n bytes(out);\n this.finish();\n const bufferOut = this.state;\n const { blockLen } = this;\n for (let pos = 0, len = out.length; pos < len;) {\n if (this.posOut >= blockLen)\n this.keccak();\n const take = Math.min(blockLen - this.posOut, len - pos);\n out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n this.posOut += take;\n pos += take;\n }\n return out;\n }\n xofInto(out) {\n // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n if (!this.enableXOF)\n throw new Error('XOF is not possible for this instance');\n return this.writeInto(out);\n }\n xof(bytes) {\n number(bytes);\n return this.xofInto(new Uint8Array(bytes));\n }\n digestInto(out) {\n output(out, this);\n if (this.finished)\n throw new Error('digest() was already called');\n this.writeInto(out);\n this.destroy();\n return out;\n }\n digest() {\n return this.digestInto(new Uint8Array(this.outputLen));\n }\n destroy() {\n this.destroyed = true;\n this.state.fill(0);\n }\n _cloneInto(to) {\n const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n to || (to = new Keccak(blockLen, suffix, outputLen, enableXOF, rounds));\n to.state32.set(this.state32);\n to.pos = this.pos;\n to.posOut = this.posOut;\n to.finished = this.finished;\n to.rounds = rounds;\n // Suffix can change in cSHAKE\n to.suffix = suffix;\n to.outputLen = outputLen;\n to.enableXOF = enableXOF;\n to.destroyed = this.destroyed;\n return to;\n }\n}\nconst gen = (suffix, blockLen, outputLen) => wrapConstructor(() => new Keccak(blockLen, suffix, outputLen));\nexport const sha3_224 = /* @__PURE__ */ gen(0x06, 144, 224 / 8);\n/**\n * SHA3-256 hash function\n * @param message - that would be hashed\n */\nexport const sha3_256 = /* @__PURE__ */ gen(0x06, 136, 256 / 8);\nexport const sha3_384 = /* @__PURE__ */ gen(0x06, 104, 384 / 8);\nexport const sha3_512 = /* @__PURE__ */ gen(0x06, 72, 512 / 8);\nexport const keccak_224 = /* @__PURE__ */ gen(0x01, 144, 224 / 8);\n/**\n * keccak-256 hash function. Different from SHA3-256.\n * @param message - that would be hashed\n */\nexport const keccak_256 = /* @__PURE__ */ gen(0x01, 136, 256 / 8);\nexport const keccak_384 = /* @__PURE__ */ gen(0x01, 104, 384 / 8);\nexport const keccak_512 = /* @__PURE__ */ gen(0x01, 72, 512 / 8);\nconst genShake = (suffix, blockLen, outputLen) => wrapXOFConstructorWithOpts((opts = {}) => new Keccak(blockLen, suffix, opts.dkLen === undefined ? outputLen : opts.dkLen, true));\nexport const shake128 = /* @__PURE__ */ genShake(0x1f, 168, 128 / 8);\nexport const shake256 = /* @__PURE__ */ genShake(0x1f, 136, 256 / 8);\n//# sourceMappingURL=sha3.js.map","// Copyright 2026 The Swarm Authors. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Hex utilities\n *\n * Canonical location for hex conversion functions\n */\n\nimport type { Address } from \"../schemas\"\n\n/**\n * Convert a hex string (optional 0x prefix) to Uint8Array\n *\n * @param hexString - Hex string (e.g., \"deadbeef\" or \"0xdeadbeef\")\n * @returns Uint8Array\n * @throws {Error} If the input has odd length or non-hex characters — a\n * malformed value must fail loudly, not silently decode to zero bytes\n */\nexport function hexToUint8Array(hexString: string): Uint8Array {\n const hex = hexString.replace(/^0x/i, \"\")\n if (hex.length % 2 !== 0 || !/^[0-9a-fA-F]*$/.test(hex)) {\n throw new Error(\"Invalid hex string.\")\n }\n\n const bytes = new Uint8Array(hex.length / 2)\n for (let i = 0; i < hex.length; i += 2) {\n bytes[i / 2] = parseInt(hex.substring(i, i + 2), 16)\n }\n\n return bytes\n}\n\n/**\n * Convert a Uint8Array to hex string\n *\n * @param bytes - Uint8Array to convert\n * @returns Hex string (e.g., \"deadbeef\")\n */\nexport function uint8ArrayToHex(bytes: Uint8Array): string {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\")\n}\n\n/**\n * Create a validated hex address string (40 lowercase hex chars).\n * Accepts optional 0x prefix and any case.\n *\n * @param input - Ethereum address string (with or without 0x prefix)\n * @returns Normalized 40-character lowercase hex string\n * @throws {Error} If the input is not a valid 40-char hex address\n */\nexport function hexAddress(input: string): Address {\n const clean = input.replace(/^0x/i, \"\").toLowerCase()\n if (!/^[0-9a-f]{40}$/.test(clean)) {\n throw new Error(\n `Invalid hex address: expected 40 hex characters (with optional 0x prefix), got \"${input}\"`,\n )\n }\n return clean\n}\n","// Copyright 2026 The Swarm Authors. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * EIP-191 `personal_sign` over plain text, for the statements Swarm ID signs\n * and readers check (docs/Chat-Binding.md, docs/Wallet-Link.md). A signature\n * here is `0x` + r ‖ s ‖ v, 65 bytes, with v 27 or 28 and s in the lower half\n * of the curve order, which is what any Ethereum library recovers the same way.\n */\n\nimport { secp256k1 } from \"@noble/curves/secp256k1\"\nimport { keccak_256 } from \"@noble/hashes/sha3\"\nimport { hexToUint8Array, uint8ArrayToHex } from \"./hex\"\n\nconst PERSONAL_MESSAGE_PREFIX = \"\\x19Ethereum Signed Message:\\n\"\n/** EIP-191 signatures carry the recovery id offset by this. */\nconst RECOVERY_OFFSET = 27\nconst SIGNATURE_HEX_PATTERN = /^0x[0-9a-fA-F]{130}$/\nconst COMPACT_SIGNATURE_HEX_LENGTH = 128\nconst ADDRESS_BYTES = 20\nconst UNCOMPRESSED_PREFIX_BYTES = 1\nconst HEX_RADIX = 16\n\n/** The EIP-191 version 0x45 digest `personal_sign` signs. */\nfunction personalMessageHash(message: string): Uint8Array {\n const body = new TextEncoder().encode(message)\n const prefix = new TextEncoder().encode(\n `${PERSONAL_MESSAGE_PREFIX}${body.length}`,\n )\n const whole = new Uint8Array(prefix.length + body.length)\n whole.set(prefix)\n whole.set(body, prefix.length)\n return keccak_256(whole)\n}\n\nfunction addressOfPublicKey(uncompressed: Uint8Array): string {\n const hash = keccak_256(uncompressed.slice(UNCOMPRESSED_PREFIX_BYTES))\n return `0x${uint8ArrayToHex(hash.slice(-ADDRESS_BYTES))}`\n}\n\n/**\n * Sign `message` as `personal_sign` does.\n *\n * @param privateKey - bare hex, 32 bytes\n * @returns `0x` + r ‖ s ‖ v, v 27 or 28, s low\n */\nexport function personalSign(message: string, privateKey: string): string {\n const signed = secp256k1.sign(\n personalMessageHash(message),\n hexToUint8Array(privateKey),\n )\n const recovery = (signed.recovery + RECOVERY_OFFSET).toString(HEX_RADIX)\n return `0x${signed.toCompactHex()}${recovery}`\n}\n\n/**\n * The address that signed `message`, `0x` + 40 lower-case hex characters.\n * A valid signature over a changed message recovers SOME address, so a caller\n * always compares the result with the signer it expects.\n *\n * @param subject - how errors name the signature, e.g. \"Chat binding signature\"\n * @throws on a signature that is not 65 bytes of 0x hex, has v other than 27\n * or 28, has a high s, or does not recover a public key.\n */\nexport function recoverPersonalSigner(\n message: string,\n signature: string,\n subject: string,\n): string {\n if (!SIGNATURE_HEX_PATTERN.test(signature)) {\n throw new Error(`${subject} is not 65 bytes of 0x hex.`)\n }\n const compact = signature.slice(2, 2 + COMPACT_SIGNATURE_HEX_LENGTH)\n const recovery =\n parseInt(signature.slice(2 + COMPACT_SIGNATURE_HEX_LENGTH), HEX_RADIX) -\n RECOVERY_OFFSET\n if (recovery !== 0 && recovery !== 1) {\n throw new Error(`${subject} has a recovery byte other than 27 or 28.`)\n }\n try {\n const parsed = secp256k1.Signature.fromCompact(compact)\n if (parsed.hasHighS()) {\n throw new Error(\"high s\")\n }\n const point = parsed\n .addRecoveryBit(recovery)\n .recoverPublicKey(personalMessageHash(message))\n return addressOfPublicKey(point.toRawBytes(false))\n } catch (error) {\n throw new Error(`${subject} does not recover a signer: ${String(error)}`)\n }\n}\n","// Copyright 2026 The Swarm Authors. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * The wallet link: one statement, signed by both keys, saying \"this Swarm ID\n * account and this Ethereum wallet belong to the same person\"\n * (docs/Wallet-Link.md).\n *\n * A site never learns the wallet an account is secured with, only the\n * account's own address. A person who wants readers to see their ENS name\n * turns the link on in Swarm ID. The wallet signs the message with EIP-191\n * `personal_sign`, and the account's own key countersigns the same message,\n * so neither key can claim the other alone. A reader checks both signatures\n * against the addresses the message names, then looks up the wallet's ENS\n * name itself (`resolveVerifiedEnsName`).\n *\n * The format mirrors the chat binding's (`chat-binding.ts`): plain lines, the\n * first naming the format and its version, and every other shape refused. The\n * second says in plain words what the person signs, since a wallet shows the\n * text and nothing else, so a site that asks a wallet to sign a link naming\n * someone else's account has to show that sentence to get it.\n */\n\nimport { PrivateKey } from \"@ethersphere/bee-js\"\nimport { personalSign, recoverPersonalSigner } from \"./personal-sign\"\n\n/** The first line, which also versions the format. */\nexport const WALLET_LINK_TITLE = \"Swarm ID wallet link v1\"\n\n/** The second line, what the wallet's owner agrees to, read exactly. */\nexport const WALLET_LINK_STATEMENT =\n \"I link this wallet to the Swarm ID account below, so sites may show my ENS name beside its messages.\"\n\nconst ACCOUNT_PREFIX = \"Account: \"\nconst WALLET_PREFIX = \"Wallet: \"\nconst DATE_PREFIX = \"Date: \"\nconst LINE_SEPARATOR = \"\\n\"\nconst LINE_COUNT = 5\n\nconst ADDRESS_PATTERN = /^0x[0-9a-f]{40}$/\nconst ADDRESS_INPUT_PATTERN = /^(0x)?[0-9a-fA-F]{40}$/\n/**\n * One spelling per signature, lower case as `personalSign` writes it, so this\n * reader and the chat library's, which signs the link's bytes into each\n * message, accept exactly the same links.\n */\nexport const WALLET_LINK_SIGNATURE_PATTERN = /^0x[0-9a-f]{130}$/\n/** `Date.prototype.toISOString` exactly: UTC, milliseconds, a `Z`. */\nconst ISO_UTC_PATTERN = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$/\n\n/** A signed link as it travels and is stored. */\nexport interface WalletLink {\n message: string\n /** The wallet's `personal_sign` of `message`, `0x` + r ‖ s ‖ v, 65 bytes. */\n walletSignature: string\n /** The account key's `personal_sign` of `message`, in the same form. */\n accountSignature: string\n}\n\n/** The three fields a link message carries, as the message spells them. */\nexport interface WalletLinkFields {\n /** The Swarm ID account's address, `0x` + 40 lower-case hex characters. */\n account: string\n /** The wallet's address, in the same form. */\n wallet: string\n /** ISO 8601 UTC, as `Date.prototype.toISOString` writes it. */\n date: string\n}\n\n/** A link both signatures were checked for. Its fields are what it names. */\nexport type VerifiedWalletLink = WalletLinkFields\n\n/** What a link has to name for a reader to accept it. */\nexport interface ExpectedWalletLink {\n /** The account the reader expects, in any case, with or without `0x`. */\n account: string\n}\n\nfunction normalizeAddress(value: string): string {\n return value.toLowerCase().replace(/^0x/, \"\")\n}\n\nfunction recoverLinkSigner(\n message: string,\n signature: string,\n subject: string,\n): string {\n if (!WALLET_LINK_SIGNATURE_PATTERN.test(signature)) {\n throw new Error(`${subject} is not 0x and 130 lower-case hex characters.`)\n }\n return recoverPersonalSigner(message, signature, subject)\n}\n\nfunction canonicalDate(text: string): boolean {\n if (!ISO_UTC_PATTERN.test(text)) {\n return false\n }\n const time = Date.parse(text)\n return !Number.isNaN(time) && new Date(time).toISOString() === text\n}\n\n/** Build the exact five-line message for these fields. */\nexport function buildWalletLinkMessage(fields: {\n account: string\n wallet: string\n date: Date\n}): string {\n if (!ADDRESS_INPUT_PATTERN.test(fields.account)) {\n throw new Error(\"Wallet link account is not 20 bytes of hex.\")\n }\n if (!ADDRESS_INPUT_PATTERN.test(fields.wallet)) {\n throw new Error(\"Wallet link wallet is not 20 bytes of hex.\")\n }\n if (Number.isNaN(fields.date.getTime())) {\n throw new Error(\"Wallet link date is not a valid date.\")\n }\n return [\n WALLET_LINK_TITLE,\n WALLET_LINK_STATEMENT,\n `${ACCOUNT_PREFIX}0x${normalizeAddress(fields.account)}`,\n `${WALLET_PREFIX}0x${normalizeAddress(fields.wallet)}`,\n `${DATE_PREFIX}${fields.date.toISOString()}`,\n ].join(LINE_SEPARATOR)\n}\n\nfunction field(line: string, prefix: string): string {\n if (!line.startsWith(prefix)) {\n throw new Error(`Wallet link line does not start with \"${prefix}\".`)\n }\n return line.slice(prefix.length)\n}\n\nfunction address(line: string, prefix: string): string {\n const value = field(line, prefix)\n if (!ADDRESS_PATTERN.test(value)) {\n throw new Error(\n `Wallet link \"${prefix.trim()}\" is not 0x and 40 lower-case hex characters.`,\n )\n }\n return value\n}\n\n/**\n * Read the fields out of a link message, refusing every shape but the one\n * `buildWalletLinkMessage` writes: another first line, another statement, a\n * missing or extra line, a trailing newline, an address in another spelling, a date in\n * another form.\n */\nexport function parseWalletLinkMessage(message: string): WalletLinkFields {\n const lines = message.split(LINE_SEPARATOR)\n if (lines.length !== LINE_COUNT) {\n throw new Error(`Wallet link has ${lines.length} lines, not ${LINE_COUNT}.`)\n }\n const [title, statement, accountLine, walletLine, dateLine] = lines\n if (title !== WALLET_LINK_TITLE) {\n throw new Error(\"Not a Swarm ID wallet link v1.\")\n }\n if (statement !== WALLET_LINK_STATEMENT) {\n throw new Error(\"Wallet link statement is not the v1 statement.\")\n }\n const account = address(accountLine, ACCOUNT_PREFIX)\n const wallet = address(walletLine, WALLET_PREFIX)\n const date = field(dateLine, DATE_PREFIX)\n if (!canonicalDate(date)) {\n throw new Error(\"Wallet link date is not ISO 8601 UTC.\")\n }\n return { account, wallet, date }\n}\n\n/**\n * Check a link and return what it names, or undefined. It is accepted only\n * when the message has exactly the v1 shape, the wallet signature recovers the\n * wallet the message names, the account signature recovers the account the\n * message names, and that account is `expected.account`. Never throws.\n *\n * A wallet whose signature does not recover its own address, such as a\n * smart-contract wallet (ERC-1271), cannot make a link that passes.\n */\nexport function verifyWalletLink(\n link: WalletLink,\n expected: ExpectedWalletLink,\n): VerifiedWalletLink | undefined {\n try {\n const fields = parseWalletLinkMessage(link.message)\n const wallet = recoverLinkSigner(\n link.message,\n link.walletSignature,\n \"Wallet link wallet signature\",\n )\n const account = recoverLinkSigner(\n link.message,\n link.accountSignature,\n \"Wallet link account signature\",\n )\n const matches =\n wallet === fields.wallet &&\n account === fields.account &&\n fields.account === `0x${normalizeAddress(expected.account)}`\n return matches ? fields : undefined\n } catch {\n return undefined\n }\n}\n\n/**\n * Countersign a message the wallet has already signed, with the account's own\n * key, after checking the message's shape, that the wallet signature recovers\n * the wallet it names, and that it names this key's account.\n *\n * @param accountKey - the account's private key (bare hex), whose address is\n * the account's `id`\n * @param walletSignature - the wallet's `personal_sign` of `message`, already\n * in the canonical 65-byte form with v 27 or 28\n * @throws on any of those checks failing, so no link is ever stored that a\n * reader would refuse.\n */\nexport function countersignWalletLink(\n accountKey: string,\n message: string,\n walletSignature: string,\n): WalletLink {\n const fields = parseWalletLinkMessage(message)\n const wallet = recoverLinkSigner(\n message,\n walletSignature,\n \"Wallet link wallet signature\",\n )\n if (wallet !== fields.wallet) {\n throw new Error(\n \"The wallet signature does not recover the wallet the link names.\",\n )\n }\n const ownAddress = `0x${new PrivateKey(accountKey).publicKey().address().toHex()}`\n if (ownAddress !== fields.account) {\n throw new Error(\"The link names another account than this key's.\")\n }\n return {\n message,\n walletSignature,\n accountSignature: personalSign(message, accountKey),\n }\n}\n","// Copyright 2026 The Swarm Authors. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Entity Schemas with Zod\n *\n * Defines Zod schemas for storage entities with transforms to convert\n * serialized primitives to bee-js runtime types. Types are derived using\n * z.infer to guarantee schema/type consistency.\n */\n\nimport { z } from \"zod\"\nimport {\n EthAddress,\n BatchId as BeeBatchId,\n PrivateKey as BeePrivateKey,\n} from \"@ethersphere/bee-js\"\nimport { isBeeApiUrl, isHttpUrl } from \"./utils/url\"\nimport { WALLET_LINK_SIGNATURE_PATTERN } from \"./utils/wallet-link\"\n\n// ============================================================================\n// Network Settings Constants\n// ============================================================================\n\nexport const DEFAULT_BEE_NODE_URL = \"https://api.gateway.ethswarm.org/\"\nexport const DEFAULT_GNOSIS_RPC_URL = \"https://xdai.fairdatasociety.org/\"\n\n// ============================================================================\n// Base Validation Schemas (hex strings, no transforms)\n// ============================================================================\n\nconst hexString = (length: number) =>\n z.string().regex(new RegExp(`^[0-9a-fA-F]{${length}}$`), {\n message: `Must be a ${length}-character hex string`,\n })\n\n// Support both regular (32-byte = 64 hex chars) and encrypted (64-byte = 128 hex chars) references\nexport const ReferenceSchema = z\n .string()\n .regex(/^[0-9a-fA-F]{64}$|^[0-9a-fA-F]{128}$/, {\n message:\n \"Reference must be 64 hex chars (32 bytes) or 128 hex chars (64 bytes for encrypted)\",\n })\nexport const BatchIdSchema = hexString(64) // 32 bytes\nexport const AddressSchema = hexString(40) // 20 bytes\nexport const PrivateKeySchema = hexString(64) // 32 bytes\nexport const CompressedPublicKeySchema = hexString(66) // 33 bytes compressed secp256k1\nexport const EncryptionKeySchema = hexString(64) // 32 bytes symmetric key\nexport const IdentifierSchema = hexString(64) // 32 bytes\nexport const SignatureSchema = hexString(130) // 65 bytes\nexport const ChunkAddressSchema = hexString(64) // 32 bytes\n/** Batch id, index, timestamp and signature: 113 bytes, as Bee's `swarm-postage-stamp` header takes them */\nexport const MarshaledStampSchema = hexString(226)\nexport const TimestampSchema = z.preprocess(\n (val) => (typeof val === \"bigint\" ? val.toString() : val),\n z.union([z.number(), z.string()]),\n)\nexport const FeedIndexSchema = z.preprocess(\n (val) => (typeof val === \"bigint\" ? val.toString() : val),\n z.union([z.number(), z.string()]),\n)\n\nexport type Reference = z.infer<typeof ReferenceSchema>\nexport type BatchId = z.infer<typeof BatchIdSchema>\nexport type Address = z.infer<typeof AddressSchema>\nexport type PrivateKey = z.infer<typeof PrivateKeySchema>\nexport type CompressedPublicKey = z.infer<typeof CompressedPublicKeySchema>\nexport type Identifier = z.infer<typeof IdentifierSchema>\nexport type Signature = z.infer<typeof SignatureSchema>\nexport type Timestamp = z.infer<typeof TimestampSchema>\nexport type FeedIndex = z.infer<typeof FeedIndexSchema>\n\n// ============================================================================\n// Primitive → bee-js Type Transforms (internal, for entity schemas)\n// ============================================================================\n\n// Each validates the hex BEFORE its transform: a throw inside a transform\n// escapes `safeParse`, so a bee-js constructor rejecting a 40-character\n// non-hex string would fail the whole document, not the one record.\nconst StoredEthAddress = AddressSchema.transform((s) => new EthAddress(s))\nconst StoredBatchId = BatchIdSchema.transform((s) => new BeeBatchId(s))\nconst StoredPrivateKey = PrivateKeySchema.transform((s) => new BeePrivateKey(s))\n/** A decimal string: `BigInt(\"1e18\")` throws, and a transform must not. */\nconst StoredBigInt = z\n .string()\n .regex(/^\\d+$/, { message: \"Must be a decimal integer string\" })\n .transform((s) => BigInt(s))\n\n// ============================================================================\n// Device Schema\n// ============================================================================\n\n/**\n * Device Schema V1\n * Tracks devices that have accessed an account for multi-device support.\n */\n// Adding a field here? `DEVICE_COMPARED_FIELDS` (`utils/device-id.ts`) is typed\n// over `keyof Device` and will refuse to compile until the new field is\n// classified as one the registry-persist guard compares.\nexport const DeviceSchemaV1 = z.object({\n deviceId: z.string(),\n createdAt: z.number(),\n lastSignedInAt: z.number(),\n name: z.string().optional(),\n // Rename clock, on the same pattern as a stamp's `nameUpdatedAt`. The name\n // merges on its own last-writer-wins clock because the record clock below\n // cannot rank a rename at all: correcting a label — the partition naming of\n // #570 — moves neither `lastSignedInAt` nor `removedAt`, so a corrected row\n // tied with every stale copy of itself and lost the tie, forever (#663).\n // Optional: a row nobody has renamed since it was created has none, and a\n // name born WITH the record needs no clock — it already outranks every stale\n // copy on `lastSignedInAt`.\n nameUpdatedAt: z.number().optional(),\n // Tombstone marker. A removed device is kept in the snapshot (so the removal\n // propagates to other devices) but hidden from the UI. A later sign-in with a\n // larger `lastSignedInAt` re-activates it (the merge clock is the max of the\n // two), mirroring app reconnect-after-revoke.\n //\n // \"Sign-in\" means a user unlocking the account — a device REPUBLISHING itself\n // without the tombstone. A background poll is not one, and reading it as one\n // is what made every removal undo itself on the next round (#611).\n removedAt: z.number().optional(),\n})\n\n// ============================================================================\n// Chat Binding Schema\n// ============================================================================\n\n/**\n * Longer than any binding message can be: four short lines around a site\n * origin, whose host is at most 253 characters. A bound on what is stored and\n * carried, not a check of the format, which `verifyChatBinding` does.\n */\nexport const CHAT_BINDING_MAX_LENGTH = 512\n\n/**\n * The account's signed statement that the chat address on one site is its\n * own (`utils/chat-binding.ts`, docs/Chat-Binding.md). Public, and true on\n * every device of the account, so it travels with its connection rather than\n * staying device-local like the app secret.\n */\nexport const ChatBindingSchema = z.object({\n message: z.string().max(CHAT_BINDING_MAX_LENGTH),\n signature: z.string().regex(/^0x[0-9a-fA-F]{130}$/),\n})\n\n// ============================================================================\n// Wallet Link and Account Settings Schemas\n// ============================================================================\n\n/**\n * Longer than any wallet link message can be: five lines, 258 characters,\n * around two addresses and a date. A bound on what is stored and carried, not\n * a check of the format, which `verifyWalletLink` does.\n */\nexport const WALLET_LINK_MAX_LENGTH = 320\n\n/**\n * The account's and its wallet's statement that they belong together\n * (`utils/wallet-link.ts`, docs/Wallet-Link.md). Kept in the account's synced\n * settings while the person has \"Show my ENS name on sites\" on, and shared\n * with sites in the connection identity.\n */\nexport const WalletLinkSchema = z.object({\n message: z.string().max(WALLET_LINK_MAX_LENGTH),\n walletSignature: z.string().regex(WALLET_LINK_SIGNATURE_PATTERN),\n accountSignature: z.string().regex(WALLET_LINK_SIGNATURE_PATTERN),\n})\n\n/**\n * The account's synced settings, one shape for the account record, the state\n * snapshot and the device feed, so a setting one of them does not name is\n * never stripped on the way to another device. The whole object is one\n * last-writer-wins field (`settingsAt`). The wallet link is not in it: it\n * has a clock of its own (`walletLinkAt`), so another device's settings edit\n * can never bring back a link that was turned off.\n */\nexport const AccountSettingsSchema = z.object({\n appSessionDuration: z.number().optional(),\n})\n\n// ============================================================================\n// Connected App Schema\n// ============================================================================\n\n/** The stamp choice of an app the person set to use no stamp at all */\nexport const NO_POSTAGE_STAMP = \"none\"\n\n/**\n * Connected App Schema V1.\n *\n * Account-owned: keyed by `appUrl` within its owning account (the `identityId`\n * pointer was removed when the identity tier was collapsed into the account).\n */\nexport const ConnectedAppSchemaV1 = z.object({\n appUrl: z.string(),\n appName: z.string(),\n lastConnectedAt: z.number(),\n appIcon: z.string().optional(),\n appDescription: z.string().optional(),\n connectedUntil: z.number().optional(),\n appSecret: z.string().optional(),\n // The stamp the person chose for this app in Swarm ID, and the only one the\n // app may spend. Absent means the person has not picked one yet, and the\n // account default does not stand in for it. `NO_POSTAGE_STAMP` means the\n // person chose none. Either way only a gateway the app names can pay.\n postageStampBatchID: z\n .union([z.literal(NO_POSTAGE_STAMP), StoredBatchId])\n .optional(),\n // The pointer above rides its own last-writer-wins clock, because it is the\n // one edit to an entry that says nothing about whether the app is still\n // connected. Ranking the whole entry on a clock this bumped let a drive\n // picked on a stale copy outrank a revoke made elsewhere and take the\n // tombstone with it (#681). Membership merges on the markers below instead.\n postageStampBatchIDAt: z.number().optional(),\n // Set by every connect until the person confirms the site's drive in the\n // connect window. While it is set the site's frame holds no stamp, whatever\n // the pointer above says. Session material of this device, like\n // `appSecret`: no channel carries it to another context.\n stampPending: z.literal(true).optional(),\n // Tombstone marker. A revoked app is kept in the snapshot (so the removal\n // propagates to other devices) but hidden from the UI and invalid for auth.\n revokedAt: z.number().optional(),\n // When the session was ended by hand (\"Disconnect\", and a revoke on the way\n // out). Unlike `appSecret`/`connectedUntil` this is NOT session material and\n // NOT secret: it is the *intent*, and it has to survive the trip to another\n // context. With the session fields stripped on the wire, an entry that was\n // disconnected looks exactly like one that was merely renamed, so without\n // this marker a peer re-installs its own secret after the merge and keeps\n // uploading (see `restoreLocalSessionFields`). A reconnect clears it.\n disconnectedAt: z.number().optional(),\n // The newest chat binding signed for this site. A new one replaces it, and\n // a revoke or disconnect leaves it: it stays true for as long as the\n // account and the site do, and is what spares a reconnect a second one.\n chatBinding: ChatBindingSchema.optional(),\n})\n\n// ============================================================================\n// Postage Stamp Schema\n// ============================================================================\n\n/**\n * Postage Stamp Schema V1\n */\nexport const PostageStampSchemaV1 = z.object({\n batchID: StoredBatchId,\n signerKey: StoredPrivateKey,\n // User-given label shown in the UI (a \"drive\"). Optional: stamps created before\n // naming existed — and those bought outside the app — have none, and callers\n // fall back to a batch-ID-derived label.\n name: z.string().optional(),\n // Rename clock. The name merges on its own last-writer-wins clock, separate\n // from the node-state clock below: a rename made over a stale copy must not\n // carry old batch fields past a concurrent dilute/top-up, nor resurrect a\n // tombstone. Optional: unnamed/never-renamed stamps have none.\n nameUpdatedAt: z.number().optional(),\n utilization: z.number(),\n usable: z.boolean(),\n depth: z.number(),\n amount: StoredBigInt,\n bucketDepth: z.number(),\n blockNumber: z.number(),\n immutableFlag: z.boolean(),\n exists: z.boolean(),\n batchTTL: z.number().optional(),\n createdAt: z.number(),\n // Node-state edit clock (dilute / top-up: depth, amount, batchTTL). Doubles\n // as the instant `batchTTL` was measured, so the UI can age the countdown.\n //\n // Optional because a stamp that has never been edited has no edit clock:\n // `addStamp` sets `createdAt` alone, so the merge's `updatedAt ?? 0` is the\n // ordinary case for a fresh add, not a shim for records written before the\n // field existed (#662). Without the clock an edited copy would tie with a\n // stale remote copy and the edit would never propagate across devices.\n updatedAt: z.number().optional(),\n // Tombstone marker. A deleted stamp is kept in the snapshot (so the removal\n // propagates to other devices) but hidden from the UI and unusable for\n // uploads. `deletedAt`/`updatedAt`/`createdAt` compete as one last-writer-wins\n // clock in the merge, so the newest NODE action on the batch wins (renames\n // ride `nameUpdatedAt` instead).\n deletedAt: z.number().optional(),\n})\n\n// ============================================================================\n// Account Schemas\n// ============================================================================\n\n/**\n * Access Method Schema V1\n *\n * Every account is a BIP-39 seed account; the access method is simply HOW that\n * seed is protected/encrypted at rest on this device (and thus how it is\n * unlocked). Fields are device-local crypto material (plain hex / numbers) —\n * never bee-js byte classes — so they round-trip as-is. Paired with\n * `encryptedSeed` on the account.\n *\n * The eth-wallet method stores only the encryption salt — NOT the wallet\n * address: a wrong wallet simply fails to decrypt the seed, and the account's\n * own `id` is already the address of its (BIP-39) key, so a separate wallet\n * address would be redundant.\n */\nexport const AccessMethodSchemaV1 = z.discriminatedUnion(\"type\", [\n z.object({ type: z.literal(\"passkey\"), credentialId: z.string() }),\n z.object({\n type: z.literal(\"eth-wallet\"),\n encryptionSalt: z.string(),\n }),\n z.object({\n type: z.literal(\"password\"),\n kdfSalt: z.string(),\n kdfIterations: z.number(),\n }),\n])\n\n/**\n * Local Vault Schema V1\n *\n * The device-local seed vault. Every account is a BIP-39 seed account: `access`\n * records how the seed is protected/unlocked on THIS device (passkey /\n * eth-wallet / password) and `encryptedSeed` is that seed encrypted at rest\n * under the key the access method derives (hex: IV || ciphertext — width varies\n * with the seed size: 12-word seed → 88 chars, 24-word → 120, so no fixed\n * length). The vault never leaves the device: `SyncedAccountSchemaV1` has no\n * vault fields. A sign-out RETAINS the vault (it is encrypted at rest) while\n * stripping the synced data, so signing back in only takes the access method.\n */\nexport const LocalVaultSchemaV1 = z.object({\n access: AccessMethodSchemaV1,\n encryptedSeed: z.string().regex(/^([0-9a-f]{2})+$/),\n})\n\n/**\n * Synced Account Schema V1\n *\n * The single, unified account model. There is exactly one kind of account: a\n * BIP-39 seed account. What used to be distinct `type`s (passkey / ethereum /\n * agent) were really just different ways of protecting the seed — now expressed\n * uniformly by the device-local vault (`LocalVaultSchemaV1`). No `type`\n * discriminant remains.\n *\n * This is the portable projection of the account — every field that may travel\n * off the device, and nothing device-local. Backup files serialize/parse it\n * directly and the sync feed carries the same shape (serialize with\n * `serializeSyncedAccount`, which additionally strips the live per-app session\n * material). What localStorage holds is `LocalAccountSchemaV1` = this plus the\n * device-local tail.\n *\n * The account is the single-level aggregate root (the identity tier was\n * collapsed into it). It is the app-facing identity: `id` is the address apps\n * connect to and `publicKey` is surfaced to dApps. Apps receive a per-app\n * DERIVED key (`deriveSecret(masterKey, appOrigin)` → app key) — never the\n * account private key, which is the mnemonic-equivalent root and is exposed only\n * after an explicit permission/signing request. The account OWNS its connected\n * apps and postage stamps as nested collections rather than via foreign-key\n * pointers.\n */\nexport const SyncedAccountSchemaV1 = z.object({\n id: StoredEthAddress,\n name: z.string(),\n createdAt: z.number(),\n derivationKey: z.string().length(64), // derived key for deterministic sub-key generation (64-char hex)\n // App-facing public key (compressed secp256k1). Surfaced to dApps as the\n // identity public key in ConnectionInfo. Was previously on the identity.\n publicKey: CompressedPublicKeySchema,\n defaultPostageStampBatchID: StoredBatchId.optional(),\n devices: z.array(DeviceSchemaV1).default([]),\n // Account-owned nested collections (replace the old flat identities/apps/\n // stamps stores joined by accountId/identityId pointers).\n connectedApps: z.array(ConnectedAppSchemaV1).default([]),\n postageStamps: z.array(PostageStampSchemaV1).default([]),\n // Per-account settings (was identity.settings).\n settings: AccountSettingsSchema.optional(),\n // The wallet link while \"Show my ENS name on sites\" is on (docs/Wallet-Link.md).\n walletLink: WalletLinkSchema.optional(),\n // Per-field LWW clocks for the scalar account fields, so a concurrent change to\n // a *different* scalar on another device is not dropped wholesale, and a peer's\n // change propagates on refresh. Absent → fall back to the account's `createdAt`,\n // never a fresh timestamp: a device that never touched the field must not be\n // able to clobber a peer that did.\n accountNameAt: z.number().optional(),\n defaultStampAt: z.number().optional(),\n settingsAt: z.number().optional(),\n walletLinkAt: z.number().optional(),\n // Last-writer-wins clock for cross-device metadata merge (set on any change).\n lastModified: z.number().optional(),\n /**\n * Number of partitions the postage-batch slot space is divided into.\n * Optional on the local account record (omitted → `1` = single-device\n * legacy behaviour). New accounts set this to `PARTITION_COUNT` at\n * creation time.\n */\n partitionCount: z.number().int().min(1).optional(),\n})\n\n/**\n * Signed-in variant: the synced data plus the device vault. `signedOutAt` is\n * declared undefined-only (not merely omitted) so a record carrying BOTH a\n * vault and a sign-out marker fails this variant — and the signed-out one —\n * and is quarantined at load, instead of silently parsing as signed-in and\n * dropping the marker.\n */\nconst SignedInAccountSchemaV1 = SyncedAccountSchemaV1.extend({\n ...LocalVaultSchemaV1.shape,\n signedOutAt: z.undefined().optional(),\n})\n\n/**\n * Signed-out variant: the minimal remnant of a sign-out. The vault SURVIVES\n * (it is encrypted at rest, so retaining it matches the sign-out security\n * posture) and lets the user sign back in with the existing access method —\n * no recovery phrase. The synced state (collections, settings, clocks, and\n * the secret `derivationKey`) is stripped from disk as PLAINTEXT but kept as\n * `encryptedState`: an AES-GCM snapshot keyed off the derivation-key chain,\n * decrypted and restored on sign-back-in so a sign-out can never lose data —\n * even offline or when the Swarm copy is gone. Absent only on a record signed\n * out because its sealed keys could not be opened on this device (the\n * wrapping key was lost), where sign-back-in restores from Swarm. The display\n * fields (`name`, `createdAt`) stay so the account chooser can list the row.\n * Being a plain object (not a `SyncedAccountSchemaV1` extension), parsing a\n * pre-shrink record under this arm strips its plaintext synced fields.\n */\nconst SignedOutAccountSchemaV1 = z.object({\n id: StoredEthAddress,\n name: z.string(),\n createdAt: z.number(),\n ...LocalVaultSchemaV1.shape,\n encryptedState: z.string().optional(),\n // Storage-warning remnant, captured at sign-out (the stamps themselves are\n // only in the encrypted snapshot): whether any drive already needed\n // attention, and the soonest estimated drive expiry (epoch ms) so the\n // \"expires soon\" warning can keep developing while signed out.\n storageWarning: z.boolean().optional(),\n soonestDriveExpiry: z.number().optional(),\n signedOutAt: z.number(),\n})\n\n/**\n * Local Account Schema V1 — parse entrypoint for stored account records (what\n * localStorage holds), modeled as a union so the signed-in/signed-out states\n * are encoded in the data itself: a signed-in account is the synced projection\n * plus the vault and no `signedOutAt`; a signed-out one is the minimal remnant\n * (display fields + vault) with `signedOutAt` set. Both carry the vault —\n * `signedOutAt` presence alone discriminates; vault-less records (the\n * pre-retention sign-out shape) fail both arms and are quarantined.\n *\n * This only validates at parse (load) time — the accounts loader SKIPS a\n * violating record rather than failing the document — but unlike a refinement\n * the union also carries into the TYPE system: `Account` is a discriminated\n * union (discriminate on `signedOutAt` presence, or narrow with\n * `isSignedOutAccount`), so writers can't produce a half-signed-out record\n * without a type error.\n */\nexport const LocalAccountSchemaV1 = z.union([\n SignedInAccountSchemaV1,\n SignedOutAccountSchemaV1,\n])\n\n// ============================================================================\n// Sync State Snapshot Schemas\n// ============================================================================\n\n/**\n * Account Metadata Schema V1\n */\nexport const AccountMetadataSchemaV1 = z.object({\n accountName: z.string(),\n defaultPostageStampBatchID: z.string().length(64).optional(), // BatchId hex string\n // App-facing public key (compressed secp256k1 hex). Mirrors account.publicKey.\n publicKey: CompressedPublicKeySchema,\n // Per-account settings (was identity.settings).\n settings: AccountSettingsSchema.optional(),\n walletLink: WalletLinkSchema.optional(),\n // Per-field LWW clocks for the scalar fields (see `SyncedAccountSchemaV1`).\n accountNameAt: z.number().optional(),\n defaultStampAt: z.number().optional(),\n settingsAt: z.number().optional(),\n walletLinkAt: z.number().optional(),\n createdAt: z.number(),\n lastModified: z.number(),\n devices: z.array(DeviceSchemaV1).default([]),\n /**\n * Number of partitions the postage-batch slot space is divided into.\n * `1` means \"no partitioning, single-device behaviour\" — this is the\n * default for snapshots from before the partition-lease shipped. New\n * accounts write the current `PARTITION_COUNT` (2) here.\n */\n partitionCount: z.number().int().min(1).default(1),\n})\n\nconst ACCOUNT_STATE_SNAPSHOT_VERSION = 1\n\n/**\n * Unified account state snapshot schema used by both file export and Swarm sync.\n *\n * Wire/export projection of the nested account: metadata (non-secret account\n * fields) plus the account-owned `connectedApps` and `postageStamps`. Account\n * secrets (`derivationKey`, `credentialId`, ethereum encrypted fields) are\n * deliberately excluded — only `metadata` + the nested collections travel.\n */\nexport const AccountStateSnapshotSchemaV1 = z.object({\n version: z.literal(ACCOUNT_STATE_SNAPSHOT_VERSION),\n timestamp: z.number(),\n accountId: z.string().length(40),\n metadata: AccountMetadataSchemaV1,\n connectedApps: z.array(ConnectedAppSchemaV1),\n postageStamps: z.array(PostageStampSchemaV1),\n})\n\n// ============================================================================\n// Derived Types (guaranteed to match current schema version)\n// ============================================================================\n\nexport type Device = z.infer<typeof DeviceSchemaV1>\nexport type AccessMethod = z.infer<typeof AccessMethodSchemaV1>\nexport type LocalVault = z.infer<typeof LocalVaultSchemaV1>\nexport type SyncedAccount = z.infer<typeof SyncedAccountSchemaV1>\nexport type SignedInAccount = z.infer<typeof SignedInAccountSchemaV1>\nexport type SignedOutAccount = z.infer<typeof SignedOutAccountSchemaV1>\n/** The local (on-device) account record: `SignedInAccount | SignedOutAccount`. */\nexport type Account = z.infer<typeof LocalAccountSchemaV1>\nexport type ConnectedApp = z.infer<typeof ConnectedAppSchemaV1>\nexport type AccountSettings = z.infer<typeof AccountSettingsSchema>\nexport type PostageStamp = z.infer<typeof PostageStampSchemaV1>\nexport type AccountMetadata = z.infer<typeof AccountMetadataSchemaV1>\nexport type AccountStateSnapshot = z.infer<typeof AccountStateSnapshotSchemaV1>\n\n// ============================================================================\n// Account Predicates\n// ============================================================================\n\n/**\n * An account is \"signed out\" on this device when `signedOutAt` is set: the\n * synced data was stripped from disk, but the encrypted vault survives, so the\n * user signs back in with the existing access method (which re-derives and\n * re-folds the rest). Narrows: the true branch exposes `signedOutAt` as a\n * number; the vault fields are non-optional on BOTH branches.\n */\nexport function isSignedOutAccount(\n account: Account,\n): account is SignedOutAccount {\n return account.signedOutAt !== undefined\n}\n\n// ============================================================================\n// Partition-Lease Wire Formats\n// ============================================================================\n\n/**\n * Fencing token for the partition lock. Two writers with equal `timestampMs`\n * are ordered by `tiebreaker` (hex of the first 8 bytes of\n * `keccak256(deviceId)`).\n */\nexport const PartitionLockGenerationSchemaV1 = z.object({\n timestampMs: z.number().int().nonnegative(),\n tiebreaker: z.string().regex(/^[0-9a-f]{16}$/),\n})\n\n/**\n * Payload stored (as encrypted JSON) in a partition-lock SOC. The format is\n * versioned by the SOC identifier domain (`swarm-id-partition-lock-v1`), so no\n * in-payload version field is needed. `holderDeviceId` is `\"\"` for the\n * `NO_HOLDER_DEVICE_ID` sentinel (e.g. after an explicit release).\n */\nexport const PartitionLockPayloadSchemaV1 = z.object({\n holderDeviceId: z.string(),\n generation: PartitionLockGenerationSchemaV1,\n acquiredAt: z.number().int().nonnegative(),\n leasedUntil: z.number().int().nonnegative(),\n})\n\nexport type PartitionLockGeneration = z.infer<\n typeof PartitionLockGenerationSchemaV1\n>\nexport type PartitionLockPayload = z.infer<typeof PartitionLockPayloadSchemaV1>\n\n/**\n * Payload stored (as encrypted JSON) in a per-device partition-INTENT SOC,\n * which doubles as a holder PRESENCE BEACON. Written before a fresh claim so\n * rival contenders agree on a single winner by `generation`, AND re-published\n * by the holder on every refresh tick so a later joiner can detect the live\n * holder — both via a fresh per-epoch address that forces a network retrieval\n * (bypassing the gateway's frozen lock-SOC cache). `deviceId` is carried for\n * diagnostics (the address already encodes it). `leasedUntil` is present on a\n * heartbeat so a reader can apply the same `leasedUntil > now` liveness test\n * the lock SOC uses; it is omitted on a legacy pre-claim intent (then the\n * reader falls back to epoch-bucket freshness).\n */\nexport const PartitionIntentPayloadSchemaV1 = z.object({\n deviceId: z.string(),\n generation: PartitionLockGenerationSchemaV1,\n leasedUntil: z.number().int().nonnegative().optional(),\n})\n\nexport type PartitionIntentPayload = z.infer<\n typeof PartitionIntentPayloadSchemaV1\n>\n\n// ============================================================================\n// Network Settings Schema\n// ============================================================================\n\n/**\n * Network Settings Schema V1\n * Stores user-configurable network endpoints (Bee node and Gnosis RPC)\n */\nexport const NetworkSettingsSchemaV1 = z.object({\n // `.refine(isHttpUrl)` (not `.url()`) so a scheme-less paste like `localhost:1633`\n // — which `new URL`/zod `.url()` accept as protocol `localhost:` — can't persist\n // as a broken endpoint. Same validator the settings dialog uses.\n beeNodeUrl: z.string().refine(isHttpUrl, \"Must be an http(s) URL\"),\n gnosisRpcUrl: z.string().refine(isHttpUrl, \"Must be an http(s) URL\"),\n})\n\nexport type NetworkSettings = z.infer<typeof NetworkSettingsSchemaV1>\n\n/**\n * A Bee address a site gives the frame for its own session (`beeApiUrl` on\n * `parentIdentify` and `setBeeApiUrl`). Never stored: it lives in the frame\n * that site embeds, and only while it is open.\n */\nexport const BeeApiUrlSchema = z\n .string()\n .refine(\n isBeeApiUrl,\n \"Must be an http(s) URL, optionally with a path, and no credentials, query or fragment\",\n )\n\n// ============================================================================\n// BroadcastChannel Message Schemas\n// ============================================================================\n\n/**\n * Bucket update entry for cross-tab synchronization\n */\nexport const BucketUpdateSchema = z.object({\n index: z.number().int().min(0).max(65535),\n value: z.number().int().min(0),\n})\n\n/**\n * Utilization update broadcast on the account bus after a write.\n *\n * `buckets` carry the writer's PER-PARTITION counter `j`, not an absolute slot\n * — the physical slot is `partitionCount + partition + partitionCount·j`\n * (`dataSlot`, `utils/batch-utilization.ts`). So a delta is only foldable by a\n * context bound to the SAME lane, and the lane travels with the message: the\n * bus reaches other devices, which hold other partitions of the same batch, and\n * folding their `j` in would skip the receiver past its own unused slots.\n * Legacy single-partition writers publish `partition: 0, partitionCount: 1`.\n */\nexport const UtilizationUpdateMessageSchema = z.object({\n type: z.literal(\"utilization-updated\"),\n batchId: z.string().length(64),\n partition: z.number().int().min(0),\n partitionCount: z.number().int().min(1),\n buckets: z.array(BucketUpdateSchema),\n})\n\nexport type BucketUpdate = z.infer<typeof BucketUpdateSchema>\nexport type UtilizationUpdateMessage = z.infer<\n typeof UtilizationUpdateMessageSchema\n>\n","// Copyright 2026 The Swarm Authors. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { z } from \"zod\"\nimport type {\n PrivateKey as BeePrivateKey,\n Topic as BeeTopic,\n} from \"@ethersphere/bee-js\"\nimport {\n BeeApiUrlSchema,\n ChatBindingSchema,\n WalletLinkSchema,\n NetworkSettingsSchemaV1,\n SyncedAccountSchemaV1,\n ReferenceSchema,\n BatchIdSchema,\n AddressSchema,\n PrivateKeySchema,\n CompressedPublicKeySchema,\n EncryptionKeySchema,\n IdentifierSchema,\n SignatureSchema,\n ChunkAddressSchema,\n MarshaledStampSchema,\n TimestampSchema,\n FeedIndexSchema,\n} from \"./schemas\"\nimport type {\n Reference,\n Address,\n Identifier,\n Signature,\n Timestamp,\n FeedIndex,\n} from \"./schemas\"\nexport type {\n Reference,\n BatchId,\n Address,\n PrivateKey,\n Identifier,\n Signature,\n Timestamp,\n FeedIndex,\n} from \"./schemas\"\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n// Storage keys for versioned storage managers. The account is the single nested\n// document of record (it owns its connected apps and postage stamps inline), so\n// there are no longer separate identity/app/stamp collection keys.\nexport const STORAGE_KEY_ACCOUNTS = \"swarm-id-accounts\"\nexport const STORAGE_KEY_NETWORK_SETTINGS = \"swarm-id-network-settings\"\nexport const STORAGE_CHALLENGE_KEY = \"swarm-storage-challenge\"\n/** The cached allow list of sites (`utils/site-allow-list.ts`). */\nexport const STORAGE_KEY_SITE_ALLOW_LIST = \"swarm-id-site-allow-list\"\nexport const STORAGE_KEY_LEASE_CACHE_PREFIX = \"swarm-id-lease-v2\"\nexport const STORAGE_KEY_APP_STAMP_USAGE_PREFIX = \"swarm-id-app-stamp-usage\"\nexport const STORAGE_KEY_SOC_RESTAMP_SLOTS_PREFIX = \"swarm-id-soc-restamp-slots\"\n\n/**\n * Key PREFIX for the handed-over session a PARTITIONED proxy keeps, so a reload\n * does not log the user out of the dApp (#635). The key itself is per dApp\n * origin — see {@link partitionSessionStorageKey}, which is what every reader\n * and writer calls.\n *\n * Its own key rather than the accounts document, and not by preference:\n * `LocalAccountSchemaV1` quarantines vault-less records, and the hydrated\n * partition account carries inert vault placeholders by design — it would fail\n * to parse on load. This is a session, and takes a session's shape.\n *\n * Written only from a partitioned context, where the store is already scoped to\n * (this origin, the embedding page's origin) by the browser. `parentOrigin` is\n * recorded anyway so a record can be refused rather than trusted on the strength\n * of where it was found.\n */\nexport const STORAGE_KEY_PARTITION_SESSION = \"swarm-id-partition-session\"\n\n/**\n * localStorage key for the proxy's partition-lease cache (a\n * `PartitionLeaseStateSnapshot`), per account AND per batch. Same-origin tabs\n * share this, so the SwarmID UI reads it to render the *self* device's active\n * partition without a Swarm round-trip. The proxy is the sole writer.\n *\n * The batch is in the key because the lease is: a lane is one partition of one\n * batch (#589), and an account has two coordinators whenever a dApp carries a\n * per-app stamp override. Under one key per account they shared a slot and\n * overwrote each other — safe, since `PartitionLease.hydrate` refuses a\n * snapshot whose `batchId` differs, but a hint that stops hinting exactly when\n * there are two writers to hint for is no hint. The `batchId` inside the record\n * stays as the second line of that pair of braces, as `parentOrigin` does in\n * the partitioned session (#671).\n */\nexport function leaseCacheStorageKey(\n accountId: string,\n batchId: string,\n): string {\n return `${STORAGE_KEY_LEASE_CACHE_PREFIX}:${accountId.toLowerCase()}:${batchId.toLowerCase()}`\n}\n\n/**\n * Where the frame counts what one app has stamped with one of the account's\n * stamps (`proxy/app-stamp-limits.ts`), per app origin and per batch, so the\n * limits survive a reload and a new stamp starts a new count.\n */\nexport function appStampUsageStorageKey(\n appOrigin: string,\n batchId: string,\n): string {\n return `${STORAGE_KEY_APP_STAMP_USAGE_PREFIX}:${appOrigin}:${batchId.toLowerCase()}`\n}\n\n/**\n * Where the frame keeps which slot each single-owner chunk one app had\n * stamped went to (`proxy/soc-restamp-slots.ts`), per app origin and per\n * batch, so stamping the same address again after a reload reuses the slot.\n */\nexport function socRestampSlotsStorageKey(\n appOrigin: string,\n batchId: string,\n): string {\n return `${STORAGE_KEY_SOC_RESTAMP_SLOTS_PREFIX}:${appOrigin}:${batchId.toLowerCase()}`\n}\n\n/**\n * Where a partitioned session is stored, per dApp origin.\n *\n * The store this lands in is partitioned by (iframe origin, top-level SITE),\n * and a site ignores subdomains and ports — so `app1.foo.com` and\n * `app2.foo.com`, or two localhost ports, share it. Under one fixed name the\n * second dApp to connect overwrote the first one's session, and the first came\n * back to a record belonging to somebody else, read it as \"no session\", and\n * needed the popup again — both of them, on every reload (#671). The origin\n * belongs in the key, as it already does in the stamper's.\n */\nexport function partitionSessionStorageKey(parentOrigin: string): string {\n return `${STORAGE_KEY_PARTITION_SESSION}:${parentOrigin}`\n}\n\n// ============================================================================\n// Upload/Download Options\n// ============================================================================\n\nconst UploadOptionsObjectSchema = z.object({\n pin: z.boolean().optional(),\n encrypt: z.boolean().optional(),\n encryptManifest: z.boolean().optional(),\n tag: z.number().optional(),\n deferred: z.boolean().optional(),\n})\n\nexport const UploadOptionsSchema = UploadOptionsObjectSchema.optional()\n\nexport const ActPublisherSchema = z.enum([\"app\", \"identity\"])\n\nexport type ActPublisher = z.infer<typeof ActPublisherSchema>\n\nexport const ActUploadOptionsSchema = UploadOptionsObjectSchema.extend({\n beeCompatible: z.boolean().optional(),\n publisher: ActPublisherSchema.optional(),\n}).optional()\n\nexport const RequestOptionsSchema = z\n .object({\n timeout: z.number().optional(),\n headers: z.record(z.string(), z.string()).optional(),\n endlesslyRetry: z.boolean().optional(),\n })\n .optional()\n\nexport const DownloadOptionsSchema = z\n .object({\n redundancyStrategy: z\n .union([z.literal(0), z.literal(1), z.literal(2), z.literal(3)])\n .optional(),\n fallback: z.boolean().optional(),\n timeoutMs: z.number().optional(),\n actPublisher: z.union([z.instanceof(Uint8Array), z.string()]).optional(),\n actHistoryAddress: z\n .union([z.instanceof(Uint8Array), z.string()])\n .optional(),\n actTimestamp: z.union([z.number(), z.string()]).optional(),\n })\n .optional()\n\nexport interface UploadProgress {\n total: number\n processed: number\n}\n\nexport interface UploadOptions {\n /** Pin on the user's own node. Ignored on a subsidised gateway (#752). */\n pin?: boolean\n encrypt?: boolean\n encryptManifest?: boolean\n tag?: number\n deferred?: boolean\n onProgress?: (progress: UploadProgress) => void\n /** Use WebSocket for chunk upload instead of HTTP. Per-chunk stamping is used. */\n useWebSocket?: boolean\n /** Use Web Workers for parallel stamp signing. Speeds up upload on multi-core CPUs. */\n useWorkers?: boolean\n /** Number of Web Workers to use for parallel stamp signing. Defaults to navigator.hardwareConcurrency. */\n workerCount?: number\n /** Upload concurrency (parallel in-flight chunks). HTTP default: 8, WebSocket default: 32. */\n concurrency?: number\n}\n\nexport type RequestOptions = z.infer<typeof RequestOptionsSchema>\nexport type DownloadOptions = z.infer<typeof DownloadOptionsSchema>\n\n/**\n * Options for `uploadFiles` (#750). Content is encrypted unless `encrypt` is\n * `false`; the manifest — and so the root reference — is encrypted unless\n * `encrypt` or `encryptManifest` is `false`. `onProgress` counts files.\n */\nexport interface UploadFilesOptions extends Pick<\n UploadOptions,\n | \"pin\"\n | \"encrypt\"\n | \"encryptManifest\"\n | \"tag\"\n | \"deferred\"\n | \"onProgress\"\n | \"useWorkers\"\n | \"workerCount\"\n> {\n /** Served for the bare `/bzz/<reference>/` (`website-index-document`) */\n indexDocument?: string\n /** Served for a path that is not in the folder (`website-error-document`) */\n errorDocument?: string\n}\n\n/** One file to upload with `uploadFiles`, when not handing over `File`s */\nexport interface CollectionFileInput {\n /** Path inside the folder, `/`-separated, no leading slash */\n path: string\n file: Blob\n}\n\nconst UploadFilesOptionsSchema = UploadOptionsObjectSchema.extend({\n indexDocument: z.string().optional(),\n errorDocument: z.string().optional(),\n}).optional()\n\n/** One file of a folder, as it crosses the bridge */\nexport const CollectionFileSchema = z.object({\n path: z.string().min(1),\n data: z.instanceof(Uint8Array),\n contentType: z.string().optional(),\n})\nexport type CollectionFile = z.infer<typeof CollectionFileSchema>\n\n/** One file of a listed folder. `reference` is readable with `downloadData` */\nexport const CollectionEntrySchema = z.object({\n path: z.string(),\n reference: ReferenceSchema,\n contentType: z.string().optional(),\n})\nexport type CollectionEntry = z.infer<typeof CollectionEntrySchema>\nexport interface ActUploadOptions extends UploadOptions {\n beeCompatible?: boolean\n /**\n * Which of the user's keys publishes the ACT (default `\"app\"`, the\n * origin-bound app key). `\"identity\"` publishes with the account-wide\n * sharing key, so any of the user's apps can manage the grantees later.\n */\n publisher?: ActPublisher\n}\n\n// ============================================================================\n// Upload/Download Results\n// ============================================================================\n\nexport const UploadResultSchema = z.object({\n reference: ReferenceSchema,\n tagUid: z.number().optional(),\n})\n\nexport const SocUploadResultSchema = UploadResultSchema.extend({\n encryptionKey: z.string().optional(),\n owner: AddressSchema,\n})\n\nexport const SocRawUploadResultSchema = UploadResultSchema.extend({\n encryptionKey: z.string().optional(),\n owner: AddressSchema,\n})\n\nexport const FileDataSchema = z.object({\n name: z.string(),\n data: z.instanceof(Uint8Array),\n})\n\nexport const PostageBatchSchema = z.object({\n batchID: BatchIdSchema,\n /**\n * Bee's fill count of the fullest bucket — NOT a percentage. Usage is\n * `utilization / 2^(depth - bucketDepth)`, and a batch stops accepting\n * uploads when one bucket fills, before the nominal `2^depth * 4096` bytes.\n */\n utilization: z.number(),\n usable: z.boolean(),\n label: z.string(),\n depth: z.number(),\n amount: z.string(),\n bucketDepth: z.number(),\n blockNumber: z.number(),\n immutableFlag: z.boolean(),\n exists: z.boolean(),\n batchTTL: z.number().optional(),\n})\n\nexport type UploadResult = z.infer<typeof UploadResultSchema>\nexport type SocUploadResult = z.infer<typeof SocUploadResultSchema>\nexport type SocRawUploadResult = z.infer<typeof SocRawUploadResultSchema>\nexport type FileData = z.infer<typeof FileDataSchema>\nexport type PostageBatch = z.infer<typeof PostageBatchSchema>\n\n// ============================================================================\n// SOC Types\n// ============================================================================\n\nexport interface SingleOwnerChunk {\n data: Uint8Array\n identifier: Identifier\n signature: Signature\n span: number\n payload: Uint8Array\n address: Reference\n owner: Address\n}\n\n/**\n * The chunk `SwarmIdClient.stampChunk` asks the frame to stamp. `data` is the\n * whole chunk body, the 8-byte little-endian span followed by the payload.\n */\nexport type StampChunkInput =\n | { kind: \"content\"; data: Uint8Array }\n | {\n kind: \"soc\"\n identifier: Identifier | Uint8Array | string\n data: Uint8Array\n /** `\"app\"` signs with the site's own app secret */\n signer: \"app\" | { privateKey: Uint8Array | string }\n }\n\n/** What `SwarmIdClient.stampChunk` returns, enough to send the exact chunk */\nexport interface StampedChunk {\n /** The chunk's address, computed by the frame */\n address: string\n /** The postage stamp as hex, the value of Bee's `swarm-postage-stamp` header */\n stamp: string\n /** For a single-owner chunk: the owner the frame signed as */\n owner?: Address\n /** For a single-owner chunk: the signature, for `/soc/<owner>/<id>?sig=` */\n signature?: Signature\n}\n\n/**\n * Interface for downloading single owner chunks (SOC).\n *\n * `download` expects an encryption key and returns decrypted content.\n * `rawDownload` returns unencrypted SOC data.\n */\nexport interface SOCReader {\n /**\n * Resolve SOC owner address. For SOCWriter without signer, this may be\n * resolved via the proxy.\n */\n getOwner: () => Promise<Address>\n /**\n * Download an unencrypted SOC by identifier.\n *\n * @param identifier - SOC identifier (32-byte value)\n */\n rawDownload: (\n identifier: Identifier | Uint8Array | string,\n encryptionKey?: Uint8Array | string,\n ) => Promise<SingleOwnerChunk>\n /**\n * Download and decrypt an encrypted SOC by identifier.\n *\n * @param identifier - SOC identifier (32-byte value)\n * @param encryptionKey - 32-byte encryption key returned by upload\n */\n download: (\n identifier: Identifier | Uint8Array | string,\n encryptionKey: Uint8Array | string,\n ) => Promise<SingleOwnerChunk>\n}\n\n/**\n * Interface for downloading and uploading single owner chunks (SOC).\n *\n * `upload` creates an encrypted SOC by default.\n * `rawUpload` creates an unencrypted SOC.\n */\nexport interface SOCWriter extends SOCReader {\n /**\n * Upload an encrypted SOC.\n *\n * @param identifier - SOC identifier (32-byte value)\n * @param data - SOC payload data (1-4096 bytes)\n * @param options - Optional upload configuration\n */\n upload: (\n identifier: Identifier | Uint8Array | string,\n data: Uint8Array,\n options?: UploadOptions,\n ) => Promise<SocUploadResult>\n /**\n * Upload an unencrypted SOC.\n *\n * @param identifier - SOC identifier (32-byte value)\n * @param data - SOC payload data (1-4096 bytes)\n * @param options - Optional upload configuration\n */\n rawUpload: (\n identifier: Identifier | Uint8Array | string,\n data: Uint8Array,\n options?: UploadOptions,\n ) => Promise<SocRawUploadResult>\n}\n\n// ============================================================================\n// Feed Types\n// ============================================================================\n\n/**\n * Options for epoch feed reader creation.\n */\nexport interface FeedReaderOptions {\n /** Feed topic (32 bytes). */\n topic: Identifier | Uint8Array | string | BeeTopic\n /** Optional feed owner address (20 bytes). */\n owner?: Address | Uint8Array | string\n}\n\n/**\n * Options for epoch feed writer creation.\n */\nexport interface FeedWriterOptions {\n /** Feed topic (32 bytes). */\n topic: Identifier | Uint8Array | string | BeeTopic\n /** Optional signer private key (32 bytes). */\n signer?: BeePrivateKey | Uint8Array | string\n}\n\n/**\n * Epoch feed reader interface.\n */\nexport interface EpochFeedDownloadOptions {\n /** Unix timestamp (seconds). */\n at?: bigint | number | string\n /** Hint of latest known update timestamp. */\n after?: bigint | number | string\n /** Optional encryption key for encrypted feed updates. */\n encryptionKey?: Uint8Array | string\n}\n\nexport interface EpochFeedUploadOptions {\n /** Unix timestamp (seconds). */\n at?: bigint | number | string\n /** Optional upload options for the payload upload. */\n uploadOptions?: UploadOptions\n /** Whether to encrypt payload uploads (defaults to true). */\n encrypt?: boolean\n /** Optional encryption key for encrypted feed updates. */\n encryptionKey?: Uint8Array | string\n /** Optional hints from previous update for stateless epoch calculation. */\n hints?: {\n lastEpoch?: { start: string; level: number }\n lastTimestamp?: string\n }\n}\n\nexport interface EpochFeedDownloadPayloadResult {\n /** Downloaded payload, if available. */\n payload?: Uint8Array\n /** Reference used to download the payload, if available. */\n reference?: Reference\n /** Encryption key (hex) if the reference is encrypted. */\n encryptionKey?: string\n}\n\nexport interface EpochFeedDownloadReferenceResult {\n /** Swarm reference (hex), if found. */\n reference?: Reference\n /** Encryption key (hex) if the reference is encrypted. */\n encryptionKey?: string\n}\n\nexport interface EpochFeedUploadResult {\n /** SOC address for the feed update. */\n socAddress: Reference\n /** Reference stored in the feed update. */\n reference: Reference\n /** Encryption key (hex) if the reference is encrypted. */\n encryptionKey?: string\n /** Epoch used for this update (for caller to store as hint) */\n epoch: { start: string; level: number }\n /** Timestamp used (stringified bigint) */\n timestamp: string\n}\n\n/**\n * Epoch feed reader interface.\n */\nexport interface FeedReader {\n /** Resolve feed owner address (20 bytes). */\n getOwner: () => Promise<Address>\n /** Download the reference for the given timestamp. */\n downloadReference: (\n options?: EpochFeedDownloadOptions,\n ) => Promise<EpochFeedDownloadReferenceResult>\n /** Download the payload for the given timestamp. */\n downloadPayload: (\n options?: EpochFeedDownloadOptions,\n ) => Promise<EpochFeedDownloadPayloadResult>\n /** Download unencrypted reference (for /bzz access). */\n downloadRawReference: (\n options?: Omit<EpochFeedDownloadOptions, \"encryptionKey\">,\n ) => Promise<EpochFeedDownloadReferenceResult>\n /** Download unencrypted payload (for /bzz access). */\n downloadRawPayload: (\n options?: Omit<EpochFeedDownloadOptions, \"encryptionKey\">,\n ) => Promise<EpochFeedDownloadPayloadResult>\n}\n\n/**\n * Epoch feed writer interface.\n */\nexport interface FeedWriter extends FeedReader {\n /** Upload payload data and update the feed. */\n uploadPayload: (\n data: Uint8Array | string,\n options?: EpochFeedUploadOptions,\n ) => Promise<EpochFeedUploadResult>\n /** Update the feed with a reference. */\n uploadReference: (\n reference: Uint8Array | string,\n options?: EpochFeedUploadOptions,\n ) => Promise<EpochFeedUploadResult>\n /** Upload unencrypted payload (for /bzz access). */\n uploadRawPayload: (\n data: Uint8Array | string,\n options?: Omit<EpochFeedUploadOptions, \"encryptionKey\" | \"encrypt\">,\n ) => Promise<EpochFeedUploadResult>\n /** Upload unencrypted reference (for /bzz access). */\n uploadRawReference: (\n reference: Uint8Array | string,\n options?: Omit<EpochFeedUploadOptions, \"encryptionKey\">,\n ) => Promise<EpochFeedUploadResult>\n}\n\n// ============================================================================\n// Sequential Feed Types\n// ============================================================================\n\n/**\n * Options for sequential feed reader creation.\n */\nexport interface SequentialFeedReaderOptions {\n /** Feed topic (32 bytes). */\n topic: Identifier | Uint8Array | string | BeeTopic\n /** Optional feed owner address (20 bytes). */\n owner?: Address | Uint8Array | string\n}\n\n/**\n * Options for sequential feed writer creation.\n */\nexport interface SequentialFeedWriterOptions {\n /** Feed topic (32 bytes). */\n topic: Identifier | Uint8Array | string | BeeTopic\n /** Optional signer private key (32 bytes). */\n signer?: BeePrivateKey | Uint8Array | string\n}\n\n/**\n * Options for sequential feed lookups/updates.\n */\nexport interface SequentialFeedUpdateOptions {\n /** Specific feed index to read/write. */\n index?: FeedIndex | bigint\n /** Timestamp (seconds) used for lookup or payload timestamp. */\n at?: Timestamp | bigint\n /** Whether payload is prefixed with timestamp (default true). */\n hasTimestamp?: boolean\n /** Timeout (ms) for sequential index lookups (default 2000). */\n lookupTimeoutMs?: number\n}\n\n/**\n * Options for sequential feed uploads.\n */\nexport interface SequentialFeedUploadOptions\n extends UploadOptions, SequentialFeedUpdateOptions {}\n\n/**\n * Options for sequential feed raw download (encryptionKey in options).\n */\nexport interface SequentialFeedDownloadRawOptions extends SequentialFeedUpdateOptions {\n /** Optional encryption key for decrypting encrypted feed updates. */\n encryptionKey?: Uint8Array | string\n}\n\n/**\n * Options for sequential feed raw upload (encryptionKey in options).\n */\nexport interface SequentialFeedUploadRawOptions extends SequentialFeedUploadOptions {\n /** Optional encryption key for encrypting the payload. */\n encryptionKey?: Uint8Array | string\n}\n\n/**\n * Result from sequential payload download.\n */\nexport interface SequentialFeedPayloadResult {\n /** Payload bytes (timestamp removed if present). */\n payload: Uint8Array\n /** Timestamp extracted from payload, if present. */\n timestamp?: number\n /** Current feed index as a stringified uint64. */\n feedIndex: string\n /** Next feed index as a stringified uint64. */\n feedIndexNext: string\n}\n\n/**\n * Result from sequential reference download.\n */\nexport interface SequentialFeedReferenceResult {\n /** Swarm reference stored in the feed update. */\n reference: string\n /** Current feed index as a stringified uint64. */\n feedIndex: string\n /** Next feed index as a stringified uint64. */\n feedIndexNext: string\n}\n\n/**\n * Result from sequential feed upload.\n */\nexport interface SequentialFeedUploadResult {\n /** SOC address of the feed update. */\n reference: string\n /** Feed index used for the update (stringified uint64). */\n feedIndex: string\n /** Owner address for the feed update. */\n owner: string\n /** Encryption key for decrypting payload (if encrypted). */\n encryptionKey?: string\n /** Upload tag UID, if provided. */\n tagUid?: number\n}\n\n/**\n * Sequential feed reader interface.\n */\nexport interface SequentialFeedReader {\n /** Resolve feed owner address (20 bytes). */\n getOwner: () => Promise<Address>\n /**\n * Download and decrypt payload (requires encryption key).\n * @param encryptionKey - 32-byte encryption key.\n */\n downloadPayload: (\n encryptionKey: Uint8Array | string,\n options?: SequentialFeedUpdateOptions,\n ) => Promise<SequentialFeedPayloadResult>\n /**\n * Download raw payload or decrypt if encryptionKey is provided in options.\n */\n downloadRawPayload: (\n options?: SequentialFeedDownloadRawOptions,\n ) => Promise<SequentialFeedPayloadResult>\n /**\n * Download and decrypt reference (requires encryption key).\n * @param encryptionKey - 32-byte encryption key.\n */\n downloadReference: (\n encryptionKey: Uint8Array | string,\n options?: SequentialFeedUpdateOptions,\n ) => Promise<SequentialFeedReferenceResult>\n}\n\n/**\n * Sequential feed writer interface.\n */\nexport interface SequentialFeedWriter extends SequentialFeedReader {\n /**\n * Upload encrypted payload.\n */\n uploadPayload: (\n data: Uint8Array | string,\n options?: SequentialFeedUploadOptions,\n ) => Promise<SequentialFeedUploadResult>\n /**\n * Upload raw payload (or encrypted if encryptionKey provided in options).\n */\n uploadRawPayload: (\n data: Uint8Array | string,\n options?: SequentialFeedUploadRawOptions,\n ) => Promise<SequentialFeedUploadResult>\n /**\n * Upload a reference payload (encrypted by default).\n */\n uploadReference: (\n reference: Uint8Array | string,\n options?: SequentialFeedUploadOptions,\n ) => Promise<SequentialFeedUploadResult>\n}\n\n// ============================================================================\n// Auth Status\n// ============================================================================\n\nexport const AuthStatusSchema = z.object({\n authenticated: z.boolean(),\n origin: z.string().optional(),\n beeApiUrl: z.string().url().optional(),\n})\n\nexport type AuthStatus = z.infer<typeof AuthStatusSchema>\n\n// ============================================================================\n// Connection Info\n// ============================================================================\n\nexport const UploadModeSchema = z.enum([\n \"user-stamp\",\n \"subsidised\",\n \"unavailable\",\n])\n\nexport type UploadMode = z.infer<typeof UploadModeSchema>\n\n/**\n * Why a session cannot upload, when `uploadMode` is `\"unavailable\"`.\n *\n * - `no-stamp`: the site has no stamp to use. The person has not picked a\n * drive for this site, the drive they picked is gone, they set this site to\n * no drive, or they have not yet confirmed the site's drive in the connect\n * window since the site signed in. The account's default drive never\n * stands in for a missing pick.\n * - `stamper-failed` — the stamp resolved and the stamper still did not build.\n * `initializeStamper` logs and returns rather than throwing, so without this\n * the symptom is indistinguishable from having no stamp at all.\n * - `stamp-expired` — the stamp resolved, but its stored lifetime has run out\n * (#745). The stamper builds from the record regardless, so without this the\n * session claimed `user-stamp` and the first refused write surfaced as\n * partition contention.\n * - `stamp-not-usable` — the stamp resolved and is not expired, but its\n * stored record says the node does not have the batch (`exists: false`) or\n * cannot use it (`usable: false`). Opening the drive in the identity UI\n * refreshes the record from the chain (#765).\n * - `subsidised`: only in a refused `stampChunk`, never in ConnectionInfo.\n * The account is in subsidised mode, the gateway stamps every upload, so\n * there is no stamp of the person's to hand back.\n * - `app-stamp-count`, `app-stamp-rate`, `app-bucket-share`: only in a refused\n * `stampChunk`. The app reached one of its own limits on the account's\n * stamp (`proxy/app-stamp-limits.ts`): its count on this stamp, its rate,\n * or its share of the chunk's bucket.\n * - `app-slice-full`: only in a refused `stampChunk`. The chunk's bucket has\n * no slot left for app stamps, the rest is kept for the account's own\n * uploads (`ACCOUNT_RESERVED_LANE_SHARE`).\n * - `session-unconfirmed`: the session was restored from storage and the\n * check that it was not ended while no page was open could not read the\n * account's published state. Writes stay refused until a later check, made\n * on the next write, can.\n */\nexport const UploadUnavailableReasonSchema = z.enum([\n \"no-stamp\",\n \"stamper-failed\",\n \"stamp-expired\",\n \"stamp-not-usable\",\n \"subsidised\",\n \"app-stamp-count\",\n \"app-stamp-rate\",\n \"app-bucket-share\",\n \"app-slice-full\",\n \"session-unconfirmed\",\n])\n\nexport type UploadUnavailableReason = z.infer<\n typeof UploadUnavailableReasonSchema\n>\n\n/**\n * Where an avatar image came from. Only `generated` — derived from the\n * identity id — exists today; a union so another kind of image could be\n * added without reshaping the value.\n */\nexport const AvatarSourceSchema = z.enum([\"generated\"])\n\nexport type AvatarSource = z.infer<typeof AvatarSourceSchema>\n\nexport const AvatarSchema = z.object({\n source: AvatarSourceSchema,\n /**\n * Renderable as an `<img>` source; a `data:` URL for generated avatars. A\n * URL rather than markup, so the shape does not assume the image is an SVG\n * the caller could regenerate.\n */\n url: z.string(),\n})\n\nexport type Avatar = z.infer<typeof AvatarSchema>\n\n/** The dApp-visible identity, shared by the snapshot and the wire message. */\nexport const ConnectionIdentitySchema = z.object({\n id: z.string(),\n name: z.string(),\n address: AddressSchema,\n publicKey: CompressedPublicKeySchema.optional(),\n /**\n * The account-wide ACT key (#519): grant to this to share with the person\n * across every app they use, rather than with one app origin (`appKey`).\n * Every app the account connects can read what is granted to it.\n */\n sharingPublicKey: CompressedPublicKeySchema.optional(),\n /**\n * The address the account's postage signer stamps with (#815). An app that\n * funds storage for the account buys a batch with this as `createBatch`'s\n * owner; the account then adopts it in the identity UI with its own key.\n * Bare hex like `address`.\n */\n postageSignerAddress: AddressSchema.optional(),\n /** Ready-to-render account avatar — every identity has one. */\n avatar: AvatarSchema,\n /**\n * The account's and its wallet's signed statement that they belong together\n * (docs/Wallet-Link.md), present only while the person has \"Show my ENS\n * name on sites\" on in Swarm ID. A reader checks it with `verifyWalletLink`\n * against `address`, then looks up the wallet's name with\n * `resolveVerifiedEnsName`. Absent, the site learns no wallet at all.\n */\n walletLink: WalletLinkSchema.optional(),\n})\n\nexport type ConnectionIdentity = z.infer<typeof ConnectionIdentitySchema>\n\nexport const ConnectionInfoSchema = z.object({\n /** Whether uploads are available (postage batch + signer key + a built stamper, or a subsidised gateway configured) */\n canUpload: z.boolean(),\n /**\n * Whether the browser gave this proxy iframe its own partitioned store\n * (Safari ITP, strict privacy settings). Reported for UI messaging only —\n * since #277 the connect popup hands the stamps and signer keys over\n * directly, so partitioning does not decide whether uploads work.\n */\n storagePartitioned: z.boolean().optional(),\n /** Current upload mode: \"user-stamp\" (user has postage stamp), \"subsidised\" (using dApp gateway), \"unavailable\" (no upload capability) */\n uploadMode: UploadModeSchema.optional(),\n /**\n * Why `uploadMode` is `\"unavailable\"`; absent whenever uploads work.\n *\n * The two causes look identical from the dApp side without it, and they\n * call for opposite responses: `\"no-stamp\"` is the user's to fix (connect\n * again and confirm a drive in the connect window, adding one first if the\n * account has none), `\"stamper-failed\"` is ours: the stamp resolved and the\n * write path still would not build.\n *\n * Reporting it is what made the real-Safari run (#584) readable: an account\n * with no drive had been reported as a failed `window.opener` handover,\n * which is a claim about ITP rather than about the account.\n */\n uploadUnavailableReason: UploadUnavailableReasonSchema.optional(),\n /**\n * Partition number this device currently holds in the postage batch's\n * partition-lease. `undefined` when no lease is held (sign-in only,\n * pre-first-upload) or for legacy single-device accounts.\n */\n partition: z.number().int().min(0).optional(),\n identity: ConnectionIdentitySchema.optional(),\n /** App-specific key derived from identity + app origin (use publicKey for ACT grantee operations) */\n appKey: z\n .object({\n address: AddressSchema,\n publicKey: CompressedPublicKeySchema,\n })\n .optional(),\n /**\n * The account's signed statement that `appKey.address` on this site is its\n * own (docs/Chat-Binding.md). For the dApp to publish beside its chat, so a\n * reader can check it with `verifyChatBinding`. Present only on a session\n * the connect popup handed over, and only when it names this site, this app\n * key and this account. A reader trusts the newest binding per site.\n */\n chatBinding: ChatBindingSchema.optional(),\n /**\n * The Bee node the site gave (`beeApiUrl`, `setBeeApiUrl`), which its\n * content reads and stamped uploads go through. Absent when the site gave\n * none: the node the person set in Swarm ID is never reported to a site.\n * In subsidised mode the gateway is used instead (`uploadMode`).\n */\n beeApiUrl: z.string().optional(),\n /**\n * The batch id of the stamp the person gave this site in Swarm ID, which\n * `getPostageBatch` reads and `stampChunk` stamps with. Absent when the site\n * has none. Once the person has confirmed the site's drive, they can change\n * it on Swarm ID's Apps screen while the site is open, and a change arrives\n * as a new `connectionInfoChanged`.\n */\n postageBatchId: BatchIdSchema.optional(),\n})\n\nexport type ConnectionInfo = z.infer<typeof ConnectionInfoSchema>\n\n// ============================================================================\n// App Metadata\n// ============================================================================\n\nexport const AppMetadataSchema = z.object({\n name: z.string().min(1).max(100),\n description: z.string().max(500).optional(),\n icon: z\n .string()\n .optional()\n .refine(\n (val) => {\n if (!val) return true\n if (!val.startsWith(\"data:image/\")) return false\n const mimeMatch = val.match(/^data:image\\/(svg\\+xml|png);/)\n if (!mimeMatch) return false\n const base64Match = val.match(/base64,(.+)$/)\n if (base64Match) {\n const approximateSize = (base64Match[1].length * 3) / 4\n if (approximateSize > 4096) return false\n }\n return true\n },\n { message: \"Icon must be a data URL with SVG or PNG mime type, max 4KB\" },\n ),\n})\n\nexport type AppMetadata = z.infer<typeof AppMetadataSchema>\n\n// ============================================================================\n// Button Frame\n// ============================================================================\n\n/**\n * What a mounted Swarm ID button does. Both open the connect window: signed\n * out it signs the person in, signed in it is where they change the stamp the\n * site uses, which the window asks for on every connect.\n */\nexport const ButtonActionSchema = z.enum([\"sign-in\", \"change-stamp\"])\nexport type ButtonAction = z.infer<typeof ButtonActionSchema>\n\n/** Hosts a font file may be served from over plain http, for local work */\nconst LOOPBACK_HOSTS = [\"localhost\", \"127.0.0.1\", \"[::1]\"]\n\n/** More than a button's label could use, and a bound on what one frame fetches */\nconst MAX_BUTTON_FONT_FACES = 8\n\n/**\n * A font file's URL: https, or http on a loopback host for local work, with\n * no user name or password in it. The button frame takes loopback http only\n * in a development build.\n */\nexport function isButtonFontUrl(value: string): boolean {\n let url: URL\n try {\n url = new URL(value)\n } catch {\n return false\n }\n if (url.username || url.password) return false\n return (\n url.protocol === \"https:\" ||\n (url.protocol === \"http:\" && LOOPBACK_HOSTS.includes(url.hostname))\n )\n}\n\nexport const ButtonFontFaceSchema = z.object({\n family: z.string().min(1),\n url: z.string().refine(isButtonFontUrl, {\n message:\n \"A font file is served over https, or over http on localhost, with no user name or password in its URL\",\n }),\n weight: z.union([z.string(), z.number()]).optional(),\n style: z.enum([\"normal\", \"italic\", \"oblique\"]).optional(),\n})\n\n/**\n * A font file the button frame loads itself, so the label can use a family\n * the site serves. It is fetched cross-origin from Swarm ID's frame, so the\n * site serves it with an `Access-Control-Allow-Origin` that names Swarm ID's\n * origin. Name `family` in `fontFamily` too, ahead of a fallback.\n */\nexport type ButtonFontFace = z.infer<typeof ButtonFontFaceSchema>\n\nexport const ButtonConfigSchema = z.object({\n text: z.string().optional(),\n busyText: z.string().optional(),\n ariaLabel: z.string().optional(),\n disabled: z.boolean().optional(),\n busy: z.boolean().optional(),\n backgroundColor: z.string().optional(),\n color: z.string().optional(),\n borderRadius: z.string().optional(),\n borderColor: z.string().optional(),\n borderWidth: z.string().optional(),\n borderStyle: z.enum([\"solid\", \"dashed\", \"dotted\", \"double\"]).optional(),\n fontFamily: z.string().optional(),\n fontSize: z.string().optional(),\n fontWeight: z.union([z.string(), z.number()]).optional(),\n fontFaces: z\n .array(ButtonFontFaceSchema)\n .max(MAX_BUTTON_FONT_FACES)\n .optional(),\n})\n\n/**\n * How a mounted Swarm ID button looks and reads. It is painted inside Swarm\n * ID's own frame, where the site's CSS cannot reach, so everything the site\n * wants it to match is said here. The button fills the frame, which fills the\n * site's container, and text that does not fit ends in an ellipsis.\n */\nexport interface ButtonConfig {\n /** The label. Default: \"Sign in with Swarm ID\", or \"Change stamp in Swarm ID\" */\n text?: string\n /** The label while the connect window is open or `busy` is set. Default: \"Waiting for Swarm ID\" */\n busyText?: string\n /** The accessible name, where the label alone does not say what the button does. Default: the label */\n ariaLabel?: string\n /** Shown but not clickable */\n disabled?: boolean\n /** Shown as working and not clickable, for a step of the site's own, such as signing out */\n busy?: boolean\n /** CSS colour. Default: \"#dd7200\" */\n backgroundColor?: string\n /** CSS colour of the label. Default: \"white\" */\n color?: string\n /** CSS border-radius of the button and its frame. Default: \"0\" */\n borderRadius?: string\n /**\n * CSS colour of a border, for a secondary style. Naming this or\n * `borderWidth` draws one, kept in the busy and disabled looks. Default: the\n * label's colour\n */\n borderColor?: string\n /** CSS width of the border. Default: \"1px\" once a border is drawn */\n borderWidth?: string\n /** Default: \"solid\" */\n borderStyle?: \"solid\" | \"dashed\" | \"dotted\" | \"double\"\n /** CSS font-family. A stack falls back to the first family the frame has, not the page. Default: the frame's own */\n fontFamily?: string\n /** CSS font-size. Default: \"14px\" */\n fontSize?: string\n /** CSS font-weight, a keyword or a number. Default: \"600\" */\n fontWeight?: string | number\n /**\n * Font files the frame loads for the label, at most 8. A file that does not\n * load leaves the label in the next family of `fontFamily`, and the frame\n * says so once in the console\n */\n fontFaces?: ButtonFontFace[]\n}\n\n/** Where a mounted button's connect window is. `blocked`: the browser refused to open it */\nexport const ButtonWindowStateSchema = z.enum([\"open\", \"closed\", \"blocked\"])\nexport type ButtonWindowState = z.infer<typeof ButtonWindowStateSchema>\n\n/** What `SwarmIdClient.mountButton` takes */\nexport interface MountButtonOptions {\n action: ButtonAction\n config?: ButtonConfig\n /**\n * Called when the button's connect window opens, closes or is blocked, for\n * example to say that the browser blocked it.\n */\n onWindowChange?: (state: ButtonWindowState) => void\n}\n\n/** A mounted Swarm ID button */\nexport interface MountedButton {\n /**\n * Resolves once the button is shown. Rejects with `init-failed` when Swarm\n * ID refuses the site or the frame does not answer in time.\n */\n ready: Promise<void>\n /** Change what the button does or how it looks, in place. Does nothing once unmounted */\n update(options: { action?: ButtonAction; config?: ButtonConfig }): void\n /** Remove the button. The session stays as it is, and `onWindowChange` is not called again */\n unmount(): void\n}\n\nexport const ButtonIdentifyMessageSchema = z.object({\n type: z.literal(\"buttonIdentify\"),\n action: ButtonActionSchema,\n config: ButtonConfigSchema.optional(),\n metadata: AppMetadataSchema,\n popupMode: z.enum([\"popup\", \"window\"]).optional(),\n})\n\nexport const ButtonUpdateMessageSchema = z.object({\n type: z.literal(\"buttonUpdate\"),\n action: ButtonActionSchema,\n config: ButtonConfigSchema.optional(),\n})\n\nexport const ParentToButtonMessageSchema = z.discriminatedUnion(\"type\", [\n ButtonIdentifyMessageSchema,\n ButtonUpdateMessageSchema,\n])\nexport type ParentToButtonMessage = z.infer<typeof ParentToButtonMessageSchema>\n\nexport const ButtonToParentMessageSchema = z.discriminatedUnion(\"type\", [\n z.object({ type: z.literal(\"buttonReady\") }),\n z.object({ type: z.literal(\"buttonInitError\"), error: z.string() }),\n z.object({\n type: z.literal(\"buttonWindowChanged\"),\n state: ButtonWindowStateSchema,\n }),\n])\nexport type ButtonToParentMessage = z.infer<typeof ButtonToParentMessageSchema>\n\n/**\n * The button frame telling the session frames beside it that it opened a\n * connect window under this challenge, so the handover that comes back under\n * it is theirs to take.\n */\nexport const ConnectWindowOpenedMessageSchema = z.object({\n type: z.literal(\"connectWindowOpened\"),\n challenge: z.string(),\n})\nexport type ConnectWindowOpenedMessage = z.infer<\n typeof ConnectWindowOpenedMessageSchema\n>\n\n/**\n * Sent by the button frame on a wildcard origin the moment it loads, before\n * the parent has identified itself, so outside the unions above, as\n * `proxyInitialized` is.\n */\nexport const BUTTON_FRAME_LOADED = \"buttonFrameLoaded\"\n\n// ============================================================================\n// Message Types: Parent → Iframe\n// ============================================================================\n\nexport const ParentIdentifyMessageSchema = z.object({\n type: z.literal(\"parentIdentify\"),\n requestId: z.string(),\n beeApiUrl: BeeApiUrlSchema.optional(),\n metadata: AppMetadataSchema,\n subsidisedGatewayUrl: z.string().url().optional(),\n})\n\nexport const CheckAuthMessageSchema = z.object({\n type: z.literal(\"checkAuth\"),\n requestId: z.string(),\n})\n\nexport const DisconnectMessageSchema = z.object({\n type: z.literal(\"disconnect\"),\n requestId: z.string(),\n})\n\nexport const UploadDataMessageSchema = z.object({\n type: z.literal(\"uploadData\"),\n requestId: z.string(),\n data: z.instanceof(Uint8Array),\n options: UploadOptionsSchema,\n requestOptions: RequestOptionsSchema,\n enableProgress: z.boolean().optional(),\n useWebSocket: z.boolean().optional(),\n useWorkers: z.boolean().optional(),\n workerCount: z.number().int().min(1).max(32).optional(),\n concurrency: z.number().int().min(1).max(256).optional(),\n})\n\nexport const DownloadDataMessageSchema = z.object({\n type: z.literal(\"downloadData\"),\n requestId: z.string(),\n reference: ReferenceSchema,\n options: DownloadOptionsSchema,\n requestOptions: RequestOptionsSchema,\n})\n\n// Derive a stable, app-scoped secret HMAC(appSecret, label) inside the iframe.\n// The raw appSecret never crosses to the parent; only the derived bytes do (#520).\nexport const DeriveAppSecretMessageSchema = z.object({\n type: z.literal(\"deriveAppSecret\"),\n requestId: z.string(),\n label: z.string(),\n})\n\n/**\n * The site's own Bee address for this frame from now on, replacing the one\n * `parentIdentify` gave, for the site's session alone.\n */\nexport const SetBeeApiUrlMessageSchema = z.object({\n type: z.literal(\"setBeeApiUrl\"),\n requestId: z.string(),\n beeApiUrl: BeeApiUrlSchema,\n})\n\n// The site's chat key, the key its chat binding names (docs/Chat-Binding.md).\nexport const GetChatKeyMessageSchema = z.object({\n type: z.literal(\"getChatKey\"),\n requestId: z.string(),\n})\n\n/**\n * Who signs a single-owner chunk in `stampChunk`: the site's own app secret,\n * or a private key the site supplies (a chat's shared GSOC inbox key).\n */\nexport const StampChunkSignerSchema = z.union([\n z.literal(\"app\"),\n z.strictObject({ privateKey: PrivateKeySchema }),\n])\n\n/**\n * The chunk `stampChunk` stamps, always whole so the frame computes its\n * address itself. `data` is span plus payload. Strict, so a chunk that also\n * carries an address, an owner or a signature is refused: the frame never\n * stamps an address it did not compute, nor a chunk somebody else signed.\n */\nexport const StampChunkRequestSchema = z.discriminatedUnion(\"kind\", [\n z.strictObject({\n kind: z.literal(\"content\"),\n data: z.instanceof(Uint8Array),\n }),\n z.strictObject({\n kind: z.literal(\"soc\"),\n identifier: IdentifierSchema,\n data: z.instanceof(Uint8Array),\n signer: StampChunkSignerSchema,\n }),\n])\n\n// Stamp a chunk with the account's own stamp and hand the stamp back, so the\n// app sends the chunk through the Swarm access it chose.\nexport const StampChunkMessageSchema = z.strictObject({\n type: z.literal(\"stampChunk\"),\n requestId: z.string(),\n chunk: StampChunkRequestSchema,\n})\n\nexport const UploadFileMessageSchema = z.object({\n type: z.literal(\"uploadFile\"),\n requestId: z.string(),\n data: z.instanceof(Uint8Array),\n name: z.string().optional(),\n options: UploadOptionsSchema,\n requestOptions: RequestOptionsSchema,\n enableProgress: z.boolean().optional(),\n useWebSocket: z.boolean().optional(),\n useWorkers: z.boolean().optional(),\n workerCount: z.number().int().min(1).max(32).optional(),\n concurrency: z.number().int().min(1).max(256).optional(),\n})\n\nexport const DownloadFileMessageSchema = z.object({\n type: z.literal(\"downloadFile\"),\n requestId: z.string(),\n reference: ReferenceSchema,\n path: z.string().optional(),\n options: DownloadOptionsSchema,\n requestOptions: RequestOptionsSchema,\n})\n\nexport const UploadFilesMessageSchema = z.object({\n type: z.literal(\"uploadFiles\"),\n requestId: z.string(),\n files: z.array(CollectionFileSchema),\n options: UploadFilesOptionsSchema,\n requestOptions: RequestOptionsSchema,\n enableProgress: z.boolean().optional(),\n useWorkers: z.boolean().optional(),\n workerCount: z.number().int().min(1).max(32).optional(),\n})\n\nexport const ListFilesMessageSchema = z.object({\n type: z.literal(\"listFiles\"),\n requestId: z.string(),\n reference: ReferenceSchema,\n requestOptions: RequestOptionsSchema,\n})\n\nexport const UploadChunkMessageSchema = z.object({\n type: z.literal(\"uploadChunk\"),\n requestId: z.string(),\n data: z.instanceof(Uint8Array),\n options: UploadOptionsSchema,\n requestOptions: RequestOptionsSchema,\n})\n\nexport const DownloadChunkMessageSchema = z.object({\n type: z.literal(\"downloadChunk\"),\n requestId: z.string(),\n reference: ReferenceSchema,\n options: DownloadOptionsSchema,\n requestOptions: RequestOptionsSchema,\n})\n\nexport const IsConnectedMessageSchema = z.object({\n type: z.literal(\"isConnected\"),\n requestId: z.string(),\n})\n\nexport const GetNodeInfoMessageSchema = z.object({\n type: z.literal(\"getNodeInfo\"),\n requestId: z.string(),\n})\n\nexport const GsocMineMessageSchema = z.object({\n type: z.literal(\"gsocMine\"),\n requestId: z.string(),\n targetOverlay: z.string(),\n identifier: z.string(),\n proximity: z.number().optional(),\n})\n\nexport const GsocSendMessageSchema = z.object({\n type: z.literal(\"gsocSend\"),\n requestId: z.string(),\n signer: z.string(),\n identifier: z.string(),\n data: z.instanceof(Uint8Array),\n options: UploadOptionsSchema,\n requestOptions: RequestOptionsSchema,\n})\n\n// SOC (Single Owner Chunk) Message Schemas\nexport const SocUploadMessageSchema = z.object({\n type: z.literal(\"socUpload\"),\n requestId: z.string(),\n identifier: IdentifierSchema,\n data: z.instanceof(Uint8Array),\n signer: PrivateKeySchema.optional(),\n options: UploadOptionsSchema,\n requestOptions: RequestOptionsSchema,\n})\n\nexport const SocRawUploadMessageSchema = z.object({\n type: z.literal(\"socRawUpload\"),\n requestId: z.string(),\n identifier: IdentifierSchema,\n data: z.instanceof(Uint8Array),\n signer: PrivateKeySchema.optional(),\n options: UploadOptionsSchema,\n requestOptions: RequestOptionsSchema,\n})\n\nexport const SocDownloadMessageSchema = z.object({\n type: z.literal(\"socDownload\"),\n requestId: z.string(),\n owner: AddressSchema.optional(),\n identifier: IdentifierSchema,\n encryptionKey: EncryptionKeySchema,\n requestOptions: RequestOptionsSchema,\n})\n\nexport const SocRawDownloadMessageSchema = z.object({\n type: z.literal(\"socRawDownload\"),\n requestId: z.string(),\n owner: AddressSchema.optional(),\n identifier: IdentifierSchema,\n encryptionKey: EncryptionKeySchema.optional(),\n requestOptions: RequestOptionsSchema,\n})\n\nexport const SocGetOwnerMessageSchema = z.object({\n type: z.literal(\"socGetOwner\"),\n requestId: z.string(),\n})\n\nexport const EpochFeedDownloadReferenceMessageSchema = z.object({\n type: z.literal(\"epochFeedDownloadReference\"),\n requestId: z.string(),\n topic: IdentifierSchema,\n owner: AddressSchema.optional(),\n at: TimestampSchema,\n after: TimestampSchema.optional(),\n encryptionKey: EncryptionKeySchema.optional(),\n requestOptions: RequestOptionsSchema,\n})\n\n// Schema for epoch hints (used for stateless epoch calculation)\nexport const EpochHintsSchema = z\n .object({\n lastEpoch: z\n .object({\n start: z.string(), // Stringified bigint\n level: z.number(),\n })\n .optional(),\n lastTimestamp: z.string().optional(), // Stringified bigint\n })\n .optional()\n\nexport const EpochFeedUploadReferenceMessageSchema = z.object({\n type: z.literal(\"epochFeedUploadReference\"),\n requestId: z.string(),\n topic: IdentifierSchema,\n signer: PrivateKeySchema.optional(),\n at: TimestampSchema,\n reference: ReferenceSchema,\n encryptionKey: EncryptionKeySchema.optional(),\n hints: EpochHintsSchema,\n requestOptions: RequestOptionsSchema,\n})\n\nexport const FeedGetOwnerMessageSchema = z.object({\n type: z.literal(\"feedGetOwner\"),\n requestId: z.string(),\n})\n\nexport const SequentialFeedGetOwnerMessageSchema = z.object({\n type: z.literal(\"seqFeedGetOwner\"),\n requestId: z.string(),\n})\n\nexport const SequentialFeedDownloadPayloadMessageSchema = z.object({\n type: z.literal(\"seqFeedDownloadPayload\"),\n requestId: z.string(),\n topic: IdentifierSchema,\n owner: AddressSchema.optional(),\n index: FeedIndexSchema.optional(),\n at: TimestampSchema.optional(),\n hasTimestamp: z.boolean().optional(),\n lookupTimeoutMs: z.number().optional(),\n encryptionKey: EncryptionKeySchema,\n requestOptions: RequestOptionsSchema,\n})\n\nexport const SequentialFeedDownloadRawPayloadMessageSchema = z.object({\n type: z.literal(\"seqFeedDownloadRawPayload\"),\n requestId: z.string(),\n topic: IdentifierSchema,\n owner: AddressSchema.optional(),\n index: FeedIndexSchema.optional(),\n at: TimestampSchema.optional(),\n hasTimestamp: z.boolean().optional(),\n lookupTimeoutMs: z.number().optional(),\n encryptionKey: EncryptionKeySchema.optional(),\n requestOptions: RequestOptionsSchema,\n})\n\nexport const SequentialFeedDownloadReferenceMessageSchema = z.object({\n type: z.literal(\"seqFeedDownloadReference\"),\n requestId: z.string(),\n topic: IdentifierSchema,\n owner: AddressSchema.optional(),\n index: FeedIndexSchema.optional(),\n at: TimestampSchema.optional(),\n hasTimestamp: z.boolean().optional(),\n lookupTimeoutMs: z.number().optional(),\n encryptionKey: EncryptionKeySchema,\n requestOptions: RequestOptionsSchema,\n})\n\nexport const SequentialFeedUploadPayloadMessageSchema = z.object({\n type: z.literal(\"seqFeedUploadPayload\"),\n requestId: z.string(),\n topic: IdentifierSchema,\n signer: PrivateKeySchema.optional(),\n data: z.instanceof(Uint8Array),\n index: FeedIndexSchema.optional(),\n at: TimestampSchema.optional(),\n hasTimestamp: z.boolean().optional(),\n lookupTimeoutMs: z.number().optional(),\n options: UploadOptionsSchema,\n requestOptions: RequestOptionsSchema,\n})\n\nexport const SequentialFeedUploadRawPayloadMessageSchema = z.object({\n type: z.literal(\"seqFeedUploadRawPayload\"),\n requestId: z.string(),\n topic: IdentifierSchema,\n signer: PrivateKeySchema.optional(),\n data: z.instanceof(Uint8Array),\n index: FeedIndexSchema.optional(),\n at: TimestampSchema.optional(),\n hasTimestamp: z.boolean().optional(),\n lookupTimeoutMs: z.number().optional(),\n encryptionKey: EncryptionKeySchema.optional(),\n options: UploadOptionsSchema,\n requestOptions: RequestOptionsSchema,\n})\n\nexport const SequentialFeedUploadReferenceMessageSchema = z.object({\n type: z.literal(\"seqFeedUploadReference\"),\n requestId: z.string(),\n topic: IdentifierSchema,\n signer: PrivateKeySchema.optional(),\n reference: ReferenceSchema,\n index: FeedIndexSchema.optional(),\n at: TimestampSchema.optional(),\n hasTimestamp: z.boolean().optional(),\n lookupTimeoutMs: z.number().optional(),\n options: UploadOptionsSchema,\n requestOptions: RequestOptionsSchema,\n})\n\n// Feed Manifest Message Schema\nexport const CreateFeedManifestMessageSchema = z.object({\n type: z.literal(\"createFeedManifest\"),\n requestId: z.string(),\n topic: IdentifierSchema,\n owner: AddressSchema.optional(),\n feedType: z.enum([\"Sequence\", \"Epoch\"]).optional(),\n uploadOptions: UploadOptionsSchema,\n requestOptions: RequestOptionsSchema,\n})\n\n// ACT (Access Control Tries) Message Schemas\nexport const ActUploadDataMessageSchema = z.object({\n type: z.literal(\"actUploadData\"),\n requestId: z.string(),\n data: z.instanceof(Uint8Array),\n grantees: z.array(z.string()), // Compressed public keys (33 bytes = 66 hex chars)\n options: ActUploadOptionsSchema,\n requestOptions: RequestOptionsSchema,\n enableProgress: z.boolean().optional(),\n})\n\nexport const ActDownloadDataMessageSchema = z.object({\n type: z.literal(\"actDownloadData\"),\n requestId: z.string(),\n encryptedReference: ReferenceSchema,\n historyReference: ReferenceSchema,\n publisherPubKey: z.string(), // Compressed public key (33 bytes = 66 hex chars)\n timestamp: z.number().optional(), // Optional: specific ACT version\n requestOptions: RequestOptionsSchema,\n})\n\nexport const ActAddGranteesMessageSchema = z.object({\n type: z.literal(\"actAddGrantees\"),\n requestId: z.string(),\n historyReference: ReferenceSchema,\n grantees: z.array(z.string()), // Compressed public keys to add\n requestOptions: RequestOptionsSchema,\n})\n\nexport const ActRevokeGranteesMessageSchema = z.object({\n type: z.literal(\"actRevokeGrantees\"),\n requestId: z.string(),\n historyReference: ReferenceSchema,\n encryptedReference: ReferenceSchema, // Needed for key rotation\n revokeGrantees: z.array(z.string()), // Compressed public keys to revoke\n requestOptions: RequestOptionsSchema,\n})\n\nexport const ActGetGranteesMessageSchema = z.object({\n type: z.literal(\"actGetGrantees\"),\n requestId: z.string(),\n historyReference: ReferenceSchema,\n requestOptions: RequestOptionsSchema,\n})\n\nexport const GetPostageBatchMessageSchema = z.object({\n type: z.literal(\"getPostageBatch\"),\n requestId: z.string(),\n})\n\nexport const ParentToIframeMessageSchema = z.discriminatedUnion(\"type\", [\n ParentIdentifyMessageSchema,\n CheckAuthMessageSchema,\n DisconnectMessageSchema,\n UploadDataMessageSchema,\n DownloadDataMessageSchema,\n DeriveAppSecretMessageSchema,\n GetChatKeyMessageSchema,\n SetBeeApiUrlMessageSchema,\n StampChunkMessageSchema,\n UploadFileMessageSchema,\n DownloadFileMessageSchema,\n UploadFilesMessageSchema,\n ListFilesMessageSchema,\n UploadChunkMessageSchema,\n DownloadChunkMessageSchema,\n IsConnectedMessageSchema,\n GetNodeInfoMessageSchema,\n GsocMineMessageSchema,\n GsocSendMessageSchema,\n SocUploadMessageSchema,\n SocRawUploadMessageSchema,\n SocDownloadMessageSchema,\n SocRawDownloadMessageSchema,\n SocGetOwnerMessageSchema,\n EpochFeedDownloadReferenceMessageSchema,\n EpochFeedUploadReferenceMessageSchema,\n FeedGetOwnerMessageSchema,\n SequentialFeedGetOwnerMessageSchema,\n SequentialFeedDownloadPayloadMessageSchema,\n SequentialFeedDownloadRawPayloadMessageSchema,\n SequentialFeedDownloadReferenceMessageSchema,\n SequentialFeedUploadPayloadMessageSchema,\n SequentialFeedUploadRawPayloadMessageSchema,\n SequentialFeedUploadReferenceMessageSchema,\n CreateFeedManifestMessageSchema,\n ActUploadDataMessageSchema,\n ActDownloadDataMessageSchema,\n ActAddGranteesMessageSchema,\n ActRevokeGranteesMessageSchema,\n ActGetGranteesMessageSchema,\n GetPostageBatchMessageSchema,\n])\n\nexport type ParentIdentifyMessage = z.infer<typeof ParentIdentifyMessageSchema>\nexport type CheckAuthMessage = z.infer<typeof CheckAuthMessageSchema>\nexport type DisconnectMessage = z.infer<typeof DisconnectMessageSchema>\nexport type UploadDataMessage = z.infer<typeof UploadDataMessageSchema>\nexport type DownloadDataMessage = z.infer<typeof DownloadDataMessageSchema>\nexport type DeriveAppSecretMessage = z.infer<\n typeof DeriveAppSecretMessageSchema\n>\nexport type GetChatKeyMessage = z.infer<typeof GetChatKeyMessageSchema>\nexport type SetBeeApiUrlMessage = z.infer<typeof SetBeeApiUrlMessageSchema>\nexport type StampChunkSigner = z.infer<typeof StampChunkSignerSchema>\nexport type StampChunkRequest = z.infer<typeof StampChunkRequestSchema>\nexport type StampChunkMessage = z.infer<typeof StampChunkMessageSchema>\nexport type UploadFileMessage = z.infer<typeof UploadFileMessageSchema>\nexport type DownloadFileMessage = z.infer<typeof DownloadFileMessageSchema>\nexport type UploadFilesMessage = z.infer<typeof UploadFilesMessageSchema>\nexport type ListFilesMessage = z.infer<typeof ListFilesMessageSchema>\nexport type UploadChunkMessage = z.infer<typeof UploadChunkMessageSchema>\nexport type DownloadChunkMessage = z.infer<typeof DownloadChunkMessageSchema>\nexport type IsConnectedMessage = z.infer<typeof IsConnectedMessageSchema>\nexport type GetNodeInfoMessage = z.infer<typeof GetNodeInfoMessageSchema>\nexport type GsocMineMessage = z.infer<typeof GsocMineMessageSchema>\nexport type GsocSendMessage = z.infer<typeof GsocSendMessageSchema>\nexport type SocUploadMessage = z.infer<typeof SocUploadMessageSchema>\nexport type SocRawUploadMessage = z.infer<typeof SocRawUploadMessageSchema>\nexport type SocDownloadMessage = z.infer<typeof SocDownloadMessageSchema>\nexport type SocRawDownloadMessage = z.infer<typeof SocRawDownloadMessageSchema>\nexport type SocGetOwnerMessage = z.infer<typeof SocGetOwnerMessageSchema>\nexport type EpochFeedDownloadReferenceMessage = z.infer<\n typeof EpochFeedDownloadReferenceMessageSchema\n>\nexport type EpochFeedUploadReferenceMessage = z.infer<\n typeof EpochFeedUploadReferenceMessageSchema\n>\nexport type FeedGetOwnerMessage = z.infer<typeof FeedGetOwnerMessageSchema>\nexport type SequentialFeedGetOwnerMessage = z.infer<\n typeof SequentialFeedGetOwnerMessageSchema\n>\nexport type SequentialFeedDownloadPayloadMessage = z.infer<\n typeof SequentialFeedDownloadPayloadMessageSchema\n>\nexport type SequentialFeedDownloadRawPayloadMessage = z.infer<\n typeof SequentialFeedDownloadRawPayloadMessageSchema\n>\nexport type SequentialFeedDownloadReferenceMessage = z.infer<\n typeof SequentialFeedDownloadReferenceMessageSchema\n>\nexport type SequentialFeedUploadPayloadMessage = z.infer<\n typeof SequentialFeedUploadPayloadMessageSchema\n>\nexport type SequentialFeedUploadRawPayloadMessage = z.infer<\n typeof SequentialFeedUploadRawPayloadMessageSchema\n>\nexport type SequentialFeedUploadReferenceMessage = z.infer<\n typeof SequentialFeedUploadReferenceMessageSchema\n>\nexport type CreateFeedManifestMessage = z.infer<\n typeof CreateFeedManifestMessageSchema\n>\nexport type ActUploadDataMessage = z.infer<typeof ActUploadDataMessageSchema>\nexport type ActDownloadDataMessage = z.infer<\n typeof ActDownloadDataMessageSchema\n>\nexport type ActAddGranteesMessage = z.infer<typeof ActAddGranteesMessageSchema>\nexport type ActRevokeGranteesMessage = z.infer<\n typeof ActRevokeGranteesMessageSchema\n>\nexport type ActGetGranteesMessage = z.infer<typeof ActGetGranteesMessageSchema>\nexport type GetPostageBatchMessage = z.infer<\n typeof GetPostageBatchMessageSchema\n>\nexport type ParentToIframeMessage = z.infer<typeof ParentToIframeMessageSchema>\n\n// ============================================================================\n// Message Types: Iframe → Parent\n// ============================================================================\n\nexport const ProxyReadyMessageSchema = z.object({\n type: z.literal(\"proxyReady\"),\n authenticated: z.boolean(),\n parentOrigin: z.string(),\n /**\n * Whether the iframe can read the trusted domain's first-party store, which\n * decides which transport `connect()` can use (#613). Optional so an older\n * deployed proxy stays wire-compatible. Absent reads as \"not proven shared\",\n * and `connect()` then refuses with `button-required`, since only the Swarm\n * ID button works in both modes.\n */\n storageShared: z.boolean().optional(),\n})\n\nexport const InitErrorMessageSchema = z.object({\n type: z.literal(\"initError\"),\n error: z.string(),\n})\n\nexport const AuthStatusResponseMessageSchema = z.object({\n type: z.literal(\"authStatusResponse\"),\n requestId: z.string(),\n authenticated: z.boolean(),\n origin: z.string().optional(),\n beeApiUrl: z.string().url().optional(),\n})\n\nexport const DisconnectResponseMessageSchema = z.object({\n type: z.literal(\"disconnectResponse\"),\n requestId: z.string(),\n success: z.boolean(),\n})\n\nexport const AuthSuccessMessageSchema = z.object({\n type: z.literal(\"authSuccess\"),\n origin: z.string(),\n})\n\nexport const UploadDataResponseMessageSchema = z.object({\n type: z.literal(\"uploadDataResponse\"),\n requestId: z.string(),\n reference: ReferenceSchema,\n tagUid: z.number().optional(),\n})\n\nexport const DownloadDataResponseMessageSchema = z.object({\n type: z.literal(\"downloadDataResponse\"),\n requestId: z.string(),\n data: z.instanceof(Uint8Array),\n})\n\nexport const DeriveAppSecretResponseMessageSchema = z.object({\n type: z.literal(\"deriveAppSecretResponse\"),\n requestId: z.string(),\n secret: z.instanceof(Uint8Array),\n})\n\nexport const GetChatKeyResponseMessageSchema = z.object({\n type: z.literal(\"getChatKeyResponse\"),\n requestId: z.string(),\n chatKey: z.instanceof(Uint8Array),\n})\n\nexport const SetBeeApiUrlResponseMessageSchema = z.object({\n type: z.literal(\"setBeeApiUrlResponse\"),\n requestId: z.string(),\n beeApiUrl: z.string(),\n})\n\nexport const StampChunkResponseMessageSchema = z.object({\n type: z.literal(\"stampChunkResponse\"),\n requestId: z.string(),\n address: ChunkAddressSchema,\n stamp: MarshaledStampSchema,\n /** A single-owner chunk's owner, set only for one */\n owner: AddressSchema.optional(),\n /** A single-owner chunk's signature, set only for one */\n signature: SignatureSchema.optional(),\n})\n\nexport const UploadFileResponseMessageSchema = z.object({\n type: z.literal(\"uploadFileResponse\"),\n requestId: z.string(),\n reference: ReferenceSchema,\n tagUid: z.number().optional(),\n})\n\nexport const DownloadFileResponseMessageSchema = z.object({\n type: z.literal(\"downloadFileResponse\"),\n requestId: z.string(),\n name: z.string(),\n data: z.instanceof(Uint8Array),\n})\n\nexport const UploadFilesResponseMessageSchema = z.object({\n type: z.literal(\"uploadFilesResponse\"),\n requestId: z.string(),\n reference: ReferenceSchema,\n tagUid: z.number().optional(),\n})\n\nexport const ListFilesResponseMessageSchema = z.object({\n type: z.literal(\"listFilesResponse\"),\n requestId: z.string(),\n entries: z.array(CollectionEntrySchema),\n})\n\nexport const UploadChunkResponseMessageSchema = z.object({\n type: z.literal(\"uploadChunkResponse\"),\n requestId: z.string(),\n reference: ReferenceSchema,\n})\n\nexport const DownloadChunkResponseMessageSchema = z.object({\n type: z.literal(\"downloadChunkResponse\"),\n requestId: z.string(),\n data: z.instanceof(Uint8Array),\n})\n\nexport const UploadProgressMessageSchema = z.object({\n type: z.literal(\"uploadProgress\"),\n requestId: z.string(),\n total: z.number(),\n processed: z.number(),\n})\n\n/**\n * Why a request failed, as a dApp can branch on it (#761). `error.message`\n * carries the text as before; the code is the stable part.\n *\n * - `not-authenticated` — no session for this origin\n * - `upload-unavailable` — the session refuses to stamp; `reason` says why,\n * in the same vocabulary as `ConnectionInfo.uploadUnavailableReason`\n * - `partition-contended` — every partition of the batch is held by other\n * devices and none yielded in time\n * - `lease-lost` — this device's partition was reclaimed mid-write\n * - `bee-rejected` — Bee or the gateway answered with a non-2xx status:\n * `status`, `beeMessage` and `url` say which\n * - `network` — the request never got a response (a CORS preflight refusal\n * shows as this)\n * - `timeout` — a deadline: the proxy's, or the client's round trip\n * - `invalid-request` — the message or an argument failed validation\n * - `invalid-state` — the client cannot take the call in its current state:\n * `initialize()` has not resolved, was already called, or `destroy()` ran;\n * a call (or an `initialize()`) still pending when `destroy()` runs rejects\n * with it too\n * - `init-failed` — the proxy iframe did not come up: it failed to load, the\n * proxy refused the origin, or it did not answer within\n * `initializationTimeout`\n * - `popup-blocked` — the browser blocked the authentication popup `connect()`\n * opens (not called from a user gesture, or a blocker)\n * - `internal` — anything else, message preserved\n */\nexport const SwarmIdErrorCodeSchema = z.enum([\n \"not-authenticated\",\n \"upload-unavailable\",\n \"partition-contended\",\n \"lease-lost\",\n \"bee-rejected\",\n \"network\",\n \"timeout\",\n \"invalid-request\",\n \"invalid-state\",\n \"init-failed\",\n \"popup-blocked\",\n \"button-required\",\n \"internal\",\n])\nexport type SwarmIdErrorCode = z.infer<typeof SwarmIdErrorCodeSchema>\n\n/** The fields of a `SwarmIdError` as they cross the bridge */\nexport const WireErrorSchema = z.object({\n error: z.string(),\n // Degrade, never drop: the client ships in dApps and meets whatever the\n // trusted domain runs (#662). A newer proxy's code or reason must land as\n // `internal` / no reason with the message intact, not as a message the\n // schema rejects and a request that never settles.\n code: SwarmIdErrorCodeSchema.catch(\"internal\"),\n reason: UploadUnavailableReasonSchema.optional().catch(undefined),\n status: z.number().int().optional(),\n beeMessage: z.string().optional(),\n url: z.string().optional(),\n})\nexport type WireError = z.infer<typeof WireErrorSchema>\n\nexport const ErrorMessageSchema = WireErrorSchema.extend({\n type: z.literal(\"error\"),\n requestId: z.string(),\n})\n\nexport const ConnectionInfoChangedMessageSchema = z.object({\n type: z.literal(\"connectionInfoChanged\"),\n canUpload: z.boolean(),\n storagePartitioned: z.boolean().optional(),\n uploadMode: UploadModeSchema.optional(),\n /**\n * Tolerant on purpose: a reason this lib does not know degrades to\n * `undefined` instead of failing the message. The client drops a\n * `connectionInfoChanged` it cannot parse, and if that is the first one\n * after `proxyReady`, `initialize()` rejects on its timeout — so one\n * unrecognised enum member would stop the dApp starting at all. Reachable\n * through deploy-cache skew alone: a proxy from the #616–#642 window still\n * emits the `\"download-only\"` this lib removed.\n */\n uploadUnavailableReason:\n UploadUnavailableReasonSchema.optional().catch(undefined),\n identity: ConnectionIdentitySchema.optional(),\n appKey: z\n .object({\n address: AddressSchema,\n publicKey: CompressedPublicKeySchema,\n })\n .optional(),\n partition: z.number().int().min(0).optional(),\n chatBinding: ChatBindingSchema.optional(),\n beeApiUrl: z.string().optional(),\n postageBatchId: BatchIdSchema.optional(),\n})\n\nexport const IsConnectedResponseMessageSchema = z.object({\n type: z.literal(\"isConnectedResponse\"),\n requestId: z.string(),\n connected: z.boolean(),\n})\n\nexport const GetNodeInfoResponseMessageSchema = z.object({\n type: z.literal(\"getNodeInfoResponse\"),\n requestId: z.string(),\n beeMode: z.string(),\n chequebookEnabled: z.boolean(),\n swapEnabled: z.boolean(),\n})\n\nexport const GsocMineResponseMessageSchema = z.object({\n type: z.literal(\"gsocMineResponse\"),\n requestId: z.string(),\n signer: z.string(),\n})\n\nexport const GsocSendResponseMessageSchema = z.object({\n type: z.literal(\"gsocSendResponse\"),\n requestId: z.string(),\n reference: ReferenceSchema,\n tagUid: z.number().optional(),\n})\n\nexport const SocUploadResponseMessageSchema = z.object({\n type: z.literal(\"socUploadResponse\"),\n requestId: z.string(),\n reference: ReferenceSchema,\n tagUid: z.number().optional(),\n encryptionKey: z.string().optional(),\n owner: AddressSchema,\n})\n\nexport const SocRawUploadResponseMessageSchema = z.object({\n type: z.literal(\"socRawUploadResponse\"),\n requestId: z.string(),\n reference: ReferenceSchema,\n tagUid: z.number().optional(),\n encryptionKey: z.string().optional(),\n owner: AddressSchema,\n})\n\nexport const SocDownloadResponseMessageSchema = z.object({\n type: z.literal(\"socDownloadResponse\"),\n requestId: z.string(),\n data: z.instanceof(Uint8Array),\n identifier: IdentifierSchema,\n signature: SignatureSchema,\n span: z.number(),\n payload: z.instanceof(Uint8Array),\n address: ReferenceSchema,\n owner: AddressSchema,\n})\n\nexport const SocRawDownloadResponseMessageSchema = z.object({\n type: z.literal(\"socRawDownloadResponse\"),\n requestId: z.string(),\n data: z.instanceof(Uint8Array),\n identifier: IdentifierSchema,\n signature: SignatureSchema,\n span: z.number(),\n payload: z.instanceof(Uint8Array),\n address: ReferenceSchema,\n owner: AddressSchema,\n})\n\nexport const SocGetOwnerResponseMessageSchema = z.object({\n type: z.literal(\"socGetOwnerResponse\"),\n requestId: z.string(),\n owner: AddressSchema,\n})\n\nexport const EpochFeedDownloadReferenceResponseMessageSchema = z.object({\n type: z.literal(\"epochFeedDownloadReferenceResponse\"),\n requestId: z.string(),\n reference: ReferenceSchema.optional(),\n})\n\nexport const EpochFeedUploadReferenceResponseMessageSchema = z.object({\n type: z.literal(\"epochFeedUploadReferenceResponse\"),\n requestId: z.string(),\n socAddress: ReferenceSchema,\n encryptionKey: EncryptionKeySchema.optional(),\n // Epoch info for next update (stateless hints)\n epoch: z.object({\n start: z.string(), // Stringified bigint\n level: z.number(),\n }),\n timestamp: z.string(), // Stringified bigint\n})\n\nexport const FeedGetOwnerResponseMessageSchema = z.object({\n type: z.literal(\"feedGetOwnerResponse\"),\n requestId: z.string(),\n owner: AddressSchema,\n})\n\nexport const SequentialFeedGetOwnerResponseMessageSchema = z.object({\n type: z.literal(\"seqFeedGetOwnerResponse\"),\n requestId: z.string(),\n owner: AddressSchema,\n})\n\nexport const SequentialFeedDownloadPayloadResponseMessageSchema = z.object({\n type: z.literal(\"seqFeedDownloadPayloadResponse\"),\n requestId: z.string(),\n payload: z.instanceof(Uint8Array),\n timestamp: z.number().optional(),\n feedIndex: z.string(),\n feedIndexNext: z.string(),\n})\n\nexport const SequentialFeedDownloadRawPayloadResponseMessageSchema = z.object({\n type: z.literal(\"seqFeedDownloadRawPayloadResponse\"),\n requestId: z.string(),\n payload: z.instanceof(Uint8Array),\n timestamp: z.number().optional(),\n feedIndex: z.string(),\n feedIndexNext: z.string(),\n})\n\nexport const SequentialFeedDownloadReferenceResponseMessageSchema = z.object({\n type: z.literal(\"seqFeedDownloadReferenceResponse\"),\n requestId: z.string(),\n reference: ReferenceSchema,\n feedIndex: z.string(),\n feedIndexNext: z.string(),\n})\n\nexport const SequentialFeedUploadPayloadResponseMessageSchema = z.object({\n type: z.literal(\"seqFeedUploadPayloadResponse\"),\n requestId: z.string(),\n reference: ReferenceSchema,\n feedIndex: z.string(),\n owner: AddressSchema,\n encryptionKey: z.string().optional(),\n tagUid: z.number().optional(),\n})\n\nexport const SequentialFeedUploadRawPayloadResponseMessageSchema = z.object({\n type: z.literal(\"seqFeedUploadRawPayloadResponse\"),\n requestId: z.string(),\n reference: ReferenceSchema,\n feedIndex: z.string(),\n owner: AddressSchema,\n encryptionKey: z.string().optional(),\n tagUid: z.number().optional(),\n})\n\nexport const SequentialFeedUploadReferenceResponseMessageSchema = z.object({\n type: z.literal(\"seqFeedUploadReferenceResponse\"),\n requestId: z.string(),\n reference: ReferenceSchema,\n feedIndex: z.string(),\n owner: AddressSchema,\n encryptionKey: z.string().optional(),\n tagUid: z.number().optional(),\n})\n\n// Feed Manifest Response Schema\nexport const CreateFeedManifestResponseMessageSchema = z.object({\n type: z.literal(\"createFeedManifestResponse\"),\n requestId: z.string(),\n reference: ReferenceSchema,\n})\n\n// ACT Response Message Schemas\nexport const ActUploadDataResponseMessageSchema = z.object({\n type: z.literal(\"actUploadDataResponse\"),\n requestId: z.string(),\n encryptedReference: ReferenceSchema,\n historyReference: ReferenceSchema,\n granteeListReference: ReferenceSchema,\n publisherPubKey: z.string(), // Compressed public key\n actReference: ReferenceSchema,\n tagUid: z.number().optional(),\n})\n\nexport const ActDownloadDataResponseMessageSchema = z.object({\n type: z.literal(\"actDownloadDataResponse\"),\n requestId: z.string(),\n data: z.instanceof(Uint8Array),\n})\n\nexport const ActAddGranteesResponseMessageSchema = z.object({\n type: z.literal(\"actAddGranteesResponse\"),\n requestId: z.string(),\n historyReference: ReferenceSchema,\n granteeListReference: ReferenceSchema,\n actReference: ReferenceSchema,\n})\n\nexport const ActRevokeGranteesResponseMessageSchema = z.object({\n type: z.literal(\"actRevokeGranteesResponse\"),\n requestId: z.string(),\n encryptedReference: ReferenceSchema,\n historyReference: ReferenceSchema,\n granteeListReference: ReferenceSchema,\n actReference: ReferenceSchema,\n})\n\nexport const ActGetGranteesResponseMessageSchema = z.object({\n type: z.literal(\"actGetGranteesResponse\"),\n requestId: z.string(),\n grantees: z.array(z.string()),\n})\n\nexport const GetPostageBatchResponseMessageSchema = z.object({\n type: z.literal(\"getPostageBatchResponse\"),\n requestId: z.string(),\n postageBatch: PostageBatchSchema.optional(),\n})\n\nexport const IframeToParentMessageSchema = z.discriminatedUnion(\"type\", [\n ProxyReadyMessageSchema,\n InitErrorMessageSchema,\n AuthStatusResponseMessageSchema,\n DisconnectResponseMessageSchema,\n AuthSuccessMessageSchema,\n UploadDataResponseMessageSchema,\n DownloadDataResponseMessageSchema,\n DeriveAppSecretResponseMessageSchema,\n GetChatKeyResponseMessageSchema,\n SetBeeApiUrlResponseMessageSchema,\n StampChunkResponseMessageSchema,\n UploadFileResponseMessageSchema,\n DownloadFileResponseMessageSchema,\n UploadFilesResponseMessageSchema,\n ListFilesResponseMessageSchema,\n UploadChunkResponseMessageSchema,\n DownloadChunkResponseMessageSchema,\n UploadProgressMessageSchema,\n ErrorMessageSchema,\n ConnectionInfoChangedMessageSchema,\n IsConnectedResponseMessageSchema,\n GetNodeInfoResponseMessageSchema,\n GsocMineResponseMessageSchema,\n GsocSendResponseMessageSchema,\n SocUploadResponseMessageSchema,\n SocRawUploadResponseMessageSchema,\n SocDownloadResponseMessageSchema,\n SocRawDownloadResponseMessageSchema,\n SocGetOwnerResponseMessageSchema,\n EpochFeedDownloadReferenceResponseMessageSchema,\n EpochFeedUploadReferenceResponseMessageSchema,\n FeedGetOwnerResponseMessageSchema,\n SequentialFeedGetOwnerResponseMessageSchema,\n SequentialFeedDownloadPayloadResponseMessageSchema,\n SequentialFeedDownloadRawPayloadResponseMessageSchema,\n SequentialFeedDownloadReferenceResponseMessageSchema,\n SequentialFeedUploadPayloadResponseMessageSchema,\n SequentialFeedUploadRawPayloadResponseMessageSchema,\n SequentialFeedUploadReferenceResponseMessageSchema,\n CreateFeedManifestResponseMessageSchema,\n ActUploadDataResponseMessageSchema,\n ActDownloadDataResponseMessageSchema,\n ActAddGranteesResponseMessageSchema,\n ActRevokeGranteesResponseMessageSchema,\n ActGetGranteesResponseMessageSchema,\n GetPostageBatchResponseMessageSchema,\n])\n\nexport type ProxyReadyMessage = z.infer<typeof ProxyReadyMessageSchema>\nexport type InitErrorMessage = z.infer<typeof InitErrorMessageSchema>\nexport type AuthStatusResponseMessage = z.infer<\n typeof AuthStatusResponseMessageSchema\n>\nexport type DisconnectResponseMessage = z.infer<\n typeof DisconnectResponseMessageSchema\n>\nexport type AuthSuccessMessage = z.infer<typeof AuthSuccessMessageSchema>\nexport type UploadDataResponseMessage = z.infer<\n typeof UploadDataResponseMessageSchema\n>\nexport type DownloadDataResponseMessage = z.infer<\n typeof DownloadDataResponseMessageSchema\n>\nexport type GetChatKeyResponseMessage = z.infer<\n typeof GetChatKeyResponseMessageSchema\n>\nexport type SetBeeApiUrlResponseMessage = z.infer<\n typeof SetBeeApiUrlResponseMessageSchema\n>\nexport type DeriveAppSecretResponseMessage = z.infer<\n typeof DeriveAppSecretResponseMessageSchema\n>\nexport type StampChunkResponseMessage = z.infer<\n typeof StampChunkResponseMessageSchema\n>\nexport type UploadFileResponseMessage = z.infer<\n typeof UploadFileResponseMessageSchema\n>\nexport type DownloadFileResponseMessage = z.infer<\n typeof DownloadFileResponseMessageSchema\n>\nexport type UploadFilesResponseMessage = z.infer<\n typeof UploadFilesResponseMessageSchema\n>\nexport type ListFilesResponseMessage = z.infer<\n typeof ListFilesResponseMessageSchema\n>\nexport type UploadChunkResponseMessage = z.infer<\n typeof UploadChunkResponseMessageSchema\n>\nexport type DownloadChunkResponseMessage = z.infer<\n typeof DownloadChunkResponseMessageSchema\n>\nexport type UploadProgressMessage = z.infer<typeof UploadProgressMessageSchema>\nexport type ErrorMessage = z.infer<typeof ErrorMessageSchema>\nexport type ConnectionInfoChangedMessage = z.infer<\n typeof ConnectionInfoChangedMessageSchema\n>\nexport type IsConnectedResponseMessage = z.infer<\n typeof IsConnectedResponseMessageSchema\n>\nexport type GetNodeInfoResponseMessage = z.infer<\n typeof GetNodeInfoResponseMessageSchema\n>\nexport type GsocMineResponseMessage = z.infer<\n typeof GsocMineResponseMessageSchema\n>\nexport type GsocSendResponseMessage = z.infer<\n typeof GsocSendResponseMessageSchema\n>\nexport type SocUploadResponseMessage = z.infer<\n typeof SocUploadResponseMessageSchema\n>\nexport type SocRawUploadResponseMessage = z.infer<\n typeof SocRawUploadResponseMessageSchema\n>\nexport type SocDownloadResponseMessage = z.infer<\n typeof SocDownloadResponseMessageSchema\n>\nexport type SocRawDownloadResponseMessage = z.infer<\n typeof SocRawDownloadResponseMessageSchema\n>\nexport type SocGetOwnerResponseMessage = z.infer<\n typeof SocGetOwnerResponseMessageSchema\n>\nexport type EpochFeedDownloadReferenceResponseMessage = z.infer<\n typeof EpochFeedDownloadReferenceResponseMessageSchema\n>\nexport type EpochFeedUploadReferenceResponseMessage = z.infer<\n typeof EpochFeedUploadReferenceResponseMessageSchema\n>\nexport type FeedGetOwnerResponseMessage = z.infer<\n typeof FeedGetOwnerResponseMessageSchema\n>\nexport type SequentialFeedGetOwnerResponseMessage = z.infer<\n typeof SequentialFeedGetOwnerResponseMessageSchema\n>\nexport type SequentialFeedDownloadPayloadResponseMessage = z.infer<\n typeof SequentialFeedDownloadPayloadResponseMessageSchema\n>\nexport type SequentialFeedDownloadRawPayloadResponseMessage = z.infer<\n typeof SequentialFeedDownloadRawPayloadResponseMessageSchema\n>\nexport type SequentialFeedDownloadReferenceResponseMessage = z.infer<\n typeof SequentialFeedDownloadReferenceResponseMessageSchema\n>\nexport type SequentialFeedUploadPayloadResponseMessage = z.infer<\n typeof SequentialFeedUploadPayloadResponseMessageSchema\n>\nexport type SequentialFeedUploadRawPayloadResponseMessage = z.infer<\n typeof SequentialFeedUploadRawPayloadResponseMessageSchema\n>\nexport type SequentialFeedUploadReferenceResponseMessage = z.infer<\n typeof SequentialFeedUploadReferenceResponseMessageSchema\n>\nexport type CreateFeedManifestResponseMessage = z.infer<\n typeof CreateFeedManifestResponseMessageSchema\n>\nexport type ActUploadDataResponseMessage = z.infer<\n typeof ActUploadDataResponseMessageSchema\n>\nexport type ActDownloadDataResponseMessage = z.infer<\n typeof ActDownloadDataResponseMessageSchema\n>\nexport type ActAddGranteesResponseMessage = z.infer<\n typeof ActAddGranteesResponseMessageSchema\n>\nexport type ActRevokeGranteesResponseMessage = z.infer<\n typeof ActRevokeGranteesResponseMessageSchema\n>\nexport type ActGetGranteesResponseMessage = z.infer<\n typeof ActGetGranteesResponseMessageSchema\n>\nexport type GetPostageBatchResponseMessage = z.infer<\n typeof GetPostageBatchResponseMessageSchema\n>\nexport type IframeToParentMessage = z.infer<typeof IframeToParentMessageSchema>\n\n// ============================================================================\n// Message Types: Popup → Iframe\n// ============================================================================\n\nexport const AuthDataSchema = z.object({\n secret: z.string(),\n networkSettings: NetworkSettingsSchemaV1.optional(),\n /**\n * Full synced-account projection (the `serializeSyncedAccount` wire shape:\n * no vault, no app secrets) — stamps incl. signer keys, and the\n * `derivationKey` (docs/Account-Bus.md, phase 3).\n *\n * **Required**, and that requirement is the whole of the check: a handover\n * without it produces a session that cannot upload, cannot derive a bus\n * topic, and therefore cannot be told it was revoked. Refusing it here means\n * the parse fails and the `setSecret` is ignored, so no such session is ever\n * built — no mode to carry, no branch to keep in step.\n *\n * The account also carries the identity the dApp is shown, which is why\n * there are no separate `identity*` fields.\n */\n account: SyncedAccountSchemaV1,\n /**\n * The chat binding for this origin, signed in the popup with the account's\n * own key (docs/Chat-Binding.md). The handover is the one way it reaches a\n * dApp, and the proxy passes it on only when it names this parent origin,\n * this secret's address and this account.\n */\n chatBinding: ChatBindingSchema.optional(),\n /**\n * Set on the handover that signs the site in: the person has not yet\n * confirmed which drive the site uses, so the frame holds no stamp. The\n * window's second handover, sent on that confirm, leaves it out.\n */\n stampPending: z.literal(true).optional(),\n})\n\nexport type AuthData = z.infer<typeof AuthDataSchema>\n\n/**\n * A partitioned session at rest (#635), under\n * {@link partitionSessionStorageKey}.\n *\n * It holds the payload the connect popup handed over — plus the deadline the\n * session was given. In full, what is now at rest for the life of the session:\n *\n * - the **app secret**, this origin's own credential;\n * - the **narrowed stamp projection** — #578 limits it to the stamps this app\n * can spend, signer keys included;\n * - the account's **`derivationKey`**, which `serializeSyncedAccount` carries.\n * This one is NOT app-narrowed: it derives the bus topic and envelope keys\n * and the Swarm encryption/backup keys, so it is the most sensitive field\n * here. `connect-handshake.ts` names the same trade-off for the in-memory\n * handover; persisting it widens the window, not the exposure.\n *\n * The popup hands all of it over on every load today; keeping it changes the\n * window from the life of the page to the life of the session, in a store only\n * this (SwarmID origin, dApp origin) pair can read, and sealed there.\n *\n * `connectedUntil` is the same clock the unpartitioned path enforces from\n * shared storage, so both modes end a session on the same rule. What the\n * deadline cannot see is a revoke made while the tab was closed; a restored\n * session verifies against the account's own Swarm state for that.\n */\nexport const PartitionSessionSchemaV1 = z.object({\n version: z.literal(1),\n parentOrigin: z.string(),\n connectedUntil: z.number(),\n /**\n * The handed-over payload's wire form, as JSON, sealed with this\n * partition's wrapping key (`utils/sealed-values.ts`), so no key in it is\n * plain text on disk. Only\n * the parts that say nothing secret, whose session this is and when it\n * ends, stay readable.\n */\n data: z.string(),\n})\n\nexport type StoredPartitionSession = z.infer<typeof PartitionSessionSchemaV1>\n\n/** A stored session once opened, with its payload parsed. */\nexport interface PartitionSession {\n parentOrigin: string\n connectedUntil: number\n data: AuthData\n}\n\nexport const SetSecretMessageSchema = z.object({\n type: z.literal(\"setSecret\"),\n appOrigin: z.string(),\n challenge: z.string(),\n data: AuthDataSchema,\n})\n\n/**\n * What the connect popup posts to the session frame. The popup was opened by\n * the button frame, and posts to the Swarm ID frames beside its opener\n * (`ui/src/lib/handover-targets.ts`).\n */\nexport const PopupToIframeMessageSchema = z.discriminatedUnion(\"type\", [\n SetSecretMessageSchema,\n])\n\nexport type SetSecretMessage = z.infer<typeof SetSecretMessageSchema>\nexport type PopupToIframeMessage = z.infer<typeof PopupToIframeMessageSchema>\n\n// ============================================================================\n// Client Configuration\n// ============================================================================\n\nexport interface ClientOptions {\n iframeOrigin: string\n iframePath?: string\n timeout?: number\n initializationTimeout?: number\n /**\n * Invoked whenever the dApp-visible ConnectionInfo changes (identity rename,\n * the site's drive changed, local↔synced account migration, postage stamp added,\n * auth transitions, etc.). Fires once on initial auth check, then on every\n * effective change. The current snapshot is also available synchronously\n * via `client.connectionInfo`.\n */\n onConnectionChange?: (info: ConnectionInfo) => void\n popupMode?: \"popup\" | \"window\" // Default: 'window'\n metadata: AppMetadata\n /** URL of a subsidised gateway for users without postage stamps. Gateway handles stamping server-side. */\n subsidisedGatewayUrl?: string\n /**\n * The Bee node this site's content reads and stamped uploads go through, in\n * place of the node the person set in Swarm ID, which keeps applying on\n * every other site. The person's account and device coordination stay on\n * their own node. An http(s) URL, optionally with a path. Change it later\n * with `setBeeApiUrl`. Held by this site's frame alone and never stored.\n */\n beeApiUrl?: string\n}\n\nexport interface AuthOptions {\n masterKeyStorageKey?: string\n}\n\n/**\n * Configuration options for the connect() method.\n */\nexport interface ConnectOptions {\n /**\n * Override popup mode for this connect call.\n * \"popup\" opens a sized popup window, \"window\" opens a full browser tab.\n */\n popupMode?: \"popup\" | \"window\"\n}\n\n// ============================================================================\n// Entity Types (derived from Zod schemas for type safety)\n// ============================================================================\n\nexport type {\n Account,\n SyncedAccount,\n ConnectedApp,\n PostageStamp,\n} from \"./schemas\"\n","// Copyright 2026 The Swarm Authors. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Account avatars. Every account has one generated from its id, which\n * {@link Avatar.source} reports — leaving room for another kind of image\n * should one ever be added.\n *\n * The generator is Polycon by Christian Montoya\n * (https://github.com/Montoya/polycon). Original algorithm: SDBM hash → 2×2\n * grid of triangles/squares with color pairs. Adapted here with a custom brand\n * color palette.\n */\n\nimport type { Avatar } from \"../types\"\n\nconst NEAR_WHITE = \"#FCFCFC\"\nconst NEAR_BLACK = \"#131416\"\n\n/** Brand colors, each as [light, main, dark]. */\nconst ORANGE = [\"#FFE0CC\", \"#DD7200\", \"#401F00\"] as const\nconst BLUE = [\"#99CCFF\", \"#0082FB\", \"#003366\"] as const\nconst GREEN = [\"#99E6B3\", \"#00C853\", \"#004D1F\"] as const\nconst PURPLE = [\"#E1BEE7\", \"#9C27B0\", \"#4A148C\"] as const\n\nconst BRANDS = [ORANGE, BLUE, GREEN, PURPLE] as const\n\nconst LIGHT = 0\nconst MAIN = 1\nconst DARK = 2\n\n/** [background, foreground] pairs the hash selects from. */\nconst COLOR_PAIRS: [string, string][] = []\n\n// Neutral pairs: brand main with near-white/near-black (both directions)\nfor (const brand of BRANDS) {\n COLOR_PAIRS.push([brand[MAIN], NEAR_WHITE])\n COLOR_PAIRS.push([brand[MAIN], NEAR_BLACK])\n COLOR_PAIRS.push([NEAR_WHITE, brand[MAIN]])\n COLOR_PAIRS.push([NEAR_BLACK, brand[MAIN]])\n}\n\n// Tonal pairs: light/dark with main (both directions)\nfor (const brand of BRANDS) {\n COLOR_PAIRS.push([brand[LIGHT], brand[MAIN]])\n COLOR_PAIRS.push([brand[DARK], brand[MAIN]])\n COLOR_PAIRS.push([brand[MAIN], brand[LIGHT]])\n COLOR_PAIRS.push([brand[MAIN], brand[DARK]])\n COLOR_PAIRS.push([brand[LIGHT], brand[DARK]])\n COLOR_PAIRS.push([brand[DARK], brand[LIGHT]])\n}\n\n// Complementary pairs: cross-brand light/dark combinations\nfor (let i = 0; i < BRANDS.length; i++) {\n const next = BRANDS[(i + 1) % BRANDS.length]\n COLOR_PAIRS.push([BRANDS[i][LIGHT], next[DARK]])\n COLOR_PAIRS.push([next[DARK], BRANDS[i][LIGHT]])\n}\n\n/** Cells per side of the icon grid. */\nconst GRID = 2\n/** Empty border around the grid, as a fraction of the icon size. */\nconst MARGIN_RATIO = 0.25\n/** Default rendered size in pixels. */\nconst DEFAULT_SIZE = 40\n/** Short seeds are space-padded to this length so they still spread the hash. */\nconst MIN_SEED_LENGTH = 6\n\nconst SDBM_SHIFT_LOW = 6\nconst SDBM_SHIFT_HIGH = 16\n\n/** Per-cell hash derivation: shift the seed hash by these per-axis weights. */\nconst CELL_SHIFT_X = 3\nconst CELL_SHIFT_Y = 5\n/** Keeps the per-cell hash in 0..15. */\nconst CELL_HASH_MASK = 15\n\nconst ROTATIONS = 4\nconst DEGREES_PER_ROTATION = 90\nconst QUARTER_TURN = 90\nconst HALF_TURN = 180\n/** Every fifth per-cell hash fills the whole cell instead of a triangle. */\nconst SQUARE_EVERY = 5\n\nconst DIRECTIONS: readonly [number, number][] = [\n [0, 1],\n [1, 0],\n [0, -1],\n [-1, 0],\n]\n\nfunction sdbmHash(value: string): number {\n let hash = 0\n for (let i = 0; i < value.length; i++) {\n hash =\n value.charCodeAt(i) +\n (hash << SDBM_SHIFT_LOW) +\n (hash << SDBM_SHIFT_HIGH) -\n hash\n }\n return hash\n}\n\n/**\n * Render an account's generated avatar as a standalone SVG string.\n *\n * The same seed always yields the same image, so a dApp passing the identity\n * id from `ConnectionInfo` renders exactly the avatar Swarm ID shows for that\n * account. Prefer `SwarmIdClient.getAvatar()`, which falls back to this only\n * while the account has no avatar of its own.\n *\n * @param seed - Value the avatar is derived from (e.g. `connectionInfo.identity.id`)\n * @param size - Width and height in pixels\n */\nexport function generatedAvatarSvg(seed: string, size = DEFAULT_SIZE): string {\n const padded =\n seed.length < MIN_SEED_LENGTH ? seed.padEnd(MIN_SEED_LENGTH, \" \") : seed\n const hash = sdbmHash(padded)\n\n const [background, foreground] =\n COLOR_PAIRS[Math.abs(hash) % COLOR_PAIRS.length]\n\n const margin = size * MARGIN_RATIO\n const cellSize = (size - 2 * margin) / GRID\n\n const filled = Array.from({ length: GRID }, () =>\n Array<boolean>(GRID).fill(false),\n )\n const start = Math.floor(GRID / 2)\n const stack: [number, number][] = [[start, start]]\n filled[start][start] = true\n\n let pathData = \"\"\n\n for (let cell = stack.pop(); cell !== undefined; cell = stack.pop()) {\n const [x, y] = cell\n const cellHash =\n Math.abs(hash >> (x * CELL_SHIFT_X + y * CELL_SHIFT_Y)) & CELL_HASH_MASK\n\n const neighbors: [number, number][] = []\n for (const [dx, dy] of DIRECTIONS) {\n const nextX = x + dx\n const nextY = y + dy\n if (\n nextX >= 0 &&\n nextX < GRID &&\n nextY >= 0 &&\n nextY < GRID &&\n !filled[nextX][nextY]\n ) {\n neighbors.push([nextX, nextY])\n }\n }\n\n while (neighbors.length > 0) {\n const index = Math.abs(cellHash + neighbors.length) % neighbors.length\n const [nextX, nextY] = neighbors.splice(index, 1)[0]\n stack.push([nextX, nextY])\n filled[nextX][nextY] = true\n }\n\n const rotation = (cellHash % ROTATIONS) * DEGREES_PER_ROTATION\n const isSquare = cellHash % SQUARE_EVERY === 0\n\n const cx = margin + x * cellSize\n const cy = margin + y * cellSize\n\n if (isSquare) {\n pathData += `M${cx},${cy} h${cellSize} v${cellSize} h-${cellSize}z `\n } else if (rotation === 0) {\n pathData += `M${cx},${cy} h${cellSize} v${cellSize}z `\n } else if (rotation === QUARTER_TURN) {\n pathData += `M${cx + cellSize},${cy} v${cellSize} h-${cellSize}z `\n } else if (rotation === HALF_TURN) {\n pathData += `M${cx + cellSize},${cy + cellSize} h-${cellSize} v-${cellSize}z `\n } else {\n pathData += `M${cx},${cy + cellSize} v-${cellSize} h${cellSize}z `\n }\n }\n\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${size}\" height=\"${size}\" viewBox=\"0 0 ${size} ${size}\"><rect width=\"${size}\" height=\"${size}\" fill=\"${background}\"/><path d=\"${pathData}\" fill=\"${foreground}\"/></svg>`\n}\n\n/**\n * The generated avatar for `seed` as a renderable {@link Avatar}.\n *\n * @param seed - Value the avatar is derived from (e.g. `connectionInfo.identity.id`)\n * @param size - Width and height in pixels\n */\nexport function generatedAvatar(seed: string, size = DEFAULT_SIZE): Avatar {\n const svg = generatedAvatarSvg(seed, size)\n return {\n source: \"generated\",\n // Percent-encoded rather than base64: the markup is ASCII, and this keeps\n // the URL readable in devtools.\n url: `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svg)}`,\n }\n}\n","// Copyright 2026 The Swarm Authors. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Rejection type for {@link withTimeout}. Callers classify a timed-out read\n * (INCONCLUSIVE — the target may exist behind a slow gateway) apart from a\n * clean miss / other failure with `error instanceof TimeoutError` — never by\n * matching the message text, which is display-only.\n */\nexport class TimeoutError extends Error {\n constructor(message: string) {\n super(message)\n this.name = \"TimeoutError\"\n }\n}\n\n/**\n * Time-bound `work`: resolve/reject with `work` if it settles within `ms`, else\n * reject with a {@link TimeoutError}. Unlike a hand-rolled\n * `Promise.race([work, rejectionTimer])`, the timer is cleared once the race\n * settles, so a fast read leaves no stray timer to fire later (matters in\n * tight read loops).\n */\nexport function withTimeout<T>(\n work: Promise<T>,\n ms: number,\n message: string,\n): Promise<T> {\n let timer: ReturnType<typeof setTimeout>\n const timeout = new Promise<never>((_, reject) => {\n timer = setTimeout(() => reject(new TimeoutError(message)), ms)\n })\n return Promise.race([work, timeout]).finally(() => clearTimeout(timer))\n}\n\n/**\n * Resolve after `ms` milliseconds — the default delay behind a poll or backoff.\n *\n * A caller whose timing a test needs to drive should keep taking an injectable\n * wait and pass this as its default (as `acquirePartitionLock` does with\n * `opts.wait`) rather than calling it directly, which would pin real time into\n * the test path.\n */\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\n/**\n * Like {@link withTimeout}, but the deadline is `ms` from the last\n * `keepAlive()` the work reported (or from the start, if it reported nothing) —\n * so it bounds silence, not total elapsed time. For work of unbounded duration\n * whose progress is observable: a payment signed in a wallet, a long upload.\n *\n * `work` is a function so it can be handed the `keepAlive` callback. A\n * synchronous throw from it becomes a rejection, and a `keepAlive` after the\n * work settles is ignored — both so the timer is always cleared.\n */\nexport function withIdleTimeout<T>(\n work: (keepAlive: () => void) => Promise<T>,\n ms: number,\n message: string,\n): Promise<T> {\n let timer: ReturnType<typeof setTimeout>\n let settled = false\n let keepAlive: () => void = () => undefined\n const timeout = new Promise<never>((_, reject) => {\n keepAlive = () => {\n if (settled) {\n return\n }\n clearTimeout(timer)\n timer = setTimeout(() => reject(new TimeoutError(message)), ms)\n }\n keepAlive()\n })\n // Wrapped so a synchronous throw rejects rather than escaping the `finally`.\n const started = (async () => work(keepAlive))()\n return Promise.race([started, timeout]).finally(() => {\n settled = true\n clearTimeout(timer)\n })\n}\n","// Copyright 2026 The Swarm Authors. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n// Chunk size constants. An empty payload is valid — Bee represents\n// zero-length content as a single chunk with span 0 (cac.validateDataLength\n// allows 0..4096).\nexport const MIN_PAYLOAD_SIZE = 0\nexport const MAX_PAYLOAD_SIZE = 4096\n\n// Span size (8 bytes for uint64 little-endian)\nexport const SPAN_SIZE = 8\n\n// Reference sizes\nexport const UNENCRYPTED_REF_SIZE = 32\nexport const ENCRYPTED_REF_SIZE = 64\n\n// SOC (Single Owner Chunk) constants\nexport const IDENTIFIER_SIZE = 32\nexport const SIGNATURE_SIZE = 65\nexport const SOC_HEADER_SIZE = IDENTIFIER_SIZE + SIGNATURE_SIZE\n\n// Download concurrency\nexport const DEFAULT_DOWNLOAD_CONCURRENCY = 64\n\n// Upload concurrency (lower than download due to more server-side overhead)\nexport const DEFAULT_UPLOAD_CONCURRENCY = 8\n","// Copyright 2026 The Swarm Authors. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Binary } from \"cafe-utility\"\n\nexport const KEY_LENGTH = 32\nexport const REFERENCE_SIZE = 64\n\nexport type Key = Uint8Array\n\nexport interface Encrypter {\n key(): Key\n encrypt(data: Uint8Array): Uint8Array\n}\n\nexport interface Decrypter {\n key(): Key\n decrypt(data: Uint8Array): Uint8Array\n}\n\nexport interface EncryptionInterface extends Encrypter, Decrypter {\n reset(): void\n}\n\n/**\n * Core encryption class implementing CTR-mode encryption with Keccak256\n * This matches the Go implementation in bee/pkg/encryption/encryption.go\n */\nexport class Encryption implements EncryptionInterface {\n private readonly encryptionKey: Key\n private readonly keyLen: number\n private readonly padding: number\n private index: number\n private readonly initCtr: number\n\n constructor(key: Key, padding: number, initCtr: number) {\n this.encryptionKey = key\n this.keyLen = key.length\n this.padding = padding\n this.initCtr = initCtr\n this.index = 0\n }\n\n key(): Key {\n return this.encryptionKey\n }\n\n /**\n * Encrypts data with optional padding\n */\n encrypt(data: Uint8Array): Uint8Array {\n const length = data.length\n let outLength = length\n const isFixedPadding = this.padding > 0\n\n if (isFixedPadding) {\n if (length > this.padding) {\n throw new Error(\n `data length ${length} longer than padding ${this.padding}`,\n )\n }\n outLength = this.padding\n }\n\n const out = new Uint8Array(outLength)\n this.transform(data, out)\n\n return out\n }\n\n /**\n * Decrypts data (caller must know original length if padding was used)\n */\n decrypt(data: Uint8Array): Uint8Array {\n const length = data.length\n\n if (this.padding > 0 && length !== this.padding) {\n throw new Error(\n `data length ${length} different than padding ${this.padding}`,\n )\n }\n\n const out = new Uint8Array(length)\n this.transform(data, out)\n\n return out\n }\n\n /**\n * Resets the counter - only safe to call after encryption/decryption is completed\n */\n reset(): void {\n this.index = 0\n }\n\n /**\n * Transforms data by splitting into key-length segments and encrypting sequentially\n */\n private transform(input: Uint8Array, out: Uint8Array): void {\n const inLength = input.length\n\n for (let i = 0; i < inLength; i += this.keyLen) {\n const l = Math.min(this.keyLen, inLength - i)\n this.transcrypt(\n this.index,\n input.subarray(i, i + l),\n out.subarray(i, i + l),\n )\n this.index++\n }\n\n // Pad the rest if out is longer\n getRandomValues(out.subarray(inLength))\n }\n\n /**\n * Segment-wise transformation using XOR with Keccak256-derived keys\n * Matches the Go implementation's Transcrypt function\n */\n private transcrypt(i: number, input: Uint8Array, out: Uint8Array): void {\n // First hash: key with counter (initial counter + i)\n const ctrBytes = new Uint8Array(4)\n const view = new DataView(ctrBytes.buffer)\n view.setUint32(0, i + this.initCtr, true) // little-endian\n\n const keyAndCtr = new Uint8Array(this.encryptionKey.length + 4)\n keyAndCtr.set(this.encryptionKey)\n keyAndCtr.set(ctrBytes, this.encryptionKey.length)\n const ctrHash = Binary.keccak256(keyAndCtr)\n\n // Second round of hashing for selective disclosure\n const segmentKey = Binary.keccak256(ctrHash)\n\n // XOR bytes up to length of input (out must be at least as long)\n const inLength = input.length\n for (let j = 0; j < inLength; j++) {\n out[j] = input[j] ^ segmentKey[j]\n }\n\n // Insert padding if out is longer\n getRandomValues(out.subarray(inLength))\n }\n}\n\n/**\n * Fills buffer with cryptographically secure random data\n * Works in both browser (Web Crypto API) and Node.js environments\n */\nfunction getRandomValues(buffer: Uint8Array): void {\n if (buffer.length === 0) return\n\n // Use Web Crypto API for secure random bytes\n crypto.getRandomValues(buffer)\n}\n\n/**\n * Generates a cryptographically secure random key\n */\nexport function generateRandomKey(length: number = KEY_LENGTH): Key {\n const key = new Uint8Array(length)\n getRandomValues(key)\n\n return key\n}\n\n/**\n * Creates encryption interface for chunk span (first 8 bytes)\n */\nexport function newSpanEncryption(key: Key): EncryptionInterface {\n // ChunkSize is typically 4096, so ChunkSize/KeyLength = 128\n const CHUNK_SIZE = 4096\n\n return new Encryption(key, 0, Math.floor(CHUNK_SIZE / KEY_LENGTH))\n}\n\n/**\n * Creates encryption interface for chunk data\n */\nexport function newDataEncryption(key: Key): EncryptionInterface {\n const CHUNK_SIZE = 4096\n\n return new Encryption(key, CHUNK_SIZE, 0)\n}\n\nexport interface ChunkEncrypter {\n encryptChunk(\n chunkData: Uint8Array,\n key?: Key,\n ): {\n key: Key\n encryptedSpan: Uint8Array\n encryptedData: Uint8Array\n }\n}\n\n/**\n * Default chunk encrypter implementation\n */\nexport class DefaultChunkEncrypter implements ChunkEncrypter {\n encryptChunk(\n chunkData: Uint8Array,\n key?: Key,\n ): {\n key: Key\n encryptedSpan: Uint8Array\n encryptedData: Uint8Array\n } {\n const encryptionKey = key || generateRandomKey(KEY_LENGTH)\n\n // Encrypt span (first 8 bytes)\n const spanEncrypter = newSpanEncryption(encryptionKey)\n const encryptedSpan = spanEncrypter.encrypt(chunkData.subarray(0, 8))\n\n // Encrypt data (remaining bytes)\n const dataEncrypter = newDataEncryption(encryptionKey)\n const encryptedData = dataEncrypter.encrypt(chunkData.subarray(8))\n\n return {\n key: encryptionKey,\n encryptedSpan,\n encryptedData,\n }\n }\n}\n\n/**\n * Creates a new chunk encrypter\n */\nexport function newChunkEncrypter(): ChunkEncrypter {\n return new DefaultChunkEncrypter()\n}\n\n/**\n * Decrypts encrypted chunk data using the provided encryption key\n */\nexport function decryptChunkData(\n key: Key,\n encryptedChunkData: Uint8Array,\n): Uint8Array {\n // Decrypt span (first 8 bytes)\n const spanDecrypter = newSpanEncryption(key)\n const decryptedSpan = spanDecrypter.decrypt(encryptedChunkData.subarray(0, 8))\n\n // Decrypt data (remaining bytes - should be 4096 bytes due to padding)\n const dataDecrypter = newDataEncryption(key)\n const decryptedData = dataDecrypter.decrypt(encryptedChunkData.subarray(8))\n\n // Concatenate span and data\n const result = new Uint8Array(8 + decryptedData.length)\n result.set(decryptedSpan)\n result.set(decryptedData, 8)\n\n return result\n}\n","// Copyright 2026 The Swarm Authors. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Binary } from \"cafe-utility\"\nimport { Reference, Span } from \"@ethersphere/bee-js\"\n\nconst MAX_CHUNK_PAYLOAD_SIZE = 4096\nconst SEGMENT_SIZE = 32\n\n/**\n * Calculate a Binary Merkle Tree hash for a chunk\n *\n * The BMT chunk address is the hash of the 8 byte span and the root\n * hash of a binary Merkle tree (BMT) built on the 32-byte segments\n * of the underlying data.\n *\n * If the chunk content is less than 4k, the hash is calculated as\n * if the chunk was padded with all zeros up to 4096 bytes.\n *\n * @param chunkContent Chunk data including span and payload as well\n *\n * @returns the keccak256 hash in a byte array\n */\nexport function calculateChunkAddress(chunkContent: Uint8Array): Reference {\n const span = chunkContent.slice(0, Span.LENGTH)\n const payload = chunkContent.slice(Span.LENGTH)\n const rootHash = calculateBmtRootHash(payload)\n const chunkHash = Binary.keccak256(Binary.concatBytes(span, rootHash))\n\n return new Reference(chunkHash)\n}\n\nfunction calculateBmtRootHash(payload: Uint8Array): Uint8Array {\n if (payload.length > MAX_CHUNK_PAYLOAD_SIZE) {\n throw new Error(\n `payload size ${payload.length} exceeds maximum chunk payload size ${MAX_CHUNK_PAYLOAD_SIZE}`,\n )\n }\n const input = new Uint8Array(MAX_CHUNK_PAYLOAD_SIZE)\n input.set(payload)\n\n // Build BMT by hashing pairs of segments level by level\n let currentLevel = Binary.partition(input, SEGMENT_SIZE)\n\n while (currentLevel.length > 1) {\n const nextLevel: Uint8Array[] = []\n\n for (let i = 0; i < currentLevel.length; i += 2) {\n const left = currentLevel[i]\n const right = currentLevel[i + 1]\n const combined = Binary.concatBytes(left, right)\n const hash = Binary.keccak256(combined)\n nextLevel.push(hash)\n }\n\n currentLevel = nextLevel\n }\n\n return currentLevel[0]\n}\n","// Copyright 2026 The Swarm Authors. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n// Content-addressed chunk (CAC) utilities\n\nimport { Binary } from \"cafe-utility\"\nimport { Bytes, Reference, Span } from \"@ethersphere/bee-js\"\nimport { calculateChunkAddress } from \"./bmt\"\nimport { MAX_PAYLOAD_SIZE, MIN_PAYLOAD_SIZE } from \"./constants\"\n\nconst ENCODER = new TextEncoder()\n\n/**\n * Content addressed chunk interface\n */\nexport interface ContentAddressedChunk {\n readonly data: Uint8Array // span + payload\n readonly span: Span\n readonly payload: Bytes\n readonly address: Reference // BMT hash\n}\n\n/**\n * Creates a content addressed chunk from payload data\n *\n * @param payloadBytes the data to be stored in the chunk (1-4096 bytes)\n * @param spanOverride optional span value to use instead of payload length\n */\nexport function makeContentAddressedChunk(\n payloadBytes: Uint8Array | string,\n spanOverride?: Span | bigint,\n): ContentAddressedChunk {\n if (!(payloadBytes instanceof Uint8Array)) {\n payloadBytes = ENCODER.encode(payloadBytes)\n }\n\n if (\n payloadBytes.length < MIN_PAYLOAD_SIZE ||\n payloadBytes.length > MAX_PAYLOAD_SIZE\n ) {\n throw new RangeError(\n `payload size ${payloadBytes.length} exceeds limits [${MIN_PAYLOAD_SIZE}, ${MAX_PAYLOAD_SIZE}]`,\n )\n }\n\n // Determine span value\n let span: Span\n if (spanOverride instanceof Span) {\n span = spanOverride\n } else if (typeof spanOverride === \"bigint\") {\n span = Span.fromBigInt(spanOverride)\n } else {\n span = Span.fromBigInt(BigInt(payloadBytes.length))\n }\n\n // Create chunk data (span + payload)\n const chunkData = Binary.concatBytes(span.toUint8Array(), payloadBytes)\n\n // Calculate BMT address\n const address = calculateChunkAddress(chunkData)\n\n return {\n data: chunkData,\n span,\n payload: new Bytes(payloadBytes),\n address,\n }\n}\n","// Copyright 2026 The Swarm Authors. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Binary } from \"cafe-utility\"\nimport { Bytes, Reference, Span } from \"@ethersphere/bee-js\"\nimport { calculateChunkAddress } from \"./bmt\"\nimport { MAX_PAYLOAD_SIZE, MIN_PAYLOAD_SIZE } from \"./constants\"\nimport { newChunkEncrypter, decryptChunkData, type Key } from \"./encryption\"\n\nconst ENCODER = new TextEncoder()\n\n/**\n * Encrypted chunk interface\n *\n * The reference includes both the chunk address and the encryption key (64 bytes total)\n */\nexport interface EncryptedChunk {\n readonly data: Uint8Array // encrypted span + encrypted data\n readonly encryptionKey: Key // 32 bytes\n readonly span: Span // original (unencrypted) span\n readonly payload: Bytes // encrypted payload\n readonly address: Reference // BMT hash of encrypted data\n readonly reference: Reference // 64 bytes: address (32) + encryption key (32)\n}\n\n/**\n * Creates an encrypted content addressed chunk\n *\n * Process:\n * 1. Create chunk with span + payload\n * 2. Encrypt the chunk data\n * 3. Calculate BMT hash on encrypted data\n * 4. Return reference = address + encryption key (64 bytes)\n *\n * @param payloadBytes the data to be stored in the chunk\n * @param encryptionKey optional encryption key (if not provided, a random key will be generated)\n */\nexport function makeEncryptedContentAddressedChunk(\n payloadBytes: Uint8Array | string,\n encryptionKey?: Key,\n): EncryptedChunk {\n if (!(payloadBytes instanceof Uint8Array)) {\n payloadBytes = ENCODER.encode(payloadBytes)\n }\n\n if (\n payloadBytes.length < MIN_PAYLOAD_SIZE ||\n payloadBytes.length > MAX_PAYLOAD_SIZE\n ) {\n throw new RangeError(\n `payload size ${payloadBytes.length} exceeds limits [${MIN_PAYLOAD_SIZE}, ${MAX_PAYLOAD_SIZE}]`,\n )\n }\n\n // Create the original chunk data (span + payload)\n const span = Span.fromBigInt(BigInt(payloadBytes.length))\n const chunkData = Binary.concatBytes(span.toUint8Array(), payloadBytes)\n\n // Encrypt the chunk\n const encrypter = newChunkEncrypter()\n const { key, encryptedSpan, encryptedData } = encrypter.encryptChunk(\n chunkData,\n encryptionKey,\n )\n\n // Concatenate encrypted span and data\n const encryptedChunkData = Binary.concatBytes(encryptedSpan, encryptedData)\n\n // Calculate BMT address on encrypted data\n const address = calculateChunkAddress(encryptedChunkData)\n\n // Create 64-byte reference: address (32 bytes) + encryption key (32 bytes)\n const reference = new Reference(\n Binary.concatBytes(address.toUint8Array(), key),\n )\n\n return {\n data: encryptedChunkData,\n encryptionKey: key,\n span,\n payload: new Bytes(encryptedChunkData.slice(Span.LENGTH)),\n address,\n reference,\n }\n}\n\n/**\n * Decrypts an encrypted chunk given the encryption key\n *\n * @param encryptedChunkData The encrypted chunk data (span + payload)\n * @param encryptionKey The 32-byte encryption key\n */\nexport function decryptEncryptedChunk(\n encryptedChunkData: Uint8Array,\n encryptionKey: Key,\n): Uint8Array {\n return decryptChunkData(encryptionKey, encryptedChunkData)\n}\n\n/**\n * Extracts encryption key from a 64-byte encrypted reference\n *\n * @param reference 64-byte reference (address + key)\n */\nexport function extractEncryptionKey(reference: Reference): Key {\n const refBytes = reference.toUint8Array()\n if (refBytes.length !== 64) {\n throw new Error(\n `Invalid encrypted reference length: ${refBytes.length}, expected 64`,\n )\n }\n\n return refBytes.slice(32, 64)\n}\n\n/**\n * Extracts the chunk address from a 64-byte encrypted reference\n *\n * @param reference 64-byte reference (address + key)\n */\nexport function extractChunkAddress(reference: Reference): Reference {\n const refBytes = reference.toUint8Array()\n if (refBytes.length !== 64) {\n throw new Error(\n `Invalid encrypted reference length: ${refBytes.length}, expected 64`,\n )\n }\n\n return new Reference(refBytes.slice(0, 32))\n}\n","// Copyright 2026 The Swarm Authors. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n EthAddress,\n Identifier,\n Reference,\n Signature,\n} from \"@ethersphere/bee-js\"\nimport type {\n Bee,\n BeeRequestOptions,\n DownloadOptions,\n} from \"@ethersphere/bee-js\"\nimport {\n calculateChunkAddress,\n decryptChunkData as decryptChunk,\n DEFAULT_DOWNLOAD_CONCURRENCY,\n ENCRYPTED_REF_SIZE,\n IDENTIFIER_SIZE,\n MAX_PAYLOAD_SIZE,\n SOC_HEADER_SIZE,\n SPAN_SIZE,\n UNENCRYPTED_REF_SIZE,\n} from \"../chunk\"\nimport { Binary } from \"cafe-utility\"\nimport { ENCRYPTED_REFS_PER_CHUNK, PLAIN_REFS_PER_CHUNK } from \"./chunking\"\nimport type { UploadProgress } from \"./types\"\nimport type { SingleOwnerChunk } from \"../types\"\nimport { hexToUint8Array } from \"../utils/hex\"\n\n/**\n * The slice of a Bee client that reading chunks needs.\n *\n * Everything that only downloads — the feed finders and the chunk readers\n * here — takes this rather than a whole `Bee`, so a test can hand in a\n * store-backed mock without casting, and the signature says which of the\n * client's surface the caller actually depends on. `url` is there for the\n * log lines only.\n */\nexport type ChunkDownloader = Pick<Bee, \"url\"> & {\n chunk: Pick<Bee[\"chunk\"], \"download\">\n}\n\nfunction readSpan(spanBytes: Uint8Array): number {\n const view = new DataView(\n spanBytes.buffer,\n spanBytes.byteOffset,\n spanBytes.byteLength,\n )\n return Number(view.getBigUint64(0, true))\n}\n\nfunction makeSocAddress(identifier: Identifier, owner: EthAddress): Reference {\n return new Reference(\n Binary.keccak256(\n Binary.concatBytes(identifier.toUint8Array(), owner.toUint8Array()),\n ),\n )\n}\n\nfunction makeSingleOwnerChunkFromData(\n data: Uint8Array,\n address: Reference,\n expectedOwner: EthAddress,\n encryptionKey?: Uint8Array,\n): SingleOwnerChunk {\n const identifier = new Identifier(data.slice(0, IDENTIFIER_SIZE))\n const signature = Signature.fromSlice(data, IDENTIFIER_SIZE)\n const cacData = data.slice(SOC_HEADER_SIZE)\n const cacAddress = calculateChunkAddress(cacData)\n const digest = Binary.concatBytes(\n identifier.toUint8Array(),\n cacAddress.toUint8Array(),\n )\n const recoveredOwner = signature.recoverPublicKey(digest).address()\n\n if (!recoveredOwner.equals(expectedOwner)) {\n throw new Error(\"SOC owner mismatch\")\n }\n\n const socAddress = makeSocAddress(identifier, recoveredOwner)\n if (!Binary.equals(address.toUint8Array(), socAddress.toUint8Array())) {\n throw new Error(\"SOC data does not match given address\")\n }\n\n let spanBytes: Uint8Array\n let payload: Uint8Array\n let rebuiltData: Uint8Array\n\n if (encryptionKey) {\n const decrypted = decryptChunk(encryptionKey, cacData)\n\n spanBytes = decrypted.slice(0, SPAN_SIZE)\n const span = readSpan(spanBytes)\n payload = decrypted.slice(SPAN_SIZE, SPAN_SIZE + span)\n\n rebuiltData = Binary.concatBytes(\n identifier.toUint8Array(),\n signature.toUint8Array(),\n spanBytes,\n payload,\n )\n } else {\n spanBytes = data.slice(SOC_HEADER_SIZE, SOC_HEADER_SIZE + SPAN_SIZE)\n const span = readSpan(spanBytes)\n if (span > 4096) {\n throw new Error(\n \"SOC payload length is invalid; this chunk likely requires decryption\",\n )\n }\n payload = data.slice(\n SOC_HEADER_SIZE + SPAN_SIZE,\n SOC_HEADER_SIZE + SPAN_SIZE + span,\n )\n rebuiltData = data\n }\n\n const span = readSpan(spanBytes)\n\n return {\n data: rebuiltData,\n identifier: identifier.toHex(),\n signature: signature.toHex(),\n span,\n payload,\n address: address.toHex(),\n owner: recoveredOwner.toHex(),\n }\n}\n\n/**\n * Represents a reference with optional encryption key\n */\ninterface ChunkRef {\n address: Uint8Array\n encryptionKey?: Uint8Array\n}\n\n/**\n * Parse a reference string into address and optional encryption key\n */\nfunction parseReference(reference: string): ChunkRef {\n const refBytes = hexToUint8Array(reference)\n\n if (refBytes.length === UNENCRYPTED_REF_SIZE) {\n return { address: refBytes }\n } else if (refBytes.length === ENCRYPTED_REF_SIZE) {\n return {\n address: refBytes.slice(0, UNENCRYPTED_REF_SIZE),\n encryptionKey: refBytes.slice(UNENCRYPTED_REF_SIZE),\n }\n }\n\n throw new Error(\n `Invalid reference length: ${refBytes.length}, expected ${UNENCRYPTED_REF_SIZE} or ${ENCRYPTED_REF_SIZE}`,\n )\n}\n\n/**\n * Extract references from an intermediate chunk payload\n */\nfunction extractReferences(\n payload: Uint8Array,\n totalSpan: number,\n isEncrypted: boolean,\n): ChunkRef[] {\n const refs: ChunkRef[] = []\n const refSize = isEncrypted ? ENCRYPTED_REF_SIZE : UNENCRYPTED_REF_SIZE\n\n // Calculate actual number of refs based on payload content\n // For encrypted, refs are 64 bytes each; for unencrypted, 32 bytes each\n const maxRefs = Math.floor(payload.length / refSize)\n\n // Calculate expected number of refs based on span\n // Each leaf chunk can hold up to MAX_PAYLOAD_SIZE bytes\n const expectedLeafChunks = Math.ceil(totalSpan / MAX_PAYLOAD_SIZE)\n\n // We need to determine how many refs are actually in this chunk\n // For intermediate chunks at higher levels, the number of children varies\n const numRefs = Math.min(maxRefs, expectedLeafChunks)\n\n for (let i = 0; i < numRefs; i++) {\n const offset = i * refSize\n if (offset + refSize > payload.length) break\n\n const address = payload.slice(offset, offset + UNENCRYPTED_REF_SIZE)\n\n // Check if this is a zero address (padding)\n if (address.every((b) => b === 0)) break\n\n if (isEncrypted) {\n const key = payload.slice(\n offset + UNENCRYPTED_REF_SIZE,\n offset + ENCRYPTED_REF_SIZE,\n )\n refs.push({ address, encryptionKey: key })\n } else {\n refs.push({ address })\n }\n }\n\n return refs\n}\n\n/**\n * Download and process a single chunk\n */\nasync function downloadAndProcessChunk(\n bee: ChunkDownloader,\n ref: ChunkRef,\n requestOptions?: BeeRequestOptions,\n): Promise<{ span: number; payload: Uint8Array }> {\n const addressHex = Binary.uint8ArrayToHex(ref.address)\n let rawChunk: Uint8Array\n try {\n rawChunk = await bee.chunk.download(addressHex, undefined, requestOptions)\n } catch (error) {\n console.error(\n `[DownloadData] chunk fetch failed addr=${addressHex} encrypted=${ref.encryptionKey !== undefined} bee.url=${bee.url}:`,\n error,\n )\n throw error\n }\n\n let chunkData: Uint8Array\n if (ref.encryptionKey) {\n chunkData = decryptChunk(ref.encryptionKey, rawChunk)\n } else {\n chunkData = rawChunk\n }\n\n const span = readSpan(chunkData.slice(0, SPAN_SIZE))\n const payload = chunkData.slice(SPAN_SIZE)\n\n return { span, payload }\n}\n\n/**\n * Recursively join chunks to reconstruct data\n * Uses parallel fetching for performance\n */\nasync function joinChunks(\n bee: ChunkDownloader,\n ref: ChunkRef,\n isEncrypted: boolean,\n concurrency: number,\n onChunkDownloaded: () => void,\n requestOptions?: BeeRequestOptions,\n): Promise<Uint8Array> {\n const { span, payload } = await downloadAndProcessChunk(\n bee,\n ref,\n requestOptions,\n )\n onChunkDownloaded()\n\n // Leaf chunk: data is in payload\n if (span <= MAX_PAYLOAD_SIZE) {\n return payload.slice(0, span)\n }\n\n // Intermediate chunk: contains references to other chunks\n const childRefs = extractReferences(payload, span, isEncrypted)\n\n if (childRefs.length === 0) {\n throw new Error(\"No valid references found in intermediate chunk\")\n }\n\n // Download children in parallel with concurrency limit\n const results: Uint8Array[] = new Array(childRefs.length)\n\n // Process in batches respecting concurrency limit\n for (let i = 0; i < childRefs.length; i += concurrency) {\n const batch = childRefs.slice(\n i,\n Math.min(i + concurrency, childRefs.length),\n )\n const batchResults = await Promise.all(\n batch.map((childRef) =>\n joinChunks(\n bee,\n childRef,\n isEncrypted,\n concurrency,\n onChunkDownloaded,\n requestOptions,\n ),\n ),\n )\n for (let j = 0; j < batchResults.length; j++) {\n results[i + j] = batchResults[j]\n }\n }\n\n // Concatenate all results\n const totalLength = results.reduce((sum, r) => sum + r.length, 0)\n const result = new Uint8Array(totalLength)\n let offset = 0\n for (const chunk of results) {\n result.set(chunk, offset)\n offset += chunk.length\n }\n\n return result\n}\n\n/**\n * Estimate total chunks for progress tracking\n * This is an approximation based on span. The branching factor depends on\n * the reference width: 128 refs per intermediate for plain trees (32-byte\n * refs), 64 for encrypted trees (64-byte refs).\n */\nfunction estimateTotalChunks(span: number, refsPerChunk: number): number {\n if (span <= MAX_PAYLOAD_SIZE) {\n return 1\n }\n\n // Number of leaf chunks\n const leafChunks = Math.ceil(span / MAX_PAYLOAD_SIZE)\n\n // Intermediate chunks for a tree with refsPerChunk-way branching\n // This is a rough estimate - actual count depends on tree structure\n let intermediateChunks = 0\n let level = leafChunks\n while (level > 1) {\n level = Math.ceil(level / refsPerChunk)\n intermediateChunks += level\n }\n\n return leafChunks + intermediateChunks\n}\n\n/**\n * Download data using only the chunk API\n * This ensures encrypted data remains encrypted during transmission and avoids metadata leakage\n *\n * Supports both:\n * - Regular references (64 hex chars = 32 bytes)\n * - Encrypted references (128 hex chars = 64 bytes: 32-byte address + 32-byte encryption key)\n */\nexport async function downloadDataWithChunkAPI(\n bee: ChunkDownloader,\n reference: string,\n _options?: DownloadOptions,\n onProgress?: (progress: UploadProgress) => void,\n requestOptions?: BeeRequestOptions,\n): Promise<Uint8Array> {\n const rootRef = parseReference(reference)\n const isEncrypted = rootRef.encryptionKey !== undefined\n\n // Log only the address half: for encrypted references the trailing\n // 32 bytes are the decryption key and must never reach the console.\n console.log(\n `[DownloadData] start addr=${Binary.uint8ArrayToHex(rootRef.address)} encrypted=${isEncrypted} bee.url=${bee.url}`,\n )\n\n // First, download root chunk to get span for progress estimation\n const { span, payload } = await downloadAndProcessChunk(\n bee,\n rootRef,\n requestOptions,\n )\n\n // For leaf chunks (small data), return immediately\n if (span <= MAX_PAYLOAD_SIZE) {\n if (onProgress) {\n onProgress({ total: 1, processed: 1 })\n }\n return payload.slice(0, span)\n }\n\n // Estimate total chunks for progress tracking\n const estimatedTotal = estimateTotalChunks(\n span,\n isEncrypted ? ENCRYPTED_REFS_PER_CHUNK : PLAIN_REFS_PER_CHUNK,\n )\n let processedChunks = 1 // Already downloaded root\n\n const onChunkDownloaded = () => {\n processedChunks++\n if (onProgress) {\n onProgress({ total: estimatedTotal, processed: processedChunks })\n }\n }\n\n // Report initial progress\n if (onProgress) {\n onProgress({ total: estimatedTotal, processed: 1 })\n }\n\n // Extract child references and join recursively\n const childRefs = extractReferences(payload, span, isEncrypted)\n\n if (childRefs.length === 0) {\n throw new Error(\"No valid references found in root chunk\")\n }\n\n // Download children in parallel\n const results: Uint8Array[] = new Array(childRefs.length)\n\n for (let i = 0; i < childRefs.length; i += DEFAULT_DOWNLOAD_CONCURRENCY) {\n const batch = childRefs.slice(\n i,\n Math.min(i + DEFAULT_DOWNLOAD_CONCURRENCY, childRefs.length),\n )\n const batchResults = await Promise.all(\n batch.map((childRef) =>\n joinChunks(\n bee,\n childRef,\n isEncrypted,\n DEFAULT_DOWNLOAD_CONCURRENCY,\n onChunkDownloaded,\n requestOptions,\n ),\n ),\n )\n for (let j = 0; j < batchResults.length; j++) {\n results[i + j] = batchResults[j]\n }\n }\n\n // Concatenate all results\n const totalLength = results.reduce((sum, r) => sum + r.length, 0)\n const result = new Uint8Array(totalLength)\n let offset = 0\n for (const chunk of results) {\n result.set(chunk, offset)\n offset += chunk.length\n }\n\n // Final progress update\n if (onProgress) {\n onProgress({ total: processedChunks, processed: processedChunks })\n }\n\n return result\n}\n\nexport async function downloadSOC(\n bee: ChunkDownloader,\n owner: string | Uint8Array | EthAddress,\n identifier: string | Uint8Array | Identifier,\n requestOptions?: BeeRequestOptions,\n): Promise<SingleOwnerChunk> {\n const ownerAddress = new EthAddress(owner)\n const id = new Identifier(identifier)\n const socAddress = makeSocAddress(id, ownerAddress)\n\n const data = await bee.chunk.download(\n socAddress.toHex(),\n undefined,\n requestOptions,\n )\n\n return makeSingleOwnerChunkFromData(data, socAddress, ownerAddress)\n}\n\nexport async function downloadEncryptedSOC(\n bee: ChunkDownloader,\n owner: string | Uint8Array | EthAddress,\n identifier: string | Uint8Array | Identifier,\n encryptionKey: string | Uint8Array,\n requestOptions?: BeeRequestOptions,\n): Promise<SingleOwnerChunk> {\n const ownerAddress = new EthAddress(owner)\n const id = new Identifier(identifier)\n const socAddress = makeSocAddress(id, ownerAddress)\n const keyBytes =\n typeof encryptionKey === \"string\"\n ? hexToUint8Array(encryptionKey)\n : encryptionKey\n\n const data = await bee.chunk.download(\n socAddress.toHex(),\n undefined,\n requestOptions,\n )\n\n return makeSingleOwnerChunkFromData(data, socAddress, ownerAddress, keyBytes)\n}\n","// Copyright 2026 The Swarm Authors. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { MantarayNode } from \"@ethersphere/core-sdk\"\nimport type { Bee, BeeRequestOptions } from \"@ethersphere/bee-js\"\nimport {\n makeContentAddressedChunk,\n makeEncryptedContentAddressedChunk,\n} from \"../chunk\"\nimport { hexToUint8Array, uint8ArrayToHex } from \"../utils/hex\"\nimport { downloadDataWithChunkAPI } from \"./download-data\"\n\n/**\n * Upload callback type for saveMantarayTreeRecursively\n */\nexport type UploadCallback = (\n data: Uint8Array,\n isRoot: boolean,\n) => Promise<{ reference: string; tagUid?: number }>\n\n/**\n * Save a Mantaray tree by uploading bottom-up\n *\n * This mirrors MantarayNode.saveRecursively() but allows custom upload logic\n * and uses Bee's returned references to avoid address mismatches.\n *\n * This is the variant that is safe to use from outside the proxy: the callback\n * receives a marshaled node payload and hands back the reference it was stored\n * under, so any uploader that wraps a payload in a chunk of its own fits.\n * `SwarmIdClient.uploadData` is the one to reach for — `uploadChunk` fits the\n * contract too, but a node payload over its 4 KB chunk limit (a wide directory)\n * fails there, which is why the demo's feed upload uses `uploadData`.\n */\nexport async function saveMantarayTreeRecursively(\n node: MantarayNode,\n uploadFn: UploadCallback,\n): Promise<{ rootReference: string; tagUid?: number }> {\n async function saveRecursively(\n current: MantarayNode,\n isRoot: boolean,\n ): Promise<{ reference: string; tagUid?: number }> {\n for (const fork of current.forks.values()) {\n await saveRecursively(fork.node, false)\n }\n\n const data = await current.marshal()\n const result = await uploadFn(data, isRoot)\n current.selfAddress = hexToUint8Array(result.reference)\n\n return result\n }\n\n const result = await saveRecursively(node, true)\n\n return {\n rootReference: result.reference,\n tagUid: result.tagUid,\n }\n}\n\n/**\n * Options for saveMantarayTree\n */\nexport interface SaveMantarayOptions {\n /** Encrypt manifest chunks (64-byte references with address + key) */\n encrypt?: boolean\n}\n\n/**\n * Upload callback for saveMantarayTree\n *\n * @param chunkData - A finished content-addressed chunk, span header included;\n * it must be stored exactly as given, not wrapped in another chunk\n * @param isRoot - Whether this is the root node\n * @returns Upload result with optional tag UID\n */\nexport type MantarayUploadCallback = (\n chunkData: Uint8Array,\n isRoot: boolean,\n) => Promise<{ tagUid?: number }>\n\n/**\n * Save a Mantaray tree by uploading bottom-up with unified encryption support\n *\n * Proxy-internal, and deliberately not part of the package's public API.\n *\n * Creates CAC or encrypted CAC internally based on encrypt option.\n * Returns 64-byte reference (address + key) when encrypted, 32-byte otherwise.\n *\n * `uploadFn` receives a finished content-addressed chunk built here, span\n * header included, and each node's address is computed locally from those same\n * bytes. The callback must therefore store them as-is: an uploader that treats\n * its argument as a payload and wraps it in a new chunk stores every node under\n * a different address than the tree records, which fails silently and leaves the\n * returned root reference pointing at nothing. `SwarmIdClient.uploadChunk` wraps\n * its input that way and cannot be used here; no public client method accepts a\n * finished chunk. Outside the proxy, use `saveMantarayTreeRecursively` instead.\n *\n * @param node - Root Mantaray node to save\n * @param uploadFn - Callback that uploads each finished chunk verbatim\n * @param options - Optional settings (encrypt: boolean)\n * @returns Root reference and optional tag UID\n */\nexport async function saveMantarayTree(\n node: MantarayNode,\n uploadFn: MantarayUploadCallback,\n options?: SaveMantarayOptions,\n): Promise<{ rootReference: string; tagUid?: number }> {\n const shouldEncrypt = options?.encrypt === true\n\n async function saveRecursively(\n current: MantarayNode,\n isRoot: boolean,\n ): Promise<{ tagUid?: number }> {\n // Process children first (bottom-up)\n for (const fork of current.forks.values()) {\n await saveRecursively(fork.node, false)\n }\n\n const data = await current.marshal()\n\n if (shouldEncrypt) {\n const encryptedChunk = makeEncryptedContentAddressedChunk(data)\n const result = await uploadFn(encryptedChunk.data, isRoot)\n\n // 64-byte reference: address + encryption key\n const encryptedRef = new Uint8Array(64)\n encryptedRef.set(encryptedChunk.address.toUint8Array(), 0)\n encryptedRef.set(encryptedChunk.encryptionKey, 32)\n current.selfAddress = encryptedRef\n\n return result\n } else {\n const chunk = makeContentAddressedChunk(data)\n const result = await uploadFn(chunk.data, isRoot)\n current.selfAddress = chunk.address.toUint8Array()\n return result\n }\n }\n\n const result = await saveRecursively(node, true)\n\n return {\n rootReference: uint8ArrayToHex(node.selfAddress!),\n tagUid: result.tagUid,\n }\n}\n\n/**\n * How the Mantaray parser says the bytes it was handed are not a node at all:\n * too short to hold a header, or a header that is not Mantaray's. Matched on\n * the tail, because the prefix has been reworded once already — bee-js threw\n * `MantarayNode#unmarshal …`, core-sdk throws `MantarayNode#unmarshalFromData\n * …` (#705) — and both throw a plain `Error`, so the text is the only handle\n * there is. Reword the tails too and the translation below simply stops\n * firing, leaving the raw message to surface again.\n */\nconst NOT_A_MANIFEST_MESSAGES = [\"invalid version hash\", \"data too short\"]\n\n/**\n * What a person can act on when the root of a manifest download is not a\n * manifest at all. It states what is true wherever the load is reached from,\n * and names the pair only as the likely cause: `handleDownloadFile` is the\n * crossed-pairs case, but `handleActDownloadData` builds its own manifest and\n * a non-manifest root there means something else went wrong.\n */\nconst NO_MANIFEST_MESSAGE =\n \"No manifest at this reference; a reference from uploadData needs downloadData.\"\n\n/**\n * Unmarshal the root node of a manifest, translating the parse failures that\n * mean \"this reference is not a manifest\".\n *\n * Uploads and downloads come in pairs, and both downloads take a plain\n * string reference: handing an `uploadData` reference to a file download\n * type-checks, and lands here. Only the root is translated — a root that\n * fails to parse is routinely just plain data, while a child that fails to\n * parse is a manifest with a corrupt node, which is a different problem and\n * keeps its own error.\n */\nfunction unmarshalRootManifest(\n rootData: Uint8Array,\n rootReference: string,\n): MantarayNode {\n try {\n return MantarayNode.unmarshalFromData(\n rootData,\n hexToUint8Array(rootReference),\n )\n } catch (error) {\n if (\n error instanceof Error &&\n NOT_A_MANIFEST_MESSAGES.some((tail) => error.message.endsWith(tail))\n ) {\n throw new Error(NO_MANIFEST_MESSAGE, { cause: error })\n }\n throw error\n }\n}\n\n/**\n * Load a Mantaray tree using only the chunk API.\n *\n * This avoids /bytes and supports encrypted references.\n */\nexport async function loadMantarayTreeWithChunkAPI(\n bee: Bee,\n rootReference: string,\n requestOptions?: BeeRequestOptions,\n): Promise<MantarayNode> {\n const rootData = await downloadDataWithChunkAPI(\n bee,\n rootReference,\n undefined,\n undefined,\n requestOptions,\n )\n const root = unmarshalRootManifest(rootData, rootReference)\n\n async function loadRecursively(node: MantarayNode): Promise<void> {\n for (const fork of node.forks.values()) {\n if (!fork.node.selfAddress) {\n throw new Error(\"Fork node selfAddress is not set\")\n }\n\n const childRef = uint8ArrayToHex(fork.node.selfAddress)\n const childData = await downloadDataWithChunkAPI(\n bee,\n childRef,\n undefined,\n undefined,\n requestOptions,\n )\n const childNode = MantarayNode.unmarshalFromData(\n childData,\n fork.node.selfAddress,\n )\n\n fork.node.targetAddress = childNode.targetAddress\n fork.node.forks = childNode.forks\n fork.node.obfuscationKey = childNode.obfuscationKey\n fork.node.path = fork.prefix\n fork.node.parent = node\n\n for (const nestedFork of fork.node.forks.values()) {\n nestedFork.node.parent = fork.node\n }\n\n await loadRecursively(fork.node)\n }\n }\n\n await loadRecursively(root)\n return root\n}\n","// Copyright 2026 The Swarm Authors. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * TTL (Time To Live) calculation and formatting utilities for postage stamps\n */\n\n/**\n * Gnosis Chain block time in seconds\n */\nexport const GNOSIS_BLOCK_TIME = 5\n\n/**\n * Blocks per day on Gnosis Chain (24h / 5s block time = 17280). BigInt so it\n * composes with the PLUR-denominated price math in\n * {@link calculateStampAmountForDays} without precision loss.\n */\nexport const BLOCKS_PER_DAY = (24n * 60n * 60n) / BigInt(GNOSIS_BLOCK_TIME)\n\n/**\n * Time constants. `SECONDS_PER_MONTH` is BigInt because its only consumer is\n * the BigInt math in {@link calculateTTLSeconds}; the others stay Number\n * because {@link formatTTL} uses them with `Math.floor` / modulo.\n */\nconst SECONDS_PER_MINUTE = 60\nconst SECONDS_PER_HOUR = 60 * SECONDS_PER_MINUTE\nconst SECONDS_PER_DAY = 24 * SECONDS_PER_HOUR\nconst SECONDS_PER_MONTH = 30n * BigInt(SECONDS_PER_DAY)\n\n/**\n * Swarm constants. `CHUNKS_PER_GB = 1 GiB / 4 KiB chunk`.\n */\nconst PLUR_DECIMALS = 16 // 1 BZZ = 1e16 PLUR\nconst CHUNKS_PER_GB = 262_144n // (1024 * 1024 * 1024) / 4096\n\n/**\n * Converts a BZZ amount (possibly fractional) to PLUR as a BigInt.\n *\n * Goes through a fixed-decimal string instead of `bzz * 1e16` to preserve\n * precision: `1e16` exceeds `Number.MAX_SAFE_INTEGER` (2^53), so direct\n * multiplication loses low-order digits for any non-trivial price.\n */\nfunction bzzToPlur(bzz: number): bigint {\n const str = bzz.toFixed(PLUR_DECIMALS)\n const negative = str.startsWith(\"-\")\n const unsigned = negative ? str.slice(1) : str\n const [intPart, decPart = \"\"] = unsigned.split(\".\")\n const paddedDec = decPart.padEnd(PLUR_DECIMALS, \"0\").slice(0, PLUR_DECIMALS)\n const magnitude = BigInt(intPart + paddedDec)\n return negative ? -magnitude : magnitude\n}\n\n/**\n * Swarmscan API URL for price data\n */\nexport const SWARMSCAN_STATS_URL =\n \"https://api.swarmscan.io/v1/postage-stamps/stats\"\n\n/**\n * Fetches current price from Swarmscan.\n * @returns pricePerGBPerMonth in BZZ\n */\nexport async function fetchSwarmPrice(): Promise<number> {\n const response = await fetch(SWARMSCAN_STATS_URL)\n if (!response.ok) {\n throw new Error(`Failed to fetch Swarmscan stats: ${response.status}`)\n }\n const data = await response.json()\n return data.pricePerGBPerMonth\n}\n\n/**\n * Approximates the lifetime of a postage stamp deposit in seconds, assuming\n * the chain's per-block price stays constant at `pricePerGBPerMonth` for the\n * full lifetime. This is the answer to \"how long would a stamp with this\n * deposit last at the current price\" — not the remaining TTL of an existing\n * stamp (for that, prefer {@link fetchBatchTTL}, which uses live chain state).\n *\n * Uses BigInt math throughout. `pricePerGBPerMonth * 1e16` (PLUR conversion)\n * silently loses precision in Number, since `1e16 > Number.MAX_SAFE_INTEGER`.\n *\n * @param amount - Stamp amount in PLUR (per-chunk)\n * @param pricePerGBPerMonth - Price in BZZ per GiB per month (from Swarmscan)\n * @returns Lifetime in seconds. Returns `0` if the amount or price is\n * non-positive or the price is not finite — a 0-price chain\n * technically never expires stamps, but returning 0 keeps callers\n * inside safe Number range and is the conservative display choice.\n */\nexport function calculateTTLSeconds(\n amount: bigint | number | string,\n pricePerGBPerMonth: number,\n): number {\n if (!Number.isFinite(pricePerGBPerMonth) || pricePerGBPerMonth <= 0) {\n return 0\n }\n const amountBigInt = BigInt(amount)\n if (amountBigInt <= 0n) {\n return 0\n }\n const perChunkPerMonthCost = bzzToPlur(pricePerGBPerMonth) / CHUNKS_PER_GB\n if (perChunkPerMonthCost <= 0n) {\n // Defensive: the chain's PriceOracle enforces a floor of 24_000 PLUR per\n // chunk per block (≈ 0.33 BZZ/GiB/month), so any real Swarmscan response\n // is ~10^10× above the BigInt-truncates-to-zero threshold. This guard\n // only fires for pathological caller input — without it the next line\n // would throw on divide-by-zero.\n return 0\n }\n return Number((amountBigInt * SECONDS_PER_MONTH) / perChunkPerMonthCost)\n}\n\n/**\n * Formats a TTL value (in seconds) to a human-readable string.\n * Returns \"Xd Yh\" format (e.g., \"30d 14h\").\n *\n * @param ttlSeconds - TTL in seconds\n * @returns Human-readable TTL string, or \"N/A\" if undefined/invalid\n */\nexport function formatTTL(ttlSeconds: number | undefined): string {\n if (ttlSeconds === undefined || ttlSeconds <= 0) {\n return \"N/A\"\n }\n\n const days = Math.floor(ttlSeconds / SECONDS_PER_DAY)\n const hours = Math.floor((ttlSeconds % SECONDS_PER_DAY) / SECONDS_PER_HOUR)\n\n return `${days}d ${hours}h`\n}\n\n/**\n * Snapshot of Bee's view of the chain, from `GET /chainstate`.\n *\n * `currentPrice` is PLUR per chunk per block — the per-block storage rent rate\n * Bee charges against a stamp's deposit. Bee returns it as a decimal string\n * because Gnosis prices can exceed `Number.MAX_SAFE_INTEGER` on high-traffic\n * chains, so we keep it BigInt all the way through to the stamp-amount math.\n */\nexport interface ChainState {\n block: number\n currentPrice: bigint\n}\n\n/**\n * Fetches the current chain state (block + per-chunk-per-block price) from a\n * Bee node. Used to size new stamp amounts: Bee rejects `POST /stamps` calls\n * whose amount does not cover at least 24h of storage at `currentPrice`.\n *\n * @param beeUrl - Bee node URL\n * @returns Parsed chain state with `currentPrice` as BigInt\n * @throws if the request fails, returns non-OK, or omits required fields.\n * Callers (e.g. the dev page) surface this directly to the user.\n */\nexport async function fetchChainState(beeUrl: string): Promise<ChainState> {\n const base = beeUrl.replace(/\\/$/, \"\")\n const response = await fetch(`${base}/chainstate`)\n if (!response.ok) {\n throw new Error(`Failed to fetch chainstate: HTTP ${response.status}`)\n }\n const data: unknown = await response.json()\n if (typeof data !== \"object\" || data === null) {\n throw new Error(\"Invalid chainstate response\")\n }\n const obj = data as { block?: unknown; currentPrice?: unknown }\n if (typeof obj.block !== \"number\") {\n throw new Error(\"chainstate response missing block\")\n }\n // Require a string. Bee always serialises currentPrice as a decimal string\n // because high-traffic chains can exceed Number.MAX_SAFE_INTEGER (2^53), and\n // JSON.parse rounds anything above that *before* we get a chance to widen it\n // to BigInt — so accepting a `number` here would silently corrupt the price\n // and defeat the precision the rest of this module guarantees.\n if (typeof obj.currentPrice !== \"string\") {\n throw new Error(\n \"chainstate response missing or non-string currentPrice (got \" +\n typeof obj.currentPrice +\n \")\",\n )\n }\n return {\n block: obj.block,\n currentPrice: BigInt(obj.currentPrice),\n }\n}\n\n/**\n * Minimum stamp amount (PLUR per chunk) that covers `days` days of validity\n * at the given per-block price. Bee enforces a 24h floor on `POST /stamps`, so\n * passing `days = 1` returns the exact minimum that will be accepted.\n *\n * @param currentPrice - Per-chunk-per-block price in PLUR (from {@link fetchChainState})\n * @param days - Positive integer number of days of validity to fund\n * @returns Amount in PLUR per chunk, or `0n` for non-positive / non-integer inputs\n */\nexport function calculateStampAmountForDays(\n currentPrice: bigint,\n days: number,\n): bigint {\n if (currentPrice <= 0n || !Number.isInteger(days) || days <= 0) {\n return 0n\n }\n return currentPrice * BLOCKS_PER_DAY * BigInt(days)\n}\n\n/**\n * Live details for a batch from a Bee node's `/stamps/{batchId}` endpoint.\n * Fields are individually optional: each is present only when the response\n * carries it with the expected type.\n */\nexport interface BatchDetails {\n /** Remaining TTL in seconds; negative API values are normalised to `0`. */\n batchTTL?: number\n /** Whether the batch is usable (started and not expired). */\n usable?: boolean\n /** Whether the batch exists on chain. */\n exists?: boolean\n}\n\n/**\n * Fetches live batch details directly from a Bee node's `/stamps/{batchId}`\n * endpoint. The Bee node computes these from current chain state, so they are\n * authoritative — unlike the snapshot stored at stamp-assignment time, which\n * can go stale (e.g. a freshly bought batch reports `usable: false` for ~30s).\n *\n * @param beeUrl - Bee node URL\n * @param batchId - Hex-encoded batch ID (without `0x` prefix)\n * @returns Batch details, or `undefined` if the Bee node does not know about\n * this batch or the request fails.\n */\nexport async function fetchBatchDetails(\n beeUrl: string,\n batchId: string,\n): Promise<BatchDetails | undefined> {\n try {\n const base = beeUrl.replace(/\\/$/, \"\")\n const response = await fetch(`${base}/stamps/${batchId}`)\n if (!response.ok) {\n return undefined\n }\n const data: unknown = await response.json()\n if (typeof data !== \"object\" || data === null) {\n return undefined\n }\n const { batchTTL, usable, exists } = data as {\n batchTTL?: unknown\n usable?: unknown\n exists?: unknown\n }\n return {\n batchTTL:\n typeof batchTTL === \"number\"\n ? batchTTL < 0\n ? 0\n : batchTTL\n : undefined,\n usable: typeof usable === \"boolean\" ? usable : undefined,\n exists: typeof exists === \"boolean\" ? exists : undefined,\n }\n } catch {\n return undefined\n }\n}\n\n/**\n * Fetches the remaining batchTTL (in seconds) for a stamp directly from a Bee\n * node's `/stamps/{batchId}` endpoint, via {@link fetchBatchDetails}. The Bee\n * node computes this from current chain state (per-block price and cumulative\n * outpayment), so it is more accurate than the constant-price approximation\n * in {@link calculateTTLSeconds}.\n *\n * @param beeUrl - Bee node URL\n * @param batchId - Hex-encoded batch ID (without `0x` prefix)\n * @returns Remaining TTL in seconds, or `undefined` if the Bee node does not\n * know about this batch or the request fails. Negative values from\n * the Bee API are normalised to `0` (expired).\n */\nexport async function fetchBatchTTL(\n beeUrl: string,\n batchId: string,\n): Promise<number | undefined> {\n const details = await fetchBatchDetails(beeUrl, batchId)\n return details?.batchTTL\n}\n","// Copyright 2026 The Swarm Authors. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * The JSON-RPC-over-HTTP contract for this repo. A response is an answer only\n * if all three hold: a 2xx status, no JSON-RPC `error` member (which arrives\n * under a 200), and a `result` that is neither missing nor `null`.\n *\n * The last two are separate checks on purpose. A missing `result` member is a\n * malformed envelope — no method reports anything that way. An explicit `null`\n * is JSON-RPC saying \"no such thing\", which a handful of methods mean as a real\n * outcome (`eth_getTransactionReceipt` while pending, anvil's admin calls on\n * success). Collapsing the two lets a malformed envelope read as that outcome.\n *\n * `@swarm-id/multichain` keeps its own copy in `multichain/src/json-rpc.ts`,\n * because that package is vendored and self-contained. {@link checkStatus},\n * {@link checkedResult}, {@link requireValue} and their wording are duplicated\n * verbatim there and must stay that way — change one, change both. Only what\n * wraps them legitimately differs: this file batches, that one rotates\n * providers, and only this one maps the deadline onto {@link TimeoutError},\n * which is the published library's discriminator.\n */\n\nimport { TimeoutError } from \"./promise\"\n\n/** A workable deadline for a chain read over a public RPC. */\nexport const CHAIN_READ_TIMEOUT_MS = 10_000\n\nexport interface JsonRpcOptions {\n /** Deadline for the whole request, including the response body. */\n timeoutMs: number\n /**\n * How the endpoint is named in error messages, e.g. \"The configured Gnosis\n * RPC\". Defaults to the endpoint's origin.\n */\n label?: string\n /**\n * The longest response body read, in bytes. A longer body is refused as it\n * streams in, before anything parses it. Unset, the body is read whole.\n */\n maxBodyBytes?: number\n}\n\n/** One call in a batch. Ids are assigned by {@link jsonRpcBatch}. */\nexport interface JsonRpcRequest {\n method: string\n params: unknown[]\n}\n\ninterface JsonRpcEnvelope {\n id?: unknown\n result?: unknown\n error?: { code?: number; message?: string }\n}\n\n/**\n * How the endpoint is named when the caller supplies no `label`. The origin\n * only: an RPC url's path and query are where provider API keys live, and\n * these messages reach logs and dialogs.\n */\nfunction defaultLabel(rpcUrl: string): string {\n try {\n return new URL(rpcUrl).origin\n } catch {\n return \"The RPC endpoint\"\n }\n}\n\n/** Every member is optional, so being an object is the whole check. */\nfunction isEnvelope(value: unknown): value is JsonRpcEnvelope {\n return typeof value === \"object\" && value !== null\n}\n\n/** Thrown by {@link readBoundedText} so the caller can tell it from a transport failure. */\nclass BodyTooLongError extends Error {}\n\n/**\n * The body as text, reading no more than `maxBytes` of it. A body with no\n * stream is empty.\n * @throws {BodyTooLongError} as soon as the body passes `maxBytes`, after\n * cancelling the rest of it.\n */\nasync function readBoundedText(\n response: Response,\n maxBytes: number,\n): Promise<string> {\n if (!response.body) {\n return \"\"\n }\n const reader = response.body.getReader()\n const chunks: Uint8Array[] = []\n let total = 0\n for (;;) {\n const { done, value } = await reader.read()\n if (done) {\n break\n }\n total += value.byteLength\n if (total > maxBytes) {\n await reader.cancel().catch(() => undefined)\n throw new BodyTooLongError()\n }\n chunks.push(value)\n }\n const whole = new Uint8Array(total)\n let offset = 0\n for (const chunk of chunks) {\n whole.set(chunk, offset)\n offset += chunk.byteLength\n }\n return new TextDecoder().decode(whole)\n}\n\nfunction messageOf(cause: unknown): string {\n return cause instanceof Error ? cause.message : String(cause)\n}\n\n/**\n * The status half of the contract.\n * @throws when the endpoint answered anything but 2xx.\n */\nfunction checkStatus(response: Response, subject: string, label: string): void {\n if (!response.ok) {\n throw new Error(`${label} answered ${response.status} to ${subject}.`)\n }\n}\n\n/**\n * The `error`/`result` half, for one envelope — a single call or one member of\n * a batch.\n *\n * @returns the result, with JSON-RPC `null` normalised to `undefined`. Pass it\n * through {@link requireValue} unless the method means `null` as an outcome.\n * @throws when the endpoint refused the call, or answered no `result` member at\n * all — a malformed envelope, not an outcome any method reports.\n */\nfunction checkedResult(\n envelope: JsonRpcEnvelope,\n subject: string,\n label: string,\n): unknown {\n if (envelope.error) {\n throw new Error(\n `${label} refused ${subject}: ${envelope.error.message ?? \"unknown error\"}`,\n )\n }\n if (!(\"result\" in envelope)) {\n throw new Error(`${label} returned a malformed envelope for ${subject}.`)\n }\n return envelope.result ?? undefined\n}\n\n/**\n * The rest of the contract, for the methods that must produce a value.\n * @throws when the result was JSON-RPC `null`.\n */\nfunction requireValue(\n result: unknown,\n subject: string,\n label: string,\n): unknown {\n if (result === undefined) {\n throw new Error(`${label} returned no result for ${subject}.`)\n }\n return result\n}\n\n/**\n * POST the envelope and return the parsed body, HTTP status checked. The\n * single-call and batch response shapes diverge from here.\n */\nasync function postJsonRpc(\n rpcUrl: string,\n body: unknown,\n subject: string,\n options: JsonRpcOptions,\n): Promise<unknown> {\n const label = options.label ?? defaultLabel(rpcUrl)\n // The abort is owned here rather than taken from `AbortSignal.timeout`, so a\n // deadline surfaces as this repo's `TimeoutError` — the one thing callers are\n // told to discriminate on — instead of a DOMException that merely shares its\n // name, and so the timer is cleared once the read settles either way.\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), options.timeoutMs)\n /** The deadline outranks whatever shape the abort surfaced as downstream. */\n const deadlineOr = (message: string): Error =>\n controller.signal.aborted\n ? new TimeoutError(\n `${label} did not answer ${subject} within ${options.timeoutMs}ms.`,\n )\n : new Error(message)\n try {\n // `checkStatus` names the endpoint; `fetch` and `json()` do not. They\n // reject with \"Failed to fetch\" and \"Unexpected token <\" — wording that\n // reaches a drive dialog naming neither the endpoint nor the call, and\n // unreachable and unparseable are the likeliest failures of the three.\n let response: Response\n try {\n response = await fetch(rpcUrl, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n signal: controller.signal,\n })\n } catch (error) {\n throw deadlineOr(\n `${label} could not be reached for ${subject}: ${messageOf(error)}`,\n )\n }\n checkStatus(response, subject, label)\n const { maxBodyBytes } = options\n try {\n if (maxBodyBytes === undefined) {\n return (await response.json()) as unknown\n }\n return JSON.parse(\n await readBoundedText(response, maxBodyBytes),\n ) as unknown\n } catch (error) {\n if (error instanceof BodyTooLongError) {\n throw new Error(\n `${label} answered ${subject} with a body longer than ${maxBodyBytes} bytes.`,\n )\n }\n throw deadlineOr(\n `${label} answered ${subject} with a body that is not JSON.`,\n )\n }\n } finally {\n clearTimeout(timer)\n }\n}\n\n/**\n * One checked JSON-RPC call. `T` is a cast, not a validation — a caller that\n * reads a field off the result should check that field's type itself.\n *\n * @throws if the transport fails, the endpoint answers non-2xx, or the response\n * carries an `error` or no usable `result`; a {@link TimeoutError} once the\n * deadline passes.\n */\nexport async function jsonRpcCall<T>(\n rpcUrl: string,\n method: string,\n params: unknown[],\n options: JsonRpcOptions,\n): Promise<T> {\n const label = options.label ?? defaultLabel(rpcUrl)\n const envelope = (await postJsonRpc(\n rpcUrl,\n { jsonrpc: \"2.0\", id: 1, method, params },\n method,\n options,\n )) as JsonRpcEnvelope\n return requireValue(\n checkedResult(envelope, method, label),\n method,\n label,\n ) as T\n}\n\n/**\n * A batch of checked calls, returned in the same order as `requests`. Responses\n * are matched back by id, since JSON-RPC does not promise batch ordering.\n *\n * @throws if the transport fails, the batch comes back the wrong shape or with\n * ids that do not match the requests, or ANY member fails the contract —\n * a partial batch is not an answer.\n */\nexport async function jsonRpcBatch(\n rpcUrl: string,\n requests: JsonRpcRequest[],\n options: JsonRpcOptions,\n): Promise<unknown[]> {\n if (requests.length === 0) {\n return []\n }\n const label = options.label ?? defaultLabel(rpcUrl)\n const subject = `a batch of ${requests.length} calls`\n const payload = requests.map((request, id) => ({\n jsonrpc: \"2.0\",\n id,\n method: request.method,\n params: request.params,\n }))\n\n const malformed = () =>\n new Error(`${label} returned a malformed response to ${subject}.`)\n\n const data = await postJsonRpc(rpcUrl, payload, subject, options)\n if (!Array.isArray(data)) {\n // A provider that refuses the batch outright — over its size limit, say —\n // answers one envelope rather than an array, and the reason it gives is\n // the one worth reporting.\n if (isEnvelope(data) && data.error) {\n checkedResult(data, subject, label)\n }\n throw malformed()\n }\n if (data.length !== requests.length) {\n throw malformed()\n }\n\n const results: unknown[] = new Array(requests.length)\n const seen = new Set<number>()\n for (const envelope of data) {\n if (!isEnvelope(envelope)) {\n throw malformed()\n }\n const { id } = envelope\n if (typeof id !== \"number\" || id < 0 || id >= requests.length) {\n throw new Error(`${label} returned a response with an unknown id.`)\n }\n if (seen.has(id)) {\n throw new Error(`${label} returned two responses for id ${id}.`)\n }\n seen.add(id)\n const method = requests[id].method\n results[id] = requireValue(\n checkedResult(envelope, method, label),\n method,\n label,\n )\n }\n // Unique, in-range ids over exactly `requests.length` responses: every slot\n // was written, so the array holds no holes.\n return results\n}\n","// Copyright 2026 The Swarm Authors. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Swarm Identity - Key Derivation Utilities\n *\n * Every derived key is one HMAC-SHA256 of a parent key under a label:\n * `deriveSecret(parentKey, label)`. The labels below are the fixed points of\n * the derivation tree (docs-site: Key Derivation); an app secret uses the\n * app's origin as its label instead.\n */\n\nimport { PrivateKey } from \"@ethersphere/bee-js\"\nimport { secp256k1 } from \"@noble/curves/secp256k1\"\nimport { hmac } from \"@noble/hashes/hmac\"\nimport { sha256 } from \"@noble/hashes/sha256\"\nimport { hexToUint8Array, uint8ArrayToHex } from \"./hex\"\n\n/** Master key → the stored derivation key */\nexport const DERIVATION_KEY_LABEL = \"derivation-key\"\n/** Derivation key → the Swarm encryption key */\nexport const SWARM_ENCRYPTION_LABEL = \"swarm-encryption\"\n/** Derivation key → the postage signer that stamps the account's uploads */\nexport const POSTAGE_SIGNER_LABEL = \"postage-signer\"\n/** Swarm encryption key → the backup signer that owns every feed */\nexport const BACKUP_KEY_LABEL = \"backup-key\"\n/** Derivation key → the account-wide ACT sharing key (#519) */\nexport const ACT_SHARING_LABEL = \"act-sharing\"\n/**\n * App secret → the site's chat key, the key a site's chat signs with and whose\n * address the site's chat binding names (docs/Chat-Binding.md).\n *\n * The version in the label is how a leaked chat key is replaced: a new label\n * gives every account a new chat key on every site, the identity UI then signs\n * a fresh binding at the next connect because the kept one names the old\n * address, and readers stop accepting the old key because no binding names it.\n */\nexport const CHAT_KEY_LABEL = \"swarm-id chat key v1\"\n\n/** How many numbered labels `firstValidPrivateKey` tries before giving up. */\nconst MAX_PRIVATE_KEY_ATTEMPTS = 16\n\n/**\n * Derive a secret from a parent key under a label, with Web Crypto.\n *\n * HMAC-SHA256: deterministic, so the same parent key and label always give\n * the same secret. `deriveSecretSync` is the same function without the\n * `await`, for a caller that cannot have one; the test pins the two equal.\n *\n * @param parentKey - The key to derive from (hex string)\n * @param label - What the derived key is for: one of the labels above, or the\n * app's origin (e.g. \"https://swarm-app.local:8080\") for a per-app secret\n * @returns The derived secret as a hex string\n */\nexport async function deriveSecret(\n parentKey: string,\n label: string,\n): Promise<string> {\n const cryptoKey = await crypto.subtle.importKey(\n \"raw\",\n hexToUint8Array(parentKey),\n { name: \"HMAC\", hash: \"SHA-256\" },\n false,\n [\"sign\"],\n )\n const signature = await crypto.subtle.sign(\n \"HMAC\",\n cryptoKey,\n new TextEncoder().encode(label),\n )\n return uint8ArrayToHex(new Uint8Array(signature))\n}\n\n/**\n * `deriveSecret` without the `await`: the same HMAC-SHA256 computed with\n * `@noble/hashes`, for a caller that cannot await — `buildConnectionInfo` in\n * the proxy builds ConnectionInfo synchronously (#692). Byte-identical to the\n * Web Crypto path, which the test pins.\n */\nexport function deriveSecretSync(parentKey: string, label: string): string {\n return uint8ArrayToHex(\n hmac(sha256, hexToUint8Array(parentKey), new TextEncoder().encode(label)),\n )\n}\n\n/**\n * Derive an AES-GCM-256 key from `secretHex` under `label`.\n *\n * The three steps — HMAC to a fresh secret, hex to bytes, import as AES-GCM —\n * are one pipeline. Non-extractable and encrypt/decrypt only, which is the\n * part worth stating once (#590). The bus envelope (`deriveBusContext`) is the\n * live caller; the `.swarmid` file key is the identity UI's, derived by HKDF\n * from the recovery-phrase entropy, and never comes through here.\n */\nexport async function deriveAesGcmKey(\n secretHex: string,\n label: string,\n): Promise<CryptoKey> {\n const keyHex = await deriveSecret(secretHex, label)\n return crypto.subtle.importKey(\n \"raw\",\n hexToUint8Array(keyHex),\n \"AES-GCM\",\n false,\n [\"encrypt\", \"decrypt\"],\n )\n}\n\n/**\n * Derive account derivation key from account master key\n *\n * A generic 32-byte root key stored on the account, used for deterministically\n * deriving further keys (e.g. swarmEncryptionKey) without re-authentication.\n *\n * @param accountMasterKey - Account master key (hex string)\n * @returns 32-byte derivation key (as hex string)\n */\nexport async function deriveAccountDerivationKey(\n accountMasterKey: string,\n): Promise<string> {\n return deriveSecret(accountMasterKey, DERIVATION_KEY_LABEL)\n}\n\n/**\n * Derive Swarm encryption key from account derivation key\n *\n * Used for encrypting account snapshot data before upload to Swarm.\n * Derived from the stored derivationKey rather than the master key directly.\n *\n * @param derivationKey - Account derivation key (hex string)\n * @returns 32-byte encryption key (as hex string)\n */\nexport async function deriveSwarmEncryptionKey(\n derivationKey: string,\n): Promise<string> {\n return deriveSecret(derivationKey, SWARM_ENCRYPTION_LABEL)\n}\n\n/**\n * Derive the account-level postage batch signer key from the account derivation\n * key. Used as the PrivateKey for signing chunks uploaded with a postage batch.\n *\n * @param derivationKey - Account derivation key (hex string)\n * @returns 32-byte signer key (as hex string)\n */\nexport async function derivePostageSignerKey(\n derivationKey: string,\n): Promise<string> {\n return deriveSecret(derivationKey, POSTAGE_SIGNER_LABEL)\n}\n\n/**\n * `derivePostageSignerKey` without the `await`, for the proxy's ConnectionInfo\n * (#815): the signer's address is what an app buys a batch for.\n */\nexport function derivePostageSignerKeySync(derivationKey: string): string {\n return deriveSecretSync(derivationKey, POSTAGE_SIGNER_LABEL)\n}\n\n/**\n * The account-wide ACT key (#519): what other people grant access to when they\n * mean the person rather than one of their apps. Derived from the derivation\n * key, so every app origin and every device of the account arrives at the same\n * key — and the master key still never leaves the identity UI. Its public half\n * is `identity.sharingPublicKey`. Synchronous because ConnectionInfo is built\n * without awaiting.\n */\nexport function deriveSharingKey(derivationKey: string): {\n secret: Uint8Array\n publicKey: string\n} {\n const secret = hexToUint8Array(\n deriveSecretSync(derivationKey, ACT_SHARING_LABEL),\n )\n return {\n secret,\n publicKey: new PrivateKey(secret).publicKey().toCompressedHex(),\n }\n}\n\n/**\n * The first output of `derive` that is a valid secp256k1 private key, a\n * number from 1 to n - 1 where n is the curve order. It asks under `label`\n * first, then under `label/1`, `label/2` and so on. An HMAC-SHA256 output\n * misses that range with a chance of about 2^-128, so in practice the first\n * answer is the key, but the rule is fixed so every device agrees even then.\n *\n * @throws if no candidate within the attempt bound is a key, which only a\n * broken `derive` can cause\n */\nexport function firstValidPrivateKey(\n derive: (label: string) => Uint8Array,\n label: string,\n): Uint8Array {\n for (let attempt = 0; attempt < MAX_PRIVATE_KEY_ATTEMPTS; attempt++) {\n const candidate = derive(attempt === 0 ? label : `${label}/${attempt}`)\n if (secp256k1.utils.isValidPrivateKey(candidate)) {\n return candidate\n }\n }\n throw new Error(\n `No valid secp256k1 private key under \"${label}\" in ${MAX_PRIVATE_KEY_ATTEMPTS} attempts.`,\n )\n}\n\n/**\n * The site's chat key, from the site's app secret\n * (`deriveSecret(masterKey, origin)`): `HMAC(appSecret, CHAT_KEY_LABEL)`, the\n * same derivation `deriveAppSecret` runs for an app's own label, held to a\n * valid secp256k1 key by `firstValidPrivateKey`. It depends on the account and\n * the site alone, so every device of the account derives the same key.\n * Synchronous because ConnectionInfo and the binding are built without\n * awaiting.\n *\n * @param appSecret - the site's app secret (bare hex)\n * @returns the 32-byte chat private key\n */\nexport function deriveChatKey(appSecret: string): Uint8Array {\n return firstValidPrivateKey(\n (label) => hexToUint8Array(deriveSecretSync(appSecret, label)),\n CHAT_KEY_LABEL,\n )\n}\n\n// Export utility functions for testing\nexport const utils = {\n hexToUint8Array,\n uint8ArrayToHex,\n}\n","// Copyright 2026 The Swarm Authors. All rights reserved.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * The chat binding: one statement per site, signed by the account's own key,\n * saying \"this chat address on this site is mine\" (docs/Chat-Binding.md).\n *\n * A site's chat signs with its per-site chat key (`deriveChatKey` of the app\n * secret `deriveSecret(masterKey, origin)`), and nothing in that key says\n * which account it came from. The binding is what lets a reader of the site's\n * chat prove it: recover the signer of the message and compare it with the\n * account's address.\n *\n * The message is plain text signed with EIP-191 `personal_sign`, so any\n * Ethereum library recovers the signer the same way. It is the only thing the\n * account key signs through this code, and `createChatBinding` takes no text\n * of its own: the caller names a site, and the chat address is derived here.\n */\n\nimport { PrivateKey } from \"@ethersphere/bee-js\"\nimport { deriveChatKey, deriveSecretSync } from \"./key-derivation\"\nimport { personalSign, recoverPersonalSigner } from \"./personal-sign\"\n\n/** The first line, which also versions the format. */\nexport const CHAT_BINDING_TITLE = \"Swarm ID chat binding v1\"\n\nconst SITE_PREFIX = \"Site: \"\nconst CHAT_ADDRESS_PREFIX = \"Chat address: \"\nconst DATE_PREFIX = \"Date: \"\nconst LINE_SEPARATOR = \"\\n\"\nconst LINE_COUNT = 4\n\nconst CHAT_ADDRESS_PATTERN = /^0x[0-9a-f]{40}$/\nconst ADDRESS_INPUT_PATTERN = /^(0x)?[0-9a-fA-F]{40}$/\n/** `Date.prototype.toISOString` exactly: UTC, milliseconds, a `Z`. */\nconst ISO_UTC_PATTERN = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$/\n/**\n * A host a DNS name can spell: labels of letters, digits and hyphens, in\n * punycode form, joined by single dots. The URL parser lets `*` and `_`\n * through, and a site list must never hold a host that reads as a pattern.\n * It also keeps an empty label, so `example.com.` and `a..b` would otherwise\n * be second spellings of a site or no site at all.\n */\nconst DNS_HOST_PATTERN = /^[a-z0-9-]+(\\.[a-z0-9-]+)*$/\n\n/** Hosts a development build may name over plain http. */\nconst LOCAL_HOSTS: ReadonlySet<string> = new Set([\n \"localhost\",\n \"127.0.0.1\",\n \"[::1]\",\n])\n\nexport interface SiteOriginOptions {\n /**\n * Also accept `http://localhost`, `http://127.0.0.1` and `http://[::1]`\n * with any port. Only a development build passes this.\n */\n allowLocalHttp?: boolean\n}\n\n/** A signed binding as it travels: the message and its signature. */\nexport interface ChatBinding {\n message: string\n /** `0x` + r ‖ s ‖ v, 65 bytes, v 27 or 28. */\n signature: string\n}\n\n/** The three fields a binding message carries, as the message spells them. */\nexport interface ChatBindingFields {\n site: string\n /** `0x` + 40 lower-case hex characters. */\n chatAddress: string\n /** ISO 8601 UTC, as `Date.prototype.toISOString` writes it. */\n date: string\n}\n\nexport interface VerifiedChatBinding extends ChatBindingFields {\n /** The recovered signer, `0x` + 40 lower-case hex characters. */\n signer: string\n}\n\n/** What a binding has to name for a reader to accept it. */\nexport interface ExpectedChatBinding {\n site: string\n chatAddress: string\n signer: string\n}\n\n/**\n * Whether `value` is a bare https origin in the exact form the browser\n * reports one: a host and nothing else, no path, query, fragment or user\n * info, lower case, punycode, no default port. Anything a URL parser would\n * have to normalize is refused rather than normalized, so one site has one\n * spelling.\n */\nexport function isCleanSiteOrigin(\n value: string,\n options: SiteOriginOptions = {},\n): boolean {\n let url: URL\n try {\n url = new URL(value)\n } catch {\n return false\n }\n const secure = url.protocol === \"https:\"\n const localHttp =\n options.allowLocalHttp === true &&\n url.protocol === \"http:\" &&\n LOCAL_HOSTS.has(url.hostname)\n if (!secure && !localHttp) {\n return false\n }\n if (!localHttp && !DNS_HOST_PATTERN.test(url.hostname)) {\n return false\n }\n return (\n url.host !== \"\" &&\n url.username === \"\" &&\n url.password === \"\" &&\n url.origin === value\n )\n}\n\nfunction normalizeAddress(value: string): string {\n return value.toLowerCase().replace(/^0x/, \"\")\n}\n\nfunction requireSite(site: string, options: SiteOriginOptions): void {\n if (!isCleanSiteOrigin(site, options)) {\n throw new Error(`Chat binding site is not a clean https origin: ${site}`)\n }\n}\n\nfunction canonicalDate(text: string): boolean {\n if (!ISO_UTC_PATTERN.test(text)) {\n return false\n }\n const time = Date.parse(text)\n return !Number.isNaN(time) && new Date(time).toISOString() === text\n}\n\n/** Build the exact four-line message for these fields. */\nexport function buildChatBindingMessage(\n fields: { site: string; chatAddress: string; date: Date },\n options: SiteOriginOptions = {},\n): string {\n requireSite(fields.site, options)\n if (!ADDRESS_INPUT_PATTERN.test(fields.chatAddress)) {\n throw new Error(\"Chat address is not 20 bytes of hex.\")\n }\n if (Number.isNaN(fields.date.getTime())) {\n throw new Error(\"Chat binding date is not a valid date.\")\n }\n return [\n CHAT_BINDING_TITLE,\n `${SITE_PREFIX}${fields.site}`,\n `${CHAT_ADDRESS_PREFIX}0x${normalizeAddress(fields.chatAddress)}`,\n `${DATE_PREFIX}${fields.date.toISOString()}`,\n ].join(LINE_SEPARATOR)\n}\n\nfunction field(line: string, prefix: string): string {\n if (!line.startsWith(prefix)) {\n throw new Error(`Chat binding line does not start with \"${prefix}\".`)\n }\n return line.slice(prefix.length)\n}\n\n/**\n * Read the fields out of a binding message, refusing every shape but the one\n * `buildChatBindingMessage` writes: another first line, a missing or extra\n * line, a trailing newline, a site that is not a clean origin, an address in\n * another spelling, a date in another form.\n */\nexport function parseChatBindingMessage(\n message: string,\n options: SiteOriginOptions = {},\n): ChatBindingFields {\n const lines = message.split(LINE_SEPARATOR)\n if (lines.length !== LINE_COUNT) {\n throw new Error(\n `Chat binding has ${lines.length} lines, not ${LINE_COUNT}.`,\n )\n }\n const [title, siteLine, chatLine, dateLine] = lines\n if (title !== CHAT_BINDING_TITLE) {\n throw new Error(\"Not a Swarm ID chat binding v1.\")\n }\n const site = field(siteLine, SITE_PREFIX)\n requireSite(site, options)\n const chatAddress = field(chatLine, CHAT_ADDRESS_PREFIX)\n if (!CHAT_ADDRESS_PATTERN.test(chatAddress)) {\n throw new Error(\"Chat address is not 0x and 40 lower-case hex characters.\")\n }\n const date = field(dateLine, DATE_PREFIX)\n if (!canonicalDate(date)) {\n throw new Error(\"Chat binding date is not ISO 8601 UTC.\")\n }\n return { site, chatAddress, date }\n}\n\n/**\n * The chat address a site's binding names: the address of the site's chat key\n * (`deriveChatKey`), bare lower-case hex. The one place that says which key a\n * binding is about, for the window that signs one and the frame that checks a\n * handed-over one.\n *\n * @param appSecret - the site's app secret (bare hex)\n */\nexport function siteChatAddress(appSecret: string): string {\n return new PrivateKey(deriveChatKey(appSecret)).publicKey().address().toHex()\n}\n\n/**\n * Sign the binding for `site` with the account's own key. The chat address is\n * the address of the site's chat key, derived from that same key here, so no\n * caller can bind an address the account does not hold for that site.\n *\n * @param accountKey - the account's private key (bare hex), whose address is\n * the account's `id`\n */\nexport function createChatBinding(\n accountKey: string,\n site: string,\n date: Date,\n options: SiteOriginOptions = {},\n): ChatBinding {\n requireSite(site, options)\n const chatAddress = siteChatAddress(deriveSecretSync(accountKey, site))\n const message = buildChatBindingMessage({ site, chatAddress, date }, options)\n return { message, signature: personalSign(message, accountKey) }\n}\n\n/**\n * Check a binding's shape and recover who signed it. Throws on a message of\n * any other shape and on a signature that is not 65 bytes with v 27 or 28 and\n * a low s. A valid signature over a changed message recovers SOME address,\n * which is why a reader compares `signer` with the account it expects\n * (`acceptedChatBinding` does).\n */\nexport function verifyChatBinding(\n binding: ChatBinding,\n options: SiteOriginOptions = {},\n): VerifiedChatBinding {\n const fields = parseChatBindingMessage(binding.message, options)\n const signer = recoverPersonalSigner(\n binding.message,\n binding.signature,\n \"Chat binding signature\",\n )\n return { signer, ...fields }\n}\n\n/**\n * The binding, if it verifies and names exactly this site, this chat address\n * and this signer, otherwise undefined. Addresses compare in any case and\n * with or without `0x`.\n */\nexport function acceptedChatBinding(\n binding: ChatBinding | undefined,\n expected: ExpectedChatBinding,\n options: SiteOriginOptions = {},\n): ChatBinding | undefined {\n if (!binding) {\n return undefined\n }\n let verified: VerifiedChatBinding\n try {\n verified = verifyChatBinding(binding, options)\n } catch {\n return undefined\n }\n const matches =\n verified.site === expected.site &&\n normalizeAddress(verified.chatAddress) ===\n normalizeAddress(expected.chatAddress) &&\n normalizeAddress(verified.signer) === normalizeAddress(expected.signer)\n return matches ? binding : undefined\n}\n\n/**\n * The connected apps with every chat binding removed except `site`'s own.\n *\n * Each site's binding publicly links the account to its chat on that site, and\n * a proxy frame runs inside one site's page, where that page's scripts can\n * reach what the frame holds. So everything handed to a frame keeps only the\n * binding of the site it runs for. The account's own synced copy keeps all of\n * them.\n */\nexport function onlySiteChatBinding<\n App extends { appUrl: string; chatBinding?: ChatBinding },\n>(apps: readonly App[], site: string): App[] {\n return apps.map((app) => {\n if (app.appUrl === site || app.chatBinding === undefined) {\n return app\n }\n const { chatBinding: _dropped, ...rest } = app\n return rest as App\n })\n}\n\n// Local http is a development site's, and which sites a binding may name is\n// decided where it is signed, not where it is merged.\nconst MERGE_SITE_OPTIONS: SiteOriginOptions = { allowLocalHttp: true }\n\n/** When a binding says it was signed, or minus infinity if it does not parse. */\nfunction signedAt(binding: ChatBinding): number {\n try {\n return Date.parse(\n parseChatBindingMessage(binding.message, MERGE_SITE_OPTIONS).date,\n )\n } catch {\n return Number.NEGATIVE_INFINITY\n }\n}\n\n/**\n * Whether `account` signed `binding` and it names `site`. The chat address is\n * not checked: deriving it needs the account key, which a merge does not\n * hold, and only the account key can sign a binding its signer check passes.\n */\nfunction signedByAccountForSite(\n binding: ChatBinding,\n site: string,\n account: string,\n): boolean {\n try {\n const verified = verifyChatBinding(binding, MERGE_SITE_OPTIONS)\n return (\n verified.site === site &&\n normalizeAddress(verified.signer) === normalizeAddress(account)\n )\n } catch {\n return false\n }\n}\n\n/**\n * Of two bindings for the connection to `site` in `account`'s state, the one\n * `account` signed for `site` over one it did not, then the later date, the\n * first on a tie, and whichever is there when only one is. The date is the\n * signer's own claim, and any message with a valid signature recovers SOME\n * signer, so a binding whose date was edited, or that another key signed, must\n * never outrank the account's own by claiming a later one. A binding is never\n * withdrawn, only replaced by a newer one (docs/Chat-Binding.md), so this is\n * the whole of how two copies of a connection merge theirs.\n *\n * @param account - the account's address, its `id`, in any case and with or\n * without `0x`\n */\nexport function newerChatBinding(\n first: ChatBinding | undefined,\n second: ChatBinding | undefined,\n site: string,\n account: string,\n): ChatBinding | undefined {\n if (!first || !second) {\n return first ?? second\n }\n const firstAccepted = signedByAccountForSite(first, site, account)\n if (firstAccepted !== signedByAccountForSite(second, site, account)) {\n return firstAccepted ? first : second\n }\n return signedAt(second) > signedAt(first) ? second : first\n}\n"],"names":["SwarmIdError","Error","constructor","code","message","details","super","undefined","cause","this","name","reason","status","beeMessage","url","toWire","error","fromWire","wire","$constructor","initializer","params","init","inst","def","_zod","Object","defineProperty","value","constr","_","traits","Set","enumerable","has","add","proto","prototype","keys","i","length","k","bind","Parent","Definition","_a","deferred","fn","Symbol","hasInstance","globalConfig","config","newConfig","jsonStringifyReplacer","toString","cached","getter","nullish","input","cleanRegex","source","start","startsWith","end","endsWith","slice","EVALUATING","defineLazy","object","key","get","set","v","configurable","assignProp","target","prop","writable","mergeDefs","defs","mergedDescriptors","descriptors","getOwnPropertyDescriptors","assign","defineProperties","esc","str","JSON","stringify","captureStackTrace","_args","isObject","data","Array","isArray","allowsEval","navigator","userAgent","includes","Function","isPlainObject","o","ctor","prot","hasOwnProperty","call","shallowClone","propertyKeyTypes","escapeRegex","replace","clone","cl","parent","normalizeParams","_params","NUMBER_FORMAT_RANGES","safeint","Number","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","int32","uint32","float32","float64","MAX_VALUE","aborted","x","startIndex","issues","continue","prefixIssues","path","map","iss","unshift","unwrapMessage","finalizeIssue","ctx","full","customError","localeError","reportInput","getLengthableOrigin","issue","args","util.jsonStringifyReplacer","$ZodError","$ZodRealError","_parse","_Err","schema","_ctx","async","result","run","Promise","core.$ZodAsyncError","e","Err","util.finalizeIssue","core.config","util.captureStackTrace","callee","_parseAsync","_safeParse","success","errors.$ZodError","safeParse","errors.$ZodRealError","_safeParseAsync","safeParseAsync","_encode","direction","_decode","_encodeAsync","_decodeAsync","_safeEncode","_safeDecode","_safeEncodeAsync","_safeDecodeAsync","cuid","cuid2","ulid","xid","ksuid","nanoid","duration","guid","uuid","version","RegExp","email","ipv4","ipv6","cidrv4","cidrv6","base64","base64url","e164","dateSource","date","timeSource","hhmm","precision","integer","number","boolean","_undefined","lowercase","uppercase","$ZodCheck","core.$constructor","onattach","numericOriginMap","bigint","$ZodCheckLessThan","origin","push","bag","curr","inclusive","maximum","exclusiveMaximum","POSITIVE_INFINITY","check","payload","abort","$ZodCheckGreaterThan","minimum","exclusiveMinimum","NEGATIVE_INFINITY","$ZodCheckMultipleOf","multipleOf","BigInt","val","step","valDecCount","split","stepString","stepDecCount","test","match","parseInt","decCount","toFixed","util.floatSafeRemainder","divisor","$ZodCheckNumberFormat","format","isInt","util.NUMBER_FORMAT_RANGES","pattern","regexes.integer","isInteger","expected","isSafeInteger","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","prefix","$ZodCheckEndsWith","suffix","$ZodCheckOverwrite","tx","Doc$1","content","indent","indented","write","arg","execution","lines","filter","minIndent","Math","min","trimStart","dedented","repeat","line","compile","F","join","major","minor","patch","$ZodType","checks","ch","parse","runChecks","asyncResult","isAborted","util.aborted","currLen","resolve","then","handleCanaryResult","canary","checkResult","skipChecks","validate","r","vendor","$ZodString","pop","coerce","String","$ZodStringFormat","checks.$ZodCheckStringFormat","$ZodGUID","regexes.guid","$ZodUUID","v1","v2","v3","v4","v5","v6","v7","v8","regexes.uuid","$ZodEmail","regexes.email","$ZodURL","trimmed","trim","URL","hostname","protocol","normalize","href","$ZodEmoji","$ZodNanoID","regexes.nanoid","$ZodCUID","regexes.cuid","$ZodCUID2","regexes.cuid2","$ZodULID","regexes.ulid","$ZodXID","regexes.xid","$ZodKSUID","regexes.ksuid","$ZodISODateTime","time","opts","local","offset","timeRegex","regexes.datetime","$ZodISODate","regexes.date","$ZodISOTime","$ZodISODuration","regexes.duration","$ZodIPv4","regexes.ipv4","$ZodIPv6","regexes.ipv6","$ZodCIDRv4","regexes.cidrv4","$ZodCIDRv6","regexes.cidrv6","parts","address","prefixNum","isValidBase64","atob","$ZodBase64","regexes.base64","contentEncoding","$ZodBase64URL","regexes.base64url","c","padEnd","ceil","isValidBase64URL","$ZodE164","regexes.e164","$ZodJWT","token","algorithm","tokensParts","header","parsedHeader","typ","alg","isValidJWT","$ZodNumber","regexes.number","isNaN","isFinite","received","$ZodNumberFormat","checks.$ZodCheckNumberFormat","$ZodBoolean","regexes.boolean","Boolean","$ZodUndefined","regexes.undefined","values","optin","optout","$ZodUnknown","$ZodNever","handleArrayResult","final","index","util.prefixIssues","$ZodArray","proms","item","element","all","handlePropertyResult","normalizeDef","shape","okeys","keySet","numKeys","optionalKeys","handleCatchall","unrecognized","_catchall","catchall","t","type","$ZodObject","desc","getOwnPropertyDescriptor","sh","newSh","_normalized","util.cached","util.defineLazy","propValues","field","util.isObject","$ZodObjectJIT","superParse","fastpass","jit","core.globalConfig","jitless","fastEnabled","util.allowsEval","doc","Doc","normalized","parseStr","util.esc","ids","create","counter","id","generateFastpass","handleUnionResults","results","nonaborted","errors","$ZodUnion","options","some","every","flatMap","option","from","p","util.cleanRegex","single","first","$ZodDiscriminatedUnion","_super","pv","indexOf","entries","disc","Map","discriminator","size","opt","unionFallback","$ZodIntersection","left","right","handleIntersectionResults","mergeValues","a","b","valid","Date","util.isPlainObject","bKeys","sharedKeys","newObj","sharedValue","mergeErrorPath","newArray","merged","$ZodRecord","keyType","recordKeys","valueType","Reflect","ownKeys","keyResult","$ZodEnum","numericValues","util.getEnumValues","valuesSet","util.propertyKeyTypes","$ZodLiteral","$ZodTransform","core.$ZodEncodeError","_out","transform","output","handleOptionalResult","$ZodOptional","innerType","$ZodNullable","$ZodDefault","defaultValue","handleDefaultResult","$ZodPrefault","$ZodNonOptional","handleNonOptionalResult","$ZodCatch","catchValue","$ZodPipe","in","out","handlePipeResult","next","$ZodReadonly","handleReadonlyResult","freeze","$ZodCustom","checks.$ZodCheck","handleRefineResult","_iss","util.issue","$ZodRegistry$1","_map","WeakMap","_idmap","_meta","meta","clear","remove","delete","pm","f","globalThis","__zod_globalRegistry","$ZodRegistry","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","_superRefine","_check","addIssue","_issue","fatal","ZodISODateTime","core.$ZodISODateTime","schemas.ZodStringFormat","datetime","core._isoDateTime","ZodISODate","core.$ZodISODate","core._isoDate","ZodISOTime","core.$ZodISOTime","core._isoTime","ZodISODuration","core.$ZodISODuration","core._isoDuration","mapper","fieldErrors","_errors","processError","el","core.formatError","flatten","formErrors","sub","core.flattenError","addIssues","isEmpty","ZodError","ZodRealError","core._parse","parseAsync","core._parseAsync","core._safeParse","core._safeParseAsync","encode","core._encode","decode","core._decode","encodeAsync","core._encodeAsync","decodeAsync","core._decodeAsync","safeEncode","core._safeEncode","safeDecode","core._safeDecode","safeEncodeAsync","core._safeEncodeAsync","safeDecodeAsync","core._safeDecodeAsync","ZodType","core.$ZodType","util.mergeDefs","core.clone","brand","register","reg","parse.parse","parse.safeParse","parse.parseAsync","parse.safeParseAsync","spa","parse.encode","parse.decode","parse.encodeAsync","parse.decodeAsync","parse.safeEncode","parse.safeDecode","parse.safeEncodeAsync","parse.safeDecodeAsync","refine","core._refine","ZodCustom","superRefine","refinement","core._superRefine","overwrite","checks.overwrite","optional","nullable","nonoptional","ZodNonOptional","array","or","union","and","ZodIntersection","pipe","default","_default","ZodDefault","util.shallowClone","prefault","ZodPrefault","catch","_catch","ZodCatch","readonly","ZodReadonly","describe","description","core.globalRegistry","isOptional","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","max","checks.maxLength","checks.length","nonempty","checks.$ZodCheckLowerCase","checks.lowercase","checks.$ZodCheckUpperCase","checks.uppercase","form","checks.normalize","toLowerCase","toUpperCase","slugify","util.slugify","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","int","safe","positive","nonnegative","negative","nonpositive","checks.multipleOf","finite","minValue","maxValue","core._number","ZodNumberFormat","core.$ZodNumberFormat","core._int","ZodBoolean","core.$ZodBoolean","core._boolean","ZodUndefined","core.$ZodUndefined","ZodUnknown","core.$ZodUnknown","unknown","ZodNever","core.$ZodNever","never","core._never","ZodArray","core.$ZodArray","len","unwrap","core._array","ZodObject","core.$ZodObjectJIT","keyof","_enum","passthrough","loose","strict","strip","extend","incoming","_shape","util.extend","safeExtend","util.safeExtend","merge","other","util.merge","pick","mask","currDef","newShape","util.pick","omit","util.omit","partial","oldShape","util.partial","ZodOptional","required","util.required","strictObject","ZodUnion","core.$ZodUnion","ZodDiscriminatedUnion","core.$ZodDiscriminatedUnion","discriminatedUnion","core.$ZodIntersection","ZodRecord","core.$ZodRecord","record","ZodEnum","core.$ZodEnum","enum","extract","newEntries","exclude","fromEntries","ZodLiteral","core.$ZodLiteral","literal","ZodTransform","core.$ZodTransform","core.$ZodOptional","ZodNullable","core.$ZodNullable","core.$ZodDefault","removeDefault","core.$ZodPrefault","core.$ZodNonOptional","core.$ZodCatch","removeCatch","ZodPipe","core.$ZodPipe","in_","core.$ZodReadonly","core.$ZodCustom","_instanceof","cls","preprocess","invertPromise","n","sleepMillis","setTimeout","shuffle","random","floor","pickRandomIndices","range","intBetween","containsPoint","width","y","height","chance","last","reduce","getDeep","setDeep","u","s","roundToNearest","round","isUndefined","_readableState","isBuffer","isStrictlyObject","isEmptyArray","isFunction","isString","isNumber","isBoolean","isDate","isBlank","isId","isIntegerString","isHexString","exports","Vector","Assertions","Strings","Objects","Dates","Numbers","System","Random","Elliptic","Lock","Solver","TrieRouter","AsyncQueue","FixedPointNumber","MerkleTree","Uint8ArrayWriter","Uint8ArrayReader","Lazy","Optional","symbolsArray","lowercaseAlphabet","alphanumericAlphabet","richAsciiAlphabet","unicodeTestingAlphabet","hexAlphabet","asString","TypeError","RangeError","checkLimits","asNumber","parseFloat","asInteger","trunc","asObject","isUrl","isBigint","asBigint","enforceObjectShape","deepMergeInPlace","zip","pushAll","apply","getFuzzyMatchScore","htmlEntityMap","before","after","beforeLast","lastIndexOf","afterLast","splitOnce","splitAll","getExtension","getBasename","shrinkTrim","capitalize","charAt","decapitalize","isLetter","charCodeAt","isDigit","isLetterOrDigit","wordBreakCharacters","isWordBreakCharacter","indexOfRegex","exec","lineMatches","allIndexOf","indexOfEarliest","indexOfWordBreak","indexOfHashtag","lastIndexOfBefore","findWeightedPair","extractBlock","wordBoundary","opening","closing","exclusive","BASE64_CHARS","BASE32_CHARS","baseToUint8Array","log2","Uint8Array","uint8ArrayToBase","explodeReplace","breakLine","rest","findCommonPrefix","containsWord","readNextWord","resolveVariableWithDefaultSyntax","resolveRemainingVariablesWithDefaults","toQueryString","encodeURIComponent","createTimeDigits","padStart","humanizeTime","absoluteDays","getTime","DefaultTimestampLabels","today","yesterday","monday","tuesday","wednesday","thursday","friday","saturday","sunday","weeks","DefaultTimeDeltaLabels","now","seconds","minutes","hours","days","getTimeDelta","labels","Types","throttleTimers","timeUnits","m","h","d","dayNumberIndex","mapDayNumber","zeroBasedIndex","day","getDayInfoFromDate","getDay","dateUnits","ms","milli","millis","millisecond","milliseconds","sec","second","minute","hour","w","week","month","months","year","years","storageUnitExponents","byte","bytes","kb","kilobyte","kilobytes","mb","megabyte","megabytes","gb","gigabyte","gigabytes","tb","terabyte","terabytes","tinyCache","joinUrl","replaceAll","sortObject","sort","localeCompare","sortAny","sortArray","forEach","deepEquals","pickRandomKey","thresholds","longNumberUnits","shortNumberUnits","makeNumber","findIndex","clamp","getFlatNotation","flattenInner","indexArray","splitByCount","tokenizeByLength","sortObjectValues","group","pushToBidirectionalMap","splice","shift","of","empty","mapAsync","ifPresent","ifPresentAsync","ifAbsent","ifAbsentAsync","getOrFallback","getOrFallbackAsync","getOrThrow","supplier","AsyncLazy","Node","children","log2Reduce","concatBytes","isPng","isJpg","isWebp","numberToUint64","ArrayBuffer","DataView","setBigUint64","numberToUint256","uint256ToNumber","partition","subarray","IOTA_CONSTANTS","keccakPermutate","l","g","$","E","A","M","S","O","T","C","R","I","D","B","P","U","L","N","j","z","q","W","H","V","J","K","Z","Q","G","Y","X","nn","en","tn","rn","on","un","cn","sn","ln","an","hn","dn","pn","mn","gn","wn","xn","yn","bytesToNumbers","divideToBlocks","absorb","squeeze","keccak256","fill","binaryPadStart","binaryPadEnd","mod","modInverse","modSqrt","modPow","SECP256K1_P","SECP256K1_N","SECP256K1_X","SECP256K1_Y","ellipticDouble","ellipticAdd","doubleAndAdd","signHash","cursor","buffer","read","Chunk","span","writer","build","hash","hashFunction","counters","capacity","chunks","onChunk","root","NOOP","append","finalize","elevate","scale","cast","fromDecimalString","fromFloat","assertSameScale","subtract","multiply","divmod","exchange","compare","toDecimalString","toJSON","toFloat","getArgument","requireStringArgument","bringToFrontInPlace","addPoint","multiplyPoint","pushPoint","cos","sin","getDistanceBetweenPoints","sqrt","filterCoordinates","isLeftmost","isRightmost","isTopmost","isBottommost","getCorners","isHorizontalLine","isVerticalLine","getSortedRayAngles","atan2","getAngleInRadians","getLineIntersectionPoint","raycast","PubSubChannel","subscribers","subscribe","publish","getSubscriberCount","queue","running","onProcessed","onDrained","concurrency","process","finally","enqueue","drain","forks","insert","handler","variableName","handle","decodeURIComponent","RollingValueProvider","current","steps","onStatusChange","onStepChange","onFinish","onError","context","getStatus","createInitialState","setHooks","addStep","find","execute","transientSkipStepName","precondition","action","queryFunction","lockFunction","unlockFunction","timeoutMillis","couldLock","unlock","hexToUint8Array","uint8ArrayToHex","binaryToUint8Array","uint8ArrayToBinary","base64ToUint8Array","uint8ArrayToBase64","base32ToUint8Array","uint8ArrayToBase32","numberToUint8","uint8ToNumber","numberToUint16","setUint16","uint16ToNumber","getUint16","byteOffset","numberToUint32","setUint32","uint32ToNumber","getUint32","uint64ToNumber","getBigUint64","sliceBytes","sha3_256","proximity","commonPrefix","setBit","getBit","equals","padStartToMultiple","padEndToMultiple","xorCypher","isUtf8","privateKeyToPublicKey","compressPublicKey","publicKeyFromCompressed","publicKeyToAddress","signMessage","verifySignature","recoverPublicKey","checksumEncode","Binary","floatBetween","signed","makeSeededRng","point","procs","Arrays","countUnique","makeUnique","splitBySize","indexCollection","onlyOrThrow","onlyOrNull","firstOrThrow","firstOrNull","initialize","initialize2D","rotate2D","containsShape","glue","pluck","pickMany","pickManyUnique","pickWeighted","pickGuaranteed","indexOfGuaranteed","makePipe","sortWeighted","unshiftAll","filterAndRemove","pushToBucket","unshiftAndLimit","atRolling","createOscillator","organiseWithLimits","tickPlaybook","ttlMax","ttl","progress","getBooleanArgument","getNumberArgument","requireNumberArgument","bringToFront","findInstance","filterInstances","interleave","toggle","createHierarchy","multicall","maxBy","minBy","forever","scheduleMany","waitFor","requiredConsecutivePasses","attempts","waitMillis","expandError","stack","runAndSetInterval","setInterval","clearInterval","whereAmI","browser","withRetries","attempt","allowedFailures","delayMillis","make","sum","average","median","getDistanceFromMidpoint","interpolate","createSequence","increment","decrement","longForm","unit","fromDecimals","substring","makeStorage","asMegabytes","convertBytes","hexToRgb","rgbToHex","haversineDistanceToMeters","PI","formatDistance","triangularNumber","searchFloat","binomialSample","SQRT2","toSignificantDigits","Promises","raceFulfilled","invert","runInParallelBatches","getTimestamp","getUTCHours","getUTCMinutes","secondsToHumanTime","countCycles","cycles","remaining","isoDate","toISOString","throttle","timeSince","dateTimeSlug","unixTimestamp","fromUtcString","getTimezoneOffset","fromMillis","getProgress","deltaMs","baseTimeMs","totalTimeMs","remainingTimeMs","humanizeProgress","getDayInfoFromDateTimeString","normalizeTime","deleteDeep","incrementDeep","ensureDeep","replaceDeep","getFirstDeep","deepMerge2","deepMerge3","mapAllAsync","cloneWithJson","deepEqualsEvery","runOn","zipSum","removeEmptyArrays","removeEmptyValues","unflatten","mapIterable","filterKeys","filterValues","rethrow","setSomeOnObject","setSomeDeep","flip","getAllPermutations","countTruthyValues","transformToArray","setMulti","incrementMulti","createBidirectionalMap","createTemporalBidirectionalMap","unshiftToBidirectionalMap","addToTemporalBidirectionalMap","validUntil","getFromTemporalBidirectionalMap","createStatefulToggle","diffKeys","uniqueToA","uniqueToB","mapRandomKey","fromObjectString","parseQueryString","hasKey","selectMax","reposition","unwrapSingleKey","parseKeyValues","errorMatches","isEmptyObject","asHexString","strictPrefix","uneven","byteLength","asSafeString","asIntegerString","asFunction","asBoolean","asDate","asNullableString","asEmptiableString","asId","asTime","asArray","asNullableObject","asStringMap","asNumericDictionary","asUrl","asEmptiable","asNullable","asOptional","enforceArrayShape","isImage","tokenizeByCount","searchHex","searchSubstring","randomHex","randomLetter","randomAlphanumeric","randomRichAscii","randomUnicode","includesAny","normalForm","enumify","escapeHtml","decodeHtmlEntities","fromCharCode","betweenWide","betweenNarrow","getPreLine","containsWords","sortByFuzzyScore","randomize","expand","concat","csvEscape","parseCsv","surroundInOut","normalizeEmail","normalizeFilename","parseFilename","basename","extension","filename","camelToTitle","slugToTitle","slugToCamel","joinHumanly","extractAllBlocks","replaceBlocks","parseHtmlAttributes","readWordsAfterAll","resolveVariables","isValidObjectPathCharacter","linesMatchInOrder","represent","resolveMarkdownLinks","buildUrl","isChinese","replaceBetweenStrings","describeMarkdown","isCapitalized","hasPunctuation","endsWithColon","isBalanced","textToFormat","splitFormatting","symbol","splitHashtags","splitUrls","route","generateVariants","variants","avoid","replaceWord","replacePascalCaseWords","stripHtml","measureTextWidth","toLines","levenshteinDistance","findCommonDirectory","asEqual","asTrue","asTruthy","asFalse","asFalsy","asEither","Cache","onMiss","onFailure","getDeferred","deleteExpired","subtractPoint","normalizePoint","findCorners","findLines","dx","dy","raycastCircle","crypto","isBytes","isView","anumber","abytes","lengths","ahash","outputLen","blockLen","aexists","instance","checkFinished","destroyed","finished","aoutput","u32","arr","Uint32Array","clean","arrays","createView","rotr","word","byteSwap","swap32IfBE","hasHexBuiltin","toHex","fromHex","hexes","bytesToHex","hex","asciis","asciiToBase16","hexToBytes","hl","al","ai","hi","n1","n2","char","toBytes","TextEncoder","utf8ToBytes","res","pad","Hash$1","createHasher","hashCons","hashC","msg","update","digest","tmp","randomBytes","bytesLength","getRandomValues","Chi","Maj","HashMD","Hash","padOffset","isLE","pos","view","take","dataView","roundClean","digestInto","_32n","_u32_max","wh","wl","oview","outLen","state","destroy","_cloneInto","to","SHA256_IV","SHA256_K","SHA256_W","W15","W2","s0","s1","T1","T2","sha256","SHA256","_key","iHash","oHash","buf","getPrototypeOf","hmac","HMAC","_0n","_1n","_abool2","title","_abytes2","isBytes_","needsLen","numberToHexUnpadded","num","hexToNumber","bytesToNumberBE","bytesToHex_","bytesToNumberLE","abytes_","reverse","numberToBytesBE","hexToBytes_","numberToBytesLE","ensureBytes","expectedLength","isPosBig","aInRange","inRange","bitLen","bitMask","_validateObject","fields","optFields","checkField","fieldName","expectedType","isOpt","memoized","computed","_2n","_3n","_4n","_5n","_7n","_8n","_9n","_16n","pow2","power","modulo","assertIsSquare","Fp","eql","sqr","sqrt3mod4","p1div4","ORDER","pow","sqrt5mod8","p5div8","mul","nv","ONE","tonelliShanks","_Fp","Field","FpLegendre","cc","Q1div2","is0","ZERO","t_tmp","exponent","FpSqrt","Fp_","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","nLength","nBitLength","_nBitLength","nByteLength","bitLenOrOpts","_nbitLength","_sqrt","allowedLengths","modFromBytes","_opts","BITS","BYTES","sqrtP","MASK","isValid","isValidNot0","isOdd","lhs","rhs","FpPow","div","sqrN","addN","subN","mulN","fromBytes","skipValidation","padded","scalar","invertBatch","lst","getFieldBytesLength","fieldOrder","bitLength","getMinHashLength","negateCt","condition","negate","normalizeZ","points","invertedZs","fromAffine","toAffine","validateW","bits","calcWOpts","scalarBits","maxNumber","windows","windowSize","shiftBy","calcOffsets","window","wOpts","wbits","nextN","offsetStart","abs","isZero","isNeg","isNegF","offsetF","pointPrecomputes","pointWindowSizes","getW","assert0","wNAF$1","Point","BASE","Fn","_unsafeLadder","elm","double","precomputeWindow","base","wNAF","precomputes","wo","wNAFUnsafe","getPrecomputes","comp","unsafe","prev","createCache","hasCache","pippenger","fieldN","scalars","validateMSMPoints","validateMSMScalars","plength","slength","buckets","resI","sumI","createField","order","validateField","divNearest","den","validateSigFormat","validateSigOpts","optsn","optName","abool","lowS","prehash","DERErr","DER","_tlv","tag","dataLen","lenLen","lengthBytes","_int","toSig","tlv","seqBytes","seqLeftBytes","rBytes","rLeftBytes","sBytes","sLeftBytes","hexFromSig","sig","seq","_normFnElement","weierstrassN","extraOpts","validated","CURVE","curveOpts","FpFnLE","_createCurveFields","cofactor","CURVE_ORDER","allowInfinityPoint","clearCofactor","isTorsionFree","endo","wrapPrivateKey","beta","basises","getWLengths","assertCompressionIsSupported","encodePoint","_c","isCompressed","bx","pprefix","decodePoint","publicKey","publicKeyUncompressed","uncomp","head","tail","isValidXY","y2","weierstrassEquation","sqrtError","err","x2","x3","Gx","Gy","_4a3","_27b2","acoord","banZero","aprjpoint","splitEndoScalarN","basis","a1","b1","a2","b2","k1","k2","k1neg","k2neg","MAX_NUM","_splitEndoScalar","toAffineMemo","iz","zz","assertValidMemo","finishEndo","endoBeta","k1p","k2p","assertValidity","precompute","isLazy","wnaf","hasEvenY","X1","Y1","Z1","X2","Y2","Z2","U1","U2","b3","X3","Y3","Z3","t0","t1","t2","t3","t4","t5","fake","k1f","k2f","multiplyUnsafe","sc","p1","p2","mulEndoUnsafe","multiplyAndAddUnsafe","invertedZ","isSmallOrder","px","py","pz","toRawBytes","_setWindowSize","msm","fromPrivateKey","privateKey","secretKey","publicKeyHasPrefix","signature","ecdh","ecdhOpts","randomBytes_","randomBytesWeb","seed","isValidSecretKey","randomSecretKey","fieldLen","minLen","reduced","mapHashToField","getPublicKey","isProbPub","utils","isValidPublicKey","isValidPrivateKey","randomPrivateKey","normPrivateKeyToScalar","getSharedSecret","secretKeyA","publicKeyB","keygen","ecdsa","ecdsaOpts","bits2int","bits2int_modN","msgs","nobleHmac","fnBits","defaultSigOpts","extraEntropy","defaultSigOpts_format","isBiggerThanHalfOrder","validateRS","Signature","recovery","recid","validateSigLength","addRecoveryBit","messageHash","FIELD_ORDER","rec","radj","ir","u1","u2","hasHighS","fromCompact","fromDER","normalizeS","toDERRawBytes","toDERHex","toCompactRawBytes","toCompactHex","delta","ORDER_MASK","int2octets","validateMsgAndHash","sign","k2sig","h1int","seedArgs","kBytes","ik","normS","prepSig","drbg","hashLen","qByteLen","hmacFn","u8n","u8of","reset","reseed","gen","sl","concatBytes_","pred","createHmacDrbg","verify","sg","isHex","isObj","derError","tryParsingSig","is","_ecdsa_legacy_opts_to_new","allowedPrivateKeyLengths","_weierstrass_legacy_opts_to_new","weierstrass","_ecdsa","ProjectivePoint","_ecdsa_new_output_to_legacy","secp256k1_CURVE","secp256k1_ENDO","Fpk1","_6n","_11n","_22n","_23n","_44n","_88n","b6","b9","b11","b22","b44","b88","b176","b220","b223","secp256k1","curveDef","defHash","createCurve","partitions","one","endian","baseChars","base32","baseString","character","blocks","block","paddingByte","padding","lastBlock","thetaC0","thetaC1","thetaC2","thetaC3","thetaC4","thetaC5","thetaC6","thetaC7","thetaC8","thetaC9","thetaD0","thetaD1","thetaD2","thetaD3","thetaD4","thetaD5","thetaD6","thetaD7","thetaD8","thetaD9","piResult0","piResult1","piResult20","piResult21","piResult40","piResult41","piResult10","piResult11","piResult30","piResult31","piResult32","piResult33","piResult2","piResult3","piResult22","piResult23","piResult42","piResult43","piResult12","piResult13","piResult14","piResult15","piResult34","piResult35","piResult4","piResult5","piResult24","piResult25","piResult44","piResult45","piResult46","piResult47","piResult16","piResult17","piResult36","piResult37","piResult6","piResult7","piResult26","piResult27","piResult28","piResult29","piResult48","piResult49","piResult18","piResult19","piResult38","piResult39","piResult8","piResult9","numbers","DECODER","TextDecoder","ENCODER","HEX_PATTERN","Bytes","_Bytes","unknownInput","toUint8Array","totalLength","fromUtf8","utf8","fromSlice","toBase64","toBase32","toUtf8","BatchId","static","EthAddress","toChecksum","addressBytes","MAX_UINT64","FeedIndex","_FeedIndex","fromBigInt","toBigInt","ENCODER2","Identifier","_Identifier","fromString","PeerAddress","secp256k12","PublicKey","uncompressed","compressed","toCompressedUint8Array","toCompressedHex","ENCODER3","ETHEREUM_SIGNED_MESSAGE_PREFIX","personalSignDigest","_Signature","LENGTH","expectedAddress","PrivateKey","Reference","_Reference","cid","codec","decodeCid","toCid","Span","_Span","ENCODER4","Topic","_Topic","TransactionId","reader","encryptSegments","initCtr","ctr","segKey","MAX_CHUNK_PAYLOAD_SIZE","calculateChunkAddress","chunkContent","rootHash","segments","calculateBmtRootHash","SOC_SIGNATURE_OFFSET","SOC_SPAN_OFFSET","SOC_PAYLOAD_OFFSET","ETHEREUM_SIGNED_MESSAGE_PREFIX2","socSigningDigest","identifier","cacAddress","toSign","makeSOCAddress","owner","ownerAddress","makeSingleOwnerChunk","chunk","signSoc","unmarshalSingleOwnerChunk","recoverSocOwner","socAddress","makeContentAddressedChunk","rawPayload","typedSpan","toSingleOwnerChunk","unmarshalContentAddressedChunk","ChunkBuilder","encryptedHash","encSpan","spanBytes","encryptSpan","encPayload","encryptData","ChunkSplitter","_ChunkSplitter","refSize","encrypted","maxShards","pending","onBatch","onIntermediateChunk","hasParity","pendingEntries","tree","encryptedRoot","level","spanIncrement","written","sealParities","originalSpan","ref","entry","flushBatch","parities","batch","ENCODER5","DECODER2","PATH_SEPARATOR","VERSION_02_HASH","byteIndex","bitIndex","MantarayNode","_MantarayNode","obfuscationKey","selfAddress","targetAddress","metadata","encrypt","fullPath","fullPathString","marshal","fork","node","calculateSelfAddress","hasEntry","refBytesSize","forkBitmap","unmarshalFromData","decrypted","forkRefSize","Fork","unmarshal","addFork","reference","tip","isLast","bestMatch","matchedPath","findClosest","remainingPath","newFork","existing","removeFork","saveRecursively","splitter","rootChunk","encryptionKey","closest","matched","collect","nodes","collectAndMap","determineType","nullAddress","ENCODER6","DECODER3","_Fork","commonPart","remainingB","remainingA","newAFork","newBFork","metadataBytes","multiple","remainder","addressLength","prefixLength","isType","metadataLength","getStampUsage","utilization","depth","bucketDepth","getStampTheoreticalBytes","parseSizeToBytes","kB","MB","GB","TB","PB","DEFAULT_EFFECTIVE_SIZE_BREAKPOINTS","ENCRYPTION_OFF_BREAKPOINTS","ENCRYPTION_ON_BREAKPOINTS","getStampEffectiveBytes","encryption","erasureCodeLevel","breakpoints","batchDepth","getDepthForSize","effectiveVolume","convertEnvelopeToMarshaledStamp","envelope","batchId","timestamp","marshalStamp","stamp","signer","slot","timestampMs","bucket","issuer","$ZodAsyncError","$ZodEncodeError","__zod_globalConfig","getEnumValues","explicitlyAborted","_inst","_continue","_input","httpProtocol","ratio","roundedRatio","tolerance","EPSILON","util.explicitlyAborted","regexes.httpProtocol","$ZodBigInt","regexes.bigint","$ZodAny","isOptionalIn","isOptionalOut","isPresent","unrecKeys","unrecIssue","bothKeys","$ZodTuple","items","optinStart","getTupleOptStart","optoutStart","itemResults","rr","handleTupleResult","handleTupleResults","outKey","propertyIsEnumerable","retryResult","mode","fallback","$ZodExactOptional","$ZodFunction","_def","implement","func","parsedArgs","implementAsync","hasPromiseOutput","initializeContext","processors","metadataRegistry","unrepresentable","override","io","seen","reused","external","schemaPath","count","cycle","overrideSchema","toJSONSchema","processJSONSchema","_json","processor","isParent","isTransforming","examples","_prefault","extractDefs","idToSchema","extractToDef","$ref","defId","defsSegment","externalId","registry","uriGenerator","uri","defUriPrefix","makeURI","ext","flattenRef","zodSchema","_cached","refSeen","refSchema","allOf","parentSeen","jsonSchema","$schema","$id","rootMetaId","$defs","definitions","finalized","createStandardJSONSchemaMethod","_err","_schema","libraryOptions","formatMap","json_string","optionalProcessor","fullpath","_installedGroups","_installLazyMethods","methods","installed","bound","createToJSONSchemaMethod","chks","exactOptional","ZodExactOptional","json","regexes","processors.stringProcessor","exMin","exMax","legacy","processors.numberProcessor","processors.booleanProcessor","ZodBigInt","core.$ZodBigInt","processors.bigintProcessor","core._bigint","ZodAny","core.$ZodAny","any","not","processors.neverProcessor","minItems","maxItems","processors.arrayProcessor","properties","allKeys","requiredKeys","additionalProperties","processors.objectProcessor","existingShape","isExclusive","oneOf","anyOf","processors.unionProcessor","isSimpleIntersection","processors.intersectionProcessor","ZodTuple","core.$ZodTuple","prefixPath","restPath","prefixItems","additionalItems","processors.tupleProcessor","tuple","_paramsOrRest","hasRest","keyBag","valueSchema","patternProperties","propertyNames","keyValues","validKeyValues","processors.recordProcessor","processors.enumProcessor","vals","const","processors.literalProcessor","processors.transformProcessor","processors.optionalProcessor","core.$ZodExactOptional","inner","processors.nullableProcessor","processors.defaultProcessor","processors.prefaultProcessor","processors.nonoptionalProcessor","processors.catchProcessor","inIsTransform","processors.pipeProcessor","readOnly","processors.readonlyProcessor","ZodFunction","core.$ZodFunction","processors.functionProcessor","processors.customProcessor","core._coercedNumber","schemas.ZodNumber","PostEnvelopeBodyResponse","z.object","z.string","plural","msAbs","isPlural","long","fmtLong","fmtShort","formatArgs","useColors","namespace","module","humanize","diff","color","lastC","save","namespaces","storage","setItem","removeItem","load","getItem","env","DEBUG","__nwjs","document","documentElement","style","WebkitAppearance","console","firebug","exception","table","localStorage","localstorage","warned","warn","colors","log","debug","common","createDebug","prevTime","namespacesCache","enabledCache","enableOverride","enabled","self","formatter","formatters","selectColor","delimiter","newDebug","matchesTemplate","search","template","searchIndex","templateIndex","starIndex","matchIndex","disable","names","skips","enable","ns","skip","require$$0","_debug","DEFAULT_HTTP_CONFIG","headers","accept","http","rawData","requestConfig","signal","body","duplex","ct","Blob","attachBody","baseURL","qs","URLSearchParams","method","onRequest","failedAttempts","fetch","ok","throwHttpError","responseType","toBeeResponse","BeeResponseError","endlesslyRetry","toBeeError","errBody","bodyMsg","statusText","arrayBuffer","text","blob","raw","RchashResponse","durationSeconds","z.number","UploadResultBody","BeeError","BeeArgumentError","responseBody","response","Duration","fromMilliseconds","fromSeconds","fromHours","fromDays","fromWeeks","fromYears","fromEndDate","endDate","startDate","parseFromString","toSeconds","toHours","toDays","toWeeks","toYears","toEndDate","BZZ","DIGITS","fromPLUR","plur","float","toPLURString","toPLURBigInt","digits","plus","minus","divide","eq","exchangeToDAI","daiPerBzz","DAI","fromWei","toWeiBigInt","wei","toWeiString","exchangeToBZZ","isFile","file","File","stream","fileArrayBuffer","fr","FileReader","onload","readAsArrayBuffer","BeeModes","toBeeMode","FULL","LIGHT","ULTRA_LIGHT","DEV","CHUNK_SIZE","SECTION_SIZE","STAMPS_DEPTH_MIN","STAMPS_DEPTH_MAX","RedundancyLevel","RedundancyStrategy","OFF","MEDIUM","STRONG","INSANE","PARANOID","fnField","z.any","z.function","integerStringField","z.bigint","nonNegativeIntegerStringField","BeeRequestOptionsSchema","timeout","z.record","httpAgent","z.unknown","httpsAgent","z.boolean","DownloadOptionsSchema","redundancyStrategy","timeoutMs","actPublisher","z.optional","actHistoryAddress","actTimestamp","z.coerce.number","UploadOptionsSchema","act","pin","RedundantUploadOptionsSchema","redundancyLevel","FileUploadOptionsSchema","contentType","CollectionUploadOptionsSchema","errorDocument","indexDocument","TagInputSchema","uid","TagUidSchema","PssMessageHandlerSchema","onMessage","onClose","GsocMessageHandlerSchema","PostageBatchOptionsSchema","gasPrice","immutableFlag","label","waitForUsable","waitForUsableTimeout","TransactionOptionsSchema","gasLimit","AllTagsOptionsSchema","limit","asNumberString","assertData","assertFileData","makeTagUid","tagUid","normalizeBatchTTL","batchTTL","PeerBalanceSchema","peer","balance","GetAllBalancesResponse","balances","z.array","GetPeerBalanceResponse","ChequeSchema","beneficiary","chequebook","payout","CashoutResultSchema","recipient","lastPayout","bounced","GetChequebookAddressResponse","chequebookAddress","GetChequebookBalanceResponse","availableBalance","totalBalance","GetLastCashoutActionResponse","uncashedAmount","transactionHash","lastCashedCheque","GetLastChequesForPeerResponse","lastreceived","lastsent","GetLastChequesResponse","lastcheques","TransactionHashResponse","PeerSchema","fullNode","BinSchema","population","connected","connectedPeers","disconnectedPeers","BinRecord","GetNodeAddressesResponse","overlay","underlay","ethereum","pssPublicKey","GetPeersResponse","peers","GetBlocklistResponse","GetTopologyResponse","baseAddr","nnLowWatermark","reachability","networkAvailability","bins","GetDebugStatusResponse","beeMode","reserveSize","reserveSizeWithinRadius","pullsyncRate","storageRadius","neighborhoodSize","batchCommitment","isReachable","lastSyncedBlock","committedDepth","isWarmingUp","GetHealthResponse","apiVersion","GetReadinessResponse","z.enum","GetNodeInfoResponse","chequebookEnabled","swapEnabled","IsGatewayResponse","gateway","IsRetrievableResponse","isRetrievable","GetGranteesBodyResponse","GranteesResultBodyResponse","historyref","ws","WebSocket","MozWebSocket","global","WebSocket$1","GetAllPinsResponse","references","SettlementSchema","sent","GetSettlementsResponse","GetAllSettlementsResponse","totalSent","totalReceived","settlements","GetStakeResponse","stakedAmount","GetWithdrawableStakeResponse","withdrawableAmount","TxHashResponse","txHash","GetRedistributionStateResponse","minimumGasFunds","hasSufficientFunds","isFrozen","isFullySynced","phase","lastWonRound","lastPlayedRound","lastFrozenRound","lastSelectedRound","lastSampleDurationSeconds","reward","fees","isHealthy","RawPostageBatchSchema","batchID","utilizationRatio","usable","amount","blockNumber","GetGlobalPostageBatchResponse","immutable","GetGlobalPostageBatchesResponse","batches","GetAllPostageBatchesResponse","stamps","GetPostageBatchResponse","GetPostageBatchBucketsResponse","bucketUpperBound","bucketID","collisions","BatchIdResponse","NODE_DEBUG","debug_1","constants","MAX_LENGTH","MAX_SAFE_COMPONENT_LENGTH","MAX_SAFE_BUILD_LENGTH","RELEASE_TYPES","SEMVER_SPEC_VERSION","FLAG_INCLUDE_PRERELEASE","FLAG_LOOSE","require$$1","re","safeRe","src","safeSrc","LETTERDASHNUMBER","safeRegexReplacements","createToken","isGlobal","makeSafeRegex","NUMERICIDENTIFIER","NUMERICIDENTIFIERLOOSE","NONNUMERICIDENTIFIER","PRERELEASEIDENTIFIER","PRERELEASEIDENTIFIERLOOSE","BUILDIDENTIFIER","MAINVERSION","PRERELEASE","BUILD","FULLPLAIN","MAINVERSIONLOOSE","PRERELEASELOOSE","LOOSEPLAIN","XRANGEIDENTIFIER","XRANGEIDENTIFIERLOOSE","GTLT","XRANGEPLAIN","XRANGEPLAINLOOSE","COERCEPLAIN","COERCE","COERCEFULL","LONETILDE","tildeTrimReplace","LONECARET","caretTrimReplace","comparatorTrimReplace","require$$2","parseOptions","looseOption","emptyOpts","parseOptions_1","require$$3","compareIdentifiers","numeric","anum","bnum","identifiers","rcompareIdentifiers","require$$4","SemVer","includePrerelease","LOOSE","prerelease","compareMain","comparePre","compareBuild","inc","release","identifierBase","isPrereleaseIdentifier","prereleaseBase","semver","major_1","SUPPORTED_BEE_VERSION_EXACT","SUPPORTED_API_VERSION","GetReserveStateResponse","commitment","radius","reserveCapacityDoubling","GetChainStateResponse","chainTip","totalAmount","currentPrice","normalizeCurrentPrice","minimumValidityBlocks","GetWalletBalanceResponse","bzzBalance","nativeTokenBalance","chainID","chequebookContractAddress","walletAddress","WithdrawResponse","TagSchema","startedAt","stored","synced","GetAllTagsResponse","tags","TransactionInfoSchema","nonce","created","GetAllTransactionsResponse","pendingTransactions","GetTransactionResponse","NULL_ADDRESS","normalizeUrl","isHttpUrl","isBeeApiUrl","username","password","buildAuthUrl","baseUrl","icon","challenge","exists","u8a","wrapConstructor","SHA2","IV","hexByte","u8fr","validatorFns","function","stringOrUint8Array","validateObject","validators","optValidators","checkVal","legendreC","ge","validateBasic","curve","b2n","h2b","ut","_parseInt","rBytesLeft","shl","rhl","rl","weierstrassPoints","ut.validateObject","splitScalar","validatePointOpts","_isCompressed","ut.concatBytes","isWithinCurveOrder","assertGE","ut.bytesToHex","ut.bytesToNumberBE","mod.mod","assertPrjPoint","toInv","_WINDOW_SIZE","wNAFCached","unsafeLadder","f1p","f2p","constTimeNegate","ax","ay","_bits","offset1","offset2","cond1","cond2","precomputesMap","validateOpts","compressedLen","uncompressedLen","modN","invN","mod.invert","cat","numToNByteStr","ut.numberToBytesBE","slcNum","msgHash","ut.hexToBytes","mod.getMinHashLength","mod.mapHashToField","ut.bitMask","ent","defaultVerOpts","privateA","publicB","privKey","ut.createHmacDrbg","_sig","assertHash","assertExists","assertBytes","getHash","secp256k1P","secp256k1N","redef","lastMultiplied","POW_2_128","U32_MASK64","fromBig","le","Ah","Al","SHA3_PI","SHA3_ROTL","_SHA3_IOTA","_256n","_0x71n","SHA3_IOTA_H","SHA3_IOTA_L","rotlH","rotlBH","rotlSH","rotlL","rotlBL","rotlSL","Keccak","enableXOF","rounds","posOut","state32","keccak","idx1","idx0","B0","B1","Th","Tl","curH","curL","keccakP","finish","writeInto","bufferOut","xofInto","xof","keccak_256","hexString","hexAddress","SIGNATURE_HEX_PATTERN","personalMessageHash","whole","personalSign","recoverPersonalSigner","subject","compact","parsed","WALLET_LINK_TITLE","WALLET_LINK_STATEMENT","ACCOUNT_PREFIX","WALLET_PREFIX","DATE_PREFIX","ADDRESS_PATTERN","ADDRESS_INPUT_PATTERN","WALLET_LINK_SIGNATURE_PATTERN","ISO_UTC_PATTERN","normalizeAddress","recoverLinkSigner","buildWalletLinkMessage","account","wallet","parseWalletLinkMessage","statement","accountLine","walletLine","dateLine","canonicalDate","verifyWalletLink","link","walletSignature","accountSignature","countersignWalletLink","accountKey","DEFAULT_BEE_NODE_URL","DEFAULT_GNOSIS_RPC_URL","ReferenceSchema","z\n .string","BatchIdSchema","AddressSchema","PrivateKeySchema","CompressedPublicKeySchema","EncryptionKeySchema","IdentifierSchema","SignatureSchema","ChunkAddressSchema","MarshaledStampSchema","TimestampSchema","z.preprocess","z.union","FeedIndexSchema","StoredEthAddress","StoredBatchId","BeeBatchId","StoredPrivateKey","BeePrivateKey","StoredBigInt","DeviceSchemaV1","deviceId","createdAt","lastSignedInAt","nameUpdatedAt","removedAt","ChatBindingSchema","WalletLinkSchema","AccountSettingsSchema","appSessionDuration","NO_POSTAGE_STAMP","ConnectedAppSchemaV1","appUrl","appName","lastConnectedAt","appIcon","appDescription","connectedUntil","appSecret","postageStampBatchID","z\n .union","z.literal","postageStampBatchIDAt","stampPending","revokedAt","disconnectedAt","chatBinding","PostageStampSchemaV1","signerKey","updatedAt","deletedAt","AccessMethodSchemaV1","z.discriminatedUnion","credentialId","encryptionSalt","kdfSalt","kdfIterations","LocalVaultSchemaV1","access","encryptedSeed","SyncedAccountSchemaV1","derivationKey","defaultPostageStampBatchID","devices","connectedApps","postageStamps","settings","walletLink","accountNameAt","defaultStampAt","settingsAt","walletLinkAt","lastModified","partitionCount","SignedInAccountSchemaV1","signedOutAt","core._undefined","z.undefined","LocalAccountSchemaV1","encryptedState","storageWarning","soonestDriveExpiry","AccountMetadataSchemaV1","accountName","AccountStateSnapshotSchemaV1","accountId","isSignedOutAccount","PartitionLockGenerationSchemaV1","tiebreaker","PartitionLockPayloadSchemaV1","holderDeviceId","generation","acquiredAt","leasedUntil","PartitionIntentPayloadSchemaV1","NetworkSettingsSchemaV1","beeNodeUrl","gnosisRpcUrl","BeeApiUrlSchema","BucketUpdateSchema","UtilizationUpdateMessageSchema","STORAGE_KEY_ACCOUNTS","STORAGE_KEY_NETWORK_SETTINGS","STORAGE_CHALLENGE_KEY","STORAGE_KEY_SITE_ALLOW_LIST","leaseCacheStorageKey","appStampUsageStorageKey","appOrigin","socRestampSlotsStorageKey","partitionSessionStorageKey","parentOrigin","UploadOptionsObjectSchema","encryptManifest","ActPublisherSchema","ActUploadOptionsSchema","beeCompatible","publisher","RequestOptionsSchema","z\n .object","z.instanceof","UploadFilesOptionsSchema","CollectionFileSchema","CollectionEntrySchema","UploadResultSchema","PostageBatchSchema","authenticated","beeApiUrl","UploadModeSchema","UploadUnavailableReasonSchema","AvatarSchema","ConnectionIdentitySchema","sharingPublicKey","postageSignerAddress","avatar","canUpload","storagePartitioned","uploadMode","uploadUnavailableReason","identity","appKey","z\n .object","postageBatchId","AppMetadataSchema","z\n .string","base64Match","ButtonActionSchema","LOOPBACK_HOSTS","ButtonFontFaceSchema","family","weight","ButtonConfigSchema","busyText","ariaLabel","disabled","busy","backgroundColor","borderRadius","borderColor","borderWidth","borderStyle","fontFamily","fontSize","fontWeight","fontFaces","z\n .array","ButtonWindowStateSchema","ButtonIdentifyMessageSchema","popupMode","ButtonUpdateMessageSchema","ButtonToParentMessageSchema","ConnectWindowOpenedMessageSchema","BUTTON_FRAME_LOADED","ParentIdentifyMessageSchema","requestId","subsidisedGatewayUrl","CheckAuthMessageSchema","DisconnectMessageSchema","UploadDataMessageSchema","requestOptions","enableProgress","useWebSocket","useWorkers","workerCount","DownloadDataMessageSchema","DeriveAppSecretMessageSchema","SetBeeApiUrlMessageSchema","GetChatKeyMessageSchema","StampChunkSignerSchema","z.strictObject","StampChunkRequestSchema","kind","StampChunkMessageSchema","UploadFileMessageSchema","DownloadFileMessageSchema","UploadFilesMessageSchema","files","ListFilesMessageSchema","UploadChunkMessageSchema","DownloadChunkMessageSchema","IsConnectedMessageSchema","GetNodeInfoMessageSchema","GsocMineMessageSchema","targetOverlay","GsocSendMessageSchema","SocUploadMessageSchema","SocRawUploadMessageSchema","SocDownloadMessageSchema","SocRawDownloadMessageSchema","SocGetOwnerMessageSchema","EpochFeedDownloadReferenceMessageSchema","topic","at","EpochHintsSchema","lastEpoch","lastTimestamp","ParentToIframeMessageSchema","hints","hasTimestamp","lookupTimeoutMs","feedType","uploadOptions","grantees","encryptedReference","historyReference","publisherPubKey","revokeGrantees","ProxyReadyMessageSchema","storageShared","InitErrorMessageSchema","AuthStatusResponseMessageSchema","DisconnectResponseMessageSchema","AuthSuccessMessageSchema","UploadDataResponseMessageSchema","DownloadDataResponseMessageSchema","DeriveAppSecretResponseMessageSchema","secret","GetChatKeyResponseMessageSchema","chatKey","SetBeeApiUrlResponseMessageSchema","StampChunkResponseMessageSchema","UploadFileResponseMessageSchema","DownloadFileResponseMessageSchema","UploadFilesResponseMessageSchema","ListFilesResponseMessageSchema","UploadChunkResponseMessageSchema","DownloadChunkResponseMessageSchema","UploadProgressMessageSchema","total","processed","SwarmIdErrorCodeSchema","IframeToParentMessageSchema","epoch","feedIndex","feedIndexNext","granteeListReference","actReference","postageBatch","AuthDataSchema","networkSettings","PartitionSessionSchemaV1","PopupToIframeMessageSchema","NEAR_WHITE","NEAR_BLACK","BRANDS","COLOR_PAIRS","DIRECTIONS","generatedAvatarSvg","sdbmHash","background","foreground","margin","cellSize","filled","GRID","pathData","cell","cellHash","neighbors","nextX","nextY","rotation","cx","cy","generatedAvatar","svg","TimeoutError","withTimeout","work","timer","reject","race","clearTimeout","sleep","withIdleTimeout","settled","keepAlive","started","MIN_PAYLOAD_SIZE","MAX_PAYLOAD_SIZE","SPAN_SIZE","UNENCRYPTED_REF_SIZE","DEFAULT_UPLOAD_CONCURRENCY","Encryption","keyLen","outLength","decrypt","inLength","transcrypt","ctrBytes","keyAndCtr","ctrHash","segmentKey","generateRandomKey","newSpanEncryption","newDataEncryption","DefaultChunkEncrypter","encryptChunk","chunkData","encryptedSpan","encryptedData","newChunkEncrypter","decryptChunkData","encryptedChunkData","decryptedSpan","decryptedData","currentLevel","nextLevel","combined","chunkHash","payloadBytes","spanOverride","makeEncryptedContentAddressedChunk","encrypter","readSpan","makeSocAddress","makeSingleOwnerChunkFromData","expectedOwner","cacData","IDENTIFIER_SIZE","recoveredOwner","rebuiltData","decryptChunk","SOC_HEADER_SIZE","extractReferences","totalSpan","isEncrypted","refs","maxRefs","expectedLeafChunks","numRefs","downloadAndProcessChunk","bee","addressHex","rawChunk","download","joinChunks","onChunkDownloaded","childRefs","batchResults","childRef","downloadDataWithChunkAPI","_options","onProgress","rootRef","refBytes","parseReference","downloadSOC","downloadEncryptedSOC","keyBytes","saveMantarayTreeRecursively","uploadFn","isRoot","rootReference","saveMantarayTree","shouldEncrypt","encryptedChunk","encryptedRef","NOT_A_MANIFEST_MESSAGES","loadMantarayTreeWithChunkAPI","rootData","unmarshalRootManifest","loadRecursively","childData","childNode","nestedFork","GNOSIS_BLOCK_TIME","BLOCKS_PER_DAY","SECONDS_PER_DAY","SECONDS_PER_MONTH","fetchSwarmPrice","pricePerGBPerMonth","calculateTTLSeconds","amountBigInt","perChunkPerMonthCost","bzz","unsigned","intPart","decPart","paddedDec","magnitude","bzzToPlur","formatTTL","ttlSeconds","calculateStampAmountForDays","fetchBatchDetails","beeUrl","fetchBatchTTL","CHAIN_READ_TIMEOUT_MS","defaultLabel","rpcUrl","isEnvelope","BodyTooLongError","checkedResult","requireValue","postJsonRpc","controller","AbortController","deadlineOr","checkStatus","maxBodyBytes","maxBytes","getReader","done","cancel","readBoundedText","jsonRpcCall","jsonrpc","jsonRpcBatch","requests","request","malformed","SWARM_ENCRYPTION_LABEL","POSTAGE_SIGNER_LABEL","BACKUP_KEY_LABEL","ACT_SHARING_LABEL","deriveSecret","parentKey","cryptoKey","subtle","importKey","deriveSecretSync","deriveAesGcmKey","secretHex","keyHex","deriveAccountDerivationKey","accountMasterKey","deriveSwarmEncryptionKey","derivePostageSignerKey","derivePostageSignerKeySync","deriveSharingKey","deriveChatKey","derive","candidate","firstValidPrivateKey","CHAT_BINDING_TITLE","SITE_PREFIX","CHAT_ADDRESS_PREFIX","CHAT_ADDRESS_PATTERN","DNS_HOST_PATTERN","LOCAL_HOSTS","isCleanSiteOrigin","secure","localHttp","allowLocalHttp","host","requireSite","site","buildChatBindingMessage","chatAddress","parseChatBindingMessage","siteLine","chatLine","siteChatAddress","createChatBinding","verifyChatBinding","binding","acceptedChatBinding","verified","onlySiteChatBinding","apps","app","_dropped","MERGE_SITE_OPTIONS","signedAt","signedByAccountForSite","newerChatBinding","firstAccepted"],"mappings":"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ACL,CAAC,GAAI,aACL,CAAC,GAAI,WACL,CAAC,GAAI,WACL,CAAC,GAAI,YACL,CAAC,GAAI,YACL,CAAC,GAAI,aACL,CAAC,GAAI,aACL,CAAC,GAAI,aACL,CAAC,GAAI,aACL,CAAC,GAAI,WACL,CAAC,GAAI,WACL,CAAC,GAAI,WACL,CAAC,GAAI,YACL,CAAC,GAAI,YACL,CAAC,GAAI,YACL,CAAC,GAAI,aACL,CAAC,GAAI,aACL,CAAC,GAAI,aACL,CAAC,GAAI,WACL,CAAC,GAAI,WACL,CAAC,GAAI,WACL,CAAC,GAAI,YAGP,CACE,CAAC,GAAI,YACL,CAAC,GAAI,WACL,CAAC,GAAI,aACL,CAAC,GAAI,aACL,CAAC,GAAI,WACL,CAAC,GAAI,WACL,CAAC,GAAI,YACL,CAAC,GAAI,YACL,CAAC,GAAI,YACL,CAAC,GAAI,aACL,CAAC,GAAI,aACL,CAAC,GAAI,aACL,CAAC,GAAI,WACL,CAAC,GAAI,WACL,CAAC,GAAI,WACL,CAAC,GAAI,YACL,CAAC,GAAI,YACL,CAAC,GAAI,YACL,CAAC,GAAI,aACL,CAAC,GAAI,aACL,CAAC,GAAI,aACL,CAAC,GAAI,WACL,CAAC,GAAI,WACL,CAAC,GAAI,WACL,CAAC,GAAI,YAGP,CACE,CAAC,GAAI,YACL,CAAC,GAAI,WACL,CAAC,GAAI,YACL,CAAC,GAAI,aACL,CAAC,GAAI,WACL,CAAC,GAAI,WACL,CAAC,GAAI,YACL,CAAC,GAAI,YACL,CAAC,GAAI,YACL,CAAC,GAAI,aACL,CAAC,GAAI,aACL,CAAC,GAAI,aACL,CAAC,GAAI,WACL,CAAC,GAAI,WACL,CAAC,GAAI,WACL,CAAC,GAAI,YACL,CAAC,GAAI,YACL,CAAC,GAAI,YACL,CAAC,GAAI,aACL,CAAC,GAAI,aACL,CAAC,GAAI,aACL,CAAC,GAAI,aACL,CAAC,GAAI,WACL,CAAC,GAAI,WACL,CAAC,GAAI,YAGP,CACE,CAAC,GAAI,YACL,CAAC,GAAI,WACL,CAAC,GAAI,YACL,CAAC,GAAI,aACL,CAAC,GAAI,WACL,CAAC,GAAI,WACL,CAAC,GAAI,Y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6BA,UAAUC,YAAcm9B,EAAIp9B,UAAUC,UAAUynB,cAAcze,MAAM,oBAAsBC,SAASk0B,EAAE,GAAI,KAAO,IAE/H,oBAAdp9B,WAA6BA,UAAUC,WAAaD,UAAUC,UAAUynB,cAAcze,MAAM,qBACtG,EAlIA0sB,EAAAitD,QA4OA,WACC,IAGC,OAAOgB,YACT,CAAG,MAAO5oF,GAGV,CACA,CArPkB6oF,GAClBluD,EAAAywB,QAAkB,MACjB,IAAI09B,GAAS,EAEb,MAAO,KACDA,IACJA,GAAS,EACTN,QAAQO,KAAK,0IAGf,EATiB,GAelBpuD,EAAAquD,OAAiB,CAChB,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAyFDruD,EAAAsuD,IAAcT,QAAQU,OAASV,QAAQS,KAAG,MAAa,GAkEvD5B,EAAA1sD,mBCkCAwuD,GA7RA,SAAelB,GAqDd,SAASmB,EAAYhC,GACpB,IAAIiC,EAEAC,EACAC,EAFAC,EAAiB,KAIrB,SAASN,KAASlhF,GAEjB,IAAKkhF,EAAMO,QACV,OAGD,MAAMC,EAAOR,EAGPv8E,EAAOtG,OAAO,IAAI2Y,MAClB8jB,EAAKn2B,GAAQ08E,GAAY18E,GAC/B+8E,EAAKnC,KAAOzkD,EACZ4mD,EAAK5xB,KAAOuxB,EACZK,EAAK/8E,KAAOA,EACZ08E,EAAW18E,EAEX3E,EAAK,GAAKohF,EAAY91E,OAAOtL,EAAK,IAEX,iBAAZA,EAAK,IAEfA,EAAKV,QAAQ,MAId,IAAIuS,EAAQ,EACZ7R,EAAK,GAAKA,EAAK,GA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","x_google_ignoreList":[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,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,88,89,90,91,92,93,94,95,96,97,98,99,100,101]}