@clef-sh/core 0.1.8 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["age-encryption-cjs:age-encryption", "../src/index.ts", "../src/types/index.ts", "../src/manifest/parser.ts", "../src/recipients/validator.ts", "../src/scanner/index.ts", "../src/scanner/patterns.ts", "../src/scanner/ignore.ts", "../src/matrix/manager.ts", "../src/pending/metadata.ts", "../src/schema/validator.ts", "../src/diff/engine.ts", "../src/bulk/ops.ts", "../src/git/integration.ts", "../src/sops/client.ts", "../src/sops/resolver.ts", "../src/sops/bundled.ts", "../src/dependencies/checker.ts", "../src/age/keygen.ts", "../src/lint/runner.ts", "../src/consumption/client.ts", "../src/import/index.ts", "../src/import/parsers.ts", "../src/recipients/index.ts", "../src/recipients/requests.ts", "../src/drift/detector.ts", "../src/report/generator.ts", "../src/report/sanitizer.ts", "../src/report/transformer.ts", "../src/report/cloud-client.ts", "../src/report/ci-context.ts", "../src/merge/driver.ts", "../src/service-identity/manager.ts", "../src/artifact/resolve.ts", "../src/artifact/packer.ts", "../src/artifact/signer.ts"],
4
- "sourcesContent": ["var __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod3) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod3);\n\n// <stdin>\nvar stdin_exports = {};\n__export(stdin_exports, {\n Decrypter: () => Decrypter,\n Encrypter: () => Encrypter,\n Stanza: () => Stanza,\n armor: () => armor_exports,\n generateHybridIdentity: () => generateHybridIdentity,\n generateIdentity: () => generateIdentity,\n generateX25519Identity: () => generateX25519Identity,\n identityToRecipient: () => identityToRecipient,\n webauthn: () => webauthn_exports\n});\nmodule.exports = __toCommonJS(stdin_exports);\n\n// ../../node_modules/age-encryption/node_modules/@noble/hashes/utils.js\nfunction isBytes(a) {\n return a instanceof Uint8Array || ArrayBuffer.isView(a) && a.constructor.name === \"Uint8Array\";\n}\nfunction anumber(n, title = \"\") {\n if (!Number.isSafeInteger(n) || n < 0) {\n const prefix2 = title && `\"${title}\" `;\n throw new Error(`${prefix2}expected integer >= 0, got ${n}`);\n }\n}\nfunction abytes(value, length, title = \"\") {\n const bytes = isBytes(value);\n const len = value?.length;\n const needsLen = length !== void 0;\n if (!bytes || needsLen && len !== length) {\n const prefix2 = title && `\"${title}\" `;\n const ofLen = needsLen ? ` of length ${length}` : \"\";\n const got = bytes ? `length=${len}` : `type=${typeof value}`;\n throw new Error(prefix2 + \"expected Uint8Array\" + ofLen + \", got \" + got);\n }\n return value;\n}\nfunction ahash(h) {\n if (typeof h !== \"function\" || typeof h.create !== \"function\")\n throw new Error(\"Hash must wrapped by utils.createHasher\");\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\nfunction 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}\nfunction aoutput(out, instance) {\n abytes(out, void 0, \"digestInto() output\");\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('\"digestInto() output\" expected to be of length >=' + min);\n }\n}\nfunction u32(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\nfunction clean(...arrays) {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\nfunction createView(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\nfunction rotr(word, shift) {\n return word << 32 - shift | word >>> shift;\n}\nfunction rotl(word, shift) {\n return word << shift | word >>> 32 - shift >>> 0;\n}\nvar isLE = /* @__PURE__ */ (() => new Uint8Array(new Uint32Array([287454020]).buffer)[0] === 68)();\nfunction byteSwap(word) {\n return word << 24 & 4278190080 | word << 8 & 16711680 | word >>> 8 & 65280 | word >>> 24 & 255;\n}\nfunction byteSwap32(arr) {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\nvar swap32IfBE = isLE ? (u) => u : byteSwap32;\nfunction utf8ToBytes(str) {\n if (typeof str !== \"string\")\n throw new Error(\"string expected\");\n return new Uint8Array(new TextEncoder().encode(str));\n}\nfunction kdfInputToBytes(data, errorTitle = \"\") {\n if (typeof data === \"string\")\n return utf8ToBytes(data);\n return abytes(data, void 0, errorTitle);\n}\nfunction checkOpts(defaults, opts2) {\n if (opts2 !== void 0 && {}.toString.call(opts2) !== \"[object Object]\")\n throw new Error(\"options must be object or undefined\");\n const merged = Object.assign(defaults, opts2);\n return merged;\n}\nfunction createHasher(hashCons, info = {}) {\n const hashC = (msg, opts2) => hashCons(opts2).update(msg).digest();\n const tmp = hashCons(void 0);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts2) => hashCons(opts2);\n Object.assign(hashC, info);\n return Object.freeze(hashC);\n}\nfunction randomBytes(bytesLength = 32) {\n const cr = typeof globalThis === \"object\" ? globalThis.crypto : null;\n if (typeof cr?.getRandomValues !== \"function\")\n throw new Error(\"crypto.getRandomValues must be defined\");\n return cr.getRandomValues(new Uint8Array(bytesLength));\n}\nvar oidNist = (suffix) => ({\n oid: Uint8Array.from([6, 9, 96, 134, 72, 1, 101, 3, 4, 2, suffix])\n});\n\n// ../../node_modules/age-encryption/node_modules/@noble/hashes/hmac.js\nvar _HMAC = class {\n oHash;\n iHash;\n blockLen;\n outputLen;\n finished = false;\n destroyed = false;\n constructor(hash, key) {\n ahash(hash);\n abytes(key, void 0, \"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 pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 54;\n this.iHash.update(pad);\n this.oHash = hash.create();\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 54 ^ 92;\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, \"output\");\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 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};\nvar hmac = (hash, key, message) => new _HMAC(hash, key).update(message).digest();\nhmac.create = (hash, key) => new _HMAC(hash, key);\n\n// ../../node_modules/age-encryption/node_modules/@noble/hashes/hkdf.js\nfunction extract(hash, ikm, salt) {\n ahash(hash);\n if (salt === void 0)\n salt = new Uint8Array(hash.outputLen);\n return hmac(hash, salt, ikm);\n}\nvar HKDF_COUNTER = /* @__PURE__ */ Uint8Array.of(0);\nvar EMPTY_BUFFER = /* @__PURE__ */ Uint8Array.of();\nfunction expand(hash, prk, info, length = 32) {\n ahash(hash);\n anumber(length, \"length\");\n const olen = hash.outputLen;\n if (length > 255 * olen)\n throw new Error(\"Length must be <= 255*HashLen\");\n const blocks = Math.ceil(length / olen);\n if (info === void 0)\n info = EMPTY_BUFFER;\n else\n abytes(info, void 0, \"info\");\n const okm = new Uint8Array(blocks * olen);\n const HMAC = hmac.create(hash, prk);\n const HMACTmp = HMAC._cloneInto();\n const T = new Uint8Array(HMAC.outputLen);\n for (let counter = 0; counter < blocks; counter++) {\n HKDF_COUNTER[0] = counter + 1;\n HMACTmp.update(counter === 0 ? EMPTY_BUFFER : T).update(info).update(HKDF_COUNTER).digestInto(T);\n okm.set(T, olen * counter);\n HMAC._cloneInto(HMACTmp);\n }\n HMAC.destroy();\n HMACTmp.destroy();\n clean(T, HKDF_COUNTER);\n return okm.slice(0, length);\n}\nvar hkdf = (hash, ikm, salt, info, length) => expand(hash, extract(hash, ikm, salt), info, length);\n\n// ../../node_modules/age-encryption/node_modules/@noble/hashes/_md.js\nfunction Chi(a, b, c) {\n return a & b ^ ~a & c;\n}\nfunction Maj(a, b, c) {\n return a & b ^ a & c ^ b & c;\n}\nvar HashMD = class {\n blockLen;\n outputLen;\n padOffset;\n isLE;\n // For partial updates less than block size\n buffer;\n view;\n finished = false;\n length = 0;\n pos = 0;\n destroyed = false;\n constructor(blockLen, outputLen, padOffset, isLE4) {\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE4;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data) {\n aexists(this);\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 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 const { buffer, view, blockLen, isLE: isLE4 } = this;\n let { pos } = this;\n buffer[pos++] = 128;\n clean(this.buffer.subarray(pos));\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n for (let i = pos; i < blockLen; i++)\n buffer[i] = 0;\n view.setBigUint64(blockLen - 8, BigInt(this.length * 8), isLE4);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n if (len % 4)\n throw new Error(\"_sha2: outputLen must 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], isLE4);\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 ||= 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};\nvar SHA256_IV = /* @__PURE__ */ Uint32Array.from([\n 1779033703,\n 3144134277,\n 1013904242,\n 2773480762,\n 1359893119,\n 2600822924,\n 528734635,\n 1541459225\n]);\n\n// ../../node_modules/age-encryption/node_modules/@noble/hashes/sha2.js\nvar SHA256_K = /* @__PURE__ */ Uint32Array.from([\n 1116352408,\n 1899447441,\n 3049323471,\n 3921009573,\n 961987163,\n 1508970993,\n 2453635748,\n 2870763221,\n 3624381080,\n 310598401,\n 607225278,\n 1426881987,\n 1925078388,\n 2162078206,\n 2614888103,\n 3248222580,\n 3835390401,\n 4022224774,\n 264347078,\n 604807628,\n 770255983,\n 1249150122,\n 1555081692,\n 1996064986,\n 2554220882,\n 2821834349,\n 2952996808,\n 3210313671,\n 3336571891,\n 3584528711,\n 113926993,\n 338241895,\n 666307205,\n 773529912,\n 1294757372,\n 1396182291,\n 1695183700,\n 1986661051,\n 2177026350,\n 2456956037,\n 2730485921,\n 2820302411,\n 3259730800,\n 3345764771,\n 3516065817,\n 3600352804,\n 4094571909,\n 275423344,\n 430227734,\n 506948616,\n 659060556,\n 883997877,\n 958139571,\n 1322822218,\n 1537002063,\n 1747873779,\n 1955562222,\n 2024104815,\n 2227730452,\n 2361852424,\n 2428436474,\n 2756734187,\n 3204031479,\n 3329325298\n]);\nvar SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nvar SHA2_32B = class extends HashMD {\n constructor(outputLen) {\n super(64, outputLen, 8, false);\n }\n get() {\n const { A, B, C, D, E, F: F2, G, H } = this;\n return [A, B, C, D, E, F2, G, H];\n }\n // prettier-ignore\n set(A, B, C, D, E, F2, 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 = F2 | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n process(view, offset) {\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 let { A, B, C, D, E, F: F2, 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, F2, 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 = F2;\n F2 = E;\n E = D + T1 | 0;\n D = C;\n C = B;\n B = A;\n A = T1 + T2 | 0;\n }\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 F2 = F2 + this.F | 0;\n G = G + this.G | 0;\n H = H + this.H | 0;\n this.set(A, B, C, D, E, F2, 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};\nvar _SHA256 = class extends SHA2_32B {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n A = SHA256_IV[0] | 0;\n B = SHA256_IV[1] | 0;\n C = SHA256_IV[2] | 0;\n D = SHA256_IV[3] | 0;\n E = SHA256_IV[4] | 0;\n F = SHA256_IV[5] | 0;\n G = SHA256_IV[6] | 0;\n H = SHA256_IV[7] | 0;\n constructor() {\n super(32);\n }\n};\nvar sha256 = /* @__PURE__ */ createHasher(\n () => new _SHA256(),\n /* @__PURE__ */ oidNist(1)\n);\n\n// ../../node_modules/@scure/base/index.js\nfunction isBytes2(a) {\n return a instanceof Uint8Array || ArrayBuffer.isView(a) && a.constructor.name === \"Uint8Array\";\n}\nfunction abytes2(b) {\n if (!isBytes2(b))\n throw new Error(\"Uint8Array expected\");\n}\nfunction isArrayOf(isString, arr) {\n if (!Array.isArray(arr))\n return false;\n if (arr.length === 0)\n return true;\n if (isString) {\n return arr.every((item) => typeof item === \"string\");\n } else {\n return arr.every((item) => Number.isSafeInteger(item));\n }\n}\nfunction afn(input) {\n if (typeof input !== \"function\")\n throw new Error(\"function expected\");\n return true;\n}\nfunction astr(label2, input) {\n if (typeof input !== \"string\")\n throw new Error(`${label2}: string expected`);\n return true;\n}\nfunction anumber2(n) {\n if (!Number.isSafeInteger(n))\n throw new Error(`invalid integer: ${n}`);\n}\nfunction aArr(input) {\n if (!Array.isArray(input))\n throw new Error(\"array expected\");\n}\nfunction astrArr(label2, input) {\n if (!isArrayOf(true, input))\n throw new Error(`${label2}: array of strings expected`);\n}\nfunction anumArr(label2, input) {\n if (!isArrayOf(false, input))\n throw new Error(`${label2}: array of numbers expected`);\n}\n// @__NO_SIDE_EFFECTS__\nfunction chain(...args) {\n const id = (a) => a;\n const wrap = (a, b) => (c) => a(b(c));\n const encode2 = args.map((x) => x.encode).reduceRight(wrap, id);\n const decode2 = args.map((x) => x.decode).reduce(wrap, id);\n return { encode: encode2, decode: decode2 };\n}\n// @__NO_SIDE_EFFECTS__\nfunction alphabet(letters) {\n const lettersA = typeof letters === \"string\" ? letters.split(\"\") : letters;\n const len = lettersA.length;\n astrArr(\"alphabet\", lettersA);\n const indexes = new Map(lettersA.map((l, i) => [l, i]));\n return {\n encode: (digits) => {\n aArr(digits);\n return digits.map((i) => {\n if (!Number.isSafeInteger(i) || i < 0 || i >= len)\n throw new Error(`alphabet.encode: digit index outside alphabet \"${i}\". Allowed: ${letters}`);\n return lettersA[i];\n });\n },\n decode: (input) => {\n aArr(input);\n return input.map((letter) => {\n astr(\"alphabet.decode\", letter);\n const i = indexes.get(letter);\n if (i === void 0)\n throw new Error(`Unknown letter: \"${letter}\". Allowed: ${letters}`);\n return i;\n });\n }\n };\n}\n// @__NO_SIDE_EFFECTS__\nfunction join(separator = \"\") {\n astr(\"join\", separator);\n return {\n encode: (from) => {\n astrArr(\"join.decode\", from);\n return from.join(separator);\n },\n decode: (to) => {\n astr(\"join.decode\", to);\n return to.split(separator);\n }\n };\n}\n// @__NO_SIDE_EFFECTS__\nfunction padding(bits, chr = \"=\") {\n anumber2(bits);\n astr(\"padding\", chr);\n return {\n encode(data) {\n astrArr(\"padding.encode\", data);\n while (data.length * bits % 8)\n data.push(chr);\n return data;\n },\n decode(input) {\n astrArr(\"padding.decode\", input);\n let end = input.length;\n if (end * bits % 8)\n throw new Error(\"padding: invalid, string should have whole number of bytes\");\n for (; end > 0 && input[end - 1] === chr; end--) {\n const last = end - 1;\n const byte = last * bits;\n if (byte % 8 === 0)\n throw new Error(\"padding: invalid, string has too much padding\");\n }\n return input.slice(0, end);\n }\n };\n}\nvar gcd = (a, b) => b === 0 ? a : gcd(b, a % b);\nvar radix2carry = /* @__NO_SIDE_EFFECTS__ */ (from, to) => from + (to - gcd(from, to));\nvar powers = /* @__PURE__ */ (() => {\n let res = [];\n for (let i = 0; i < 40; i++)\n res.push(2 ** i);\n return res;\n})();\nfunction convertRadix2(data, from, to, padding2) {\n aArr(data);\n if (from <= 0 || from > 32)\n throw new Error(`convertRadix2: wrong from=${from}`);\n if (to <= 0 || to > 32)\n throw new Error(`convertRadix2: wrong to=${to}`);\n if (/* @__PURE__ */ radix2carry(from, to) > 32) {\n throw new Error(`convertRadix2: carry overflow from=${from} to=${to} carryBits=${/* @__PURE__ */ radix2carry(from, to)}`);\n }\n let carry = 0;\n let pos = 0;\n const max = powers[from];\n const mask = powers[to] - 1;\n const res = [];\n for (const n of data) {\n anumber2(n);\n if (n >= max)\n throw new Error(`convertRadix2: invalid data word=${n} from=${from}`);\n carry = carry << from | n;\n if (pos + from > 32)\n throw new Error(`convertRadix2: carry overflow pos=${pos} from=${from}`);\n pos += from;\n for (; pos >= to; pos -= to)\n res.push((carry >> pos - to & mask) >>> 0);\n const pow = powers[pos];\n if (pow === void 0)\n throw new Error(\"invalid carry\");\n carry &= pow - 1;\n }\n carry = carry << to - pos & mask;\n if (!padding2 && pos >= from)\n throw new Error(\"Excess padding\");\n if (!padding2 && carry > 0)\n throw new Error(`Non-zero padding: ${carry}`);\n if (padding2 && pos > 0)\n res.push(carry >>> 0);\n return res;\n}\n// @__NO_SIDE_EFFECTS__\nfunction radix2(bits, revPadding = false) {\n anumber2(bits);\n if (bits <= 0 || bits > 32)\n throw new Error(\"radix2: bits should be in (0..32]\");\n if (/* @__PURE__ */ radix2carry(8, bits) > 32 || /* @__PURE__ */ radix2carry(bits, 8) > 32)\n throw new Error(\"radix2: carry overflow\");\n return {\n encode: (bytes) => {\n if (!isBytes2(bytes))\n throw new Error(\"radix2.encode input should be Uint8Array\");\n return convertRadix2(Array.from(bytes), 8, bits, !revPadding);\n },\n decode: (digits) => {\n anumArr(\"radix2.decode\", digits);\n return Uint8Array.from(convertRadix2(digits, bits, 8, revPadding));\n }\n };\n}\nfunction unsafeWrapper(fn) {\n afn(fn);\n return function(...args) {\n try {\n return fn.apply(null, args);\n } catch (e) {\n }\n };\n}\nvar hasBase64Builtin = /* @__PURE__ */ (() => typeof Uint8Array.from([]).toBase64 === \"function\" && typeof Uint8Array.fromBase64 === \"function\")();\nvar decodeBase64Builtin = (s, isUrl) => {\n astr(\"base64\", s);\n const re = isUrl ? /^[A-Za-z0-9=_-]+$/ : /^[A-Za-z0-9=+/]+$/;\n const alphabet2 = isUrl ? \"base64url\" : \"base64\";\n if (s.length > 0 && !re.test(s))\n throw new Error(\"invalid base64\");\n return Uint8Array.fromBase64(s, { alphabet: alphabet2, lastChunkHandling: \"strict\" });\n};\nvar base64 = hasBase64Builtin ? {\n encode(b) {\n abytes2(b);\n return b.toBase64();\n },\n decode(s) {\n return decodeBase64Builtin(s, false);\n }\n} : /* @__PURE__ */ chain(/* @__PURE__ */ radix2(6), /* @__PURE__ */ alphabet(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\"), /* @__PURE__ */ padding(6), /* @__PURE__ */ join(\"\"));\nvar base64nopad = /* @__PURE__ */ chain(/* @__PURE__ */ radix2(6), /* @__PURE__ */ alphabet(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\"), /* @__PURE__ */ join(\"\"));\nvar BECH_ALPHABET = /* @__PURE__ */ chain(/* @__PURE__ */ alphabet(\"qpzry9x8gf2tvdw0s3jn54khce6mua7l\"), /* @__PURE__ */ join(\"\"));\nvar POLYMOD_GENERATORS = [996825010, 642813549, 513874426, 1027748829, 705979059];\nfunction bech32Polymod(pre) {\n const b = pre >> 25;\n let chk = (pre & 33554431) << 5;\n for (let i = 0; i < POLYMOD_GENERATORS.length; i++) {\n if ((b >> i & 1) === 1)\n chk ^= POLYMOD_GENERATORS[i];\n }\n return chk;\n}\nfunction bechChecksum(prefix2, words, encodingConst = 1) {\n const len = prefix2.length;\n let chk = 1;\n for (let i = 0; i < len; i++) {\n const c = prefix2.charCodeAt(i);\n if (c < 33 || c > 126)\n throw new Error(`Invalid prefix (${prefix2})`);\n chk = bech32Polymod(chk) ^ c >> 5;\n }\n chk = bech32Polymod(chk);\n for (let i = 0; i < len; i++)\n chk = bech32Polymod(chk) ^ prefix2.charCodeAt(i) & 31;\n for (let v of words)\n chk = bech32Polymod(chk) ^ v;\n for (let i = 0; i < 6; i++)\n chk = bech32Polymod(chk);\n chk ^= encodingConst;\n return BECH_ALPHABET.encode(convertRadix2([chk % powers[30]], 30, 5, false));\n}\n// @__NO_SIDE_EFFECTS__\nfunction genBech32(encoding) {\n const ENCODING_CONST = encoding === \"bech32\" ? 1 : 734539939;\n const _words = /* @__PURE__ */ radix2(5);\n const fromWords = _words.decode;\n const toWords = _words.encode;\n const fromWordsUnsafe = unsafeWrapper(fromWords);\n function encode2(prefix2, words, limit = 90) {\n astr(\"bech32.encode prefix\", prefix2);\n if (isBytes2(words))\n words = Array.from(words);\n anumArr(\"bech32.encode\", words);\n const plen = prefix2.length;\n if (plen === 0)\n throw new TypeError(`Invalid prefix length ${plen}`);\n const actualLength = plen + 7 + words.length;\n if (limit !== false && actualLength > limit)\n throw new TypeError(`Length ${actualLength} exceeds limit ${limit}`);\n const lowered = prefix2.toLowerCase();\n const sum = bechChecksum(lowered, words, ENCODING_CONST);\n return `${lowered}1${BECH_ALPHABET.encode(words)}${sum}`;\n }\n function decode2(str, limit = 90) {\n astr(\"bech32.decode input\", str);\n const slen = str.length;\n if (slen < 8 || limit !== false && slen > limit)\n throw new TypeError(`invalid string length: ${slen} (${str}). Expected (8..${limit})`);\n const lowered = str.toLowerCase();\n if (str !== lowered && str !== str.toUpperCase())\n throw new Error(`String must be lowercase or uppercase`);\n const sepIndex = lowered.lastIndexOf(\"1\");\n if (sepIndex === 0 || sepIndex === -1)\n throw new Error(`Letter \"1\" must be present between prefix and data only`);\n const prefix2 = lowered.slice(0, sepIndex);\n const data = lowered.slice(sepIndex + 1);\n if (data.length < 6)\n throw new Error(\"Data must be at least 6 characters long\");\n const words = BECH_ALPHABET.decode(data).slice(0, -6);\n const sum = bechChecksum(prefix2, words, ENCODING_CONST);\n if (!data.endsWith(sum))\n throw new Error(`Invalid checksum in ${str}: expected \"${sum}\"`);\n return { prefix: prefix2, words };\n }\n const decodeUnsafe = unsafeWrapper(decode2);\n function decodeToBytes(str) {\n const { prefix: prefix2, words } = decode2(str, false);\n return { prefix: prefix2, words, bytes: fromWords(words) };\n }\n function encodeFromBytes(prefix2, bytes) {\n return encode2(prefix2, toWords(bytes));\n }\n return {\n encode: encode2,\n decode: decode2,\n encodeFromBytes,\n decodeToBytes,\n decodeUnsafe,\n fromWords,\n fromWordsUnsafe,\n toWords\n };\n}\nvar bech32 = /* @__PURE__ */ genBech32(\"bech32\");\n\n// ../../node_modules/age-encryption/node_modules/@noble/hashes/pbkdf2.js\nfunction pbkdf2Init(hash, _password, _salt, _opts) {\n ahash(hash);\n const opts2 = checkOpts({ dkLen: 32, asyncTick: 10 }, _opts);\n const { c, dkLen, asyncTick } = opts2;\n anumber(c, \"c\");\n anumber(dkLen, \"dkLen\");\n anumber(asyncTick, \"asyncTick\");\n if (c < 1)\n throw new Error(\"iterations (c) must be >= 1\");\n const password = kdfInputToBytes(_password, \"password\");\n const salt = kdfInputToBytes(_salt, \"salt\");\n const DK = new Uint8Array(dkLen);\n const PRF = hmac.create(hash, password);\n const PRFSalt = PRF._cloneInto().update(salt);\n return { c, dkLen, asyncTick, DK, PRF, PRFSalt };\n}\nfunction pbkdf2Output(PRF, PRFSalt, DK, prfW, u) {\n PRF.destroy();\n PRFSalt.destroy();\n if (prfW)\n prfW.destroy();\n clean(u);\n return DK;\n}\nfunction pbkdf2(hash, password, salt, opts2) {\n const { c, dkLen, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts2);\n let prfW;\n const arr = new Uint8Array(4);\n const view = createView(arr);\n const u = new Uint8Array(PRF.outputLen);\n for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) {\n const Ti = DK.subarray(pos, pos + PRF.outputLen);\n view.setInt32(0, ti, false);\n (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u);\n Ti.set(u.subarray(0, Ti.length));\n for (let ui = 1; ui < c; ui++) {\n PRF._cloneInto(prfW).update(u).digestInto(u);\n for (let i = 0; i < Ti.length; i++)\n Ti[i] ^= u[i];\n }\n }\n return pbkdf2Output(PRF, PRFSalt, DK, prfW, u);\n}\n\n// ../../node_modules/age-encryption/node_modules/@noble/hashes/scrypt.js\nfunction XorAndSalsa(prev, pi, input, ii, out, oi) {\n let y00 = prev[pi++] ^ input[ii++], y01 = prev[pi++] ^ input[ii++];\n let y02 = prev[pi++] ^ input[ii++], y03 = prev[pi++] ^ input[ii++];\n let y04 = prev[pi++] ^ input[ii++], y05 = prev[pi++] ^ input[ii++];\n let y06 = prev[pi++] ^ input[ii++], y07 = prev[pi++] ^ input[ii++];\n let y08 = prev[pi++] ^ input[ii++], y09 = prev[pi++] ^ input[ii++];\n let y10 = prev[pi++] ^ input[ii++], y11 = prev[pi++] ^ input[ii++];\n let y12 = prev[pi++] ^ input[ii++], y13 = prev[pi++] ^ input[ii++];\n let y14 = prev[pi++] ^ input[ii++], y15 = prev[pi++] ^ input[ii++];\n let x00 = y00, x01 = y01, x02 = y02, x03 = y03, x04 = y04, x05 = y05, x06 = y06, x07 = y07, x08 = y08, x09 = y09, x10 = y10, x11 = y11, x12 = y12, x13 = y13, x14 = y14, x15 = y15;\n for (let i = 0; i < 8; i += 2) {\n x04 ^= rotl(x00 + x12 | 0, 7);\n x08 ^= rotl(x04 + x00 | 0, 9);\n x12 ^= rotl(x08 + x04 | 0, 13);\n x00 ^= rotl(x12 + x08 | 0, 18);\n x09 ^= rotl(x05 + x01 | 0, 7);\n x13 ^= rotl(x09 + x05 | 0, 9);\n x01 ^= rotl(x13 + x09 | 0, 13);\n x05 ^= rotl(x01 + x13 | 0, 18);\n x14 ^= rotl(x10 + x06 | 0, 7);\n x02 ^= rotl(x14 + x10 | 0, 9);\n x06 ^= rotl(x02 + x14 | 0, 13);\n x10 ^= rotl(x06 + x02 | 0, 18);\n x03 ^= rotl(x15 + x11 | 0, 7);\n x07 ^= rotl(x03 + x15 | 0, 9);\n x11 ^= rotl(x07 + x03 | 0, 13);\n x15 ^= rotl(x11 + x07 | 0, 18);\n x01 ^= rotl(x00 + x03 | 0, 7);\n x02 ^= rotl(x01 + x00 | 0, 9);\n x03 ^= rotl(x02 + x01 | 0, 13);\n x00 ^= rotl(x03 + x02 | 0, 18);\n x06 ^= rotl(x05 + x04 | 0, 7);\n x07 ^= rotl(x06 + x05 | 0, 9);\n x04 ^= rotl(x07 + x06 | 0, 13);\n x05 ^= rotl(x04 + x07 | 0, 18);\n x11 ^= rotl(x10 + x09 | 0, 7);\n x08 ^= rotl(x11 + x10 | 0, 9);\n x09 ^= rotl(x08 + x11 | 0, 13);\n x10 ^= rotl(x09 + x08 | 0, 18);\n x12 ^= rotl(x15 + x14 | 0, 7);\n x13 ^= rotl(x12 + x15 | 0, 9);\n x14 ^= rotl(x13 + x12 | 0, 13);\n x15 ^= rotl(x14 + x13 | 0, 18);\n }\n out[oi++] = y00 + x00 | 0;\n out[oi++] = y01 + x01 | 0;\n out[oi++] = y02 + x02 | 0;\n out[oi++] = y03 + x03 | 0;\n out[oi++] = y04 + x04 | 0;\n out[oi++] = y05 + x05 | 0;\n out[oi++] = y06 + x06 | 0;\n out[oi++] = y07 + x07 | 0;\n out[oi++] = y08 + x08 | 0;\n out[oi++] = y09 + x09 | 0;\n out[oi++] = y10 + x10 | 0;\n out[oi++] = y11 + x11 | 0;\n out[oi++] = y12 + x12 | 0;\n out[oi++] = y13 + x13 | 0;\n out[oi++] = y14 + x14 | 0;\n out[oi++] = y15 + x15 | 0;\n}\nfunction BlockMix(input, ii, out, oi, r) {\n let head = oi + 0;\n let tail = oi + 16 * r;\n for (let i = 0; i < 16; i++)\n out[tail + i] = input[ii + (2 * r - 1) * 16 + i];\n for (let i = 0; i < r; i++, head += 16, ii += 16) {\n XorAndSalsa(out, tail, input, ii, out, head);\n if (i > 0)\n tail += 16;\n XorAndSalsa(out, head, input, ii += 16, out, tail);\n }\n}\nfunction scryptInit(password, salt, _opts) {\n const opts2 = checkOpts({\n dkLen: 32,\n asyncTick: 10,\n maxmem: 1024 ** 3 + 1024\n }, _opts);\n const { N: N2, r, p, dkLen, asyncTick, maxmem, onProgress } = opts2;\n anumber(N2, \"N\");\n anumber(r, \"r\");\n anumber(p, \"p\");\n anumber(dkLen, \"dkLen\");\n anumber(asyncTick, \"asyncTick\");\n anumber(maxmem, \"maxmem\");\n if (onProgress !== void 0 && typeof onProgress !== \"function\")\n throw new Error(\"progressCb must be a function\");\n const blockSize = 128 * r;\n const blockSize32 = blockSize / 4;\n const pow32 = Math.pow(2, 32);\n if (N2 <= 1 || (N2 & N2 - 1) !== 0 || N2 > pow32)\n throw new Error('\"N\" expected a power of 2, and 2^1 <= N <= 2^32');\n if (p < 1 || p > (pow32 - 1) * 32 / blockSize)\n throw new Error('\"p\" expected integer 1..((2^32 - 1) * 32) / (128 * r)');\n if (dkLen < 1 || dkLen > (pow32 - 1) * 32)\n throw new Error('\"dkLen\" expected integer 1..(2^32 - 1) * 32');\n const memUsed = blockSize * (N2 + p);\n if (memUsed > maxmem)\n throw new Error('\"maxmem\" limit was hit, expected 128*r*(N+p) <= \"maxmem\"=' + maxmem);\n const B = pbkdf2(sha256, password, salt, { c: 1, dkLen: blockSize * p });\n const B32 = u32(B);\n const V = u32(new Uint8Array(blockSize * N2));\n const tmp = u32(new Uint8Array(blockSize));\n let blockMixCb = () => {\n };\n if (onProgress) {\n const totalBlockMix = 2 * N2 * p;\n const callbackPer = Math.max(Math.floor(totalBlockMix / 1e4), 1);\n let blockMixCnt = 0;\n blockMixCb = () => {\n blockMixCnt++;\n if (onProgress && (!(blockMixCnt % callbackPer) || blockMixCnt === totalBlockMix))\n onProgress(blockMixCnt / totalBlockMix);\n };\n }\n return { N: N2, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb, asyncTick };\n}\nfunction scryptOutput(password, dkLen, B, V, tmp) {\n const res = pbkdf2(sha256, password, B, { c: 1, dkLen });\n clean(B, V, tmp);\n return res;\n}\nfunction scrypt(password, salt, opts2) {\n const { N: N2, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb } = scryptInit(password, salt, opts2);\n swap32IfBE(B32);\n for (let pi = 0; pi < p; pi++) {\n const Pi = blockSize32 * pi;\n for (let i = 0; i < blockSize32; i++)\n V[i] = B32[Pi + i];\n for (let i = 0, pos = 0; i < N2 - 1; i++) {\n BlockMix(V, pos, V, pos += blockSize32, r);\n blockMixCb();\n }\n BlockMix(V, (N2 - 1) * blockSize32, B32, Pi, r);\n blockMixCb();\n for (let i = 0; i < N2; i++) {\n const j = (B32[Pi + blockSize32 - 16] & N2 - 1) >>> 0;\n for (let k = 0; k < blockSize32; k++)\n tmp[k] = B32[Pi + k] ^ V[j * blockSize32 + k];\n BlockMix(tmp, 0, B32, Pi, r);\n blockMixCb();\n }\n }\n swap32IfBE(B32);\n return scryptOutput(password, dkLen, B, V, tmp);\n}\n\n// ../../node_modules/@noble/ciphers/utils.js\nfunction isBytes3(a) {\n return a instanceof Uint8Array || ArrayBuffer.isView(a) && a.constructor.name === \"Uint8Array\";\n}\nfunction abool(b) {\n if (typeof b !== \"boolean\")\n throw new Error(`boolean expected, not ${b}`);\n}\nfunction anumber3(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error(\"positive integer expected, got \" + n);\n}\nfunction abytes3(value, length, title = \"\") {\n const bytes = isBytes3(value);\n const len = value?.length;\n const needsLen = length !== void 0;\n if (!bytes || needsLen && len !== length) {\n const prefix2 = title && `\"${title}\" `;\n const ofLen = needsLen ? ` of length ${length}` : \"\";\n const got = bytes ? `length=${len}` : `type=${typeof value}`;\n throw new Error(prefix2 + \"expected Uint8Array\" + ofLen + \", got \" + got);\n }\n return value;\n}\nfunction aexists2(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 aoutput2(out, instance) {\n abytes3(out, void 0, \"output\");\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}\nfunction u322(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\nfunction clean2(...arrays) {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\nfunction createView2(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\nvar isLE2 = /* @__PURE__ */ (() => new Uint8Array(new Uint32Array([287454020]).buffer)[0] === 68)();\nfunction checkOpts2(defaults, opts2) {\n if (opts2 == null || typeof opts2 !== \"object\")\n throw new Error(\"options must be defined\");\n const merged = Object.assign(defaults, opts2);\n return merged;\n}\nfunction 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}\nvar wrapCipher = /* @__NO_SIDE_EFFECTS__ */ (params, constructor) => {\n function wrappedCipher(key, ...args) {\n abytes3(key, void 0, \"key\");\n if (!isLE2)\n throw new Error(\"Non little-endian hardware is not yet supported\");\n if (params.nonceLength !== void 0) {\n const nonce = args[0];\n abytes3(nonce, params.varSizeNonce ? void 0 : params.nonceLength, \"nonce\");\n }\n const tagl = params.tagLength;\n if (tagl && args[1] !== void 0)\n abytes3(args[1], void 0, \"AAD\");\n const cipher = constructor(key, ...args);\n const checkOutput = (fnLength, output) => {\n if (output !== void 0) {\n if (fnLength !== 2)\n throw new Error(\"cipher output not supported\");\n abytes3(output, void 0, \"output\");\n }\n };\n let called = false;\n const wrCipher = {\n encrypt(data, output) {\n if (called)\n throw new Error(\"cannot encrypt() twice with same key + nonce\");\n called = true;\n abytes3(data);\n checkOutput(cipher.encrypt.length, output);\n return cipher.encrypt(data, output);\n },\n decrypt(data, output) {\n abytes3(data);\n if (tagl && data.length < tagl)\n throw new Error('\"ciphertext\" expected length bigger than tagLength=' + tagl);\n checkOutput(cipher.decrypt.length, output);\n return cipher.decrypt(data, output);\n }\n };\n return wrCipher;\n }\n Object.assign(wrappedCipher, params);\n return wrappedCipher;\n};\nfunction getOutput(expectedLength, out, onlyAligned = true) {\n if (out === void 0)\n return new Uint8Array(expectedLength);\n if (out.length !== expectedLength)\n throw new Error('\"output\" expected Uint8Array of length ' + expectedLength + \", got: \" + out.length);\n if (onlyAligned && !isAligned32(out))\n throw new Error(\"invalid output, must be aligned\");\n return out;\n}\nfunction u64Lengths(dataLength, aadLength, isLE4) {\n abool(isLE4);\n const num = new Uint8Array(16);\n const view = createView2(num);\n view.setBigUint64(0, BigInt(aadLength), isLE4);\n view.setBigUint64(8, BigInt(dataLength), isLE4);\n return num;\n}\nfunction isAligned32(bytes) {\n return bytes.byteOffset % 4 === 0;\n}\nfunction copyBytes(bytes) {\n return Uint8Array.from(bytes);\n}\n\n// ../../node_modules/@noble/ciphers/_arx.js\nvar encodeStr = (str) => Uint8Array.from(str.split(\"\"), (c) => c.charCodeAt(0));\nvar sigma16 = encodeStr(\"expand 16-byte k\");\nvar sigma32 = encodeStr(\"expand 32-byte k\");\nvar sigma16_32 = u322(sigma16);\nvar sigma32_32 = u322(sigma32);\nfunction rotl2(a, b) {\n return a << b | a >>> 32 - b;\n}\nfunction isAligned322(b) {\n return b.byteOffset % 4 === 0;\n}\nvar BLOCK_LEN = 64;\nvar BLOCK_LEN32 = 16;\nvar MAX_COUNTER = 2 ** 32 - 1;\nvar U32_EMPTY = Uint32Array.of();\nfunction runCipher(core, sigma, key, nonce, data, output, counter, rounds) {\n const len = data.length;\n const block = new Uint8Array(BLOCK_LEN);\n const b32 = u322(block);\n const isAligned = isAligned322(data) && isAligned322(output);\n const d32 = isAligned ? u322(data) : U32_EMPTY;\n const o32 = isAligned ? u322(output) : U32_EMPTY;\n for (let pos = 0; pos < len; counter++) {\n core(sigma, key, nonce, b32, counter, rounds);\n if (counter >= MAX_COUNTER)\n throw new Error(\"arx: counter overflow\");\n const take = Math.min(BLOCK_LEN, len - pos);\n if (isAligned && take === BLOCK_LEN) {\n const pos32 = pos / 4;\n if (pos % 4 !== 0)\n throw new Error(\"arx: invalid block position\");\n for (let j = 0, posj; j < BLOCK_LEN32; j++) {\n posj = pos32 + j;\n o32[posj] = d32[posj] ^ b32[j];\n }\n pos += BLOCK_LEN;\n continue;\n }\n for (let j = 0, posj; j < take; j++) {\n posj = pos + j;\n output[posj] = data[posj] ^ block[j];\n }\n pos += take;\n }\n}\nfunction createCipher(core, opts2) {\n const { allowShortKeys, extendNonceFn, counterLength, counterRight, rounds } = checkOpts2({ allowShortKeys: false, counterLength: 8, counterRight: false, rounds: 20 }, opts2);\n if (typeof core !== \"function\")\n throw new Error(\"core must be a function\");\n anumber3(counterLength);\n anumber3(rounds);\n abool(counterRight);\n abool(allowShortKeys);\n return (key, nonce, data, output, counter = 0) => {\n abytes3(key, void 0, \"key\");\n abytes3(nonce, void 0, \"nonce\");\n abytes3(data, void 0, \"data\");\n const len = data.length;\n if (output === void 0)\n output = new Uint8Array(len);\n abytes3(output, void 0, \"output\");\n anumber3(counter);\n if (counter < 0 || counter >= MAX_COUNTER)\n throw new Error(\"arx: counter overflow\");\n if (output.length < len)\n throw new Error(`arx: output (${output.length}) is shorter than data (${len})`);\n const toClean = [];\n let l = key.length;\n let k;\n let sigma;\n if (l === 32) {\n toClean.push(k = copyBytes(key));\n sigma = sigma32_32;\n } else if (l === 16 && allowShortKeys) {\n k = new Uint8Array(32);\n k.set(key);\n k.set(key, 16);\n sigma = sigma16_32;\n toClean.push(k);\n } else {\n abytes3(key, 32, \"arx key\");\n throw new Error(\"invalid key size\");\n }\n if (!isAligned322(nonce))\n toClean.push(nonce = copyBytes(nonce));\n const k32 = u322(k);\n if (extendNonceFn) {\n if (nonce.length !== 24)\n throw new Error(`arx: extended nonce must be 24 bytes`);\n extendNonceFn(sigma, k32, u322(nonce.subarray(0, 16)), k32);\n nonce = nonce.subarray(16);\n }\n const nonceNcLen = 16 - counterLength;\n if (nonceNcLen !== nonce.length)\n throw new Error(`arx: nonce must be ${nonceNcLen} or 16 bytes`);\n if (nonceNcLen !== 12) {\n const nc = new Uint8Array(12);\n nc.set(nonce, counterRight ? 0 : 12 - nonce.length);\n nonce = nc;\n toClean.push(nonce);\n }\n const n32 = u322(nonce);\n runCipher(core, sigma, k32, n32, data, output, counter, rounds);\n clean2(...toClean);\n return output;\n };\n}\n\n// ../../node_modules/@noble/ciphers/_poly1305.js\nfunction u8to16(a, i) {\n return a[i++] & 255 | (a[i++] & 255) << 8;\n}\nvar Poly1305 = class {\n blockLen = 16;\n outputLen = 16;\n buffer = new Uint8Array(16);\n r = new Uint16Array(10);\n // Allocating 1 array with .subarray() here is slower than 3\n h = new Uint16Array(10);\n pad = new Uint16Array(8);\n pos = 0;\n finished = false;\n // Can be speed-up using BigUint64Array, at the cost of complexity\n constructor(key) {\n key = copyBytes(abytes3(key, 32, \"key\"));\n const t0 = u8to16(key, 0);\n const t1 = u8to16(key, 2);\n const t2 = u8to16(key, 4);\n const t3 = u8to16(key, 6);\n const t4 = u8to16(key, 8);\n const t5 = u8to16(key, 10);\n const t6 = u8to16(key, 12);\n const t7 = u8to16(key, 14);\n this.r[0] = t0 & 8191;\n this.r[1] = (t0 >>> 13 | t1 << 3) & 8191;\n this.r[2] = (t1 >>> 10 | t2 << 6) & 7939;\n this.r[3] = (t2 >>> 7 | t3 << 9) & 8191;\n this.r[4] = (t3 >>> 4 | t4 << 12) & 255;\n this.r[5] = t4 >>> 1 & 8190;\n this.r[6] = (t4 >>> 14 | t5 << 2) & 8191;\n this.r[7] = (t5 >>> 11 | t6 << 5) & 8065;\n this.r[8] = (t6 >>> 8 | t7 << 8) & 8191;\n this.r[9] = t7 >>> 5 & 127;\n for (let i = 0; i < 8; i++)\n this.pad[i] = u8to16(key, 16 + 2 * i);\n }\n process(data, offset, isLast = false) {\n const hibit = isLast ? 0 : 1 << 11;\n const { h, r } = this;\n const r0 = r[0];\n const r1 = r[1];\n const r2 = r[2];\n const r3 = r[3];\n const r4 = r[4];\n const r5 = r[5];\n const r6 = r[6];\n const r7 = r[7];\n const r8 = r[8];\n const r9 = r[9];\n const t0 = u8to16(data, offset + 0);\n const t1 = u8to16(data, offset + 2);\n const t2 = u8to16(data, offset + 4);\n const t3 = u8to16(data, offset + 6);\n const t4 = u8to16(data, offset + 8);\n const t5 = u8to16(data, offset + 10);\n const t6 = u8to16(data, offset + 12);\n const t7 = u8to16(data, offset + 14);\n let h0 = h[0] + (t0 & 8191);\n let h1 = h[1] + ((t0 >>> 13 | t1 << 3) & 8191);\n let h2 = h[2] + ((t1 >>> 10 | t2 << 6) & 8191);\n let h3 = h[3] + ((t2 >>> 7 | t3 << 9) & 8191);\n let h4 = h[4] + ((t3 >>> 4 | t4 << 12) & 8191);\n let h5 = h[5] + (t4 >>> 1 & 8191);\n let h6 = h[6] + ((t4 >>> 14 | t5 << 2) & 8191);\n let h7 = h[7] + ((t5 >>> 11 | t6 << 5) & 8191);\n let h8 = h[8] + ((t6 >>> 8 | t7 << 8) & 8191);\n let h9 = h[9] + (t7 >>> 5 | hibit);\n let c = 0;\n let d0 = c + h0 * r0 + h1 * (5 * r9) + h2 * (5 * r8) + h3 * (5 * r7) + h4 * (5 * r6);\n c = d0 >>> 13;\n d0 &= 8191;\n d0 += h5 * (5 * r5) + h6 * (5 * r4) + h7 * (5 * r3) + h8 * (5 * r2) + h9 * (5 * r1);\n c += d0 >>> 13;\n d0 &= 8191;\n let d1 = c + h0 * r1 + h1 * r0 + h2 * (5 * r9) + h3 * (5 * r8) + h4 * (5 * r7);\n c = d1 >>> 13;\n d1 &= 8191;\n d1 += h5 * (5 * r6) + h6 * (5 * r5) + h7 * (5 * r4) + h8 * (5 * r3) + h9 * (5 * r2);\n c += d1 >>> 13;\n d1 &= 8191;\n let d2 = c + h0 * r2 + h1 * r1 + h2 * r0 + h3 * (5 * r9) + h4 * (5 * r8);\n c = d2 >>> 13;\n d2 &= 8191;\n d2 += h5 * (5 * r7) + h6 * (5 * r6) + h7 * (5 * r5) + h8 * (5 * r4) + h9 * (5 * r3);\n c += d2 >>> 13;\n d2 &= 8191;\n let d3 = c + h0 * r3 + h1 * r2 + h2 * r1 + h3 * r0 + h4 * (5 * r9);\n c = d3 >>> 13;\n d3 &= 8191;\n d3 += h5 * (5 * r8) + h6 * (5 * r7) + h7 * (5 * r6) + h8 * (5 * r5) + h9 * (5 * r4);\n c += d3 >>> 13;\n d3 &= 8191;\n let d4 = c + h0 * r4 + h1 * r3 + h2 * r2 + h3 * r1 + h4 * r0;\n c = d4 >>> 13;\n d4 &= 8191;\n d4 += h5 * (5 * r9) + h6 * (5 * r8) + h7 * (5 * r7) + h8 * (5 * r6) + h9 * (5 * r5);\n c += d4 >>> 13;\n d4 &= 8191;\n let d5 = c + h0 * r5 + h1 * r4 + h2 * r3 + h3 * r2 + h4 * r1;\n c = d5 >>> 13;\n d5 &= 8191;\n d5 += h5 * r0 + h6 * (5 * r9) + h7 * (5 * r8) + h8 * (5 * r7) + h9 * (5 * r6);\n c += d5 >>> 13;\n d5 &= 8191;\n let d6 = c + h0 * r6 + h1 * r5 + h2 * r4 + h3 * r3 + h4 * r2;\n c = d6 >>> 13;\n d6 &= 8191;\n d6 += h5 * r1 + h6 * r0 + h7 * (5 * r9) + h8 * (5 * r8) + h9 * (5 * r7);\n c += d6 >>> 13;\n d6 &= 8191;\n let d7 = c + h0 * r7 + h1 * r6 + h2 * r5 + h3 * r4 + h4 * r3;\n c = d7 >>> 13;\n d7 &= 8191;\n d7 += h5 * r2 + h6 * r1 + h7 * r0 + h8 * (5 * r9) + h9 * (5 * r8);\n c += d7 >>> 13;\n d7 &= 8191;\n let d8 = c + h0 * r8 + h1 * r7 + h2 * r6 + h3 * r5 + h4 * r4;\n c = d8 >>> 13;\n d8 &= 8191;\n d8 += h5 * r3 + h6 * r2 + h7 * r1 + h8 * r0 + h9 * (5 * r9);\n c += d8 >>> 13;\n d8 &= 8191;\n let d9 = c + h0 * r9 + h1 * r8 + h2 * r7 + h3 * r6 + h4 * r5;\n c = d9 >>> 13;\n d9 &= 8191;\n d9 += h5 * r4 + h6 * r3 + h7 * r2 + h8 * r1 + h9 * r0;\n c += d9 >>> 13;\n d9 &= 8191;\n c = (c << 2) + c | 0;\n c = c + d0 | 0;\n d0 = c & 8191;\n c = c >>> 13;\n d1 += c;\n h[0] = d0;\n h[1] = d1;\n h[2] = d2;\n h[3] = d3;\n h[4] = d4;\n h[5] = d5;\n h[6] = d6;\n h[7] = d7;\n h[8] = d8;\n h[9] = d9;\n }\n finalize() {\n const { h, pad } = this;\n const g = new Uint16Array(10);\n let c = h[1] >>> 13;\n h[1] &= 8191;\n for (let i = 2; i < 10; i++) {\n h[i] += c;\n c = h[i] >>> 13;\n h[i] &= 8191;\n }\n h[0] += c * 5;\n c = h[0] >>> 13;\n h[0] &= 8191;\n h[1] += c;\n c = h[1] >>> 13;\n h[1] &= 8191;\n h[2] += c;\n g[0] = h[0] + 5;\n c = g[0] >>> 13;\n g[0] &= 8191;\n for (let i = 1; i < 10; i++) {\n g[i] = h[i] + c;\n c = g[i] >>> 13;\n g[i] &= 8191;\n }\n g[9] -= 1 << 13;\n let mask = (c ^ 1) - 1;\n for (let i = 0; i < 10; i++)\n g[i] &= mask;\n mask = ~mask;\n for (let i = 0; i < 10; i++)\n h[i] = h[i] & mask | g[i];\n h[0] = (h[0] | h[1] << 13) & 65535;\n h[1] = (h[1] >>> 3 | h[2] << 10) & 65535;\n h[2] = (h[2] >>> 6 | h[3] << 7) & 65535;\n h[3] = (h[3] >>> 9 | h[4] << 4) & 65535;\n h[4] = (h[4] >>> 12 | h[5] << 1 | h[6] << 14) & 65535;\n h[5] = (h[6] >>> 2 | h[7] << 11) & 65535;\n h[6] = (h[7] >>> 5 | h[8] << 8) & 65535;\n h[7] = (h[8] >>> 8 | h[9] << 5) & 65535;\n let f = h[0] + pad[0];\n h[0] = f & 65535;\n for (let i = 1; i < 8; i++) {\n f = (h[i] + pad[i] | 0) + (f >>> 16) | 0;\n h[i] = f & 65535;\n }\n clean2(g);\n }\n update(data) {\n aexists2(this);\n abytes3(data);\n data = copyBytes(data);\n const { 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 if (take === blockLen) {\n for (; blockLen <= len - pos; pos += blockLen)\n this.process(data, 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(buffer, 0, false);\n this.pos = 0;\n }\n }\n return this;\n }\n destroy() {\n clean2(this.h, this.r, this.buffer, this.pad);\n }\n digestInto(out) {\n aexists2(this);\n aoutput2(out, this);\n this.finished = true;\n const { buffer, h } = this;\n let { pos } = this;\n if (pos) {\n buffer[pos++] = 1;\n for (; pos < 16; pos++)\n buffer[pos] = 0;\n this.process(buffer, 0, true);\n }\n this.finalize();\n let opos = 0;\n for (let i = 0; i < 8; i++) {\n out[opos++] = h[i] >>> 0;\n out[opos++] = h[i] >>> 8;\n }\n return out;\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};\nfunction wrapConstructorWithKey(hashCons) {\n const hashC = (msg, key) => hashCons(key).update(msg).digest();\n const tmp = hashCons(new Uint8Array(32));\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (key) => hashCons(key);\n return hashC;\n}\nvar poly1305 = /* @__PURE__ */ (() => wrapConstructorWithKey((key) => new Poly1305(key)))();\n\n// ../../node_modules/@noble/ciphers/chacha.js\nfunction chachaCore(s, k, n, out, cnt, rounds = 20) {\n let y00 = s[0], y01 = s[1], y02 = s[2], y03 = s[3], y04 = k[0], y05 = k[1], y06 = k[2], y07 = k[3], y08 = k[4], y09 = k[5], y10 = k[6], y11 = k[7], y12 = cnt, y13 = n[0], y14 = n[1], y15 = n[2];\n let x00 = y00, x01 = y01, x02 = y02, x03 = y03, x04 = y04, x05 = y05, x06 = y06, x07 = y07, x08 = y08, x09 = y09, x10 = y10, x11 = y11, x12 = y12, x13 = y13, x14 = y14, x15 = y15;\n for (let r = 0; r < rounds; r += 2) {\n x00 = x00 + x04 | 0;\n x12 = rotl2(x12 ^ x00, 16);\n x08 = x08 + x12 | 0;\n x04 = rotl2(x04 ^ x08, 12);\n x00 = x00 + x04 | 0;\n x12 = rotl2(x12 ^ x00, 8);\n x08 = x08 + x12 | 0;\n x04 = rotl2(x04 ^ x08, 7);\n x01 = x01 + x05 | 0;\n x13 = rotl2(x13 ^ x01, 16);\n x09 = x09 + x13 | 0;\n x05 = rotl2(x05 ^ x09, 12);\n x01 = x01 + x05 | 0;\n x13 = rotl2(x13 ^ x01, 8);\n x09 = x09 + x13 | 0;\n x05 = rotl2(x05 ^ x09, 7);\n x02 = x02 + x06 | 0;\n x14 = rotl2(x14 ^ x02, 16);\n x10 = x10 + x14 | 0;\n x06 = rotl2(x06 ^ x10, 12);\n x02 = x02 + x06 | 0;\n x14 = rotl2(x14 ^ x02, 8);\n x10 = x10 + x14 | 0;\n x06 = rotl2(x06 ^ x10, 7);\n x03 = x03 + x07 | 0;\n x15 = rotl2(x15 ^ x03, 16);\n x11 = x11 + x15 | 0;\n x07 = rotl2(x07 ^ x11, 12);\n x03 = x03 + x07 | 0;\n x15 = rotl2(x15 ^ x03, 8);\n x11 = x11 + x15 | 0;\n x07 = rotl2(x07 ^ x11, 7);\n x00 = x00 + x05 | 0;\n x15 = rotl2(x15 ^ x00, 16);\n x10 = x10 + x15 | 0;\n x05 = rotl2(x05 ^ x10, 12);\n x00 = x00 + x05 | 0;\n x15 = rotl2(x15 ^ x00, 8);\n x10 = x10 + x15 | 0;\n x05 = rotl2(x05 ^ x10, 7);\n x01 = x01 + x06 | 0;\n x12 = rotl2(x12 ^ x01, 16);\n x11 = x11 + x12 | 0;\n x06 = rotl2(x06 ^ x11, 12);\n x01 = x01 + x06 | 0;\n x12 = rotl2(x12 ^ x01, 8);\n x11 = x11 + x12 | 0;\n x06 = rotl2(x06 ^ x11, 7);\n x02 = x02 + x07 | 0;\n x13 = rotl2(x13 ^ x02, 16);\n x08 = x08 + x13 | 0;\n x07 = rotl2(x07 ^ x08, 12);\n x02 = x02 + x07 | 0;\n x13 = rotl2(x13 ^ x02, 8);\n x08 = x08 + x13 | 0;\n x07 = rotl2(x07 ^ x08, 7);\n x03 = x03 + x04 | 0;\n x14 = rotl2(x14 ^ x03, 16);\n x09 = x09 + x14 | 0;\n x04 = rotl2(x04 ^ x09, 12);\n x03 = x03 + x04 | 0;\n x14 = rotl2(x14 ^ x03, 8);\n x09 = x09 + x14 | 0;\n x04 = rotl2(x04 ^ x09, 7);\n }\n let oi = 0;\n out[oi++] = y00 + x00 | 0;\n out[oi++] = y01 + x01 | 0;\n out[oi++] = y02 + x02 | 0;\n out[oi++] = y03 + x03 | 0;\n out[oi++] = y04 + x04 | 0;\n out[oi++] = y05 + x05 | 0;\n out[oi++] = y06 + x06 | 0;\n out[oi++] = y07 + x07 | 0;\n out[oi++] = y08 + x08 | 0;\n out[oi++] = y09 + x09 | 0;\n out[oi++] = y10 + x10 | 0;\n out[oi++] = y11 + x11 | 0;\n out[oi++] = y12 + x12 | 0;\n out[oi++] = y13 + x13 | 0;\n out[oi++] = y14 + x14 | 0;\n out[oi++] = y15 + x15 | 0;\n}\nfunction hchacha(s, k, i, out) {\n let x00 = s[0], x01 = s[1], x02 = s[2], x03 = s[3], x04 = k[0], x05 = k[1], x06 = k[2], x07 = k[3], x08 = k[4], x09 = k[5], x10 = k[6], x11 = k[7], x12 = i[0], x13 = i[1], x14 = i[2], x15 = i[3];\n for (let r = 0; r < 20; r += 2) {\n x00 = x00 + x04 | 0;\n x12 = rotl2(x12 ^ x00, 16);\n x08 = x08 + x12 | 0;\n x04 = rotl2(x04 ^ x08, 12);\n x00 = x00 + x04 | 0;\n x12 = rotl2(x12 ^ x00, 8);\n x08 = x08 + x12 | 0;\n x04 = rotl2(x04 ^ x08, 7);\n x01 = x01 + x05 | 0;\n x13 = rotl2(x13 ^ x01, 16);\n x09 = x09 + x13 | 0;\n x05 = rotl2(x05 ^ x09, 12);\n x01 = x01 + x05 | 0;\n x13 = rotl2(x13 ^ x01, 8);\n x09 = x09 + x13 | 0;\n x05 = rotl2(x05 ^ x09, 7);\n x02 = x02 + x06 | 0;\n x14 = rotl2(x14 ^ x02, 16);\n x10 = x10 + x14 | 0;\n x06 = rotl2(x06 ^ x10, 12);\n x02 = x02 + x06 | 0;\n x14 = rotl2(x14 ^ x02, 8);\n x10 = x10 + x14 | 0;\n x06 = rotl2(x06 ^ x10, 7);\n x03 = x03 + x07 | 0;\n x15 = rotl2(x15 ^ x03, 16);\n x11 = x11 + x15 | 0;\n x07 = rotl2(x07 ^ x11, 12);\n x03 = x03 + x07 | 0;\n x15 = rotl2(x15 ^ x03, 8);\n x11 = x11 + x15 | 0;\n x07 = rotl2(x07 ^ x11, 7);\n x00 = x00 + x05 | 0;\n x15 = rotl2(x15 ^ x00, 16);\n x10 = x10 + x15 | 0;\n x05 = rotl2(x05 ^ x10, 12);\n x00 = x00 + x05 | 0;\n x15 = rotl2(x15 ^ x00, 8);\n x10 = x10 + x15 | 0;\n x05 = rotl2(x05 ^ x10, 7);\n x01 = x01 + x06 | 0;\n x12 = rotl2(x12 ^ x01, 16);\n x11 = x11 + x12 | 0;\n x06 = rotl2(x06 ^ x11, 12);\n x01 = x01 + x06 | 0;\n x12 = rotl2(x12 ^ x01, 8);\n x11 = x11 + x12 | 0;\n x06 = rotl2(x06 ^ x11, 7);\n x02 = x02 + x07 | 0;\n x13 = rotl2(x13 ^ x02, 16);\n x08 = x08 + x13 | 0;\n x07 = rotl2(x07 ^ x08, 12);\n x02 = x02 + x07 | 0;\n x13 = rotl2(x13 ^ x02, 8);\n x08 = x08 + x13 | 0;\n x07 = rotl2(x07 ^ x08, 7);\n x03 = x03 + x04 | 0;\n x14 = rotl2(x14 ^ x03, 16);\n x09 = x09 + x14 | 0;\n x04 = rotl2(x04 ^ x09, 12);\n x03 = x03 + x04 | 0;\n x14 = rotl2(x14 ^ x03, 8);\n x09 = x09 + x14 | 0;\n x04 = rotl2(x04 ^ x09, 7);\n }\n let oi = 0;\n out[oi++] = x00;\n out[oi++] = x01;\n out[oi++] = x02;\n out[oi++] = x03;\n out[oi++] = x12;\n out[oi++] = x13;\n out[oi++] = x14;\n out[oi++] = x15;\n}\nvar chacha20 = /* @__PURE__ */ createCipher(chachaCore, {\n counterRight: false,\n counterLength: 4,\n allowShortKeys: false\n});\nvar xchacha20 = /* @__PURE__ */ createCipher(chachaCore, {\n counterRight: false,\n counterLength: 8,\n extendNonceFn: hchacha,\n allowShortKeys: false\n});\nvar ZEROS16 = /* @__PURE__ */ new Uint8Array(16);\nvar updatePadded = (h, msg) => {\n h.update(msg);\n const leftover = msg.length % 16;\n if (leftover)\n h.update(ZEROS16.subarray(leftover));\n};\nvar ZEROS32 = /* @__PURE__ */ new Uint8Array(32);\nfunction computeTag(fn, key, nonce, ciphertext, AAD) {\n if (AAD !== void 0)\n abytes3(AAD, void 0, \"AAD\");\n const authKey = fn(key, nonce, ZEROS32);\n const lengths = u64Lengths(ciphertext.length, AAD ? AAD.length : 0, true);\n const h = poly1305.create(authKey);\n if (AAD)\n updatePadded(h, AAD);\n updatePadded(h, ciphertext);\n h.update(lengths);\n const res = h.digest();\n clean2(authKey, lengths);\n return res;\n}\nvar _poly1305_aead = (xorStream) => (key, nonce, AAD) => {\n const tagLength = 16;\n return {\n encrypt(plaintext, output) {\n const plength = plaintext.length;\n output = getOutput(plength + tagLength, output, false);\n output.set(plaintext);\n const oPlain = output.subarray(0, -tagLength);\n xorStream(key, nonce, oPlain, oPlain, 1);\n const tag = computeTag(xorStream, key, nonce, oPlain, AAD);\n output.set(tag, plength);\n clean2(tag);\n return output;\n },\n decrypt(ciphertext, output) {\n output = getOutput(ciphertext.length - tagLength, output, false);\n const data = ciphertext.subarray(0, -tagLength);\n const passedTag = ciphertext.subarray(-tagLength);\n const tag = computeTag(xorStream, key, nonce, data, AAD);\n if (!equalBytes(passedTag, tag))\n throw new Error(\"invalid tag\");\n output.set(ciphertext.subarray(0, -tagLength));\n xorStream(key, nonce, output, output, 1);\n clean2(tag);\n return output;\n }\n };\n};\nvar chacha20poly1305 = /* @__PURE__ */ wrapCipher({ blockSize: 64, nonceLength: 12, tagLength: 16 }, _poly1305_aead(chacha20));\nvar xchacha20poly1305 = /* @__PURE__ */ wrapCipher({ blockSize: 64, nonceLength: 24, tagLength: 16 }, _poly1305_aead(xchacha20));\n\n// ../../node_modules/@noble/curves/node_modules/@noble/hashes/utils.js\nfunction isBytes4(a) {\n return a instanceof Uint8Array || ArrayBuffer.isView(a) && a.constructor.name === \"Uint8Array\";\n}\nfunction anumber4(n, title = \"\") {\n if (!Number.isSafeInteger(n) || n < 0) {\n const prefix2 = title && `\"${title}\" `;\n throw new Error(`${prefix2}expected integer >= 0, got ${n}`);\n }\n}\nfunction abytes4(value, length, title = \"\") {\n const bytes = isBytes4(value);\n const len = value?.length;\n const needsLen = length !== void 0;\n if (!bytes || needsLen && len !== length) {\n const prefix2 = title && `\"${title}\" `;\n const ofLen = needsLen ? ` of length ${length}` : \"\";\n const got = bytes ? `length=${len}` : `type=${typeof value}`;\n throw new Error(prefix2 + \"expected Uint8Array\" + ofLen + \", got \" + got);\n }\n return value;\n}\nfunction ahash2(h) {\n if (typeof h !== \"function\" || typeof h.create !== \"function\")\n throw new Error(\"Hash must wrapped by utils.createHasher\");\n anumber4(h.outputLen);\n anumber4(h.blockLen);\n}\nfunction aexists3(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 aoutput3(out, instance) {\n abytes4(out, void 0, \"digestInto() output\");\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('\"digestInto() output\" expected to be of length >=' + min);\n }\n}\nfunction clean3(...arrays) {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\nfunction createView3(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\nfunction rotr2(word, shift) {\n return word << 32 - shift | word >>> shift;\n}\nvar hasHexBuiltin = /* @__PURE__ */ (() => (\n // @ts-ignore\n typeof Uint8Array.from([]).toHex === \"function\" && typeof Uint8Array.fromHex === \"function\"\n))();\nvar hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, \"0\"));\nfunction bytesToHex2(bytes) {\n abytes4(bytes);\n if (hasHexBuiltin)\n return bytes.toHex();\n let hex = \"\";\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\nvar 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;\n if (ch >= asciis.A && ch <= asciis.F)\n return ch - (asciis.A - 10);\n if (ch >= asciis.a && ch <= asciis.f)\n return ch - (asciis.a - 10);\n return;\n}\nfunction hexToBytes(hex) {\n if (typeof hex !== \"string\")\n throw new Error(\"hex string expected, got \" + typeof hex);\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 === void 0 || n2 === void 0) {\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;\n }\n return array;\n}\nfunction concatBytes2(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes4(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}\nfunction createHasher2(hashCons, info = {}) {\n const hashC = (msg, opts2) => hashCons(opts2).update(msg).digest();\n const tmp = hashCons(void 0);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts2) => hashCons(opts2);\n Object.assign(hashC, info);\n return Object.freeze(hashC);\n}\nfunction randomBytes3(bytesLength = 32) {\n const cr = typeof globalThis === \"object\" ? globalThis.crypto : null;\n if (typeof cr?.getRandomValues !== \"function\")\n throw new Error(\"crypto.getRandomValues must be defined\");\n return cr.getRandomValues(new Uint8Array(bytesLength));\n}\nvar oidNist2 = (suffix) => ({\n oid: Uint8Array.from([6, 9, 96, 134, 72, 1, 101, 3, 4, 2, suffix])\n});\n\n// ../../node_modules/@noble/curves/utils.js\nvar _0n = /* @__PURE__ */ BigInt(0);\nvar _1n = /* @__PURE__ */ BigInt(1);\nfunction abool2(value, title = \"\") {\n if (typeof value !== \"boolean\") {\n const prefix2 = title && `\"${title}\" `;\n throw new Error(prefix2 + \"expected boolean, got type=\" + typeof value);\n }\n return value;\n}\nfunction abignumber(n) {\n if (typeof n === \"bigint\") {\n if (!isPosBig(n))\n throw new Error(\"positive bigint expected, got \" + n);\n } else\n anumber4(n);\n return n;\n}\nfunction numberToHexUnpadded(num) {\n const hex = abignumber(num).toString(16);\n return hex.length & 1 ? \"0\" + hex : hex;\n}\nfunction hexToNumber2(hex) {\n if (typeof hex !== \"string\")\n throw new Error(\"hex string expected, got \" + typeof hex);\n return hex === \"\" ? _0n : BigInt(\"0x\" + hex);\n}\nfunction bytesToNumberBE(bytes) {\n return hexToNumber2(bytesToHex2(bytes));\n}\nfunction bytesToNumberLE(bytes) {\n return hexToNumber2(bytesToHex2(copyBytes2(abytes4(bytes)).reverse()));\n}\nfunction numberToBytesBE2(n, len) {\n anumber4(len);\n n = abignumber(n);\n const res = hexToBytes(n.toString(16).padStart(len * 2, \"0\"));\n if (res.length !== len)\n throw new Error(\"number too large\");\n return res;\n}\nfunction numberToBytesLE(n, len) {\n return numberToBytesBE2(n, len).reverse();\n}\nfunction copyBytes2(bytes) {\n return Uint8Array.from(bytes);\n}\nfunction 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}\nvar isPosBig = (n) => typeof n === \"bigint\" && _0n <= n;\nfunction inRange(n, min, max) {\n return isPosBig(n) && isPosBig(min) && isPosBig(max) && min <= n && n < max;\n}\nfunction aInRange(title, n, min, max) {\n if (!inRange(n, min, max))\n throw new Error(\"expected valid \" + title + \": \" + min + \" <= n < \" + max + \", got \" + n);\n}\nfunction bitLen(n) {\n let len;\n for (len = 0; n > _0n; n >>= _1n, len += 1)\n ;\n return len;\n}\nvar bitMask = (n) => (_1n << BigInt(n)) - _1n;\nfunction createHmacDrbg(hashLen, qByteLen, hmacFn) {\n anumber4(hashLen, \"hashLen\");\n anumber4(qByteLen, \"qByteLen\");\n if (typeof hmacFn !== \"function\")\n throw new Error(\"hmacFn must be a function\");\n const u8n = (len) => new Uint8Array(len);\n const NULL = Uint8Array.of();\n const byte0 = Uint8Array.of(0);\n const byte1 = Uint8Array.of(1);\n const _maxDrbgIters = 1e3;\n let v = u8n(hashLen);\n let k = u8n(hashLen);\n let i = 0;\n const reset = () => {\n v.fill(1);\n k.fill(0);\n i = 0;\n };\n const h = (...msgs) => hmacFn(k, concatBytes2(v, ...msgs));\n const reseed = (seed = NULL) => {\n k = h(byte0, seed);\n v = h();\n if (seed.length === 0)\n return;\n k = h(byte1, seed);\n v = h();\n };\n const gen = () => {\n if (i++ >= _maxDrbgIters)\n throw new Error(\"drbg: tried max amount of iterations\");\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 concatBytes2(...out);\n };\n const genUntil = (seed, pred) => {\n reset();\n reseed(seed);\n let res = void 0;\n while (!(res = pred(gen())))\n reseed();\n reset();\n return res;\n };\n return genUntil;\n}\nfunction 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 === void 0)\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 const iter = (f, isOpt) => Object.entries(f).forEach(([k, v]) => checkField(k, v, isOpt));\n iter(fields, false);\n iter(optFields, true);\n}\nfunction memoized(fn) {\n const map = /* @__PURE__ */ new WeakMap();\n return (arg, ...args) => {\n const val = map.get(arg);\n if (val !== void 0)\n return val;\n const computed = fn(arg, ...args);\n map.set(arg, computed);\n return computed;\n };\n}\n\n// ../../node_modules/@noble/curves/abstract/modular.js\nvar _0n2 = /* @__PURE__ */ BigInt(0);\nvar _1n2 = /* @__PURE__ */ BigInt(1);\nvar _2n = /* @__PURE__ */ BigInt(2);\nvar _3n = /* @__PURE__ */ BigInt(3);\nvar _4n = /* @__PURE__ */ BigInt(4);\nvar _5n = /* @__PURE__ */ BigInt(5);\nvar _7n = /* @__PURE__ */ BigInt(7);\nvar _8n = /* @__PURE__ */ BigInt(8);\nvar _9n = /* @__PURE__ */ BigInt(9);\nvar _16n = /* @__PURE__ */ BigInt(16);\nfunction mod(a, b) {\n const result = a % b;\n return result >= _0n2 ? result : b + result;\n}\nfunction pow2(x, power, modulo) {\n let res = x;\n while (power-- > _0n2) {\n res *= res;\n res %= modulo;\n }\n return res;\n}\nfunction invert(number, modulo) {\n if (number === _0n2)\n throw new Error(\"invert: expected non-zero number\");\n if (modulo <= _0n2)\n throw new Error(\"invert: expected positive modulus, got \" + modulo);\n let a = mod(number, modulo);\n let b = modulo;\n let x = _0n2, y = _1n2, u = _1n2, v = _0n2;\n while (a !== _0n2) {\n const q = b / a;\n const r = b % a;\n const m = x - u * q;\n const n = y - v * q;\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n const gcd2 = b;\n if (gcd2 !== _1n2)\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}\nfunction sqrt3mod4(Fp, n) {\n const p1div4 = (Fp.ORDER + _1n2) / _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}\nfunction sqrt9mod16(P) {\n const Fp_ = Field(P);\n const tn = tonelliShanks(P);\n const c1 = tn(Fp_, Fp_.neg(Fp_.ONE));\n const c2 = tn(Fp_, c1);\n const c3 = tn(Fp_, Fp_.neg(c1));\n const c4 = (P + _7n) / _16n;\n return (Fp, n) => {\n let tv1 = Fp.pow(n, c4);\n let tv2 = Fp.mul(tv1, c1);\n const tv3 = Fp.mul(tv1, c2);\n const tv4 = Fp.mul(tv1, c3);\n const e1 = Fp.eql(Fp.sqr(tv2), n);\n const e2 = Fp.eql(Fp.sqr(tv3), n);\n tv1 = Fp.cmov(tv1, tv2, e1);\n tv2 = Fp.cmov(tv4, tv3, e2);\n const e3 = Fp.eql(Fp.sqr(tv2), n);\n const root = Fp.cmov(tv1, tv2, e3);\n assertIsSquare(Fp, root, n);\n return root;\n };\n}\nfunction tonelliShanks(P) {\n if (P < _3n)\n throw new Error(\"sqrt is not defined for small field\");\n let Q2 = P - _1n2;\n let S = 0;\n while (Q2 % _2n === _0n2) {\n Q2 /= _2n;\n S++;\n }\n let Z = _2n;\n const _Fp = Field(P);\n while (FpLegendre(_Fp, Z) === 1) {\n if (Z++ > 1e3)\n throw new Error(\"Cannot find square root: probably non-prime P\");\n }\n if (S === 1)\n return sqrt3mod4;\n let cc = _Fp.pow(Z, Q2);\n const Q1div2 = (Q2 + _1n2) / _2n;\n return function tonelliSlow(Fp, n) {\n if (Fp.is0(n))\n return n;\n if (FpLegendre(Fp, n) !== 1)\n throw new Error(\"Cannot find square root\");\n let M = S;\n let c = Fp.mul(Fp.ONE, cc);\n let t = Fp.pow(n, Q2);\n let R = Fp.pow(n, Q1div2);\n while (!Fp.eql(t, Fp.ONE)) {\n if (Fp.is0(t))\n return Fp.ZERO;\n let i = 1;\n let t_tmp = Fp.sqr(t);\n while (!Fp.eql(t_tmp, Fp.ONE)) {\n i++;\n t_tmp = Fp.sqr(t_tmp);\n if (i === M)\n throw new Error(\"Cannot find square root\");\n }\n const exponent = _1n2 << BigInt(M - i - 1);\n const b = Fp.pow(c, exponent);\n M = i;\n c = Fp.sqr(b);\n t = Fp.mul(t, c);\n R = Fp.mul(R, b);\n }\n return R;\n };\n}\nfunction FpSqrt(P) {\n if (P % _4n === _3n)\n return sqrt3mod4;\n if (P % _8n === _5n)\n return sqrt5mod8;\n if (P % _16n === _9n)\n return sqrt9mod16(P);\n return tonelliShanks(P);\n}\nvar FIELD_FIELDS = [\n \"create\",\n \"isValid\",\n \"is0\",\n \"neg\",\n \"inv\",\n \"sqrt\",\n \"sqr\",\n \"eql\",\n \"add\",\n \"sub\",\n \"mul\",\n \"pow\",\n \"div\",\n \"addN\",\n \"subN\",\n \"mulN\",\n \"sqrN\"\n];\nfunction validateField(field) {\n const initial = {\n ORDER: \"bigint\",\n BYTES: \"number\",\n BITS: \"number\"\n };\n const opts2 = FIELD_FIELDS.reduce((map, val) => {\n map[val] = \"function\";\n return map;\n }, initial);\n validateObject(field, opts2);\n return field;\n}\nfunction FpPow(Fp, num, power) {\n if (power < _0n2)\n throw new Error(\"invalid exponent, negatives unsupported\");\n if (power === _0n2)\n return Fp.ONE;\n if (power === _1n2)\n return num;\n let p = Fp.ONE;\n let d = num;\n while (power > _0n2) {\n if (power & _1n2)\n p = Fp.mul(p, d);\n d = Fp.sqr(d);\n power >>= _1n2;\n }\n return p;\n}\nfunction FpInvertBatch(Fp, nums, passZero = false) {\n const inverted = new Array(nums.length).fill(passZero ? Fp.ZERO : void 0);\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 const invertedAcc = Fp.inv(multipliedAcc);\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}\nfunction FpLegendre(Fp, n) {\n const p1mod2 = (Fp.ORDER - _1n2) / _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}\nfunction nLength(n, nBitLength) {\n if (nBitLength !== void 0)\n anumber4(nBitLength);\n const _nBitLength = nBitLength !== void 0 ? nBitLength : n.toString(2).length;\n const nByteLength = Math.ceil(_nBitLength / 8);\n return { nBitLength: _nBitLength, nByteLength };\n}\nvar _Field = class {\n ORDER;\n BITS;\n BYTES;\n isLE;\n ZERO = _0n2;\n ONE = _1n2;\n _lengths;\n _sqrt;\n // cached sqrt\n _mod;\n constructor(ORDER, opts2 = {}) {\n if (ORDER <= _0n2)\n throw new Error(\"invalid field: expected ORDER > 0, got \" + ORDER);\n let _nbitLength = void 0;\n this.isLE = false;\n if (opts2 != null && typeof opts2 === \"object\") {\n if (typeof opts2.BITS === \"number\")\n _nbitLength = opts2.BITS;\n if (typeof opts2.sqrt === \"function\")\n this.sqrt = opts2.sqrt;\n if (typeof opts2.isLE === \"boolean\")\n this.isLE = opts2.isLE;\n if (opts2.allowedLengths)\n this._lengths = opts2.allowedLengths?.slice();\n if (typeof opts2.modFromBytes === \"boolean\")\n this._mod = opts2.modFromBytes;\n }\n const { nBitLength, nByteLength } = nLength(ORDER, _nbitLength);\n if (nByteLength > 2048)\n throw new Error(\"invalid field: expected ORDER of <= 2048 bytes\");\n this.ORDER = ORDER;\n this.BITS = nBitLength;\n this.BYTES = nByteLength;\n this._sqrt = void 0;\n Object.preventExtensions(this);\n }\n create(num) {\n return mod(num, this.ORDER);\n }\n isValid(num) {\n if (typeof num !== \"bigint\")\n throw new Error(\"invalid field element: expected bigint, got \" + typeof num);\n return _0n2 <= num && num < this.ORDER;\n }\n is0(num) {\n return num === _0n2;\n }\n // is valid and invertible\n isValidNot0(num) {\n return !this.is0(num) && this.isValid(num);\n }\n isOdd(num) {\n return (num & _1n2) === _1n2;\n }\n neg(num) {\n return mod(-num, this.ORDER);\n }\n eql(lhs, rhs) {\n return lhs === rhs;\n }\n sqr(num) {\n return mod(num * num, this.ORDER);\n }\n add(lhs, rhs) {\n return mod(lhs + rhs, this.ORDER);\n }\n sub(lhs, rhs) {\n return mod(lhs - rhs, this.ORDER);\n }\n mul(lhs, rhs) {\n return mod(lhs * rhs, this.ORDER);\n }\n pow(num, power) {\n return FpPow(this, num, power);\n }\n div(lhs, rhs) {\n return mod(lhs * invert(rhs, this.ORDER), this.ORDER);\n }\n // Same as above, but doesn't normalize\n sqrN(num) {\n return num * num;\n }\n addN(lhs, rhs) {\n return lhs + rhs;\n }\n subN(lhs, rhs) {\n return lhs - rhs;\n }\n mulN(lhs, rhs) {\n return lhs * rhs;\n }\n inv(num) {\n return invert(num, this.ORDER);\n }\n sqrt(num) {\n if (!this._sqrt)\n this._sqrt = FpSqrt(this.ORDER);\n return this._sqrt(this, num);\n }\n toBytes(num) {\n return this.isLE ? numberToBytesLE(num, this.BYTES) : numberToBytesBE2(num, this.BYTES);\n }\n fromBytes(bytes, skipValidation = false) {\n abytes4(bytes);\n const { _lengths: allowedLengths, BYTES, isLE: isLE4, ORDER, _mod: modFromBytes } = this;\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 padded.set(bytes, isLE4 ? 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 = isLE4 ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n if (modFromBytes)\n scalar = mod(scalar, ORDER);\n if (!skipValidation) {\n if (!this.isValid(scalar))\n throw new Error(\"invalid field element: outside of range 0..ORDER\");\n }\n return scalar;\n }\n // TODO: we don't need it here, move out to separate fn\n invertBatch(lst) {\n return FpInvertBatch(this, lst);\n }\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, condition) {\n return condition ? b : a;\n }\n};\nfunction Field(ORDER, opts2 = {}) {\n return new _Field(ORDER, opts2);\n}\nfunction 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}\nfunction getMinHashLength(fieldOrder) {\n const length = getFieldBytesLength(fieldOrder);\n return length + Math.ceil(length / 2);\n}\nfunction mapHashToField(key, fieldOrder, isLE4 = false) {\n abytes4(key);\n const len = key.length;\n const fieldLen = getFieldBytesLength(fieldOrder);\n const minLen = getMinHashLength(fieldOrder);\n if (len < 16 || len < minLen || len > 1024)\n throw new Error(\"expected \" + minLen + \"-1024 bytes of input, got \" + len);\n const num = isLE4 ? bytesToNumberLE(key) : bytesToNumberBE(key);\n const reduced = mod(num, fieldOrder - _1n2) + _1n2;\n return isLE4 ? numberToBytesLE(reduced, fieldLen) : numberToBytesBE2(reduced, fieldLen);\n}\n\n// ../../node_modules/@noble/curves/abstract/curve.js\nvar _0n3 = /* @__PURE__ */ BigInt(0);\nvar _1n3 = /* @__PURE__ */ BigInt(1);\nfunction negateCt(condition, item) {\n const neg = item.negate();\n return condition ? neg : item;\n}\nfunction 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;\n const windowSize = 2 ** (W - 1);\n const maxNumber = 2 ** W;\n const mask = bitMask(W);\n const shiftBy = BigInt(W);\n return { windows, windowSize, mask, maxNumber, shiftBy };\n}\nfunction calcOffsets(n, window2, wOpts) {\n const { windowSize, mask, maxNumber, shiftBy } = wOpts;\n let wbits = Number(n & mask);\n let nextN = n >> shiftBy;\n if (wbits > windowSize) {\n wbits -= maxNumber;\n nextN += _1n3;\n }\n const offsetStart = window2 * windowSize;\n const offset = offsetStart + Math.abs(wbits) - 1;\n const isZero = wbits === 0;\n const isNeg = wbits < 0;\n const isNegF = window2 % 2 !== 0;\n const offsetF = offsetStart;\n return { nextN, offset, isZero, isNeg, isNegF, offsetF };\n}\nvar pointPrecomputes = /* @__PURE__ */ new WeakMap();\nvar pointWindowSizes = /* @__PURE__ */ new WeakMap();\nfunction getW(P) {\n return pointWindowSizes.get(P) || 1;\n}\nfunction assert0(n) {\n if (n !== _0n3)\n throw new Error(\"invalid wNAF\");\n}\nvar wNAF = class {\n BASE;\n ZERO;\n Fn;\n bits;\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 > _0n3) {\n if (n & _1n3)\n p = p.add(d);\n d = d.double();\n n >>= _1n3;\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^(\uD835\uDC4A\u22121) * (Math.ceil(\uD835\uDC5B / \uD835\uDC4A) + 1), where:\n * - \uD835\uDC4A is the window size\n * - \uD835\uDC5B 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 window2 = 0; window2 < windows; window2++) {\n base = p;\n points.push(base);\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 if (!this.Fn.isValid(n))\n throw new Error(\"invalid scalar\");\n let p = this.ZERO;\n let f = this.BASE;\n const wo = calcWOpts(W, this.bits);\n for (let window2 = 0; window2 < wo.windows; window2++) {\n const { nextN, offset, isZero, isNeg, isNegF, offsetF } = calcOffsets(n, window2, wo);\n n = nextN;\n if (isZero) {\n f = f.add(negateCt(isNegF, precomputes[offsetF]));\n } else {\n p = p.add(negateCt(isNeg, precomputes[offset]));\n }\n }\n assert0(n);\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 window2 = 0; window2 < wo.windows; window2++) {\n if (n === _0n3)\n break;\n const { nextN, offset, isZero, isNeg } = calcOffsets(n, window2, wo);\n n = nextN;\n if (isZero) {\n continue;\n } else {\n const item = precomputes[offset];\n acc = acc.add(isNeg ? item.negate() : item);\n }\n }\n assert0(n);\n return acc;\n }\n getPrecomputes(W, point, transform) {\n let comp = pointPrecomputes.get(point);\n if (!comp) {\n comp = this.precomputeWindow(point, W);\n if (W !== 1) {\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);\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};\nfunction mulEndoUnsafe(Point, point, k1, k2) {\n let acc = point;\n let p1 = Point.ZERO;\n let p2 = Point.ZERO;\n while (k1 > _0n3 || k2 > _0n3) {\n if (k1 & _1n3)\n p1 = p1.add(acc);\n if (k2 & _1n3)\n p2 = p2.add(acc);\n acc = acc.double();\n k1 >>= _1n3;\n k2 >>= _1n3;\n }\n return { p1, p2 };\n}\nfunction createField(order, field, isLE4) {\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 } else {\n return Field(order, { isLE: isLE4 });\n }\n}\nfunction createCurveFields(type, CURVE, curveOpts = {}, FpFnLE) {\n if (FpFnLE === void 0)\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 > _0n3))\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 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}\nfunction createKeygen(randomSecretKey, getPublicKey) {\n return function keygen(seed) {\n const secretKey = randomSecretKey(seed);\n return { secretKey, publicKey: getPublicKey(secretKey) };\n };\n}\n\n// ../../node_modules/@noble/curves/abstract/montgomery.js\nvar _0n4 = BigInt(0);\nvar _1n4 = BigInt(1);\nvar _2n2 = BigInt(2);\nfunction validateOpts(curve) {\n validateObject(curve, {\n adjustScalarBytes: \"function\",\n powPminus2: \"function\"\n });\n return Object.freeze({ ...curve });\n}\nfunction montgomery(curveDef) {\n const CURVE = validateOpts(curveDef);\n const { P, type, adjustScalarBytes: adjustScalarBytes2, powPminus2, randomBytes: rand } = CURVE;\n const is25519 = type === \"x25519\";\n if (!is25519 && type !== \"x448\")\n throw new Error(\"invalid type\");\n const randomBytes_ = rand || randomBytes3;\n const montgomeryBits = is25519 ? 255 : 448;\n const fieldLen = is25519 ? 32 : 56;\n const Gu = is25519 ? BigInt(9) : BigInt(5);\n const a24 = is25519 ? BigInt(121665) : BigInt(39081);\n const minScalar = is25519 ? _2n2 ** BigInt(254) : _2n2 ** BigInt(447);\n const maxAdded = is25519 ? BigInt(8) * _2n2 ** BigInt(251) - _1n4 : BigInt(4) * _2n2 ** BigInt(445) - _1n4;\n const maxScalar = minScalar + maxAdded + _1n4;\n const modP = (n) => mod(n, P);\n const GuBytes = encodeU(Gu);\n function encodeU(u) {\n return numberToBytesLE(modP(u), fieldLen);\n }\n function decodeU(u) {\n const _u = copyBytes2(abytes4(u, fieldLen, \"uCoordinate\"));\n if (is25519)\n _u[31] &= 127;\n return modP(bytesToNumberLE(_u));\n }\n function decodeScalar(scalar) {\n return bytesToNumberLE(adjustScalarBytes2(copyBytes2(abytes4(scalar, fieldLen, \"scalar\"))));\n }\n function scalarMult2(scalar, u) {\n const pu = montgomeryLadder(decodeU(u), decodeScalar(scalar));\n if (pu === _0n4)\n throw new Error(\"invalid private or public key received\");\n return encodeU(pu);\n }\n function scalarMultBase2(scalar) {\n return scalarMult2(scalar, GuBytes);\n }\n const getPublicKey = scalarMultBase2;\n const getSharedSecret = scalarMult2;\n function cswap(swap, x_2, x_3) {\n const dummy = modP(swap * (x_2 - x_3));\n x_2 = modP(x_2 - dummy);\n x_3 = modP(x_3 + dummy);\n return { x_2, x_3 };\n }\n function montgomeryLadder(u, scalar) {\n aInRange(\"u\", u, _0n4, P);\n aInRange(\"scalar\", scalar, minScalar, maxScalar);\n const k = scalar;\n const x_1 = u;\n let x_2 = _1n4;\n let z_2 = _0n4;\n let x_3 = u;\n let z_3 = _1n4;\n let swap = _0n4;\n for (let t = BigInt(montgomeryBits - 1); t >= _0n4; t--) {\n const k_t = k >> t & _1n4;\n swap ^= k_t;\n ({ x_2, x_3 } = cswap(swap, x_2, x_3));\n ({ x_2: z_2, x_3: z_3 } = cswap(swap, z_2, z_3));\n swap = k_t;\n const A = x_2 + z_2;\n const AA = modP(A * A);\n const B = x_2 - z_2;\n const BB = modP(B * B);\n const E = AA - BB;\n const C = x_3 + z_3;\n const D = x_3 - z_3;\n const DA = modP(D * A);\n const CB = modP(C * B);\n const dacb = DA + CB;\n const da_cb = DA - CB;\n x_3 = modP(dacb * dacb);\n z_3 = modP(x_1 * modP(da_cb * da_cb));\n x_2 = modP(AA * BB);\n z_2 = modP(E * (AA + modP(a24 * E)));\n }\n ({ x_2, x_3 } = cswap(swap, x_2, x_3));\n ({ x_2: z_2, x_3: z_3 } = cswap(swap, z_2, z_3));\n const z2 = powPminus2(z_2);\n return modP(x_2 * z2);\n }\n const lengths = {\n secretKey: fieldLen,\n publicKey: fieldLen,\n seed: fieldLen\n };\n const randomSecretKey = (seed = randomBytes_(fieldLen)) => {\n abytes4(seed, lengths.seed, \"seed\");\n return seed;\n };\n const utils = { randomSecretKey };\n return Object.freeze({\n keygen: createKeygen(randomSecretKey, getPublicKey),\n getSharedSecret,\n getPublicKey,\n scalarMult: scalarMult2,\n scalarMultBase: scalarMultBase2,\n utils,\n GuBytes: GuBytes.slice(),\n lengths\n });\n}\n\n// ../../node_modules/@noble/curves/node_modules/@noble/hashes/hmac.js\nvar _HMAC2 = class {\n oHash;\n iHash;\n blockLen;\n outputLen;\n finished = false;\n destroyed = false;\n constructor(hash, key) {\n ahash2(hash);\n abytes4(key, void 0, \"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 pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 54;\n this.iHash.update(pad);\n this.oHash = hash.create();\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 54 ^ 92;\n this.oHash.update(pad);\n clean3(pad);\n }\n update(buf) {\n aexists3(this);\n this.iHash.update(buf);\n return this;\n }\n digestInto(out) {\n aexists3(this);\n abytes4(out, this.outputLen, \"output\");\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 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};\nvar hmac2 = (hash, key, message) => new _HMAC2(hash, key).update(message).digest();\nhmac2.create = (hash, key) => new _HMAC2(hash, key);\n\n// ../../node_modules/@noble/curves/abstract/weierstrass.js\nvar divNearest = (num, den) => (num + (num >= 0 ? den : -den) / _2n3) / den;\nfunction _splitEndoScalar(k, basis, n) {\n const [[a1, b1], [a2, b2]] = basis;\n const c1 = divNearest(b2 * k, n);\n const c2 = divNearest(-b1 * k, n);\n let k1 = k - c1 * a1 - c2 * a2;\n let k2 = -c1 * b1 - c2 * b2;\n const k1neg = k1 < _0n5;\n const k2neg = k2 < _0n5;\n if (k1neg)\n k1 = -k1;\n if (k2neg)\n k2 = -k2;\n const MAX_NUM = bitMask(Math.ceil(bitLen(n) / 2)) + _1n5;\n if (k1 < _0n5 || k1 >= MAX_NUM || k2 < _0n5 || 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(opts2, def) {\n const optsn = {};\n for (let optName of Object.keys(def)) {\n optsn[optName] = opts2[optName] === void 0 ? def[optName] : opts2[optName];\n }\n abool2(optsn.lowS, \"lowS\");\n abool2(optsn.prehash, \"prehash\");\n if (optsn.format !== void 0)\n validateSigFormat(optsn.format);\n return optsn;\n}\nvar DERErr = class extends Error {\n constructor(m = \"\") {\n super(m);\n }\n};\nvar 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 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);\n let length = 0;\n if (!isLong)\n length = first;\n else {\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\");\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 < _0n5)\n throw new E(\"integer: negative integers are not allowed\");\n let hex = numberToHexUnpadded(num);\n if (Number.parseInt(hex[0], 16) & 8)\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] === 0 && !(data[1] & 128))\n throw new E(\"invalid signature integer: unnecessary leading zero\");\n return bytesToNumberBE(data);\n }\n },\n toSig(bytes) {\n const { Err: E, _int: int, _tlv: tlv } = DER;\n const data = abytes4(bytes, void 0, \"signature\");\n const { v: seqBytes, l: seqLeftBytes } = tlv.decode(48, data);\n if (seqLeftBytes.length)\n throw new E(\"invalid signature: left bytes after parsing\");\n const { v: rBytes, l: rLeftBytes } = tlv.decode(2, seqBytes);\n const { v: sBytes, l: sLeftBytes } = tlv.decode(2, 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(2, int.encode(sig.r));\n const ss = tlv.encode(2, int.encode(sig.s));\n const seq = rs + ss;\n return tlv.encode(48, seq);\n }\n};\nvar _0n5 = BigInt(0);\nvar _1n5 = BigInt(1);\nvar _2n3 = BigInt(2);\nvar _3n2 = BigInt(3);\nvar _4n2 = BigInt(4);\nfunction weierstrass(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 });\n const { endo } = extraOpts;\n if (endo) {\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 function pointToBytes(_c, point, isCompressed) {\n const { x, y } = point.toAffine();\n const bx = Fp.toBytes(x);\n abool2(isCompressed, \"isCompressed\");\n if (isCompressed) {\n assertCompressionIsSupported();\n const hasEvenY = !Fp.isOdd(y);\n return concatBytes2(pprefix(hasEvenY), bx);\n } else {\n return concatBytes2(Uint8Array.of(4), bx, Fp.toBytes(y));\n }\n }\n function pointFromBytes(bytes) {\n abytes4(bytes, void 0, \"Point\");\n const { publicKey: comp, publicKeyUncompressed: uncomp } = lengths;\n const length = bytes.length;\n const head = bytes[0];\n const tail = bytes.subarray(1);\n if (length === comp && (head === 2 || head === 3)) {\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);\n let y;\n try {\n y = Fp.sqrt(y2);\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 evenY = Fp.isOdd(y);\n const evenH = (head & 1) === 1;\n if (evenH !== evenY)\n y = Fp.neg(y);\n return { x, y };\n } else if (length === uncomp && head === 4) {\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 } 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);\n const x3 = Fp.mul(x2, x);\n return Fp.add(Fp.add(x3, Fp.mul(x, CURVE.a)), CURVE.b);\n }\n function isValidXY(x, y) {\n const left = Fp.sqr(y);\n const right = weierstrassEquation(x);\n return Fp.eql(left, right);\n }\n if (!isValidXY(CURVE.Gx, CURVE.Gy))\n throw new Error(\"bad curve params: generator point\");\n const _4a3 = Fp.mul(Fp.pow(CURVE.a, _3n2), _4n2);\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 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(\"Weierstrass Point 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 const toAffineMemo = memoized((p, iz) => {\n const { X, Y, Z } = p;\n if (Fp.eql(Z, Fp.ONE))\n return { x: X, y: Y };\n const is0 = p.is0();\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 const assertValidMemo = memoized((p) => {\n if (p.is0()) {\n if (extraOpts.allowInfinityPoint && !Fp.is0(p.Y))\n return;\n throw new Error(\"bad point: ZERO\");\n }\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 class Point {\n // base / generator point\n static BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);\n // zero / infinity / identity point\n static ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO);\n // 0, 1, 0\n // math field\n static Fp = Fp;\n // scalar field\n static Fn = Fn;\n X;\n Y;\n Z;\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 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(abytes4(bytes, void 0, \"point\")));\n P.assertValidity();\n return P;\n }\n static fromHex(hex) {\n return Point.fromBytes(hexToBytes(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(_3n2);\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, _3n2);\n const { X: X1, Y: Y1, Z: Z1 } = this;\n let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO;\n let t0 = Fp.mul(X1, X1);\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);\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);\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);\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);\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);\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);\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;\n const a = CURVE.a;\n const b3 = Fp.mul(CURVE.b, _3n2);\n let t0 = Fp.mul(X1, X2);\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);\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);\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);\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);\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);\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);\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);\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);\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: endo2 } = extraOpts;\n if (!Fn.isValidNot0(scalar))\n throw new Error(\"invalid scalar: out of range\");\n let point, fake;\n const mul = (n) => wnaf.cached(this, n, (p) => normalizeZ(Point, p));\n if (endo2) {\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(endo2.beta, k1p, k2p, k1neg, k2neg);\n } else {\n const { p, f } = mul(scalar);\n point = p;\n fake = f;\n }\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: endo2 } = extraOpts;\n const p = this;\n if (!Fn.isValid(sc))\n throw new Error(\"invalid scalar: out of range\");\n if (sc === _0n5 || p.is0())\n return Point.ZERO;\n if (sc === _1n5)\n return p;\n if (wnaf.hasCache(this))\n return this.multiply(sc);\n if (endo2) {\n const { k1neg, k1, k2neg, k2 } = splitEndoScalarN(sc);\n const { p1, p2 } = mulEndoUnsafe(Point, p, k1, k2);\n return finishEndo(endo2.beta, p1, p2, k1neg, k2neg);\n } else {\n return wnaf.unsafe(p, sc);\n }\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 === _1n5)\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 === _1n5)\n return this;\n if (clearCofactor)\n return clearCofactor(Point, this);\n return this.multiplyUnsafe(cofactor);\n }\n isSmallOrder() {\n return this.multiplyUnsafe(cofactor).is0();\n }\n toBytes(isCompressed = true) {\n abool2(isCompressed, \"isCompressed\");\n this.assertValidity();\n return encodePoint(Point, this, isCompressed);\n }\n toHex(isCompressed = true) {\n return bytesToHex2(this.toBytes(isCompressed));\n }\n toString() {\n return `<Point ${this.is0() ? \"ZERO\" : this.toHex()}>`;\n }\n }\n const bits = Fn.BITS;\n const wnaf = new wNAF(Point, extraOpts.endo ? Math.ceil(bits / 2) : bits);\n Point.BASE.precompute(8);\n return Point;\n}\nfunction pprefix(hasEvenY) {\n return Uint8Array.of(hasEvenY ? 2 : 3);\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}\nfunction ecdh(Point, ecdhOpts = {}) {\n const { Fn } = Point;\n const randomBytes_ = ecdhOpts.randomBytes || randomBytes3;\n const lengths = Object.assign(getWLengths(Point.Fp, Fn), { seed: getMinHashLength(Fn.ORDER) });\n function isValidSecretKey(secretKey) {\n try {\n const num = Fn.fromBytes(secretKey);\n return Fn.isValidNot0(num);\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 } catch (error) {\n return false;\n }\n }\n function randomSecretKey(seed = randomBytes_(lengths.seed)) {\n return mapHashToField(abytes4(seed, lengths.seed, \"seed\"), Fn.ORDER);\n }\n function getPublicKey(secretKey, isCompressed = true) {\n return Point.BASE.multiply(Fn.fromBytes(secretKey)).toBytes(isCompressed);\n }\n function isProbPub(item) {\n const { secretKey, publicKey, publicKeyUncompressed } = lengths;\n if (!isBytes4(item))\n return void 0;\n if (\"_lengths\" in Fn && Fn._lengths || secretKey === publicKey)\n return void 0;\n const l = abytes4(item, void 0, \"key\").length;\n return l === publicKey || l === publicKeyUncompressed;\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 = Fn.fromBytes(secretKeyA);\n const b = Point.fromBytes(publicKeyB);\n return b.multiply(s).toBytes(isCompressed);\n }\n const utils = {\n isValidSecretKey,\n isValidPublicKey,\n randomSecretKey\n };\n const keygen = createKeygen(randomSecretKey, getPublicKey);\n return Object.freeze({ getPublicKey, getSharedSecret, keygen, Point, utils, lengths });\n}\nfunction ecdsa(Point, hash, ecdsaOpts = {}) {\n ahash2(hash);\n validateObject(ecdsaOpts, {}, {\n hmac: \"function\",\n lowS: \"boolean\",\n randomBytes: \"function\",\n bits2int: \"function\",\n bits2int_modN: \"function\"\n });\n ecdsaOpts = Object.assign({}, ecdsaOpts);\n const randomBytes6 = ecdsaOpts.randomBytes || randomBytes3;\n const hmac4 = ecdsaOpts.hmac || ((key, msg) => hmac2(hash, key, msg));\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: true,\n lowS: typeof ecdsaOpts.lowS === \"boolean\" ? ecdsaOpts.lowS : true,\n format: \"compact\",\n extraEntropy: false\n };\n const hasLargeCofactor = CURVE_ORDER * _2n3 < Fp.ORDER;\n function isBiggerThanHalfOrder(number) {\n const HALF = CURVE_ORDER >> _1n5;\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 assertSmallCofactor() {\n if (hasLargeCofactor)\n throw new Error('\"recovered\" sig type is not supported for cofactor >2 curves');\n }\n function validateSigLength(bytes, format) {\n validateSigFormat(format);\n const size = lengths.signature;\n const sizer = format === \"compact\" ? size : format === \"recovered\" ? size + 1 : void 0;\n return abytes4(bytes, sizer);\n }\n class Signature {\n r;\n s;\n recovery;\n constructor(r, s, recovery) {\n this.r = validateRS(\"r\", r);\n this.s = validateRS(\"s\", s);\n if (recovery != null) {\n assertSmallCofactor();\n if (![0, 1, 2, 3].includes(recovery))\n throw new Error(\"invalid recovery id\");\n this.recovery = recovery;\n }\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: r2, s: s2 } = DER.toSig(abytes4(bytes));\n return new Signature(r2, s2);\n }\n if (format === \"recovered\") {\n recid = bytes[0];\n format = \"compact\";\n bytes = bytes.subarray(1);\n }\n const L = lengths.signature / 2;\n const r = bytes.subarray(0, L);\n const s = bytes.subarray(L, L * 2);\n return new Signature(Fn.fromBytes(r), Fn.fromBytes(s), recid);\n }\n static fromHex(hex, format) {\n return this.fromBytes(hexToBytes(hex), format);\n }\n assertRecovery() {\n const { recovery } = this;\n if (recovery == null)\n throw new Error(\"invalid recovery id: must be present\");\n return recovery;\n }\n addRecoveryBit(recovery) {\n return new Signature(this.r, this.s, recovery);\n }\n recoverPublicKey(messageHash) {\n const { r, s } = this;\n const recovery = this.assertRecovery();\n const radj = recovery === 2 || recovery === 3 ? r + CURVE_ORDER : r;\n if (!Fp.isValid(radj))\n throw new Error(\"invalid recovery id: sig.r+curve.n != R.x\");\n const x = Fp.toBytes(radj);\n const R = Point.fromBytes(concatBytes2(pprefix((recovery & 1) === 0), x));\n const ir = Fn.inv(radj);\n const h = bits2int_modN(abytes4(messageHash, void 0, \"msgHash\"));\n const u1 = Fn.create(-h * ir);\n const u2 = Fn.create(s * ir);\n const Q2 = Point.BASE.multiplyUnsafe(u1).add(R.multiplyUnsafe(u2));\n if (Q2.is0())\n throw new Error(\"invalid recovery: point at infinify\");\n Q2.assertValidity();\n return Q2;\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, s } = this;\n const rb = Fn.toBytes(r);\n const sb = Fn.toBytes(s);\n if (format === \"recovered\") {\n assertSmallCofactor();\n return concatBytes2(Uint8Array.of(this.assertRecovery()), rb, sb);\n }\n return concatBytes2(rb, sb);\n }\n toHex(format) {\n return bytesToHex2(this.toBytes(format));\n }\n }\n const bits2int = ecdsaOpts.bits2int || function bits2int_def(bytes) {\n if (bytes.length > 8192)\n throw new Error(\"input is too large\");\n const num = bytesToNumberBE(bytes);\n const delta = bytes.length * 8 - fnBits;\n return delta > 0 ? num >> BigInt(delta) : num;\n };\n const bits2int_modN = ecdsaOpts.bits2int_modN || function bits2int_modN_def(bytes) {\n return Fn.create(bits2int(bytes));\n };\n const ORDER_MASK = bitMask(fnBits);\n function int2octets(num) {\n aInRange(\"num < 2^\" + fnBits, num, _0n5, ORDER_MASK);\n return Fn.toBytes(num);\n }\n function validateMsgAndHash(message, prehash) {\n abytes4(message, void 0, \"message\");\n return prehash ? abytes4(hash(message), void 0, \"prehashed message\") : message;\n }\n function prepSig(message, secretKey, opts2) {\n const { lowS, prehash, extraEntropy } = validateSigOpts(opts2, defaultSigOpts);\n message = validateMsgAndHash(message, prehash);\n const h1int = bits2int_modN(message);\n const d = Fn.fromBytes(secretKey);\n if (!Fn.isValidNot0(d))\n throw new Error(\"invalid private key\");\n const seedArgs = [int2octets(d), int2octets(h1int)];\n if (extraEntropy != null && extraEntropy !== false) {\n const e = extraEntropy === true ? randomBytes6(lengths.secretKey) : extraEntropy;\n seedArgs.push(abytes4(e, void 0, \"extraEntropy\"));\n }\n const seed = concatBytes2(...seedArgs);\n const m = h1int;\n function k2sig(kBytes) {\n const k = bits2int(kBytes);\n if (!Fn.isValidNot0(k))\n return;\n const ik = Fn.inv(k);\n const q = Point.BASE.multiply(k).toAffine();\n const r = Fn.create(q.x);\n if (r === _0n5)\n return;\n const s = Fn.create(ik * Fn.create(m + r * d));\n if (s === _0n5)\n return;\n let recovery = (q.x === r ? 0 : 2) | Number(q.y & _1n5);\n let normS = s;\n if (lowS && isBiggerThanHalfOrder(s)) {\n normS = Fn.neg(s);\n recovery ^= 1;\n }\n return new Signature(r, normS, hasLargeCofactor ? void 0 : recovery);\n }\n return { seed, k2sig };\n }\n function sign(message, secretKey, opts2 = {}) {\n const { seed, k2sig } = prepSig(message, secretKey, opts2);\n const drbg = createHmacDrbg(hash.outputLen, Fn.BYTES, hmac4);\n const sig = drbg(seed, k2sig);\n return sig.toBytes(opts2.format);\n }\n function verify(signature, message, publicKey, opts2 = {}) {\n const { lowS, prehash, format } = validateSigOpts(opts2, defaultSigOpts);\n publicKey = abytes4(publicKey, void 0, \"publicKey\");\n message = validateMsgAndHash(message, prehash);\n if (!isBytes4(signature)) {\n const end = signature instanceof Signature ? \", use sig.toBytes()\" : \"\";\n throw new Error(\"verify expects Uint8Array signature\" + end);\n }\n validateSigLength(signature, format);\n try {\n const sig = Signature.fromBytes(signature, format);\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);\n const is = Fn.inv(s);\n const u1 = Fn.create(h * is);\n const u2 = Fn.create(r * is);\n const R = Point.BASE.multiplyUnsafe(u1).add(P.multiplyUnsafe(u2));\n if (R.is0())\n return false;\n const v = Fn.create(R.x);\n return v === r;\n } catch (e) {\n return false;\n }\n }\n function recoverPublicKey(signature, message, opts2 = {}) {\n const { prehash } = validateSigOpts(opts2, 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\n// ../../node_modules/@noble/curves/node_modules/@noble/hashes/_md.js\nfunction Chi2(a, b, c) {\n return a & b ^ ~a & c;\n}\nfunction Maj2(a, b, c) {\n return a & b ^ a & c ^ b & c;\n}\nvar HashMD2 = class {\n blockLen;\n outputLen;\n padOffset;\n isLE;\n // For partial updates less than block size\n buffer;\n view;\n finished = false;\n length = 0;\n pos = 0;\n destroyed = false;\n constructor(blockLen, outputLen, padOffset, isLE4) {\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE4;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView3(this.buffer);\n }\n update(data) {\n aexists3(this);\n abytes4(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 if (take === blockLen) {\n const dataView = createView3(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 aexists3(this);\n aoutput3(out, this);\n this.finished = true;\n const { buffer, view, blockLen, isLE: isLE4 } = this;\n let { pos } = this;\n buffer[pos++] = 128;\n clean3(this.buffer.subarray(pos));\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n for (let i = pos; i < blockLen; i++)\n buffer[i] = 0;\n view.setBigUint64(blockLen - 8, BigInt(this.length * 8), isLE4);\n this.process(view, 0);\n const oview = createView3(out);\n const len = this.outputLen;\n if (len % 4)\n throw new Error(\"_sha2: outputLen must 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], isLE4);\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 ||= 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};\nvar SHA256_IV2 = /* @__PURE__ */ Uint32Array.from([\n 1779033703,\n 3144134277,\n 1013904242,\n 2773480762,\n 1359893119,\n 2600822924,\n 528734635,\n 1541459225\n]);\nvar SHA384_IV2 = /* @__PURE__ */ Uint32Array.from([\n 3418070365,\n 3238371032,\n 1654270250,\n 914150663,\n 2438529370,\n 812702999,\n 355462360,\n 4144912697,\n 1731405415,\n 4290775857,\n 2394180231,\n 1750603025,\n 3675008525,\n 1694076839,\n 1203062813,\n 3204075428\n]);\n\n// ../../node_modules/@noble/curves/node_modules/@noble/hashes/_u64.js\nvar U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nvar _32n = /* @__PURE__ */ BigInt(32);\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 const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for (let i = 0; i < len; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\nvar shrSH = (h, _l, s) => h >>> s;\nvar shrSL = (h, l, s) => h << 32 - s | l >>> s;\nvar rotrSH = (h, l, s) => h >>> s | l << 32 - s;\nvar rotrSL = (h, l, s) => h << 32 - s | l >>> s;\nvar rotrBH = (h, l, s) => h << 64 - s | l >>> s - 32;\nvar rotrBL = (h, l, s) => h >>> s - 32 | l << 64 - s;\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}\nvar add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nvar add3H = (low, Ah, Bh, Ch) => Ah + Bh + Ch + (low / 2 ** 32 | 0) | 0;\nvar add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nvar add4H = (low, Ah, Bh, Ch, Dh) => Ah + Bh + Ch + Dh + (low / 2 ** 32 | 0) | 0;\nvar add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nvar add5H = (low, Ah, Bh, Ch, Dh, Eh) => Ah + Bh + Ch + Dh + Eh + (low / 2 ** 32 | 0) | 0;\n\n// ../../node_modules/@noble/curves/node_modules/@noble/hashes/sha2.js\nvar SHA256_K2 = /* @__PURE__ */ Uint32Array.from([\n 1116352408,\n 1899447441,\n 3049323471,\n 3921009573,\n 961987163,\n 1508970993,\n 2453635748,\n 2870763221,\n 3624381080,\n 310598401,\n 607225278,\n 1426881987,\n 1925078388,\n 2162078206,\n 2614888103,\n 3248222580,\n 3835390401,\n 4022224774,\n 264347078,\n 604807628,\n 770255983,\n 1249150122,\n 1555081692,\n 1996064986,\n 2554220882,\n 2821834349,\n 2952996808,\n 3210313671,\n 3336571891,\n 3584528711,\n 113926993,\n 338241895,\n 666307205,\n 773529912,\n 1294757372,\n 1396182291,\n 1695183700,\n 1986661051,\n 2177026350,\n 2456956037,\n 2730485921,\n 2820302411,\n 3259730800,\n 3345764771,\n 3516065817,\n 3600352804,\n 4094571909,\n 275423344,\n 430227734,\n 506948616,\n 659060556,\n 883997877,\n 958139571,\n 1322822218,\n 1537002063,\n 1747873779,\n 1955562222,\n 2024104815,\n 2227730452,\n 2361852424,\n 2428436474,\n 2756734187,\n 3204031479,\n 3329325298\n]);\nvar SHA256_W2 = /* @__PURE__ */ new Uint32Array(64);\nvar SHA2_32B2 = class extends HashMD2 {\n constructor(outputLen) {\n super(64, outputLen, 8, false);\n }\n get() {\n const { A, B, C, D, E, F: F2, G, H } = this;\n return [A, B, C, D, E, F2, G, H];\n }\n // prettier-ignore\n set(A, B, C, D, E, F2, 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 = F2 | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n process(view, offset) {\n for (let i = 0; i < 16; i++, offset += 4)\n SHA256_W2[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W2[i - 15];\n const W2 = SHA256_W2[i - 2];\n const s0 = rotr2(W15, 7) ^ rotr2(W15, 18) ^ W15 >>> 3;\n const s1 = rotr2(W2, 17) ^ rotr2(W2, 19) ^ W2 >>> 10;\n SHA256_W2[i] = s1 + SHA256_W2[i - 7] + s0 + SHA256_W2[i - 16] | 0;\n }\n let { A, B, C, D, E, F: F2, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr2(E, 6) ^ rotr2(E, 11) ^ rotr2(E, 25);\n const T1 = H + sigma1 + Chi2(E, F2, G) + SHA256_K2[i] + SHA256_W2[i] | 0;\n const sigma0 = rotr2(A, 2) ^ rotr2(A, 13) ^ rotr2(A, 22);\n const T2 = sigma0 + Maj2(A, B, C) | 0;\n H = G;\n G = F2;\n F2 = E;\n E = D + T1 | 0;\n D = C;\n C = B;\n B = A;\n A = T1 + T2 | 0;\n }\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 F2 = F2 + this.F | 0;\n G = G + this.G | 0;\n H = H + this.H | 0;\n this.set(A, B, C, D, E, F2, G, H);\n }\n roundClean() {\n clean3(SHA256_W2);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n clean3(this.buffer);\n }\n};\nvar _SHA2562 = class extends SHA2_32B2 {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n A = SHA256_IV2[0] | 0;\n B = SHA256_IV2[1] | 0;\n C = SHA256_IV2[2] | 0;\n D = SHA256_IV2[3] | 0;\n E = SHA256_IV2[4] | 0;\n F = SHA256_IV2[5] | 0;\n G = SHA256_IV2[6] | 0;\n H = SHA256_IV2[7] | 0;\n constructor() {\n super(32);\n }\n};\nvar K512 = /* @__PURE__ */ (() => split([\n \"0x428a2f98d728ae22\",\n \"0x7137449123ef65cd\",\n \"0xb5c0fbcfec4d3b2f\",\n \"0xe9b5dba58189dbbc\",\n \"0x3956c25bf348b538\",\n \"0x59f111f1b605d019\",\n \"0x923f82a4af194f9b\",\n \"0xab1c5ed5da6d8118\",\n \"0xd807aa98a3030242\",\n \"0x12835b0145706fbe\",\n \"0x243185be4ee4b28c\",\n \"0x550c7dc3d5ffb4e2\",\n \"0x72be5d74f27b896f\",\n \"0x80deb1fe3b1696b1\",\n \"0x9bdc06a725c71235\",\n \"0xc19bf174cf692694\",\n \"0xe49b69c19ef14ad2\",\n \"0xefbe4786384f25e3\",\n \"0x0fc19dc68b8cd5b5\",\n \"0x240ca1cc77ac9c65\",\n \"0x2de92c6f592b0275\",\n \"0x4a7484aa6ea6e483\",\n \"0x5cb0a9dcbd41fbd4\",\n \"0x76f988da831153b5\",\n \"0x983e5152ee66dfab\",\n \"0xa831c66d2db43210\",\n \"0xb00327c898fb213f\",\n \"0xbf597fc7beef0ee4\",\n \"0xc6e00bf33da88fc2\",\n \"0xd5a79147930aa725\",\n \"0x06ca6351e003826f\",\n \"0x142929670a0e6e70\",\n \"0x27b70a8546d22ffc\",\n \"0x2e1b21385c26c926\",\n \"0x4d2c6dfc5ac42aed\",\n \"0x53380d139d95b3df\",\n \"0x650a73548baf63de\",\n \"0x766a0abb3c77b2a8\",\n \"0x81c2c92e47edaee6\",\n \"0x92722c851482353b\",\n \"0xa2bfe8a14cf10364\",\n \"0xa81a664bbc423001\",\n \"0xc24b8b70d0f89791\",\n \"0xc76c51a30654be30\",\n \"0xd192e819d6ef5218\",\n \"0xd69906245565a910\",\n \"0xf40e35855771202a\",\n \"0x106aa07032bbd1b8\",\n \"0x19a4c116b8d2d0c8\",\n \"0x1e376c085141ab53\",\n \"0x2748774cdf8eeb99\",\n \"0x34b0bcb5e19b48a8\",\n \"0x391c0cb3c5c95a63\",\n \"0x4ed8aa4ae3418acb\",\n \"0x5b9cca4f7763e373\",\n \"0x682e6ff3d6b2b8a3\",\n \"0x748f82ee5defb2fc\",\n \"0x78a5636f43172f60\",\n \"0x84c87814a1f0ab72\",\n \"0x8cc702081a6439ec\",\n \"0x90befffa23631e28\",\n \"0xa4506cebde82bde9\",\n \"0xbef9a3f7b2c67915\",\n \"0xc67178f2e372532b\",\n \"0xca273eceea26619c\",\n \"0xd186b8c721c0c207\",\n \"0xeada7dd6cde0eb1e\",\n \"0xf57d4f7fee6ed178\",\n \"0x06f067aa72176fba\",\n \"0x0a637dc5a2c898a6\",\n \"0x113f9804bef90dae\",\n \"0x1b710b35131c471b\",\n \"0x28db77f523047d84\",\n \"0x32caab7b40c72493\",\n \"0x3c9ebe0a15c9bebc\",\n \"0x431d67c49c100d4c\",\n \"0x4cc5d4becb3e42b6\",\n \"0x597f299cfc657e2a\",\n \"0x5fcb6fab3ad6faec\",\n \"0x6c44198c4a475817\"\n].map((n) => BigInt(n))))();\nvar SHA512_Kh = /* @__PURE__ */ (() => K512[0])();\nvar SHA512_Kl = /* @__PURE__ */ (() => K512[1])();\nvar SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nvar SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\nvar SHA2_64B = class extends HashMD2 {\n constructor(outputLen) {\n super(128, outputLen, 16, false);\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 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 const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = rotrSH(W15h, W15l, 1) ^ rotrSH(W15h, W15l, 8) ^ shrSH(W15h, W15l, 7);\n const s0l = rotrSL(W15h, W15l, 1) ^ rotrSL(W15h, W15l, 8) ^ shrSL(W15h, W15l, 7);\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = rotrSH(W2h, W2l, 19) ^ rotrBH(W2h, W2l, 61) ^ shrSH(W2h, W2l, 6);\n const s1l = rotrSL(W2h, W2l, 19) ^ rotrBL(W2h, W2l, 61) ^ shrSL(W2h, W2l, 6);\n const SUMl = add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = 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 for (let i = 0; i < 80; i++) {\n const sigma1h = rotrSH(Eh, El, 14) ^ rotrSH(Eh, El, 18) ^ rotrBH(Eh, El, 41);\n const sigma1l = rotrSL(Eh, El, 14) ^ rotrSL(Eh, El, 18) ^ rotrBL(Eh, El, 41);\n const CHIh = Eh & Fh ^ ~Eh & Gh;\n const CHIl = El & Fl ^ ~El & Gl;\n const T1ll = add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n const sigma0h = rotrSH(Ah, Al, 28) ^ rotrBH(Ah, Al, 34) ^ rotrBH(Ah, Al, 39);\n const sigma0l = rotrSL(Ah, Al, 28) ^ rotrBL(Ah, Al, 34) ^ 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 } = 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 = add3L(T1l, sigma0l, MAJl);\n Ah = add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n ({ h: Ah, l: Al } = add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = 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 clean3(SHA512_W_H, SHA512_W_L);\n }\n destroy() {\n clean3(this.buffer);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n};\nvar _SHA384 = class extends SHA2_64B {\n Ah = SHA384_IV2[0] | 0;\n Al = SHA384_IV2[1] | 0;\n Bh = SHA384_IV2[2] | 0;\n Bl = SHA384_IV2[3] | 0;\n Ch = SHA384_IV2[4] | 0;\n Cl = SHA384_IV2[5] | 0;\n Dh = SHA384_IV2[6] | 0;\n Dl = SHA384_IV2[7] | 0;\n Eh = SHA384_IV2[8] | 0;\n El = SHA384_IV2[9] | 0;\n Fh = SHA384_IV2[10] | 0;\n Fl = SHA384_IV2[11] | 0;\n Gh = SHA384_IV2[12] | 0;\n Gl = SHA384_IV2[13] | 0;\n Hh = SHA384_IV2[14] | 0;\n Hl = SHA384_IV2[15] | 0;\n constructor() {\n super(48);\n }\n};\nvar sha2562 = /* @__PURE__ */ createHasher2(\n () => new _SHA2562(),\n /* @__PURE__ */ oidNist2(1)\n);\nvar sha384 = /* @__PURE__ */ createHasher2(\n () => new _SHA384(),\n /* @__PURE__ */ oidNist2(2)\n);\n\n// ../../node_modules/@noble/curves/ed25519.js\nvar _1n6 = BigInt(1);\nvar _2n4 = BigInt(2);\nvar _3n3 = /* @__PURE__ */ BigInt(3);\nvar _5n2 = BigInt(5);\nvar _8n2 = BigInt(8);\nvar ed25519_CURVE_p = BigInt(\"0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed\");\nfunction ed25519_pow_2_252_3(x) {\n const _10n = BigInt(10), _20n = BigInt(20), _40n = BigInt(40), _80n = BigInt(80);\n const P = ed25519_CURVE_p;\n const x2 = x * x % P;\n const b2 = x2 * x % P;\n const b4 = pow2(b2, _2n4, P) * b2 % P;\n const b5 = pow2(b4, _1n6, P) * x % P;\n const b10 = pow2(b5, _5n2, P) * b5 % P;\n const b20 = pow2(b10, _10n, P) * b10 % P;\n const b40 = pow2(b20, _20n, P) * b20 % P;\n const b80 = pow2(b40, _40n, P) * b40 % P;\n const b160 = pow2(b80, _80n, P) * b80 % P;\n const b240 = pow2(b160, _80n, P) * b80 % P;\n const b250 = pow2(b240, _10n, P) * b10 % P;\n const pow_p_5_8 = pow2(b250, _2n4, P) * x % P;\n return { pow_p_5_8, b2 };\n}\nfunction adjustScalarBytes(bytes) {\n bytes[0] &= 248;\n bytes[31] &= 127;\n bytes[31] |= 64;\n return bytes;\n}\nvar x25519 = /* @__PURE__ */ (() => {\n const P = ed25519_CURVE_p;\n return montgomery({\n P,\n type: \"x25519\",\n powPminus2: (x) => {\n const { pow_p_5_8, b2 } = ed25519_pow_2_252_3(x);\n return mod(pow2(pow_p_5_8, _3n3, P) * b2, P);\n },\n adjustScalarBytes\n });\n})();\n\n// ../../node_modules/@noble/curves/nist.js\nvar p256_CURVE = /* @__PURE__ */ (() => ({\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}))();\nvar p384_CURVE = /* @__PURE__ */ (() => ({\n p: BigInt(\"0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff\"),\n n: BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973\"),\n h: BigInt(1),\n a: BigInt(\"0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc\"),\n b: BigInt(\"0xb3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef\"),\n Gx: BigInt(\"0xaa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7\"),\n Gy: BigInt(\"0x3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f\")\n}))();\nvar p256_Point = /* @__PURE__ */ weierstrass(p256_CURVE);\nvar p256 = /* @__PURE__ */ ecdsa(p256_Point, sha2562);\nvar p384_Point = /* @__PURE__ */ weierstrass(p384_CURVE);\nvar p384 = /* @__PURE__ */ ecdsa(p384_Point, sha384);\n\n// ../../node_modules/@noble/post-quantum/node_modules/@noble/hashes/utils.js\nfunction isBytes5(a) {\n return a instanceof Uint8Array || ArrayBuffer.isView(a) && a.constructor.name === \"Uint8Array\";\n}\nfunction anumber5(n, title = \"\") {\n if (!Number.isSafeInteger(n) || n < 0) {\n const prefix2 = title && `\"${title}\" `;\n throw new Error(`${prefix2}expected integer >= 0, got ${n}`);\n }\n}\nfunction abytes5(value, length, title = \"\") {\n const bytes = isBytes5(value);\n const len = value?.length;\n const needsLen = length !== void 0;\n if (!bytes || needsLen && len !== length) {\n const prefix2 = title && `\"${title}\" `;\n const ofLen = needsLen ? ` of length ${length}` : \"\";\n const got = bytes ? `length=${len}` : `type=${typeof value}`;\n throw new Error(prefix2 + \"expected Uint8Array\" + ofLen + \", got \" + got);\n }\n return value;\n}\nfunction ahash3(h) {\n if (typeof h !== \"function\" || typeof h.create !== \"function\")\n throw new Error(\"Hash must wrapped by utils.createHasher\");\n anumber5(h.outputLen);\n anumber5(h.blockLen);\n}\nfunction aexists4(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 aoutput4(out, instance) {\n abytes5(out, void 0, \"digestInto() output\");\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('\"digestInto() output\" expected to be of length >=' + min);\n }\n}\nfunction u323(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\nfunction clean4(...arrays) {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\nfunction createView4(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\nfunction rotr3(word, shift) {\n return word << 32 - shift | word >>> shift;\n}\nvar isLE3 = /* @__PURE__ */ (() => new Uint8Array(new Uint32Array([287454020]).buffer)[0] === 68)();\nfunction byteSwap2(word) {\n return word << 24 & 4278190080 | word << 8 & 16711680 | word >>> 8 & 65280 | word >>> 24 & 255;\n}\nfunction byteSwap322(arr) {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap2(arr[i]);\n }\n return arr;\n}\nvar swap32IfBE2 = isLE3 ? (u) => u : byteSwap322;\nfunction createHasher3(hashCons, info = {}) {\n const hashC = (msg, opts2) => hashCons(opts2).update(msg).digest();\n const tmp = hashCons(void 0);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts2) => hashCons(opts2);\n Object.assign(hashC, info);\n return Object.freeze(hashC);\n}\nfunction randomBytes4(bytesLength = 32) {\n const cr = typeof globalThis === \"object\" ? globalThis.crypto : null;\n if (typeof cr?.getRandomValues !== \"function\")\n throw new Error(\"crypto.getRandomValues must be defined\");\n return cr.getRandomValues(new Uint8Array(bytesLength));\n}\nvar oidNist3 = (suffix) => ({\n oid: Uint8Array.from([6, 9, 96, 134, 72, 1, 101, 3, 4, 2, suffix])\n});\n\n// ../../node_modules/@noble/post-quantum/node_modules/@noble/hashes/hmac.js\nvar _HMAC3 = class {\n oHash;\n iHash;\n blockLen;\n outputLen;\n finished = false;\n destroyed = false;\n constructor(hash, key) {\n ahash3(hash);\n abytes5(key, void 0, \"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 pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 54;\n this.iHash.update(pad);\n this.oHash = hash.create();\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 54 ^ 92;\n this.oHash.update(pad);\n clean4(pad);\n }\n update(buf) {\n aexists4(this);\n this.iHash.update(buf);\n return this;\n }\n digestInto(out) {\n aexists4(this);\n abytes5(out, this.outputLen, \"output\");\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 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};\nvar hmac3 = (hash, key, message) => new _HMAC3(hash, key).update(message).digest();\nhmac3.create = (hash, key) => new _HMAC3(hash, key);\n\n// ../../node_modules/@noble/post-quantum/node_modules/@noble/hashes/hkdf.js\nfunction extract2(hash, ikm, salt) {\n ahash3(hash);\n if (salt === void 0)\n salt = new Uint8Array(hash.outputLen);\n return hmac3(hash, salt, ikm);\n}\nvar HKDF_COUNTER2 = /* @__PURE__ */ Uint8Array.of(0);\nvar EMPTY_BUFFER2 = /* @__PURE__ */ Uint8Array.of();\nfunction expand2(hash, prk, info, length = 32) {\n ahash3(hash);\n anumber5(length, \"length\");\n const olen = hash.outputLen;\n if (length > 255 * olen)\n throw new Error(\"Length must be <= 255*HashLen\");\n const blocks = Math.ceil(length / olen);\n if (info === void 0)\n info = EMPTY_BUFFER2;\n else\n abytes5(info, void 0, \"info\");\n const okm = new Uint8Array(blocks * olen);\n const HMAC = hmac3.create(hash, prk);\n const HMACTmp = HMAC._cloneInto();\n const T = new Uint8Array(HMAC.outputLen);\n for (let counter = 0; counter < blocks; counter++) {\n HKDF_COUNTER2[0] = counter + 1;\n HMACTmp.update(counter === 0 ? EMPTY_BUFFER2 : T).update(info).update(HKDF_COUNTER2).digestInto(T);\n okm.set(T, olen * counter);\n HMAC._cloneInto(HMACTmp);\n }\n HMAC.destroy();\n HMACTmp.destroy();\n clean4(T, HKDF_COUNTER2);\n return okm.slice(0, length);\n}\n\n// ../../node_modules/@noble/post-quantum/node_modules/@noble/hashes/_md.js\nfunction Chi3(a, b, c) {\n return a & b ^ ~a & c;\n}\nfunction Maj3(a, b, c) {\n return a & b ^ a & c ^ b & c;\n}\nvar HashMD3 = class {\n blockLen;\n outputLen;\n padOffset;\n isLE;\n // For partial updates less than block size\n buffer;\n view;\n finished = false;\n length = 0;\n pos = 0;\n destroyed = false;\n constructor(blockLen, outputLen, padOffset, isLE4) {\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE4;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView4(this.buffer);\n }\n update(data) {\n aexists4(this);\n abytes5(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 if (take === blockLen) {\n const dataView = createView4(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 aexists4(this);\n aoutput4(out, this);\n this.finished = true;\n const { buffer, view, blockLen, isLE: isLE4 } = this;\n let { pos } = this;\n buffer[pos++] = 128;\n clean4(this.buffer.subarray(pos));\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n for (let i = pos; i < blockLen; i++)\n buffer[i] = 0;\n view.setBigUint64(blockLen - 8, BigInt(this.length * 8), isLE4);\n this.process(view, 0);\n const oview = createView4(out);\n const len = this.outputLen;\n if (len % 4)\n throw new Error(\"_sha2: outputLen must 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], isLE4);\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 ||= 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};\nvar SHA256_IV3 = /* @__PURE__ */ Uint32Array.from([\n 1779033703,\n 3144134277,\n 1013904242,\n 2773480762,\n 1359893119,\n 2600822924,\n 528734635,\n 1541459225\n]);\n\n// ../../node_modules/@noble/post-quantum/node_modules/@noble/hashes/_u64.js\nvar U32_MASK642 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nvar _32n2 = /* @__PURE__ */ BigInt(32);\nfunction fromBig2(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK642), l: Number(n >> _32n2 & U32_MASK642) };\n return { h: Number(n >> _32n2 & U32_MASK642) | 0, l: Number(n & U32_MASK642) | 0 };\n}\nfunction split2(lst, le = false) {\n const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for (let i = 0; i < len; i++) {\n const { h, l } = fromBig2(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\nvar rotlSH = (h, l, s) => h << s | l >>> 32 - s;\nvar rotlSL = (h, l, s) => l << s | h >>> 32 - s;\nvar rotlBH = (h, l, s) => l << s - 32 | h >>> 64 - s;\nvar rotlBL = (h, l, s) => h << s - 32 | l >>> 64 - s;\n\n// ../../node_modules/@noble/post-quantum/node_modules/@noble/hashes/sha2.js\nvar SHA256_K3 = /* @__PURE__ */ Uint32Array.from([\n 1116352408,\n 1899447441,\n 3049323471,\n 3921009573,\n 961987163,\n 1508970993,\n 2453635748,\n 2870763221,\n 3624381080,\n 310598401,\n 607225278,\n 1426881987,\n 1925078388,\n 2162078206,\n 2614888103,\n 3248222580,\n 3835390401,\n 4022224774,\n 264347078,\n 604807628,\n 770255983,\n 1249150122,\n 1555081692,\n 1996064986,\n 2554220882,\n 2821834349,\n 2952996808,\n 3210313671,\n 3336571891,\n 3584528711,\n 113926993,\n 338241895,\n 666307205,\n 773529912,\n 1294757372,\n 1396182291,\n 1695183700,\n 1986661051,\n 2177026350,\n 2456956037,\n 2730485921,\n 2820302411,\n 3259730800,\n 3345764771,\n 3516065817,\n 3600352804,\n 4094571909,\n 275423344,\n 430227734,\n 506948616,\n 659060556,\n 883997877,\n 958139571,\n 1322822218,\n 1537002063,\n 1747873779,\n 1955562222,\n 2024104815,\n 2227730452,\n 2361852424,\n 2428436474,\n 2756734187,\n 3204031479,\n 3329325298\n]);\nvar SHA256_W3 = /* @__PURE__ */ new Uint32Array(64);\nvar SHA2_32B3 = class extends HashMD3 {\n constructor(outputLen) {\n super(64, outputLen, 8, false);\n }\n get() {\n const { A, B, C, D, E, F: F2, G, H } = this;\n return [A, B, C, D, E, F2, G, H];\n }\n // prettier-ignore\n set(A, B, C, D, E, F2, 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 = F2 | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n process(view, offset) {\n for (let i = 0; i < 16; i++, offset += 4)\n SHA256_W3[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W3[i - 15];\n const W2 = SHA256_W3[i - 2];\n const s0 = rotr3(W15, 7) ^ rotr3(W15, 18) ^ W15 >>> 3;\n const s1 = rotr3(W2, 17) ^ rotr3(W2, 19) ^ W2 >>> 10;\n SHA256_W3[i] = s1 + SHA256_W3[i - 7] + s0 + SHA256_W3[i - 16] | 0;\n }\n let { A, B, C, D, E, F: F2, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr3(E, 6) ^ rotr3(E, 11) ^ rotr3(E, 25);\n const T1 = H + sigma1 + Chi3(E, F2, G) + SHA256_K3[i] + SHA256_W3[i] | 0;\n const sigma0 = rotr3(A, 2) ^ rotr3(A, 13) ^ rotr3(A, 22);\n const T2 = sigma0 + Maj3(A, B, C) | 0;\n H = G;\n G = F2;\n F2 = E;\n E = D + T1 | 0;\n D = C;\n C = B;\n B = A;\n A = T1 + T2 | 0;\n }\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 F2 = F2 + this.F | 0;\n G = G + this.G | 0;\n H = H + this.H | 0;\n this.set(A, B, C, D, E, F2, G, H);\n }\n roundClean() {\n clean4(SHA256_W3);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n clean4(this.buffer);\n }\n};\nvar _SHA2563 = class extends SHA2_32B3 {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n A = SHA256_IV3[0] | 0;\n B = SHA256_IV3[1] | 0;\n C = SHA256_IV3[2] | 0;\n D = SHA256_IV3[3] | 0;\n E = SHA256_IV3[4] | 0;\n F = SHA256_IV3[5] | 0;\n G = SHA256_IV3[6] | 0;\n H = SHA256_IV3[7] | 0;\n constructor() {\n super(32);\n }\n};\nvar sha2563 = /* @__PURE__ */ createHasher3(\n () => new _SHA2563(),\n /* @__PURE__ */ oidNist3(1)\n);\n\n// ../../node_modules/@noble/post-quantum/node_modules/@noble/hashes/sha3.js\nvar _0n6 = BigInt(0);\nvar _1n7 = BigInt(1);\nvar _2n5 = BigInt(2);\nvar _7n2 = BigInt(7);\nvar _256n = BigInt(256);\nvar _0x71n = BigInt(113);\nvar SHA3_PI = [];\nvar SHA3_ROTL = [];\nvar _SHA3_IOTA = [];\nfor (let round = 0, R = _1n7, x = 1, y = 0; round < 24; round++) {\n [x, y] = [y, (2 * x + 3 * y) % 5];\n SHA3_PI.push(2 * (5 * y + x));\n SHA3_ROTL.push((round + 1) * (round + 2) / 2 % 64);\n let t = _0n6;\n for (let j = 0; j < 7; j++) {\n R = (R << _1n7 ^ (R >> _7n2) * _0x71n) % _256n;\n if (R & _2n5)\n t ^= _1n7 << (_1n7 << BigInt(j)) - _1n7;\n }\n _SHA3_IOTA.push(t);\n}\nvar IOTAS = split2(_SHA3_IOTA, true);\nvar SHA3_IOTA_H = IOTAS[0];\nvar SHA3_IOTA_L = IOTAS[1];\nvar rotlH = (h, l, s) => s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s);\nvar rotlL = (h, l, s) => s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s);\nfunction keccakP(s, rounds = 24) {\n const B = new Uint32Array(5 * 2);\n for (let round = 24 - rounds; round < 24; round++) {\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 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 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 s[0] ^= SHA3_IOTA_H[round];\n s[1] ^= SHA3_IOTA_L[round];\n }\n clean4(B);\n}\nvar Keccak = class _Keccak {\n state;\n pos = 0;\n posOut = 0;\n finished = false;\n state32;\n destroyed = false;\n blockLen;\n suffix;\n outputLen;\n enableXOF = false;\n rounds;\n // NOTE: we accept arguments in bytes instead of bits here.\n constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24) {\n this.blockLen = blockLen;\n this.suffix = suffix;\n this.outputLen = outputLen;\n this.enableXOF = enableXOF;\n this.rounds = rounds;\n anumber5(outputLen, \"outputLen\");\n if (!(0 < blockLen && blockLen < 200))\n throw new Error(\"only keccak-f1600 function is supported\");\n this.state = new Uint8Array(200);\n this.state32 = u323(this.state);\n }\n clone() {\n return this._cloneInto();\n }\n keccak() {\n swap32IfBE2(this.state32);\n keccakP(this.state32, this.rounds);\n swap32IfBE2(this.state32);\n this.posOut = 0;\n this.pos = 0;\n }\n update(data) {\n aexists4(this);\n abytes5(data);\n const { blockLen, state } = this;\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 state[pos] ^= suffix;\n if ((suffix & 128) !== 0 && pos === blockLen - 1)\n this.keccak();\n state[blockLen - 1] ^= 128;\n this.keccak();\n }\n writeInto(out) {\n aexists4(this, false);\n abytes5(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 if (!this.enableXOF)\n throw new Error(\"XOF is not possible for this instance\");\n return this.writeInto(out);\n }\n xof(bytes) {\n anumber5(bytes);\n return this.xofInto(new Uint8Array(bytes));\n }\n digestInto(out) {\n aoutput4(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 clean4(this.state);\n }\n _cloneInto(to) {\n const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n 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 to.suffix = suffix;\n to.outputLen = outputLen;\n to.enableXOF = enableXOF;\n to.destroyed = this.destroyed;\n return to;\n }\n};\nvar genKeccak = (suffix, blockLen, outputLen, info = {}) => createHasher3(() => new Keccak(blockLen, suffix, outputLen), info);\nvar sha3_256 = /* @__PURE__ */ genKeccak(\n 6,\n 136,\n 32,\n /* @__PURE__ */ oidNist3(8)\n);\nvar sha3_512 = /* @__PURE__ */ genKeccak(\n 6,\n 72,\n 64,\n /* @__PURE__ */ oidNist3(10)\n);\nvar genShake = (suffix, blockLen, outputLen, info = {}) => createHasher3((opts2 = {}) => new Keccak(blockLen, suffix, opts2.dkLen === void 0 ? outputLen : opts2.dkLen, true), info);\nvar shake128 = /* @__PURE__ */ genShake(31, 168, 16, /* @__PURE__ */ oidNist3(11));\nvar shake256 = /* @__PURE__ */ genShake(31, 136, 32, /* @__PURE__ */ oidNist3(12));\n\n// ../../node_modules/@noble/curves/abstract/fft.js\nfunction checkU32(n) {\n if (!Number.isSafeInteger(n) || n < 0 || n > 4294967295)\n throw new Error(\"wrong u32 integer:\" + n);\n return n;\n}\nfunction isPowerOfTwo(x) {\n checkU32(x);\n return (x & x - 1) === 0 && x !== 0;\n}\nfunction reverseBits(n, bits) {\n checkU32(n);\n let reversed = 0;\n for (let i = 0; i < bits; i++, n >>>= 1)\n reversed = reversed << 1 | n & 1;\n return reversed;\n}\nfunction log2(n) {\n checkU32(n);\n return 31 - Math.clz32(n);\n}\nfunction bitReversalInplace(values) {\n const n = values.length;\n if (n < 2 || !isPowerOfTwo(n))\n throw new Error(\"n must be a power of 2 and greater than 1. Got \" + n);\n const bits = log2(n);\n for (let i = 0; i < n; i++) {\n const j = reverseBits(i, bits);\n if (i < j) {\n const tmp = values[i];\n values[i] = values[j];\n values[j] = tmp;\n }\n }\n return values;\n}\nvar FFTCore = (F2, coreOpts) => {\n const { N: N2, roots, dit, invertButterflies = false, skipStages = 0, brp = true } = coreOpts;\n const bits = log2(N2);\n if (!isPowerOfTwo(N2))\n throw new Error(\"FFT: Polynomial size should be power of two\");\n const isDit = dit !== invertButterflies;\n isDit;\n return (values) => {\n if (values.length !== N2)\n throw new Error(\"FFT: wrong Polynomial length\");\n if (dit && brp)\n bitReversalInplace(values);\n for (let i = 0, g = 1; i < bits - skipStages; i++) {\n const s = dit ? i + 1 + skipStages : bits - i;\n const m = 1 << s;\n const m2 = m >> 1;\n const stride = N2 >> s;\n for (let k = 0; k < N2; k += m) {\n for (let j = 0, grp = g++; j < m2; j++) {\n const rootPos = invertButterflies ? dit ? N2 - grp : grp : j * stride;\n const i0 = k + j;\n const i1 = k + j + m2;\n const omega = roots[rootPos];\n const b = values[i1];\n const a = values[i0];\n if (isDit) {\n const t = F2.mul(b, omega);\n values[i0] = F2.add(a, t);\n values[i1] = F2.sub(a, t);\n } else if (invertButterflies) {\n values[i0] = F2.add(b, a);\n values[i1] = F2.mul(F2.sub(b, a), omega);\n } else {\n values[i0] = F2.add(a, b);\n values[i1] = F2.mul(F2.sub(a, b), omega);\n }\n }\n }\n }\n if (!dit && brp)\n bitReversalInplace(values);\n return values;\n };\n};\n\n// ../../node_modules/@noble/post-quantum/utils.js\nvar randomBytes5 = randomBytes4;\nfunction equalBytes2(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}\nfunction copyBytes3(bytes) {\n return Uint8Array.from(bytes);\n}\nfunction splitCoder(label2, ...lengths) {\n const getLength = (c) => typeof c === \"number\" ? c : c.bytesLen;\n const bytesLen = lengths.reduce((sum, a) => sum + getLength(a), 0);\n return {\n bytesLen,\n encode: (bufs) => {\n const res = new Uint8Array(bytesLen);\n for (let i = 0, pos = 0; i < lengths.length; i++) {\n const c = lengths[i];\n const l = getLength(c);\n const b = typeof c === \"number\" ? bufs[i] : c.encode(bufs[i]);\n abytes5(b, l, label2);\n res.set(b, pos);\n if (typeof c !== \"number\")\n b.fill(0);\n pos += l;\n }\n return res;\n },\n decode: (buf) => {\n abytes5(buf, bytesLen, label2);\n const res = [];\n for (const c of lengths) {\n const l = getLength(c);\n const b = buf.subarray(0, l);\n res.push(typeof c === \"number\" ? b : c.decode(b));\n buf = buf.subarray(l);\n }\n return res;\n }\n };\n}\nfunction vecCoder(c, vecLen) {\n const bytesLen = vecLen * c.bytesLen;\n return {\n bytesLen,\n encode: (u) => {\n if (u.length !== vecLen)\n throw new Error(`vecCoder.encode: wrong length=${u.length}. Expected: ${vecLen}`);\n const res = new Uint8Array(bytesLen);\n for (let i = 0, pos = 0; i < u.length; i++) {\n const b = c.encode(u[i]);\n res.set(b, pos);\n b.fill(0);\n pos += b.length;\n }\n return res;\n },\n decode: (a) => {\n abytes5(a, bytesLen);\n const r = [];\n for (let i = 0; i < a.length; i += c.bytesLen)\n r.push(c.decode(a.subarray(i, i + c.bytesLen)));\n return r;\n }\n };\n}\nfunction cleanBytes(...list) {\n for (const t of list) {\n if (Array.isArray(t))\n for (const b of t)\n b.fill(0);\n else\n t.fill(0);\n }\n}\nfunction getMask(bits) {\n return (1 << bits) - 1;\n}\nvar EMPTY = Uint8Array.of();\n\n// ../../node_modules/@noble/post-quantum/_crystals.js\nvar genCrystals = (opts2) => {\n const { newPoly, N: N2, Q: Q2, F: F2, ROOT_OF_UNITY: ROOT_OF_UNITY2, brvBits, isKyber } = opts2;\n const mod3 = (a, modulo = Q2) => {\n const result = a % modulo | 0;\n return (result >= 0 ? result | 0 : modulo + result | 0) | 0;\n };\n const smod = (a, modulo = Q2) => {\n const r = mod3(a, modulo) | 0;\n return (r > modulo >> 1 ? r - modulo | 0 : r) | 0;\n };\n function getZettas() {\n const out = newPoly(N2);\n for (let i = 0; i < N2; i++) {\n const b = reverseBits(i, brvBits);\n const p = BigInt(ROOT_OF_UNITY2) ** BigInt(b) % BigInt(Q2);\n out[i] = Number(p) | 0;\n }\n return out;\n }\n const nttZetas2 = getZettas();\n const field = {\n add: (a, b) => mod3((a | 0) + (b | 0)) | 0,\n sub: (a, b) => mod3((a | 0) - (b | 0)) | 0,\n mul: (a, b) => mod3((a | 0) * (b | 0)) | 0,\n inv: (_a) => {\n throw new Error(\"not implemented\");\n }\n };\n const nttOpts = {\n N: N2,\n roots: nttZetas2,\n invertButterflies: true,\n skipStages: isKyber ? 1 : 0,\n brp: false\n };\n const dif = FFTCore(field, { dit: false, ...nttOpts });\n const dit = FFTCore(field, { dit: true, ...nttOpts });\n const NTT2 = {\n encode: (r) => {\n return dif(r);\n },\n decode: (r) => {\n dit(r);\n for (let i = 0; i < r.length; i++)\n r[i] = mod3(F2 * r[i]);\n return r;\n }\n };\n const bitsCoder2 = (d, c) => {\n const mask = getMask(d);\n const bytesLen = d * (N2 / 8);\n return {\n bytesLen,\n encode: (poly) => {\n const r = new Uint8Array(bytesLen);\n for (let i = 0, buf = 0, bufLen = 0, pos = 0; i < poly.length; i++) {\n buf |= (c.encode(poly[i]) & mask) << bufLen;\n bufLen += d;\n for (; bufLen >= 8; bufLen -= 8, buf >>= 8)\n r[pos++] = buf & getMask(bufLen);\n }\n return r;\n },\n decode: (bytes) => {\n const r = newPoly(N2);\n for (let i = 0, buf = 0, bufLen = 0, pos = 0; i < bytes.length; i++) {\n buf |= bytes[i] << bufLen;\n bufLen += 8;\n for (; bufLen >= d; bufLen -= d, buf >>= d)\n r[pos++] = c.decode(buf & mask);\n }\n return r;\n }\n };\n };\n return { mod: mod3, smod, nttZetas: nttZetas2, NTT: NTT2, bitsCoder: bitsCoder2 };\n};\nvar createXofShake = (shake) => (seed, blockLen) => {\n if (!blockLen)\n blockLen = shake.blockLen;\n const _seed = new Uint8Array(seed.length + 2);\n _seed.set(seed);\n const seedLen = seed.length;\n const buf = new Uint8Array(blockLen);\n let h = shake.create({});\n let calls = 0;\n let xofs = 0;\n return {\n stats: () => ({ calls, xofs }),\n get: (x, y) => {\n _seed[seedLen + 0] = x;\n _seed[seedLen + 1] = y;\n h.destroy();\n h = shake.create({}).update(_seed);\n calls++;\n return () => {\n xofs++;\n return h.xofInto(buf);\n };\n },\n clean: () => {\n h.destroy();\n cleanBytes(buf, _seed);\n }\n };\n};\nvar XOF128 = /* @__PURE__ */ createXofShake(shake128);\n\n// ../../node_modules/@noble/post-quantum/ml-kem.js\nvar N = 256;\nvar Q = 3329;\nvar F = 3303;\nvar ROOT_OF_UNITY = 17;\nvar { mod: mod2, nttZetas, NTT, bitsCoder } = genCrystals({\n N,\n Q,\n F,\n ROOT_OF_UNITY,\n newPoly: (n) => new Uint16Array(n),\n brvBits: 7,\n isKyber: true\n});\nvar PARAMS = {\n 512: { N, Q, K: 2, ETA1: 3, ETA2: 2, du: 10, dv: 4, RBGstrength: 128 },\n 768: { N, Q, K: 3, ETA1: 2, ETA2: 2, du: 10, dv: 4, RBGstrength: 192 },\n 1024: { N, Q, K: 4, ETA1: 2, ETA2: 2, du: 11, dv: 5, RBGstrength: 256 }\n};\nvar compress = (d) => {\n if (d >= 12)\n return { encode: (i) => i, decode: (i) => i };\n const a = 2 ** (d - 1);\n return {\n // const compress = (i: number) => round((2 ** d / Q) * i) % 2 ** d;\n encode: (i) => ((i << d) + Q / 2) / Q,\n // const decompress = (i: number) => round((Q / 2 ** d) * i);\n decode: (i) => i * Q + a >>> d\n };\n};\nvar polyCoder = (d) => bitsCoder(d, compress(d));\nfunction polyAdd(a, b) {\n for (let i = 0; i < N; i++)\n a[i] = mod2(a[i] + b[i]);\n}\nfunction polySub(a, b) {\n for (let i = 0; i < N; i++)\n a[i] = mod2(a[i] - b[i]);\n}\nfunction BaseCaseMultiply(a0, a1, b0, b1, zeta) {\n const c0 = mod2(a1 * b1 * zeta + a0 * b0);\n const c1 = mod2(a0 * b1 + a1 * b0);\n return { c0, c1 };\n}\nfunction MultiplyNTTs(f, g) {\n for (let i = 0; i < N / 2; i++) {\n let z = nttZetas[64 + (i >> 1)];\n if (i & 1)\n z = -z;\n const { c0, c1 } = BaseCaseMultiply(f[2 * i + 0], f[2 * i + 1], g[2 * i + 0], g[2 * i + 1], z);\n f[2 * i + 0] = c0;\n f[2 * i + 1] = c1;\n }\n return f;\n}\nfunction SampleNTT(xof) {\n const r = new Uint16Array(N);\n for (let j = 0; j < N; ) {\n const b = xof();\n if (b.length % 3)\n throw new Error(\"SampleNTT: unaligned block\");\n for (let i = 0; j < N && i + 3 <= b.length; i += 3) {\n const d1 = (b[i + 0] >> 0 | b[i + 1] << 8) & 4095;\n const d2 = (b[i + 1] >> 4 | b[i + 2] << 4) & 4095;\n if (d1 < Q)\n r[j++] = d1;\n if (j < N && d2 < Q)\n r[j++] = d2;\n }\n }\n return r;\n}\nfunction sampleCBD(PRF, seed, nonce, eta) {\n const buf = PRF(eta * N / 4, seed, nonce);\n const r = new Uint16Array(N);\n const b32 = u323(buf);\n let len = 0;\n for (let i = 0, p = 0, bb = 0, t0 = 0; i < b32.length; i++) {\n let b = b32[i];\n for (let j = 0; j < 32; j++) {\n bb += b & 1;\n b >>= 1;\n len += 1;\n if (len === eta) {\n t0 = bb;\n bb = 0;\n } else if (len === 2 * eta) {\n r[p++] = mod2(t0 - bb);\n bb = 0;\n len = 0;\n }\n }\n }\n if (len)\n throw new Error(`sampleCBD: leftover bits: ${len}`);\n return r;\n}\nvar genKPKE = (opts2) => {\n const { K, PRF, XOF, HASH512, ETA1, ETA2, du, dv } = opts2;\n const poly1 = polyCoder(1);\n const polyV = polyCoder(dv);\n const polyU = polyCoder(du);\n const publicCoder = splitCoder(\"publicKey\", vecCoder(polyCoder(12), K), 32);\n const secretCoder = vecCoder(polyCoder(12), K);\n const cipherCoder = splitCoder(\"ciphertext\", vecCoder(polyU, K), polyV);\n const seedCoder = splitCoder(\"seed\", 32, 32);\n return {\n secretCoder,\n lengths: {\n secretKey: secretCoder.bytesLen,\n publicKey: publicCoder.bytesLen,\n cipherText: cipherCoder.bytesLen\n },\n keygen: (seed) => {\n abytes5(seed, 32, \"seed\");\n const seedDst = new Uint8Array(33);\n seedDst.set(seed);\n seedDst[32] = K;\n const seedHash = HASH512(seedDst);\n const [rho, sigma] = seedCoder.decode(seedHash);\n const sHat = [];\n const tHat = [];\n for (let i = 0; i < K; i++)\n sHat.push(NTT.encode(sampleCBD(PRF, sigma, i, ETA1)));\n const x = XOF(rho);\n for (let i = 0; i < K; i++) {\n const e = NTT.encode(sampleCBD(PRF, sigma, K + i, ETA1));\n for (let j = 0; j < K; j++) {\n const aji = SampleNTT(x.get(j, i));\n polyAdd(e, MultiplyNTTs(aji, sHat[j]));\n }\n tHat.push(e);\n }\n x.clean();\n const res = {\n publicKey: publicCoder.encode([tHat, rho]),\n secretKey: secretCoder.encode(sHat)\n };\n cleanBytes(rho, sigma, sHat, tHat, seedDst, seedHash);\n return res;\n },\n encrypt: (publicKey, msg, seed) => {\n const [tHat, rho] = publicCoder.decode(publicKey);\n const rHat = [];\n for (let i = 0; i < K; i++)\n rHat.push(NTT.encode(sampleCBD(PRF, seed, i, ETA1)));\n const x = XOF(rho);\n const tmp2 = new Uint16Array(N);\n const u = [];\n for (let i = 0; i < K; i++) {\n const e1 = sampleCBD(PRF, seed, K + i, ETA2);\n const tmp = new Uint16Array(N);\n for (let j = 0; j < K; j++) {\n const aij = SampleNTT(x.get(i, j));\n polyAdd(tmp, MultiplyNTTs(aij, rHat[j]));\n }\n polyAdd(e1, NTT.decode(tmp));\n u.push(e1);\n polyAdd(tmp2, MultiplyNTTs(tHat[i], rHat[i]));\n cleanBytes(tmp);\n }\n x.clean();\n const e2 = sampleCBD(PRF, seed, 2 * K, ETA2);\n polyAdd(e2, NTT.decode(tmp2));\n const v = poly1.decode(msg);\n polyAdd(v, e2);\n cleanBytes(tHat, rHat, tmp2, e2);\n return cipherCoder.encode([u, v]);\n },\n decrypt: (cipherText, privateKey) => {\n const [u, v] = cipherCoder.decode(cipherText);\n const sk = secretCoder.decode(privateKey);\n const tmp = new Uint16Array(N);\n for (let i = 0; i < K; i++)\n polyAdd(tmp, MultiplyNTTs(sk[i], NTT.encode(u[i])));\n polySub(v, NTT.decode(tmp));\n cleanBytes(tmp, sk, u);\n return poly1.encode(v);\n }\n };\n};\nfunction createKyber(opts2) {\n const KPKE = genKPKE(opts2);\n const { HASH256, HASH512, KDF } = opts2;\n const { secretCoder: KPKESecretCoder, lengths } = KPKE;\n const secretCoder = splitCoder(\"secretKey\", lengths.secretKey, lengths.publicKey, 32, 32);\n const msgLen = 32;\n const seedLen = 64;\n return {\n info: { type: \"ml-kem\" },\n lengths: {\n ...lengths,\n seed: 64,\n msg: msgLen,\n msgRand: msgLen,\n secretKey: secretCoder.bytesLen\n },\n keygen: (seed = randomBytes5(seedLen)) => {\n abytes5(seed, seedLen, \"seed\");\n const { publicKey, secretKey: sk } = KPKE.keygen(seed.subarray(0, 32));\n const publicKeyHash = HASH256(publicKey);\n const secretKey = secretCoder.encode([sk, publicKey, publicKeyHash, seed.subarray(32)]);\n cleanBytes(sk, publicKeyHash);\n return { publicKey, secretKey };\n },\n getPublicKey: (secretKey) => {\n const [_sk, publicKey, _publicKeyHash, _z] = secretCoder.decode(secretKey);\n return Uint8Array.from(publicKey);\n },\n encapsulate: (publicKey, msg = randomBytes5(msgLen)) => {\n abytes5(publicKey, lengths.publicKey, \"publicKey\");\n abytes5(msg, msgLen, \"message\");\n const eke = publicKey.subarray(0, 384 * opts2.K);\n const ek = KPKESecretCoder.encode(KPKESecretCoder.decode(copyBytes3(eke)));\n if (!equalBytes2(ek, eke)) {\n cleanBytes(ek);\n throw new Error(\"ML-KEM.encapsulate: wrong publicKey modulus\");\n }\n cleanBytes(ek);\n const kr = HASH512.create().update(msg).update(HASH256(publicKey)).digest();\n const cipherText = KPKE.encrypt(publicKey, msg, kr.subarray(32, 64));\n cleanBytes(kr.subarray(32));\n return { cipherText, sharedSecret: kr.subarray(0, 32) };\n },\n decapsulate: (cipherText, secretKey) => {\n abytes5(secretKey, secretCoder.bytesLen, \"secretKey\");\n abytes5(cipherText, lengths.cipherText, \"cipherText\");\n const k768 = secretCoder.bytesLen - 96;\n const start = k768 + 32;\n const test = HASH256(secretKey.subarray(k768 / 2, start));\n if (!equalBytes2(test, secretKey.subarray(start, start + 32)))\n throw new Error(\"invalid secretKey: hash check failed\");\n const [sk, publicKey, publicKeyHash, z] = secretCoder.decode(secretKey);\n const msg = KPKE.decrypt(cipherText, sk);\n const kr = HASH512.create().update(msg).update(publicKeyHash).digest();\n const Khat = kr.subarray(0, 32);\n const cipherText2 = KPKE.encrypt(publicKey, msg, kr.subarray(32, 64));\n const isValid = equalBytes2(cipherText, cipherText2);\n const Kbar = KDF.create({ dkLen: 32 }).update(z).update(cipherText).digest();\n cleanBytes(msg, cipherText2, !isValid ? Khat : Kbar);\n return isValid ? Khat : Kbar;\n }\n };\n}\nfunction shakePRF(dkLen, key, nonce) {\n return shake256.create({ dkLen }).update(key).update(new Uint8Array([nonce])).digest();\n}\nvar opts = {\n HASH256: sha3_256,\n HASH512: sha3_512,\n KDF: shake256,\n XOF: XOF128,\n PRF: shakePRF\n};\nvar ml_kem512 = /* @__PURE__ */ createKyber({\n ...opts,\n ...PARAMS[512]\n});\nvar ml_kem768 = /* @__PURE__ */ createKyber({\n ...opts,\n ...PARAMS[768]\n});\nvar ml_kem1024 = /* @__PURE__ */ createKyber({\n ...opts,\n ...PARAMS[1024]\n});\n\n// ../../node_modules/@noble/post-quantum/hybrid.js\nfunction ecKeygen(curve, allowZeroKey = false) {\n const lengths = curve.lengths;\n let keygen = curve.keygen;\n if (allowZeroKey) {\n const wCurve = curve;\n const Fn = wCurve.Point.Fn;\n if (!Fn)\n throw new Error(\"No Point.Fn\");\n keygen = (seed = randomBytes5(lengths.seed)) => {\n abytes5(seed, lengths.seed, \"seed\");\n const seedScalar = Fn.isLE ? bytesToNumberLE(seed) : bytesToNumberBE(seed);\n const secretKey = Fn.toBytes(Fn.create(seedScalar));\n return { secretKey, publicKey: curve.getPublicKey(secretKey) };\n };\n }\n return {\n lengths: { secretKey: lengths.secretKey, publicKey: lengths.publicKey, seed: lengths.seed },\n keygen,\n getPublicKey: (secretKey) => curve.getPublicKey(secretKey)\n };\n}\nfunction ecdhKem(curve, allowZeroKey = false) {\n const kg = ecKeygen(curve, allowZeroKey);\n if (!curve.getSharedSecret)\n throw new Error(\"wrong curve\");\n return {\n lengths: { ...kg.lengths, msg: kg.lengths.seed, cipherText: kg.lengths.publicKey },\n keygen: kg.keygen,\n getPublicKey: kg.getPublicKey,\n encapsulate(publicKey, rand = randomBytes5(curve.lengths.seed)) {\n const ek = this.keygen(rand).secretKey;\n const sharedSecret = this.decapsulate(publicKey, ek);\n const cipherText = curve.getPublicKey(ek);\n cleanBytes(ek);\n return { sharedSecret, cipherText };\n },\n decapsulate(cipherText, secretKey) {\n const res = curve.getSharedSecret(secretKey, cipherText);\n return curve.lengths.publicKeyHasPrefix ? res.subarray(1) : res;\n }\n };\n}\nfunction splitLengths(lst, name) {\n return splitCoder(name, ...lst.map((i) => {\n if (typeof i.lengths[name] !== \"number\")\n throw new Error(\"wrong length: \" + name);\n return i.lengths[name];\n }));\n}\nfunction expandSeedXof(xof) {\n return (seed, seedLen) => xof(seed, { dkLen: seedLen });\n}\nfunction combineKeys(realSeedLen, expandSeed, ...ck) {\n const seedCoder = splitLengths(ck, \"seed\");\n const pkCoder = splitLengths(ck, \"publicKey\");\n if (realSeedLen === void 0)\n realSeedLen = seedCoder.bytesLen;\n anumber5(realSeedLen);\n function expandDecapsulationKey(seed) {\n abytes5(seed, realSeedLen);\n const expanded = seedCoder.decode(expandSeed(seed, seedCoder.bytesLen));\n const keys = ck.map((i, j) => i.keygen(expanded[j]));\n const secretKey = keys.map((i) => i.secretKey);\n const publicKey = keys.map((i) => i.publicKey);\n return { secretKey, publicKey };\n }\n return {\n info: { lengths: { seed: realSeedLen, publicKey: pkCoder.bytesLen, secretKey: realSeedLen } },\n getPublicKey(secretKey) {\n return this.keygen(secretKey).publicKey;\n },\n keygen(seed = randomBytes5(realSeedLen)) {\n const { publicKey: pk, secretKey } = expandDecapsulationKey(seed);\n const publicKey = pkCoder.encode(pk);\n cleanBytes(pk);\n cleanBytes(secretKey);\n return { secretKey: seed, publicKey };\n },\n expandDecapsulationKey,\n realSeedLen\n };\n}\nfunction combineKEMS(realSeedLen, realMsgLen, expandSeed, combiner, ...kems) {\n const keys = combineKeys(realSeedLen, expandSeed, ...kems);\n const ctCoder = splitLengths(kems, \"cipherText\");\n const pkCoder = splitLengths(kems, \"publicKey\");\n const msgCoder = splitLengths(kems, \"msg\");\n if (realMsgLen === void 0)\n realMsgLen = msgCoder.bytesLen;\n anumber5(realMsgLen);\n return {\n lengths: {\n ...keys.info.lengths,\n msg: realMsgLen,\n msgRand: msgCoder.bytesLen,\n cipherText: ctCoder.bytesLen\n },\n getPublicKey: keys.getPublicKey,\n keygen: keys.keygen,\n encapsulate(pk, randomness = randomBytes5(msgCoder.bytesLen)) {\n const pks = pkCoder.decode(pk);\n const rand = msgCoder.decode(randomness);\n const enc = kems.map((i, j) => i.encapsulate(pks[j], rand[j]));\n const sharedSecret = enc.map((i) => i.sharedSecret);\n const cipherText = enc.map((i) => i.cipherText);\n const res = {\n sharedSecret: combiner(pks, cipherText, sharedSecret),\n cipherText: ctCoder.encode(cipherText)\n };\n cleanBytes(sharedSecret, cipherText);\n return res;\n },\n decapsulate(ct, seed) {\n const cts = ctCoder.decode(ct);\n const { publicKey, secretKey } = keys.expandDecapsulationKey(seed);\n const sharedSecret = kems.map((i, j) => i.decapsulate(cts[j], secretKey[j]));\n return combiner(publicKey, cts, sharedSecret);\n }\n };\n}\nfunction QSF(label2, pqc, curveKEM, xof, kdf) {\n ahash3(xof);\n ahash3(kdf);\n return combineKEMS(32, 32, expandSeedXof(xof), (pk, ct, ss) => kdf(concatBytes2(ss[0], ss[1], ct[1], pk[1], asciiToBytes(label2))), pqc, curveKEM);\n}\nvar QSF_ml_kem768_p256 = QSF(\"QSF-KEM(ML-KEM-768,P-256)-XOF(SHAKE256)-KDF(SHA3-256)\", ml_kem768, ecdhKem(p256, true), shake256, sha3_256);\nvar QSF_ml_kem1024_p384 = QSF(\"QSF-KEM(ML-KEM-1024,P-384)-XOF(SHAKE256)-KDF(SHA3-256)\", ml_kem1024, ecdhKem(p384, true), shake256, sha3_256);\nfunction createKitchenSink(label2, pqc, curveKEM, xof, hash) {\n ahash3(xof);\n ahash3(hash);\n return combineKEMS(32, 32, expandSeedXof(xof), (pk, ct, ss) => {\n const preimage = concatBytes2(ss[0], ss[1], ct[0], pk[0], ct[1], pk[1], asciiToBytes(label2));\n const len = 32;\n const ikm = concatBytes2(asciiToBytes(\"hybrid_prk\"), preimage);\n const prk = extract2(hash, ikm);\n const info = concatBytes2(numberToBytesBE2(len, 2), asciiToBytes(\"shared_secret\"), asciiToBytes(\"\"));\n const res = expand2(hash, prk, info, len);\n cleanBytes(prk, info, ikm, preimage);\n return res;\n }, pqc, curveKEM);\n}\nvar x25519kem = ecdhKem(x25519);\nvar KitchenSink_ml_kem768_x25519 = createKitchenSink(\"KitchenSink-KEM(ML-KEM-768,X25519)-XOF(SHAKE256)-KDF(HKDF-SHA-256)\", ml_kem768, x25519kem, shake256, sha2563);\nvar ml_kem768_x25519 = /* @__PURE__ */ (() => combineKEMS(\n 32,\n 32,\n expandSeedXof(shake256),\n // Awesome label, so much escaping hell in a single line.\n (pk, ct, ss) => sha3_256(concatBytes2(ss[0], ss[1], ct[1], pk[1], asciiToBytes(\"\\\\.//^\\\\\"))),\n ml_kem768,\n x25519kem\n))();\nfunction nistCurveKem(curve, scalarLen, elemLen, nseed) {\n const Fn = curve.Point.Fn;\n if (!Fn)\n throw new Error(\"no Point.Fn\");\n function rejectionSampling(seed) {\n let sk;\n for (let start = 0, end = scalarLen; ; start = end, end += scalarLen) {\n if (end > seed.length)\n throw new Error(\"rejection sampling failed\");\n sk = Fn.fromBytes(seed.subarray(start, end), true);\n if (Fn.isValidNot0(sk))\n break;\n }\n const secretKey = Fn.toBytes(Fn.create(sk));\n const publicKey = curve.getPublicKey(secretKey, false);\n return { secretKey, publicKey };\n }\n return {\n lengths: {\n secretKey: scalarLen,\n publicKey: elemLen,\n seed: nseed,\n msg: nseed,\n cipherText: elemLen\n },\n keygen(seed = randomBytes5(nseed)) {\n abytes5(seed, nseed, \"seed\");\n return rejectionSampling(seed);\n },\n getPublicKey(secretKey) {\n return curve.getPublicKey(secretKey, false);\n },\n encapsulate(publicKey, rand = randomBytes5(nseed)) {\n abytes5(rand, nseed, \"rand\");\n const { secretKey: ek } = rejectionSampling(rand);\n const sharedSecret = this.decapsulate(publicKey, ek);\n const cipherText = curve.getPublicKey(ek, false);\n cleanBytes(ek);\n return { sharedSecret, cipherText };\n },\n decapsulate(cipherText, secretKey) {\n const full = curve.getSharedSecret(secretKey, cipherText);\n return full.subarray(1);\n }\n };\n}\nfunction concreteHybridKem(label2, mlkem, curve, nseed) {\n const { secretKey: scalarLen, publicKeyUncompressed: elemLen } = curve.lengths;\n if (!scalarLen || !elemLen)\n throw new Error(\"wrong curve\");\n const curveKem = nistCurveKem(curve, scalarLen, elemLen, nseed);\n const mlkemSeedLen = 64;\n const totalSeedLen = mlkemSeedLen + nseed;\n return combineKEMS(32, 32, (seed) => {\n abytes5(seed, 32);\n const expanded = shake256(seed, { dkLen: totalSeedLen });\n const mlkemSeed = expanded.subarray(0, mlkemSeedLen);\n const curveSeed = expanded.subarray(mlkemSeedLen, totalSeedLen);\n return concatBytes2(mlkemSeed, curveSeed);\n }, (pk, ct, ss) => sha3_256(concatBytes2(ss[0], ss[1], ct[1], pk[1], asciiToBytes(label2))), mlkem, curveKem);\n}\nvar ml_kem768_p256 = /* @__PURE__ */ (() => concreteHybridKem(\"MLKEM768-P256\", ml_kem768, p256, 128))();\nvar MLKEM768X25519 = ml_kem768_x25519;\nvar MLKEM768P256 = ml_kem768_p256;\n\n// ../../node_modules/age-encryption/dist/x25519.js\nvar exportable = false;\nvar webCryptoOff = false;\nasync function webCryptoFallback(func, fallback) {\n if (webCryptoOff) {\n return await fallback();\n }\n try {\n return await func();\n } catch (error) {\n if (error instanceof ReferenceError || error instanceof DOMException && error.name === \"NotSupportedError\") {\n return await fallback();\n } else {\n throw error;\n }\n }\n}\nasync function scalarMult(scalar, u) {\n return await webCryptoFallback(async () => {\n const key = isCryptoKey(scalar) ? scalar : await importX25519Key(scalar);\n const peer = await crypto.subtle.importKey(\"raw\", domBuffer(u), { name: \"X25519\" }, exportable, []);\n return new Uint8Array(await crypto.subtle.deriveBits({ name: \"X25519\", public: peer }, key, 256));\n }, () => {\n if (isCryptoKey(scalar)) {\n throw new Error(\"CryptoKey provided but X25519 WebCrypto is not supported\");\n }\n return x25519.scalarMult(scalar, u);\n });\n}\nasync function scalarMultBase(scalar) {\n return await webCryptoFallback(async () => {\n return scalarMult(scalar, x25519.GuBytes);\n }, () => {\n if (isCryptoKey(scalar)) {\n throw new Error(\"CryptoKey provided but X25519 WebCrypto is not supported\");\n }\n return x25519.scalarMultBase(scalar);\n });\n}\nvar pkcs8Prefix = /* @__PURE__ */ new Uint8Array([\n 48,\n 46,\n 2,\n 1,\n 0,\n 48,\n 5,\n 6,\n 3,\n 43,\n 101,\n 110,\n 4,\n 34,\n 4,\n 32\n]);\nasync function importX25519Key(key) {\n if (key.length !== 32) {\n throw new Error(\"X25519 private key must be 32 bytes\");\n }\n const pkcs8 = new Uint8Array([...pkcs8Prefix, ...key]);\n return crypto.subtle.importKey(\"pkcs8\", pkcs8, { name: \"X25519\" }, exportable, [\"deriveBits\"]);\n}\nfunction isCryptoKey(key) {\n return typeof CryptoKey !== \"undefined\" && key instanceof CryptoKey;\n}\nfunction domBuffer(arr) {\n return arr;\n}\n\n// ../../node_modules/age-encryption/dist/io.js\nvar LineReader = class {\n s;\n transcript = [];\n buf = new Uint8Array(0);\n constructor(stream2) {\n this.s = stream2.getReader();\n }\n async readLine() {\n const line = [];\n while (true) {\n const i = this.buf.indexOf(\"\\n\".charCodeAt(0));\n if (i >= 0) {\n line.push(this.buf.subarray(0, i));\n this.transcript.push(this.buf.subarray(0, i + 1));\n this.buf = this.buf.subarray(i + 1);\n return asciiString(flatten(line));\n }\n if (this.buf.length > 0) {\n line.push(this.buf);\n this.transcript.push(this.buf);\n }\n const next = await this.s.read();\n if (next.done) {\n this.buf = flatten(line);\n return null;\n }\n this.buf = next.value;\n }\n }\n close() {\n this.s.releaseLock();\n return { rest: this.buf, transcript: flatten(this.transcript) };\n }\n};\nfunction asciiString(bytes) {\n bytes.forEach((b) => {\n if (b < 32 || b > 126) {\n throw Error(\"invalid non-ASCII byte in header\");\n }\n });\n return new TextDecoder().decode(bytes);\n}\nfunction flatten(arr) {\n const len = arr.reduce((sum, line) => sum + line.length, 0);\n const out = new Uint8Array(len);\n let n = 0;\n for (const a of arr) {\n out.set(a, n);\n n += a.length;\n }\n return out;\n}\nfunction prepend(s, ...prefixes) {\n return s.pipeThrough(new TransformStream({\n start(controller) {\n for (const p of prefixes) {\n controller.enqueue(p);\n }\n }\n }));\n}\nfunction stream(a) {\n return new ReadableStream({\n start(controller) {\n controller.enqueue(a);\n controller.close();\n }\n });\n}\nasync function readAll(stream2) {\n if (!(stream2 instanceof ReadableStream)) {\n throw new Error(\"readAll expects a ReadableStream<Uint8Array>\");\n }\n return new Uint8Array(await new Response(stream2).arrayBuffer());\n}\nasync function readAllString(stream2) {\n if (!(stream2 instanceof ReadableStream)) {\n throw new Error(\"readAllString expects a ReadableStream<Uint8Array>\");\n }\n return await new Response(stream2).text();\n}\nasync function read(stream2, n) {\n const reader = stream2.getReader();\n const chunks = [];\n let readBytes = 0;\n while (readBytes < n) {\n const { done, value } = await reader.read();\n if (done) {\n throw Error(\"stream ended before reading \" + n.toString() + \" bytes\");\n }\n chunks.push(value);\n readBytes += value.length;\n }\n reader.releaseLock();\n const buf = flatten(chunks);\n const data = buf.subarray(0, n);\n const rest = prepend(stream2, buf.subarray(n));\n return { data, rest };\n}\n\n// ../../node_modules/age-encryption/dist/format.js\nvar Stanza = class {\n /**\n * All space-separated arguments on the first line of the stanza.\n * Each argument is a string that does not contain spaces.\n * The first argument is often a recipient type, which should look like\n * `example.com/...` to avoid collisions.\n */\n args;\n /**\n * The raw body of the stanza. This is automatically base64-encoded and\n * split into lines of 48 characters each.\n */\n body;\n constructor(args, body) {\n this.args = args;\n this.body = body;\n }\n};\nasync function parseNextStanza(hdr) {\n const argsLine = await hdr.readLine();\n if (argsLine === null) {\n throw Error(\"invalid stanza\");\n }\n const args = argsLine.split(\" \");\n if (args.length < 2 || args.shift() !== \"->\") {\n return { next: argsLine };\n }\n for (const arg of args) {\n if (arg.length === 0) {\n throw Error(\"invalid stanza\");\n }\n }\n const bodyLines = [];\n for (; ; ) {\n const nextLine = await hdr.readLine();\n if (nextLine === null) {\n throw Error(\"invalid stanza\");\n }\n const line = base64nopad.decode(nextLine);\n if (line.length > 48) {\n throw Error(\"invalid stanza\");\n }\n bodyLines.push(line);\n if (line.length < 48) {\n break;\n }\n }\n const body = flatten(bodyLines);\n return { s: new Stanza(args, body) };\n}\nasync function parseHeader(header) {\n const hdr = new LineReader(header);\n const versionLine = await hdr.readLine();\n if (versionLine !== \"age-encryption.org/v1\") {\n throw Error(\"invalid version \" + (versionLine ?? \"line\"));\n }\n const stanzas = [];\n for (; ; ) {\n const { s, next: macLine } = await parseNextStanza(hdr);\n if (s !== void 0) {\n stanzas.push(s);\n continue;\n }\n if (!macLine.startsWith(\"--- \")) {\n throw Error(\"invalid header\");\n }\n const MAC = base64nopad.decode(macLine.slice(4));\n const { rest, transcript } = hdr.close();\n const headerNoMAC = transcript.slice(0, transcript.length - 1 - macLine.length + 3);\n return { stanzas, headerNoMAC, MAC, headerSize: transcript.length, rest: prepend(header, rest) };\n }\n}\nfunction encodeHeaderNoMAC(recipients) {\n const lines = [];\n lines.push(\"age-encryption.org/v1\\n\");\n for (const s of recipients) {\n lines.push(\"-> \" + s.args.join(\" \") + \"\\n\");\n for (let i = 0; i < s.body.length; i += 48) {\n let end = i + 48;\n if (end > s.body.length)\n end = s.body.length;\n lines.push(base64nopad.encode(s.body.subarray(i, end)) + \"\\n\");\n }\n if (s.body.length % 48 === 0)\n lines.push(\"\\n\");\n }\n lines.push(\"---\");\n return new TextEncoder().encode(lines.join(\"\"));\n}\nfunction encodeHeader(recipients, MAC) {\n return flatten([\n encodeHeaderNoMAC(recipients),\n new TextEncoder().encode(\" \" + base64nopad.encode(MAC) + \"\\n\")\n ]);\n}\n\n// ../../node_modules/age-encryption/dist/recipients.js\nfunction generateIdentity() {\n return generateX25519Identity();\n}\nfunction generateX25519Identity() {\n const scalar = randomBytes(32);\n const identity = bech32.encodeFromBytes(\"AGE-SECRET-KEY-\", scalar).toUpperCase();\n return Promise.resolve(identity);\n}\nfunction generateHybridIdentity() {\n const scalar = randomBytes(32);\n const identity = bech32.encodeFromBytes(\"AGE-SECRET-KEY-PQ-\", scalar).toUpperCase();\n return Promise.resolve(identity);\n}\nasync function identityToRecipient(identity) {\n let scalar;\n if (isCryptoKey2(identity)) {\n scalar = identity;\n } else if (identity.startsWith(\"AGE-SECRET-KEY-PQ-1\")) {\n const res = bech32.decodeToBytes(identity);\n if (res.prefix.toUpperCase() !== \"AGE-SECRET-KEY-PQ-\" || res.bytes.length !== 32) {\n throw Error(\"invalid identity\");\n }\n const recipient2 = MLKEM768X25519.getPublicKey(res.bytes);\n return bech32.encode(\"age1pq\", bech32.toWords(recipient2), false);\n } else {\n const res = bech32.decodeToBytes(identity);\n if (!identity.startsWith(\"AGE-SECRET-KEY-1\") || res.prefix.toUpperCase() !== \"AGE-SECRET-KEY-\" || res.bytes.length !== 32) {\n throw Error(\"invalid identity\");\n }\n scalar = res.bytes;\n }\n const recipient = await scalarMultBase(scalar);\n return bech32.encodeFromBytes(\"age\", recipient);\n}\nvar HybridRecipient = class {\n recipient;\n constructor(s) {\n const res = bech32.decodeToBytes(s);\n if (!s.startsWith(\"age1pq1\") || res.prefix.toLowerCase() !== \"age1pq\" || res.bytes.length !== 1216) {\n throw Error(\"invalid recipient\");\n }\n this.recipient = res.bytes;\n }\n wrapFileKey(fileKey) {\n const { cipherText: encapsulatedKey, sharedSecret } = MLKEM768X25519.encapsulate(this.recipient);\n const label2 = new TextEncoder().encode(\"age-encryption.org/mlkem768x25519\");\n const { key, nonce } = hpkeContext(hpkeMLKEM768X25519, sharedSecret, label2);\n const ciphertext = chacha20poly1305(key, nonce).encrypt(fileKey);\n return [new Stanza([\"mlkem768x25519\", base64nopad.encode(encapsulatedKey)], ciphertext)];\n }\n};\nvar HybridIdentity = class {\n identity;\n constructor(s) {\n const res = bech32.decodeToBytes(s);\n if (!s.startsWith(\"AGE-SECRET-KEY-PQ-1\") || res.prefix.toUpperCase() !== \"AGE-SECRET-KEY-PQ-\" || res.bytes.length !== 32) {\n throw Error(\"invalid identity\");\n }\n this.identity = res.bytes;\n }\n unwrapFileKey(stanzas) {\n for (const s of stanzas) {\n if (s.args.length < 1 || s.args[0] !== \"mlkem768x25519\") {\n continue;\n }\n if (s.args.length !== 2) {\n throw Error(\"invalid mlkem768x25519 stanza\");\n }\n const share = base64nopad.decode(s.args[1]);\n if (share.length !== 1120) {\n throw Error(\"invalid mlkem768x25519 stanza\");\n }\n if (s.body.length !== 32) {\n throw Error(\"invalid mlkem768x25519 stanza\");\n }\n const sharedSecret = MLKEM768X25519.decapsulate(share, this.identity);\n const label2 = new TextEncoder().encode(\"age-encryption.org/mlkem768x25519\");\n const { key, nonce } = hpkeContext(hpkeMLKEM768X25519, sharedSecret, label2);\n try {\n return chacha20poly1305(key, nonce).decrypt(s.body);\n } catch {\n continue;\n }\n }\n return null;\n }\n};\nvar hpkeMLKEM768X25519 = 25722;\nvar hpkeMLKEM768P256 = 80;\nvar hpkeDHKEMP256 = 16;\nfunction hpkeContext(kemID, sharedSecret, info) {\n const suiteID = hpkeSuiteID(kemID);\n const pskIDHash = hpkeLabeledExtract(suiteID, void 0, \"psk_id_hash\", new Uint8Array(0));\n const infoHash = hpkeLabeledExtract(suiteID, void 0, \"info_hash\", info);\n const ksContext = new Uint8Array(1 + pskIDHash.length + infoHash.length);\n ksContext[0] = 0;\n ksContext.set(pskIDHash, 1);\n ksContext.set(infoHash, 1 + pskIDHash.length);\n const secret = hpkeLabeledExtract(suiteID, sharedSecret, \"secret\", new Uint8Array(0));\n const key = hpkeLabeledExpand(suiteID, secret, \"key\", ksContext, 32);\n const nonce = hpkeLabeledExpand(suiteID, secret, \"base_nonce\", ksContext, 12);\n return { key, nonce };\n}\nfunction hpkeSuiteID(kemID) {\n const suiteID = new Uint8Array(10);\n suiteID.set(new TextEncoder().encode(\"HPKE\"), 0);\n suiteID[4] = kemID >> 8 & 255;\n suiteID[5] = kemID & 255;\n suiteID[6] = 0;\n suiteID[7] = 1;\n suiteID[8] = 0;\n suiteID[9] = 3;\n return suiteID;\n}\nfunction hpkeLabeledExtract(suiteID, salt, label2, ikm) {\n const labeledIKM = new Uint8Array(7 + suiteID.length + label2.length + ikm.length);\n let offset = 0;\n labeledIKM.set(new TextEncoder().encode(\"HPKE-v1\"), offset);\n offset += \"HPKE-v1\".length;\n labeledIKM.set(suiteID, offset);\n offset += suiteID.length;\n labeledIKM.set(new TextEncoder().encode(label2), offset);\n offset += label2.length;\n labeledIKM.set(ikm, offset);\n return extract(sha256, labeledIKM, salt);\n}\nfunction hpkeLabeledExpand(suiteID, prk, label2, info, length) {\n const labeledInfo = new Uint8Array(2 + 7 + suiteID.length + label2.length + info.length);\n let offset = 0;\n labeledInfo[offset] = length >> 8 & 255;\n labeledInfo[offset + 1] = length & 255;\n offset += 2;\n labeledInfo.set(new TextEncoder().encode(\"HPKE-v1\"), offset);\n offset += \"HPKE-v1\".length;\n labeledInfo.set(suiteID, offset);\n offset += suiteID.length;\n labeledInfo.set(new TextEncoder().encode(label2), offset);\n offset += label2.length;\n labeledInfo.set(info, offset);\n return expand(sha256, prk, labeledInfo, length);\n}\nfunction hpkeDHKEMP256Encapsulate(recipient) {\n if (recipient.length !== p256.lengths.publicKeyUncompressed) {\n recipient = p256.Point.fromBytes(recipient).toBytes(false);\n }\n const ephemeral = p256.utils.randomSecretKey();\n const encapsulatedKey = p256.getPublicKey(ephemeral, false);\n const ss = p256.getSharedSecret(ephemeral, recipient, true).subarray(1);\n const kemContext = new Uint8Array(encapsulatedKey.length + recipient.length);\n kemContext.set(encapsulatedKey, 0);\n kemContext.set(recipient, encapsulatedKey.length);\n const suiteID = new Uint8Array(5);\n suiteID.set(new TextEncoder().encode(\"KEM\"), 0);\n suiteID[3] = hpkeDHKEMP256 >> 8;\n suiteID[4] = hpkeDHKEMP256 & 255;\n const eaePRK = hpkeLabeledExtract(suiteID, void 0, \"eae_prk\", ss);\n const sharedSecret = hpkeLabeledExpand(suiteID, eaePRK, \"shared_secret\", kemContext, 32);\n return { encapsulatedKey, sharedSecret };\n}\nvar TagRecipient = class {\n recipient;\n constructor(s) {\n const res = bech32.decodeToBytes(s);\n if (!s.startsWith(\"age1tag1\") || res.prefix.toLowerCase() !== \"age1tag\" || res.bytes.length !== 33) {\n throw Error(\"invalid recipient\");\n }\n this.recipient = res.bytes;\n }\n wrapFileKey(fileKey) {\n const { encapsulatedKey, sharedSecret } = hpkeDHKEMP256Encapsulate(this.recipient);\n const label2 = new TextEncoder().encode(\"age-encryption.org/p256tag\");\n const tag = (() => {\n const recipientHash = sha256(this.recipient).subarray(0, 4);\n const ikm = new Uint8Array(encapsulatedKey.length + recipientHash.length);\n ikm.set(encapsulatedKey, 0);\n ikm.set(recipientHash, encapsulatedKey.length);\n return extract(sha256, ikm, label2).subarray(0, 4);\n })();\n const { key, nonce } = hpkeContext(hpkeDHKEMP256, sharedSecret, label2);\n const ciphertext = chacha20poly1305(key, nonce).encrypt(fileKey);\n return [new Stanza([\"p256tag\", base64nopad.encode(tag), base64nopad.encode(encapsulatedKey)], ciphertext)];\n }\n};\nvar HybridTagRecipient = class {\n recipient;\n constructor(s) {\n const res = bech32.decodeToBytes(s);\n if (!s.startsWith(\"age1tagpq1\") || res.prefix.toLowerCase() !== \"age1tagpq\" || res.bytes.length !== 1249) {\n throw Error(\"invalid recipient\");\n }\n this.recipient = res.bytes;\n }\n wrapFileKey(fileKey) {\n const { cipherText: encapsulatedKey, sharedSecret } = MLKEM768P256.encapsulate(this.recipient);\n const label2 = new TextEncoder().encode(\"age-encryption.org/mlkem768p256tag\");\n const tag = (() => {\n const recipientHash = sha256(this.recipient.subarray(1184)).subarray(0, 4);\n const ikm = new Uint8Array(encapsulatedKey.length + recipientHash.length);\n ikm.set(encapsulatedKey, 0);\n ikm.set(recipientHash, encapsulatedKey.length);\n return extract(sha256, ikm, label2).subarray(0, 4);\n })();\n const { key, nonce } = hpkeContext(hpkeMLKEM768P256, sharedSecret, label2);\n const ciphertext = chacha20poly1305(key, nonce).encrypt(fileKey);\n return [new Stanza([\"mlkem768p256tag\", base64nopad.encode(tag), base64nopad.encode(encapsulatedKey)], ciphertext)];\n }\n};\nvar X25519Recipient = class {\n recipient;\n constructor(s) {\n const res = bech32.decodeToBytes(s);\n if (!s.startsWith(\"age1\") || res.prefix.toLowerCase() !== \"age\" || res.bytes.length !== 32) {\n throw Error(\"invalid recipient\");\n }\n this.recipient = res.bytes;\n }\n async wrapFileKey(fileKey) {\n const ephemeral = randomBytes(32);\n const share = await scalarMultBase(ephemeral);\n const secret = await scalarMult(ephemeral, this.recipient);\n const salt = new Uint8Array(share.length + this.recipient.length);\n salt.set(share);\n salt.set(this.recipient, share.length);\n const label2 = new TextEncoder().encode(\"age-encryption.org/v1/X25519\");\n const key = hkdf(sha256, secret, salt, label2, 32);\n return [new Stanza([\"X25519\", base64nopad.encode(share)], encryptFileKey(fileKey, key))];\n }\n};\nvar X25519Identity = class {\n identity;\n recipient;\n constructor(s) {\n if (isCryptoKey2(s)) {\n this.identity = s;\n this.recipient = scalarMultBase(s);\n return;\n }\n const res = bech32.decodeToBytes(s);\n if (!s.startsWith(\"AGE-SECRET-KEY-1\") || res.prefix.toUpperCase() !== \"AGE-SECRET-KEY-\" || res.bytes.length !== 32) {\n throw Error(\"invalid identity\");\n }\n this.identity = res.bytes;\n this.recipient = scalarMultBase(res.bytes);\n }\n async unwrapFileKey(stanzas) {\n for (const s of stanzas) {\n if (s.args.length < 1 || s.args[0] !== \"X25519\") {\n continue;\n }\n if (s.args.length !== 2) {\n throw Error(\"invalid X25519 stanza\");\n }\n const share = base64nopad.decode(s.args[1]);\n if (share.length !== 32) {\n throw Error(\"invalid X25519 stanza\");\n }\n const secret = await scalarMult(this.identity, share);\n const recipient = await this.recipient;\n const salt = new Uint8Array(share.length + recipient.length);\n salt.set(share);\n salt.set(recipient, share.length);\n const label2 = new TextEncoder().encode(\"age-encryption.org/v1/X25519\");\n const key = hkdf(sha256, secret, salt, label2, 32);\n const fileKey = decryptFileKey(s.body, key);\n if (fileKey !== null)\n return fileKey;\n }\n return null;\n }\n};\nvar ScryptRecipient = class {\n passphrase;\n logN;\n constructor(passphrase, logN) {\n this.passphrase = passphrase;\n this.logN = logN;\n }\n wrapFileKey(fileKey) {\n const salt = randomBytes(16);\n const label2 = \"age-encryption.org/v1/scrypt\";\n const labelAndSalt = new Uint8Array(label2.length + 16);\n labelAndSalt.set(new TextEncoder().encode(label2));\n labelAndSalt.set(salt, label2.length);\n const key = scrypt(this.passphrase, labelAndSalt, { N: 2 ** this.logN, r: 8, p: 1, dkLen: 32 });\n return [new Stanza([\"scrypt\", base64nopad.encode(salt), this.logN.toString()], encryptFileKey(fileKey, key))];\n }\n};\nvar ScryptIdentity = class {\n passphrase;\n constructor(passphrase) {\n this.passphrase = passphrase;\n }\n unwrapFileKey(stanzas) {\n for (const s of stanzas) {\n if (s.args.length < 1 || s.args[0] !== \"scrypt\") {\n continue;\n }\n if (stanzas.length !== 1) {\n throw Error(\"scrypt recipient is not the only one in the header\");\n }\n if (s.args.length !== 3) {\n throw Error(\"invalid scrypt stanza\");\n }\n if (!/^[1-9][0-9]*$/.test(s.args[2])) {\n throw Error(\"invalid scrypt stanza\");\n }\n const salt = base64nopad.decode(s.args[1]);\n if (salt.length !== 16) {\n throw Error(\"invalid scrypt stanza\");\n }\n const logN = Number(s.args[2]);\n if (logN > 20) {\n throw Error(\"scrypt work factor is too high\");\n }\n const label2 = \"age-encryption.org/v1/scrypt\";\n const labelAndSalt = new Uint8Array(label2.length + 16);\n labelAndSalt.set(new TextEncoder().encode(label2));\n labelAndSalt.set(salt, label2.length);\n const key = scrypt(this.passphrase, labelAndSalt, { N: 2 ** logN, r: 8, p: 1, dkLen: 32 });\n const fileKey = decryptFileKey(s.body, key);\n if (fileKey !== null)\n return fileKey;\n }\n return null;\n }\n};\nfunction encryptFileKey(fileKey, key) {\n const nonce = new Uint8Array(12);\n return chacha20poly1305(key, nonce).encrypt(fileKey);\n}\nfunction decryptFileKey(body, key) {\n if (body.length !== 32) {\n throw Error(\"invalid stanza\");\n }\n const nonce = new Uint8Array(12);\n try {\n return chacha20poly1305(key, nonce).decrypt(body);\n } catch {\n return null;\n }\n}\nfunction isCryptoKey2(key) {\n return typeof CryptoKey !== \"undefined\" && key instanceof CryptoKey;\n}\n\n// ../../node_modules/age-encryption/dist/stream.js\nvar chacha20poly1305Overhead = 16;\nvar chunkSize = /* @__PURE__ */ (() => 64 * 1024)();\nvar chunkSizeWithOverhead = /* @__PURE__ */ (() => chunkSize + chacha20poly1305Overhead)();\nfunction decryptSTREAM(key) {\n const streamNonce = new Uint8Array(12);\n const incNonce = () => {\n for (let i = streamNonce.length - 2; i >= 0; i--) {\n streamNonce[i]++;\n if (streamNonce[i] !== 0)\n break;\n }\n };\n let firstChunk = true;\n const ciphertextBuffer = new Uint8Array(chunkSizeWithOverhead);\n let ciphertextBufferUsed = 0;\n return new TransformStream({\n transform(chunk, controller) {\n while (chunk.length > 0) {\n if (ciphertextBufferUsed === ciphertextBuffer.length) {\n const decryptedChunk = chacha20poly1305(key, streamNonce).decrypt(ciphertextBuffer);\n controller.enqueue(decryptedChunk);\n incNonce();\n ciphertextBufferUsed = 0;\n firstChunk = false;\n }\n const n = Math.min(ciphertextBuffer.length - ciphertextBufferUsed, chunk.length);\n ciphertextBuffer.set(chunk.subarray(0, n), ciphertextBufferUsed);\n ciphertextBufferUsed += n;\n chunk = chunk.subarray(n);\n }\n },\n flush(controller) {\n streamNonce[11] = 1;\n const decryptedChunk = chacha20poly1305(key, streamNonce).decrypt(ciphertextBuffer.subarray(0, ciphertextBufferUsed));\n if (!firstChunk && decryptedChunk.length === 0) {\n throw new Error(\"final chunk is empty\");\n }\n controller.enqueue(decryptedChunk);\n }\n });\n}\nfunction plaintextSize(ciphertextSize2) {\n if (ciphertextSize2 < chacha20poly1305Overhead) {\n throw Error(\"ciphertext is too small\");\n }\n if (ciphertextSize2 === chacha20poly1305Overhead) {\n return 0;\n }\n const fullChunks = Math.floor(ciphertextSize2 / chunkSizeWithOverhead);\n const lastChunk = ciphertextSize2 % chunkSizeWithOverhead;\n if (0 < lastChunk && lastChunk <= chacha20poly1305Overhead) {\n throw Error(\"ciphertext size is invalid\");\n }\n let size = ciphertextSize2;\n size -= fullChunks * chacha20poly1305Overhead;\n size -= lastChunk > 0 ? chacha20poly1305Overhead : 0;\n return size;\n}\nfunction encryptSTREAM(key) {\n const streamNonce = new Uint8Array(12);\n const incNonce = () => {\n for (let i = streamNonce.length - 2; i >= 0; i--) {\n streamNonce[i]++;\n if (streamNonce[i] !== 0)\n break;\n }\n };\n const plaintextBuffer = new Uint8Array(chunkSize);\n let plaintextBufferUsed = 0;\n return new TransformStream({\n transform(chunk, controller) {\n while (chunk.length > 0) {\n if (plaintextBufferUsed === plaintextBuffer.length) {\n const encryptedChunk = chacha20poly1305(key, streamNonce).encrypt(plaintextBuffer);\n controller.enqueue(encryptedChunk);\n incNonce();\n plaintextBufferUsed = 0;\n }\n const n = Math.min(plaintextBuffer.length - plaintextBufferUsed, chunk.length);\n plaintextBuffer.set(chunk.subarray(0, n), plaintextBufferUsed);\n plaintextBufferUsed += n;\n chunk = chunk.subarray(n);\n }\n },\n flush(controller) {\n streamNonce[11] = 1;\n const encryptedChunk = chacha20poly1305(key, streamNonce).encrypt(plaintextBuffer.subarray(0, plaintextBufferUsed));\n controller.enqueue(encryptedChunk);\n }\n });\n}\nfunction ciphertextSize(plaintextSize2) {\n const chunks = Math.max(1, Math.ceil(plaintextSize2 / chunkSize));\n return plaintextSize2 + chacha20poly1305Overhead * chunks;\n}\n\n// ../../node_modules/age-encryption/dist/armor.js\nvar armor_exports = {};\n__export(armor_exports, {\n decode: () => decode,\n encode: () => encode\n});\nfunction encode(file) {\n const lines = [];\n lines.push(\"-----BEGIN AGE ENCRYPTED FILE-----\\n\");\n for (let i = 0; i < file.length; i += 48) {\n let end = i + 48;\n if (end > file.length)\n end = file.length;\n lines.push(base64.encode(file.subarray(i, end)) + \"\\n\");\n }\n lines.push(\"-----END AGE ENCRYPTED FILE-----\\n\");\n return lines.join(\"\");\n}\nfunction decode(file) {\n const lines = file.trim().replaceAll(\"\\r\\n\", \"\\n\").split(\"\\n\");\n if (lines.shift() !== \"-----BEGIN AGE ENCRYPTED FILE-----\") {\n throw Error(\"invalid header\");\n }\n if (lines.pop() !== \"-----END AGE ENCRYPTED FILE-----\") {\n throw Error(\"invalid footer\");\n }\n function isLineLengthValid(i, l) {\n if (i === lines.length - 1) {\n return l.length > 0 && l.length <= 64 && l.length % 4 === 0;\n }\n return l.length === 64;\n }\n if (!lines.every((l, i) => isLineLengthValid(i, l))) {\n throw Error(\"invalid line length\");\n }\n if (!lines.every((l) => /^[A-Za-z0-9+/=]+$/.test(l))) {\n throw Error(\"invalid base64\");\n }\n return base64.decode(lines.join(\"\"));\n}\n\n// ../../node_modules/age-encryption/dist/webauthn.js\nvar webauthn_exports = {};\n__export(webauthn_exports, {\n WebAuthnIdentity: () => WebAuthnIdentity,\n WebAuthnRecipient: () => WebAuthnRecipient,\n createCredential: () => createCredential\n});\n\n// ../../node_modules/age-encryption/dist/cbor.js\nfunction readTypeAndArgument(b) {\n if (b.length === 0) {\n throw Error(\"cbor: unexpected EOF\");\n }\n const major = b[0] >> 5;\n const minor = b[0] & 31;\n if (minor <= 23) {\n return [major, minor, b.subarray(1)];\n }\n if (minor === 24) {\n if (b.length < 2) {\n throw Error(\"cbor: unexpected EOF\");\n }\n return [major, b[1], b.subarray(2)];\n }\n if (minor === 25) {\n if (b.length < 3) {\n throw Error(\"cbor: unexpected EOF\");\n }\n return [major, b[1] << 8 | b[2], b.subarray(3)];\n }\n throw Error(\"cbor: unsupported argument encoding\");\n}\nfunction readUint(b) {\n const [major, minor, rest] = readTypeAndArgument(b);\n if (major !== 0) {\n throw Error(\"cbor: expected unsigned integer\");\n }\n return [minor, rest];\n}\nfunction readByteString(b) {\n const [major, minor, rest] = readTypeAndArgument(b);\n if (major !== 2) {\n throw Error(\"cbor: expected byte string\");\n }\n if (minor > rest.length) {\n throw Error(\"cbor: unexpected EOF\");\n }\n return [rest.subarray(0, minor), rest.subarray(minor)];\n}\nfunction readTextString(b) {\n const [major, minor, rest] = readTypeAndArgument(b);\n if (major !== 3) {\n throw Error(\"cbor: expected text string\");\n }\n if (minor > rest.length) {\n throw Error(\"cbor: unexpected EOF\");\n }\n const decoder = new TextDecoder(\"utf-8\", { fatal: true, ignoreBOM: true });\n return [decoder.decode(rest.subarray(0, minor)), rest.subarray(minor)];\n}\nfunction readArray(b) {\n const [major, minor, r] = readTypeAndArgument(b);\n if (major !== 4) {\n throw Error(\"cbor: expected array\");\n }\n let rest = r;\n const args = [];\n for (let i = 0; i < minor; i++) {\n let arg;\n [arg, rest] = readTextString(rest);\n args.push(arg);\n }\n return [args, rest];\n}\nfunction encodeUint(n) {\n if (n <= 23) {\n return new Uint8Array([n]);\n }\n if (n <= 255) {\n return new Uint8Array([24, n]);\n }\n if (n <= 65535) {\n return new Uint8Array([25, n >> 8, n & 255]);\n }\n throw Error(\"cbor: unsigned integer too large\");\n}\nfunction encodeByteString(b) {\n if (b.length <= 23) {\n return new Uint8Array([2 << 5 | b.length, ...b]);\n }\n if (b.length <= 255) {\n return new Uint8Array([2 << 5 | 24, b.length, ...b]);\n }\n if (b.length <= 65535) {\n return new Uint8Array([2 << 5 | 25, b.length >> 8, b.length & 255, ...b]);\n }\n throw Error(\"cbor: byte string too long\");\n}\nfunction encodeTextString(s) {\n const b = new TextEncoder().encode(s);\n if (b.length <= 23) {\n return new Uint8Array([3 << 5 | b.length, ...b]);\n }\n if (b.length <= 255) {\n return new Uint8Array([3 << 5 | 24, b.length, ...b]);\n }\n if (b.length <= 65535) {\n return new Uint8Array([3 << 5 | 25, b.length >> 8, b.length & 255, ...b]);\n }\n throw Error(\"cbor: text string too long\");\n}\nfunction encodeArray(args) {\n const body = args.flatMap((x) => [...encodeTextString(x)]);\n if (args.length <= 23) {\n return new Uint8Array([4 << 5 | args.length, ...body]);\n }\n if (args.length <= 255) {\n return new Uint8Array([4 << 5 | 24, args.length, ...body]);\n }\n if (args.length <= 65535) {\n return new Uint8Array([4 << 5 | 25, args.length >> 8, args.length & 255, ...body]);\n }\n throw Error(\"cbor: array too long\");\n}\n\n// ../../node_modules/age-encryption/dist/webauthn.js\nvar defaultAlgorithms = [\n { type: \"public-key\", alg: -8 },\n // Ed25519\n { type: \"public-key\", alg: -7 },\n // ECDSA with P-256 and SHA-256\n { type: \"public-key\", alg: -257 }\n // RSA PKCS#1 v1.5 with SHA-256\n];\nasync function createCredential(options) {\n const cred = await navigator.credentials.create({\n publicKey: {\n rp: { name: \"\", id: options.rpId },\n user: {\n name: options.keyName,\n id: domBuffer2(randomBytes(8)),\n // avoid overwriting existing keys\n displayName: \"\"\n },\n pubKeyCredParams: defaultAlgorithms,\n authenticatorSelection: {\n requireResidentKey: options.type !== \"security-key\",\n residentKey: options.type !== \"security-key\" ? \"required\" : \"discouraged\",\n userVerification: \"required\"\n // prf requires UV\n },\n hints: options.type === \"security-key\" ? [\"security-key\"] : [],\n extensions: { prf: {} },\n challenge: new Uint8Array([0]).buffer\n // unused without attestation\n }\n });\n if (!cred.getClientExtensionResults().prf?.enabled) {\n throw Error(\"PRF extension not available (need macOS 15+, Chrome 132+)\");\n }\n const rpId = options.rpId ?? new URL(window.origin).hostname;\n return encodeIdentity(cred, rpId);\n}\nvar prefix = \"AGE-PLUGIN-FIDO2PRF-\";\nfunction encodeIdentity(credential, rpId) {\n const res = credential.response;\n const version = encodeUint(1);\n const credId = encodeByteString(new Uint8Array(credential.rawId));\n const rp = encodeTextString(rpId);\n const transports = encodeArray(res.getTransports());\n const identityData = new Uint8Array([...version, ...credId, ...rp, ...transports]);\n return bech32.encode(prefix, bech32.toWords(identityData), false).toUpperCase();\n}\nfunction decodeIdentity(identity) {\n const res = bech32.decodeToBytes(identity);\n if (!identity.startsWith(prefix + \"1\")) {\n throw Error(\"invalid identity\");\n }\n const [version, rest1] = readUint(res.bytes);\n if (version !== 1) {\n throw Error(\"unsupported identity version\");\n }\n const [credId, rest2] = readByteString(rest1);\n const [rpId, rest3] = readTextString(rest2);\n const [transports] = readArray(rest3);\n return [credId, rpId, transports];\n}\nvar label = \"age-encryption.org/fido2prf\";\nvar WebAuthnInternal = class {\n credId;\n transports;\n rpId;\n constructor(options) {\n if (options?.identity) {\n const [credId, rpId, transports] = decodeIdentity(options.identity);\n this.credId = credId;\n this.transports = transports;\n this.rpId = rpId;\n } else {\n this.rpId = options?.rpId;\n }\n }\n async getCredential(nonce) {\n const assertion = await navigator.credentials.get({\n publicKey: {\n allowCredentials: this.credId ? [{\n id: domBuffer2(this.credId),\n transports: this.transports,\n type: \"public-key\"\n }] : [],\n challenge: domBuffer2(randomBytes(16)),\n extensions: { prf: { eval: prfInputs(nonce) } },\n userVerification: \"required\",\n // prf requires UV\n rpId: this.rpId\n }\n });\n const results = assertion.getClientExtensionResults().prf?.results;\n if (results === void 0) {\n throw Error(\"PRF extension not available (need macOS 15+, Chrome 132+)\");\n }\n return results;\n }\n};\nvar WebAuthnRecipient = class extends WebAuthnInternal {\n /**\n * Implements {@link Recipient.wrapFileKey}.\n */\n async wrapFileKey(fileKey) {\n const nonce = randomBytes(16);\n const results = await this.getCredential(nonce);\n const key = deriveKey(results);\n return [new Stanza([label, base64nopad.encode(nonce)], encryptFileKey(fileKey, key))];\n }\n};\nvar WebAuthnIdentity = class extends WebAuthnInternal {\n /**\n * Implements {@link Identity.unwrapFileKey}.\n */\n async unwrapFileKey(stanzas) {\n for (const s of stanzas) {\n if (s.args.length < 1 || s.args[0] !== label) {\n continue;\n }\n if (s.args.length !== 2) {\n throw Error(\"invalid prf stanza\");\n }\n const nonce = base64nopad.decode(s.args[1]);\n if (nonce.length !== 16) {\n throw Error(\"invalid prf stanza\");\n }\n const results = await this.getCredential(nonce);\n const key = deriveKey(results);\n const fileKey = decryptFileKey(s.body, key);\n if (fileKey !== null)\n return fileKey;\n }\n return null;\n }\n};\nfunction prfInputs(nonce) {\n const prefix2 = new TextEncoder().encode(label);\n const first = new Uint8Array(prefix2.length + nonce.length + 1);\n first.set(prefix2, 0);\n first[prefix2.length] = 1;\n first.set(nonce, prefix2.length + 1);\n const second = new Uint8Array(prefix2.length + nonce.length + 1);\n second.set(prefix2, 0);\n second[prefix2.length] = 2;\n second.set(nonce, prefix2.length + 1);\n return { first, second };\n}\nfunction deriveKey(results) {\n if (results.second === void 0) {\n throw Error(\"Missing second PRF result\");\n }\n const prf = new Uint8Array(results.first.byteLength + results.second.byteLength);\n prf.set(new Uint8Array(results.first), 0);\n prf.set(new Uint8Array(results.second), results.first.byteLength);\n return extract(sha256, prf, new TextEncoder().encode(label));\n}\nfunction domBuffer2(arr) {\n return arr;\n}\n\n// ../../node_modules/age-encryption/dist/index.js\nvar Encrypter = class {\n passphrase = null;\n scryptWorkFactor = 18;\n recipients = [];\n /**\n * Set the passphrase to encrypt the file(s) with. This method can only be\n * called once, and can't be called if {@link Encrypter.addRecipient} has\n * been called.\n *\n * The passphrase is passed through the scrypt key derivation function, but\n * it needs to have enough entropy to resist offline brute-force attacks.\n * You should use at least 8-10 random alphanumeric characters, or 4-5\n * random words from a list of at least 2000 words.\n *\n * @param s - The passphrase to encrypt the file with.\n */\n setPassphrase(s) {\n if (this.passphrase !== null) {\n throw new Error(\"can encrypt to at most one passphrase\");\n }\n if (this.recipients.length !== 0) {\n throw new Error(\"can't encrypt to both recipients and passphrases\");\n }\n this.passphrase = s;\n }\n /**\n * Set the scrypt work factor to use when encrypting the file(s) with a\n * passphrase. The default is 18. Using a lower value will require stronger\n * passphrases to resist offline brute-force attacks.\n *\n * @param logN - The base-2 logarithm of the scrypt work factor.\n */\n setScryptWorkFactor(logN) {\n this.scryptWorkFactor = logN;\n }\n /**\n * Add a recipient to encrypt the file(s) for. This method can be called\n * multiple times to encrypt the file(s) for multiple recipients.\n *\n * This version supports native X25519 recipients (`age1...`), hybrid\n * post-quantum recipients (`age1pq1...`), tag recipients (`age1tag1...`),\n * and hybrid tag recipients (`age1tagpq1...`).\n *\n * @param s - The recipient to encrypt the file for. Either a string\n * beginning with `age1...` or an object implementing the {@link Recipient}\n * interface.\n */\n addRecipient(s) {\n if (this.passphrase !== null) {\n throw new Error(\"can't encrypt to both recipients and passphrases\");\n }\n if (typeof s === \"string\") {\n if (s.startsWith(\"age1pq1\")) {\n this.recipients.push(new HybridRecipient(s));\n } else if (s.startsWith(\"age1tag1\")) {\n this.recipients.push(new TagRecipient(s));\n } else if (s.startsWith(\"age1tagpq1\")) {\n this.recipients.push(new HybridTagRecipient(s));\n } else if (s.startsWith(\"age1\")) {\n this.recipients.push(new X25519Recipient(s));\n } else {\n throw new Error(\"unrecognized recipient type\");\n }\n } else {\n this.recipients.push(s);\n }\n }\n async encrypt(file) {\n const fileKey = randomBytes(16);\n const stanzas = [];\n let recipients = this.recipients;\n if (this.passphrase !== null) {\n recipients = [new ScryptRecipient(this.passphrase, this.scryptWorkFactor)];\n }\n for (const recipient of recipients) {\n stanzas.push(...await recipient.wrapFileKey(fileKey));\n }\n const labelHeader = new TextEncoder().encode(\"header\");\n const hmacKey = hkdf(sha256, fileKey, void 0, labelHeader, 32);\n const mac = hmac(sha256, hmacKey, encodeHeaderNoMAC(stanzas));\n const header = encodeHeader(stanzas, mac);\n const nonce = randomBytes(16);\n const labelPayload = new TextEncoder().encode(\"payload\");\n const streamKey = hkdf(sha256, fileKey, nonce, labelPayload, 32);\n const encrypter = encryptSTREAM(streamKey);\n if (!(file instanceof ReadableStream)) {\n if (typeof file === \"string\")\n file = new TextEncoder().encode(file);\n return await readAll(prepend(stream(file).pipeThrough(encrypter), header, nonce));\n }\n return Object.assign(prepend(file.pipeThrough(encrypter), header, nonce), {\n size: (size) => ciphertextSize(size) + header.length + nonce.length\n });\n }\n};\nvar Decrypter = class {\n identities = [];\n /**\n * Add a passphrase to decrypt password-encrypted file(s) with. This method\n * can be called multiple times to try multiple passphrases.\n *\n * @param s - The passphrase to decrypt the file with.\n */\n addPassphrase(s) {\n this.identities.push(new ScryptIdentity(s));\n }\n /**\n * Add an identity to decrypt file(s) with. This method can be called\n * multiple times to try multiple identities.\n *\n * @param s - The identity to decrypt the file with. Either a string\n * beginning with `AGE-SECRET-KEY-PQ-1...` or `AGE-SECRET-KEY-1...`, an\n * X25519 private\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/CryptoKey | CryptoKey}\n * object, or an object implementing the {@link Identity} interface.\n *\n * A CryptoKey object must have\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/CryptoKey/type | type}\n * `private`,\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/CryptoKey/algorithm | algorithm}\n * `{name: 'X25519'}`, and\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/CryptoKey/usages | usages}\n * `[\"deriveBits\"]`. For example:\n * ```js\n * const keyPair = await crypto.subtle.generateKey({ name: \"X25519\" }, false, [\"deriveBits\"])\n * decrypter.addIdentity(key.privateKey)\n * ```\n */\n addIdentity(s) {\n if (isCryptoKey3(s)) {\n this.identities.push(new X25519Identity(s));\n } else if (typeof s === \"string\") {\n if (s.startsWith(\"AGE-SECRET-KEY-1\")) {\n this.identities.push(new X25519Identity(s));\n } else if (s.startsWith(\"AGE-SECRET-KEY-PQ-1\")) {\n this.identities.push(new HybridIdentity(s));\n } else {\n throw new Error(\"unrecognized identity type\");\n }\n } else {\n this.identities.push(s);\n }\n }\n async decrypt(file, outputFormat) {\n const s = file instanceof ReadableStream ? file : stream(file);\n const { fileKey, headerSize, rest } = await this.decryptHeaderInternal(s);\n const { data: nonce, rest: payload } = await read(rest, 16);\n const label2 = new TextEncoder().encode(\"payload\");\n const streamKey = hkdf(sha256, fileKey, nonce, label2, 32);\n const decrypter = decryptSTREAM(streamKey);\n const out = payload.pipeThrough(decrypter);\n const outWithSize = Object.assign(out, {\n size: (size) => plaintextSize(size - headerSize - nonce.length)\n });\n if (file instanceof ReadableStream)\n return outWithSize;\n if (outputFormat === \"text\")\n return await readAllString(out);\n return await readAll(out);\n }\n /**\n * Decrypt the file key from a detached header. This is a low-level\n * function that can be used to implement delegated decryption logic.\n * Most users won't need this.\n *\n * It is the caller's responsibility to keep track of what file the\n * returned file key decrypts, and to ensure the file key is not used\n * for any other purpose.\n *\n * @param header - The file's textual header, including the MAC.\n *\n * @returns The file key used to encrypt the file.\n */\n async decryptHeader(header) {\n return (await this.decryptHeaderInternal(stream(header))).fileKey;\n }\n async decryptHeaderInternal(file) {\n const h = await parseHeader(file);\n const fileKey = await this.unwrapFileKey(h.stanzas);\n if (fileKey === null)\n throw Error(\"no identity matched any of the file's recipients\");\n const label2 = new TextEncoder().encode(\"header\");\n const hmacKey = hkdf(sha256, fileKey, void 0, label2, 32);\n const mac = hmac(sha256, hmacKey, h.headerNoMAC);\n if (!compareBytes(h.MAC, mac))\n throw Error(\"invalid header HMAC\");\n return { fileKey, headerSize: h.headerSize, rest: h.rest };\n }\n async unwrapFileKey(stanzas) {\n for (const identity of this.identities) {\n const fileKey = await identity.unwrapFileKey(stanzas);\n if (fileKey !== null)\n return fileKey;\n }\n return null;\n }\n};\nfunction compareBytes(a, b) {\n if (a.length !== b.length) {\n return false;\n }\n let acc = 0;\n for (let i = 0; i < a.length; i++) {\n acc |= a[i] ^ b[i];\n }\n return acc === 0;\n}\nfunction isCryptoKey3(key) {\n return typeof CryptoKey !== \"undefined\" && key instanceof CryptoKey;\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n Decrypter,\n Encrypter,\n Stanza,\n armor,\n generateHybridIdentity,\n generateIdentity,\n generateX25519Identity,\n identityToRecipient,\n webauthn\n});\n/*! Bundled license information:\n\n@noble/hashes/utils.js:\n (*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) *)\n\n@scure/base/index.js:\n (*! scure-base - MIT License (c) 2022 Paul Miller (paulmillr.com) *)\n\n@noble/ciphers/utils.js:\n (*! noble-ciphers - MIT License (c) 2023 Paul Miller (paulmillr.com) *)\n\n@noble/hashes/utils.js:\n (*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) *)\n\n@noble/curves/utils.js:\n (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)\n\n@noble/curves/abstract/modular.js:\n (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)\n\n@noble/curves/abstract/curve.js:\n (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)\n\n@noble/curves/abstract/montgomery.js:\n (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)\n\n@noble/curves/abstract/weierstrass.js:\n (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)\n\n@noble/curves/ed25519.js:\n (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)\n\n@noble/curves/nist.js:\n (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)\n\n@noble/hashes/utils.js:\n (*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) *)\n\n@noble/post-quantum/utils.js:\n (*! noble-post-quantum - MIT License (c) 2024 Paul Miller (paulmillr.com) *)\n\n@noble/post-quantum/_crystals.js:\n (*! noble-post-quantum - MIT License (c) 2024 Paul Miller (paulmillr.com) *)\n\n@noble/post-quantum/ml-kem.js:\n (*! noble-post-quantum - MIT License (c) 2024 Paul Miller (paulmillr.com) *)\n\n@noble/post-quantum/hybrid.js:\n (*! noble-post-quantum - MIT License (c) 2024 Paul Miller (paulmillr.com) *)\n*/\n", "export * from \"./types\";\nexport { ManifestParser, CLEF_MANIFEST_FILENAME } from \"./manifest/parser\";\nexport {\n ScanRunner,\n shannonEntropy,\n isHighEntropy,\n matchPatterns,\n redactValue,\n loadIgnoreRules,\n shouldIgnoreFile,\n shouldIgnoreMatch,\n parseIgnoreContent,\n} from \"./scanner\";\nexport type { ScanMatch, ScanResult, ScanOptions, ClefIgnoreRules } from \"./scanner\";\nexport { MatrixManager } from \"./matrix/manager\";\nexport { SchemaValidator } from \"./schema/validator\";\nexport { DiffEngine } from \"./diff/engine\";\nexport { BulkOps } from \"./bulk/ops\";\nexport { GitIntegration } from \"./git/integration\";\nexport { SopsClient } from \"./sops/client\";\nexport { resolveSopsPath, resetSopsResolution } from \"./sops/resolver\";\nexport type { SopsResolution, SopsSource } from \"./sops/resolver\";\nexport { LintRunner } from \"./lint/runner\";\nexport { ConsumptionClient } from \"./consumption/client\";\nexport { checkDependency, checkAll, assertSops, REQUIREMENTS } from \"./dependencies/checker\";\nexport { generateAgeIdentity, deriveAgePublicKey, formatAgeKeyFile } from \"./age/keygen\";\nexport type { AgeIdentity } from \"./age/keygen\";\nexport {\n metadataPath,\n loadMetadata,\n saveMetadata,\n markPending,\n markPendingWithRetry,\n markResolved,\n getPendingKeys,\n isPending,\n generateRandomValue,\n} from \"./pending/metadata\";\nexport type { PendingKey, PendingMetadata } from \"./pending/metadata\";\nexport { ImportRunner } from \"./import\";\nexport type { ImportFormat, ImportOptions, ImportResult, ParsedImport } from \"./import\";\nexport { parse, parseDotenv, parseJson, parseYaml, detectFormat } from \"./import/parsers\";\nexport { RecipientManager } from \"./recipients\";\nexport type { Recipient, RecipientsResult } from \"./recipients\";\nexport { validateAgePublicKey, keyPreview } from \"./recipients/validator\";\nexport type { AgeKeyValidation } from \"./recipients/validator\";\nexport {\n REQUESTS_FILENAME,\n requestsFilePath,\n loadRequests,\n saveRequests,\n upsertRequest,\n removeRequest as removeAccessRequest,\n findRequest,\n} from \"./recipients/requests\";\nexport type { RecipientRequest } from \"./recipients/requests\";\nexport { DriftDetector } from \"./drift/detector\";\nexport {\n ReportGenerator,\n ReportSanitizer,\n ReportTransformer,\n CloudClient,\n collectCIContext,\n} from \"./report\";\nexport { SopsMergeDriver } from \"./merge/driver\";\nexport type { MergeResult, MergeKey, MergeKeyStatus } from \"./merge/driver\";\nexport { ServiceIdentityManager, PartialRotationError } from \"./service-identity/manager\";\nexport { resolveIdentitySecrets } from \"./artifact/resolve\";\nexport type { ResolvedSecrets } from \"./artifact/resolve\";\nexport { ArtifactPacker } from \"./artifact/packer\";\nexport type {\n PackedArtifact,\n PackConfig,\n PackResult,\n ArtifactEnvelope,\n SignatureAlgorithm,\n} from \"./artifact/types\";\nexport {\n buildSigningPayload,\n generateSigningKeyPair,\n signEd25519,\n signKms,\n verifySignature,\n detectAlgorithm,\n} from \"./artifact/signer\";\nexport type { KmsProvider, KmsWrapResult, KmsProviderType } from \"./kms\";\n", "/** Supported file extensions for encrypted SOPS files managed by Clef. */\nexport const CLEF_SUPPORTED_EXTENSIONS = [\".enc.yaml\", \".enc.json\"] as const;\n\n// \u2500\u2500 Subprocess Runner (dependency injection for sops & git) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Result returned by a subprocess invocation. */\nexport interface SubprocessResult {\n stdout: string;\n stderr: string;\n exitCode: number;\n}\n\n/**\n * Abstraction over subprocess execution used throughout the core library.\n * Inject a real implementation (`NodeSubprocessRunner`) in production and a\n * mock via `jest.fn()` in unit tests \u2014 no real subprocess calls in tests.\n */\nexport interface SubprocessRunner {\n run(command: string, args: string[], options?: SubprocessOptions): Promise<SubprocessResult>;\n}\n\n/** Options forwarded to the subprocess. */\nexport interface SubprocessOptions {\n /** Working directory for the child process. */\n cwd?: string;\n /** Data to pipe to stdin. */\n stdin?: string;\n /** Additional environment variables for the child process. */\n env?: Record<string, string>;\n}\n\n// \u2500\u2500 Manifest \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Cloud integration configuration stored in the manifest. */\nexport interface ClefCloudConfig {\n integrationId: string;\n}\n\n/** Parsed and validated contents of a `clef.yaml` manifest file. */\nexport interface ClefManifest {\n version: number;\n environments: ClefEnvironment[];\n namespaces: ClefNamespace[];\n sops: SopsConfig;\n file_pattern: string;\n service_identities?: ServiceIdentityDefinition[];\n cloud?: ClefCloudConfig;\n}\n\n/** Per-environment SOPS backend override. */\nexport interface EnvironmentSopsOverride {\n backend: \"age\" | \"awskms\" | \"gcpkms\" | \"azurekv\" | \"pgp\";\n aws_kms_arn?: string;\n gcp_kms_resource_id?: string;\n azure_kv_url?: string;\n pgp_fingerprint?: string;\n}\n\n/** A single deployment environment declared in the manifest. */\nexport interface ClefEnvironment {\n name: string;\n description: string;\n /** When `true`, write operations require explicit confirmation. */\n protected?: boolean;\n /** Per-environment SOPS backend override. Falls back to global `sops` config when absent. */\n sops?: EnvironmentSopsOverride;\n /** Per-environment age recipient overrides. When set, these recipients are used instead of global. */\n recipients?: (string | { key: string; label?: string })[];\n}\n\n/**\n * Resolve the effective backend configuration for an environment.\n * Returns the per-env override if present, otherwise falls back to the global `sops` config.\n */\nexport function resolveBackendConfig(\n manifest: ClefManifest,\n environment: string,\n): EnvironmentSopsOverride {\n const env = manifest.environments.find((e) => e.name === environment);\n if (env?.sops) return env.sops;\n return {\n backend: manifest.sops.default_backend,\n aws_kms_arn: manifest.sops.aws_kms_arn,\n gcp_kms_resource_id: manifest.sops.gcp_kms_resource_id,\n azure_kv_url: manifest.sops.azure_kv_url,\n pgp_fingerprint: manifest.sops.pgp_fingerprint,\n };\n}\n\n/**\n * Resolve per-environment recipients if defined.\n * Returns the environment's `recipients` array if non-empty, otherwise `undefined`\n * (caller should fall back to global recipients).\n */\nexport function resolveRecipientsForEnvironment(\n manifest: ClefManifest,\n environment: string,\n): (string | { key: string; label?: string })[] | undefined {\n const env = manifest.environments.find((e) => e.name === environment);\n if (env?.recipients && env.recipients.length > 0) return env.recipients;\n return undefined;\n}\n\n/** A secrets namespace declared in the manifest. */\nexport interface ClefNamespace {\n name: string;\n description: string;\n /** Optional path to a YAML schema file for this namespace. */\n schema?: string;\n /** Optional list of owner identifiers for this namespace. */\n owners?: string[];\n}\n\n/** SOPS encryption backend configuration from the manifest. */\nexport interface SopsConfig {\n default_backend: \"age\" | \"awskms\" | \"gcpkms\" | \"azurekv\" | \"pgp\";\n aws_kms_arn?: string;\n gcp_kms_resource_id?: string;\n azure_kv_url?: string;\n pgp_fingerprint?: string;\n}\n\n/**\n * Per-developer local config stored in `.clef/config.yaml` (gitignored).\n * Holds settings that must not be committed, such as the age private key path.\n */\nexport interface ClefLocalConfig {\n /** Path to the age private key file for this developer. */\n age_key_file?: string;\n /**\n * Where the age private key was stored during init.\n * - \"keychain\" \u2014 OS keychain (macOS Keychain / Linux libsecret / Windows Credential Manager)\n * - \"file\" \u2014 filesystem at age_key_file path\n *\n * Used to provide targeted guidance when the key cannot be resolved.\n */\n age_key_storage?: \"keychain\" | \"file\";\n /** Label identifying this repo's age key in the OS keychain or filesystem. */\n age_keychain_label?: string;\n}\n\n// \u2500\u2500 Matrix \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** A single cell in the namespace \u00D7 environment matrix. */\nexport interface MatrixCell {\n namespace: string;\n environment: string;\n /** Absolute path to the encrypted SOPS file for this cell. */\n filePath: string;\n /** Whether the encrypted file exists on disk. */\n exists: boolean;\n}\n\n/** An issue detected within a single matrix cell. */\nexport interface MatrixIssue {\n type: \"missing_keys\" | \"schema_warning\" | \"sops_error\";\n message: string;\n /** The affected key name, if applicable. */\n key?: string;\n}\n\n/** Decrypted status summary for one matrix cell. */\nexport interface MatrixStatus {\n cell: MatrixCell;\n /** Number of keys in the decrypted file. */\n keyCount: number;\n /** Number of keys currently marked as pending placeholders. */\n pendingCount: number;\n /** Timestamp from SOPS metadata, or `null` if unavailable. */\n lastModified: Date | null;\n issues: MatrixIssue[];\n}\n\n// \u2500\u2500 Schema \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** A namespace schema loaded from a YAML schema file. */\nexport interface NamespaceSchema {\n keys: Record<string, SchemaKey>;\n}\n\n/** Definition for a single key in a namespace schema. */\nexport interface SchemaKey {\n type: \"string\" | \"integer\" | \"boolean\";\n required: boolean;\n /** Regex pattern the value must match (strings only). */\n pattern?: string;\n default?: unknown;\n description?: string;\n /** Maximum numeric value (integers only). */\n max?: number;\n}\n\n/** A hard validation error produced by `SchemaValidator.validate`. */\nexport interface ValidationError {\n key: string;\n message: string;\n rule: \"required\" | \"type\" | \"pattern\";\n}\n\n/** A soft validation warning produced by `SchemaValidator.validate`. */\nexport interface ValidationWarning {\n key: string;\n message: string;\n rule: \"undeclared\" | \"max_exceeded\";\n}\n\n/** Result of validating a set of decrypted values against a namespace schema. */\nexport interface ValidationResult {\n /** `true` when there are no errors (warnings are allowed). */\n valid: boolean;\n errors: ValidationError[];\n warnings: ValidationWarning[];\n}\n\n// \u2500\u2500 Diff \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Status of a single key when diffing two environments. */\nexport type DiffStatus = \"changed\" | \"identical\" | \"missing_a\" | \"missing_b\";\n\n/** One row in a diff result representing a single key comparison. */\nexport interface DiffRow {\n key: string;\n /** Value from environment A, or `null` if the key is absent. */\n valueA: string | null;\n /** Value from environment B, or `null` if the key is absent. */\n valueB: string | null;\n status: DiffStatus;\n}\n\n/** The full diff result for a namespace across two environments. */\nexport interface DiffResult {\n namespace: string;\n envA: string;\n envB: string;\n rows: DiffRow[];\n}\n\n// \u2500\u2500 Lint \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Severity level of a lint issue. */\nexport type LintSeverity = \"error\" | \"warning\" | \"info\";\n\n/** Category of a lint issue. */\nexport type LintCategory = \"matrix\" | \"schema\" | \"sops\" | \"service-identity\";\n\n/** A single issue reported by `LintRunner`. */\nexport interface LintIssue {\n severity: LintSeverity;\n category: LintCategory;\n /** Path to the affected encrypted file. */\n file: string;\n /** The affected key name, if applicable. */\n key?: string;\n message: string;\n /** CLI command that can auto-fix this issue, if one exists. */\n fixCommand?: string;\n}\n\n/** Aggregate result from a full lint run. */\nexport interface LintResult {\n issues: LintIssue[];\n /** Total number of matrix files checked (including missing ones). */\n fileCount: number;\n /** Total number of keys marked as pending placeholders across all files. */\n pendingCount: number;\n}\n\n// \u2500\u2500 Git \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** A single git commit. */\nexport interface GitCommit {\n hash: string;\n author: string;\n date: Date;\n message: string;\n}\n\n/** Parsed output of `git status --porcelain`. */\nexport interface GitStatus {\n /** Files with staged (index) changes. */\n staged: string[];\n /** Files with unstaged (work-tree) changes. */\n unstaged: string[];\n untracked: string[];\n}\n\n// \u2500\u2500 SOPS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** The in-memory result of decrypting a SOPS-encrypted file. Plaintext never touches disk. */\nexport interface DecryptedFile {\n /** Flat key/value map of all decrypted secrets. */\n values: Record<string, string>;\n metadata: SopsMetadata;\n}\n\n/** SOPS metadata extracted from an encrypted file without decrypting its values. */\nexport interface SopsMetadata {\n backend: \"age\" | \"awskms\" | \"gcpkms\" | \"azurekv\" | \"pgp\";\n /** List of recipient identifiers (age public keys, KMS ARNs, Azure KV URLs, PGP fingerprints). */\n recipients: string[];\n lastModified: Date;\n}\n\n/**\n * Backend-agnostic interface for all encryption/decryption operations.\n *\n * `SopsClient` is the canonical implementation. Consumers should depend on this\n * interface rather than the concrete class so the encryption backend can be\n * replaced without touching call sites.\n */\nexport interface EncryptionBackend {\n /** Decrypt a file and return its values and metadata. */\n decrypt(filePath: string): Promise<DecryptedFile>;\n /** Encrypt a key/value map and write it to a file. */\n encrypt(\n filePath: string,\n values: Record<string, string>,\n manifest: ClefManifest,\n environment?: string,\n ): Promise<void>;\n /** Rotate encryption by adding a new recipient key. */\n reEncrypt(filePath: string, newKey: string): Promise<void>;\n /** Add an age recipient to an encrypted file (rotate + add-age). */\n addRecipient(filePath: string, key: string): Promise<void>;\n /** Remove an age recipient from an encrypted file (rotate + rm-age). */\n removeRecipient(filePath: string, key: string): Promise<void>;\n /** Check whether a file has valid encryption metadata. */\n validateEncryption(filePath: string): Promise<boolean>;\n /** Extract encryption metadata without decrypting. */\n getMetadata(filePath: string): Promise<SopsMetadata>;\n}\n\n// \u2500\u2500 Consumption \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Options for `ConsumptionClient.prepareEnvironment`. */\nexport interface ExecOptions {\n /** Inject only these keys (if set, all other keys are excluded). */\n only?: string[];\n /** Prepend this string to every injected environment variable name. */\n prefix?: string;\n /** When `true`, skip keys that already exist in the base environment. */\n noOverride?: boolean;\n}\n\n/** Options for `ConsumptionClient.formatExport`. */\nexport interface ExportOptions {\n format: \"env\";\n /** When `true`, omit the `export` keyword from each line. */\n noExport?: boolean;\n}\n\n// \u2500\u2500 Errors \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * Base error class for all Clef errors.\n * Carries an optional `fix` hint string describing how to resolve the issue.\n */\nexport class ClefError extends Error {\n constructor(\n message: string,\n public readonly fix?: string,\n ) {\n super(message);\n this.name = \"ClefError\";\n }\n}\n\n/** Thrown when `clef.yaml` fails parsing or schema validation. */\nexport class ManifestValidationError extends ClefError {\n constructor(\n message: string,\n public readonly field?: string,\n ) {\n super(message, field ? `Check the '${field}' field in clef.yaml` : undefined);\n this.name = \"ManifestValidationError\";\n }\n}\n\n/** Thrown when SOPS decryption fails (bad key, corrupt file, etc.). */\nexport class SopsDecryptionError extends ClefError {\n constructor(\n message: string,\n public readonly filePath?: string,\n ) {\n super(\n message,\n filePath\n ? `Ensure you have the correct key configured to decrypt '${filePath}'`\n : \"Ensure your SOPS key is configured correctly\",\n );\n this.name = \"SopsDecryptionError\";\n }\n}\n\n/** Thrown when SOPS encryption or re-encryption fails. */\nexport class SopsEncryptionError extends ClefError {\n constructor(\n message: string,\n public readonly filePath?: string,\n ) {\n super(\n message,\n filePath\n ? `Check your SOPS configuration and key access for '${filePath}'`\n : \"Check your SOPS configuration\",\n );\n this.name = \"SopsEncryptionError\";\n }\n}\n\n/** Thrown when no decryption key is found in the environment. */\nexport class SopsKeyNotFoundError extends ClefError {\n constructor(message: string) {\n super(message, \"Ensure your age key file exists and CLEF_AGE_KEY_FILE is set correctly\");\n this.name = \"SopsKeyNotFoundError\";\n }\n}\n\n/** Thrown when a git subprocess fails. */\nexport class GitOperationError extends ClefError {\n constructor(message: string, fix?: string) {\n super(message, fix ?? \"Ensure you are inside a git repository\");\n this.name = \"GitOperationError\";\n }\n}\n\n/** Thrown when a namespace schema file cannot be read or parsed. */\nexport class SchemaLoadError extends ClefError {\n constructor(\n message: string,\n public readonly filePath?: string,\n ) {\n super(\n message,\n filePath ? `Check the schema file at '${filePath}'` : \"Check your schema file syntax\",\n );\n this.name = \"SchemaLoadError\";\n }\n}\n\n// \u2500\u2500 Dependency errors \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Thrown when the `sops` binary is not installed. */\nexport class SopsMissingError extends ClefError {\n constructor(public readonly installHint: string) {\n super(\n \"sops is not installed.\",\n `Install it with: ${installHint}\\nThen run clef doctor to verify your setup.`,\n );\n this.name = \"SopsMissingError\";\n }\n}\n\n/** Thrown when the installed `sops` version is older than the minimum required. */\nexport class SopsVersionError extends ClefError {\n constructor(\n public readonly installed: string,\n public readonly required: string,\n public readonly installHint: string,\n ) {\n super(\n `sops v${installed} is installed but Clef requires v${required} or later.`,\n `Upgrade with: ${installHint}\\nThen run clef doctor to verify your setup.`,\n );\n this.name = \"SopsVersionError\";\n }\n}\n\n// \u2500\u2500 KMS Envelope Encryption \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport type KmsProviderType = \"aws\" | \"gcp\" | \"azure\";\n\nexport interface KmsConfig {\n provider: KmsProviderType;\n keyId: string;\n region?: string;\n}\n\n// \u2500\u2500 Service Identity \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Per-environment config for a service identity: either age-only or KMS envelope. */\nexport interface ServiceIdentityEnvironmentConfig {\n /** Age public key (age-only path). Mutually exclusive with `kms`. */\n recipient?: string;\n /** KMS envelope encryption config. Mutually exclusive with `recipient`. */\n kms?: KmsConfig;\n /** Public key for artifact signature verification (base64-encoded DER SPKI). */\n verifyKey?: string;\n}\n\n/** Type guard: returns true when the environment config uses KMS envelope encryption. */\nexport function isKmsEnvelope(\n cfg: ServiceIdentityEnvironmentConfig,\n): cfg is ServiceIdentityEnvironmentConfig & { kms: KmsConfig } {\n return cfg.kms !== undefined;\n}\n\n/** A machine-oriented identity with scoped namespace access and per-environment age keys. */\nexport interface ServiceIdentityDefinition {\n name: string;\n description: string;\n namespaces: string[];\n environments: Record<string, ServiceIdentityEnvironmentConfig>;\n}\n\n/** A drift issue detected in a service identity configuration. */\nexport interface ServiceIdentityDriftIssue {\n identity: string;\n environment?: string;\n namespace?: string;\n type:\n | \"missing_environment\"\n | \"scope_mismatch\"\n | \"recipient_not_registered\"\n | \"orphaned_recipient\"\n | \"namespace_not_found\";\n message: string;\n fixCommand?: string;\n}\n\n// \u2500\u2500 Cross-repo drift detection \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** A single drift issue: a key present in some environments but missing from others. */\nexport interface DriftIssue {\n namespace: string;\n key: string;\n /** Environment names where the key exists. */\n presentIn: string[];\n /** Environment names where the key is missing. */\n missingFrom: string[];\n message: string;\n}\n\n/** Result of comparing key sets across two local Clef repos without decryption. */\nexport interface DriftResult {\n issues: DriftIssue[];\n namespacesCompared: number;\n namespacesClean: number;\n localEnvironments: string[];\n remoteEnvironments: string[];\n}\n\n// \u2500\u2500 Dependency check types \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Version check result for a single external dependency. */\nexport interface DependencyVersion {\n /** Installed version string, e.g. `\"3.9.1\"`. */\n installed: string;\n /** Minimum required version string. */\n required: string;\n /** `true` when `installed >= required`. */\n satisfied: boolean;\n /** Platform-appropriate install/upgrade command hint. */\n installHint: string;\n /** How the binary was resolved: env override, bundled package, or system PATH. */\n source?: \"env\" | \"bundled\" | \"system\";\n /** Resolved path to the binary. */\n resolvedPath?: string;\n}\n\n/** Combined dependency check result for all required external tools. */\nexport interface DependencyStatus {\n /** `null` if `sops` is not installed or version could not be parsed. */\n sops: DependencyVersion | null;\n /** `null` if `git` is not installed or version could not be parsed. */\n git: DependencyVersion | null;\n}\n\n// \u2500\u2500 Report \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Schema version for {@link ClefReport}. Increment when the shape changes. */\nexport const CLEF_REPORT_SCHEMA_VERSION = 1;\n\n/** Repository identity fields included at the top of every report. */\nexport interface ReportRepoIdentity {\n repoOrigin: string;\n commitSha: string;\n branch: string;\n commitTimestamp: string;\n reportGeneratedAt: string;\n clefVersion: string;\n sopsVersion: string | null;\n}\n\n/** Manifest structure summary included in a report. */\nexport interface ReportManifestStructure {\n manifestVersion: number;\n filePattern: string;\n environments: { name: string; protected: boolean }[];\n namespaces: { name: string; hasSchema: boolean; owners: string[] }[];\n defaultBackend: string;\n}\n\n/** SOPS metadata for a single matrix cell. */\nexport interface ReportCellMetadata {\n backend: string;\n recipients: string[];\n lastModified: string | null;\n}\n\n/** A single cell in the matrix as represented in a report. */\nexport interface ReportMatrixCell {\n namespace: string;\n environment: string;\n filePath: string;\n exists: boolean;\n keyCount: number;\n pendingCount: number;\n metadata: ReportCellMetadata | null;\n}\n\n/** A sanitized policy issue \u2014 key names are never present. */\nexport interface ReportPolicyIssue {\n severity: LintSeverity;\n category: string;\n file?: string;\n namespace?: string;\n environment?: string;\n message: string;\n count?: number;\n driftCount?: number;\n sourceEnvironment?: string;\n targetEnvironment?: string;\n}\n\n/** Aggregated counts of policy issues by severity. */\nexport interface ReportIssueCounts {\n error: number;\n warning: number;\n info: number;\n}\n\n/** Policy section of a report: aggregated counts and sanitized issues. */\nexport interface ReportPolicy {\n issueCount: ReportIssueCounts;\n issues: ReportPolicyIssue[];\n}\n\n/** Summary of a single recipient across all matrix cells. */\nexport interface ReportRecipientSummary {\n type: string;\n environments: string[];\n fileCount: number;\n}\n\n/** Top-level structure for a `clef report` output. */\nexport interface ClefReport {\n schemaVersion: number;\n repoIdentity: ReportRepoIdentity;\n manifest: ReportManifestStructure;\n matrix: ReportMatrixCell[];\n policy: ReportPolicy;\n recipients: Record<string, ReportRecipientSummary>;\n}\n\n// \u2500\u2500 Cloud API types \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Health status for a single matrix cell in a cloud report. */\nexport type CloudCellHealthStatus = \"healthy\" | \"warning\" | \"critical\" | \"unknown\";\n\n/** A single cell summary sent to the Cloud API. */\nexport interface CloudReportCell {\n namespace: string;\n environment: string;\n healthStatus: CloudCellHealthStatus;\n description: string;\n}\n\n/** Summary section of a cloud API report. */\nexport interface CloudReportSummary {\n filesScanned: number;\n namespaces: string[];\n environments: string[];\n cells: CloudReportCell[];\n violations: number;\n passed: boolean;\n}\n\n/** Drift entry for a single namespace in a cloud report. */\nexport interface CloudReportDrift {\n namespace: string;\n isDrifted: boolean;\n driftCount: number;\n}\n\n/** A single policy result in a cloud report. */\nexport interface CloudPolicyResult {\n ruleId: string;\n ruleName: string;\n passed: boolean;\n severity: string;\n message: string;\n scope?: { namespace?: string; environment?: string };\n}\n\n/** CI context attached to cloud reports when collectCIContext is enabled. */\nexport interface CloudCIContext {\n provider: string;\n pipelineUrl?: string;\n trigger?: string;\n}\n\n/** The report payload sent to the Cloud API. */\nexport interface CloudApiReport {\n commitSha: string;\n branch: string;\n commitTimestamp: number;\n cliVersion: string;\n summary: CloudReportSummary;\n drift: CloudReportDrift[];\n policyResults: CloudPolicyResult[];\n ciContext?: CloudCIContext;\n}\n\n/** Batch payload for backfill submissions (max 500, oldest\u2192newest). */\nexport interface CloudBatchPayload {\n reports: CloudApiReport[];\n}\n\n/** Response from GET /api/v1/integrations/:integrationId. */\nexport interface CloudIntegrationResponse {\n lastCommitSha: string | null;\n config: {\n collectCIContext: boolean;\n };\n}\n\n/** Response from POST /api/v1/reports. */\nexport interface CloudReportResponse {\n id: string;\n commitSha: string;\n}\n\n/** Response from POST /api/v1/reports/batch. */\nexport interface CloudBatchResponse {\n accepted: number;\n reportIds: string[];\n}\n\n/** Thrown when a Clef Pro API request fails. */\nexport class CloudApiError extends ClefError {\n constructor(\n message: string,\n public readonly statusCode: number,\n fix?: string,\n ) {\n super(message, fix);\n this.name = \"CloudApiError\";\n }\n}\n", "/**\n * TIER 1 MODULE \u2014 Security and correctness critical.\n *\n * This module requires exhaustive test coverage. Before\n * adding or modifying code here:\n * 1. Add tests for the happy path\n * 2. Add tests for all documented error paths\n * 3. Add at least one boundary/edge case test\n *\n * Coverage threshold: 95% lines/functions, 90% branches.\n * See docs/contributing/testing.md for the rationale.\n */\nimport * as fs from \"fs\";\nimport * as YAML from \"yaml\";\nimport {\n ClefManifest,\n ClefCloudConfig,\n ClefEnvironment,\n ManifestValidationError,\n ServiceIdentityDefinition,\n ServiceIdentityEnvironmentConfig,\n} from \"../types\";\nimport { validateAgePublicKey } from \"../recipients/validator\";\n\n/**\n * Canonical filename for the Clef manifest.\n * All code that references this filename must import this constant.\n */\nexport const CLEF_MANIFEST_FILENAME = \"clef.yaml\";\n\nconst VALID_BACKENDS = [\"age\", \"awskms\", \"gcpkms\", \"azurekv\", \"pgp\"] as const;\nconst VALID_TOP_LEVEL_KEYS = [\n \"version\",\n \"environments\",\n \"namespaces\",\n \"sops\",\n \"file_pattern\",\n \"service_identities\",\n \"cloud\",\n];\nconst ENV_NAME_PATTERN = /^[a-z][a-z0-9_-]*$/;\nconst FILE_PATTERN_REQUIRED_TOKENS = [\"{namespace}\", \"{environment}\"];\n\n/**\n * Parses and validates `clef.yaml` manifest files.\n *\n * @example\n * ```ts\n * const parser = new ManifestParser();\n * const manifest = parser.parse(\"/path/to/clef.yaml\");\n * ```\n */\nexport class ManifestParser {\n /**\n * Read and validate a `clef.yaml` file from disk.\n *\n * @param filePath - Absolute or relative path to the manifest file.\n * @returns Validated {@link ClefManifest}.\n * @throws {@link ManifestValidationError} If the file cannot be read, contains invalid YAML,\n * or fails schema validation.\n */\n parse(filePath: string): ClefManifest {\n let raw: string;\n try {\n raw = fs.readFileSync(filePath, \"utf-8\");\n } catch {\n throw new ManifestValidationError(\n `Could not read manifest file at '${filePath}'. Run 'clef init' to create one.`,\n );\n }\n\n let parsed: unknown;\n try {\n parsed = YAML.parse(raw);\n } catch {\n throw new ManifestValidationError(\n \"Manifest file contains invalid YAML. Check for syntax errors in clef.yaml.\",\n );\n }\n\n return this.validate(parsed);\n }\n\n /**\n * Validate an already-parsed object against the manifest schema.\n *\n * @param input - Raw value returned by `YAML.parse`.\n * @returns Validated {@link ClefManifest}.\n * @throws {@link ManifestValidationError} On any schema violation.\n */\n validate(input: unknown): ClefManifest {\n if (input === null || input === undefined || typeof input !== \"object\") {\n throw new ManifestValidationError(\n \"Manifest must be a YAML object, not null or a scalar value.\",\n \"root\",\n );\n }\n\n const obj = input as Record<string, unknown>;\n\n // Check for unknown top-level keys\n for (const key of Object.keys(obj)) {\n if (!VALID_TOP_LEVEL_KEYS.includes(key)) {\n throw new ManifestValidationError(\n `Unknown top-level key '${key}' in manifest. Valid keys are: ${VALID_TOP_LEVEL_KEYS.join(\", \")}.`,\n key,\n );\n }\n }\n\n // version\n if (obj.version === undefined) {\n throw new ManifestValidationError(\"Missing required field 'version'.\", \"version\");\n }\n if (typeof obj.version !== \"number\" || obj.version !== 1) {\n throw new ManifestValidationError(\n \"Field 'version' must be 1. Only version 1 is currently supported.\",\n \"version\",\n );\n }\n\n // environments\n if (!obj.environments) {\n throw new ManifestValidationError(\n \"Missing required field 'environments'. Define at least one environment.\",\n \"environments\",\n );\n }\n if (!Array.isArray(obj.environments) || obj.environments.length === 0) {\n throw new ManifestValidationError(\n \"Field 'environments' must be a non-empty array.\",\n \"environments\",\n );\n }\n const environments: ClefEnvironment[] = obj.environments.map((env: unknown, i: number) => {\n if (typeof env !== \"object\" || env === null) {\n throw new ManifestValidationError(\n `Environment at index ${i} must be an object with 'name' and 'description'.`,\n \"environments\",\n );\n }\n const envObj = env as Record<string, unknown>;\n if (!envObj.name || typeof envObj.name !== \"string\") {\n throw new ManifestValidationError(\n `Environment at index ${i} is missing a 'name' string.`,\n \"environments\",\n );\n }\n if (!ENV_NAME_PATTERN.test(envObj.name)) {\n throw new ManifestValidationError(\n `Environment name '${envObj.name}' is invalid. Names must start with a lowercase letter and contain only lowercase letters, digits, hyphens, and underscores.`,\n \"environments\",\n );\n }\n if (!envObj.description || typeof envObj.description !== \"string\") {\n throw new ManifestValidationError(\n `Environment '${envObj.name}' is missing a 'description' string.`,\n \"environments\",\n );\n }\n\n const result: ClefEnvironment = {\n name: envObj.name,\n description: envObj.description,\n ...(typeof envObj.protected === \"boolean\" ? { protected: envObj.protected } : {}),\n };\n\n // Parse optional per-environment sops override\n if (envObj.sops !== undefined) {\n if (typeof envObj.sops !== \"object\" || envObj.sops === null) {\n throw new ManifestValidationError(\n `Environment '${envObj.name}' has an invalid 'sops' field. It must be an object.`,\n \"environments\",\n );\n }\n const sopsOverride = envObj.sops as Record<string, unknown>;\n if (!sopsOverride.backend || typeof sopsOverride.backend !== \"string\") {\n throw new ManifestValidationError(\n `Environment '${envObj.name}' sops override is missing 'backend'. Must be one of: ${VALID_BACKENDS.join(\", \")}.`,\n \"environments\",\n );\n }\n if (!(VALID_BACKENDS as readonly string[]).includes(sopsOverride.backend)) {\n throw new ManifestValidationError(\n `Environment '${envObj.name}' has invalid sops backend '${sopsOverride.backend}'. Must be one of: ${VALID_BACKENDS.join(\", \")}.`,\n \"environments\",\n );\n }\n const backend = sopsOverride.backend as (typeof VALID_BACKENDS)[number];\n\n // Validate required fields per backend\n if (backend === \"awskms\" && typeof sopsOverride.aws_kms_arn !== \"string\") {\n throw new ManifestValidationError(\n `Environment '${envObj.name}' uses 'awskms' backend but is missing 'aws_kms_arn'.`,\n \"environments\",\n );\n }\n if (backend === \"gcpkms\" && typeof sopsOverride.gcp_kms_resource_id !== \"string\") {\n throw new ManifestValidationError(\n `Environment '${envObj.name}' uses 'gcpkms' backend but is missing 'gcp_kms_resource_id'.`,\n \"environments\",\n );\n }\n if (backend === \"azurekv\" && typeof sopsOverride.azure_kv_url !== \"string\") {\n throw new ManifestValidationError(\n `Environment '${envObj.name}' uses 'azurekv' backend but is missing 'azure_kv_url'.`,\n \"environments\",\n );\n }\n if (backend === \"pgp\" && typeof sopsOverride.pgp_fingerprint !== \"string\") {\n throw new ManifestValidationError(\n `Environment '${envObj.name}' uses 'pgp' backend but is missing 'pgp_fingerprint'.`,\n \"environments\",\n );\n }\n\n result.sops = {\n backend,\n ...(typeof sopsOverride.aws_kms_arn === \"string\"\n ? { aws_kms_arn: sopsOverride.aws_kms_arn }\n : {}),\n ...(typeof sopsOverride.gcp_kms_resource_id === \"string\"\n ? { gcp_kms_resource_id: sopsOverride.gcp_kms_resource_id }\n : {}),\n ...(typeof sopsOverride.azure_kv_url === \"string\"\n ? { azure_kv_url: sopsOverride.azure_kv_url }\n : {}),\n ...(typeof sopsOverride.pgp_fingerprint === \"string\"\n ? { pgp_fingerprint: sopsOverride.pgp_fingerprint }\n : {}),\n };\n }\n\n // Parse optional per-environment recipients\n if (envObj.recipients !== undefined) {\n if (!Array.isArray(envObj.recipients)) {\n throw new ManifestValidationError(\n `Environment '${envObj.name}' has an invalid 'recipients' field. It must be an array.`,\n \"environments\",\n );\n }\n const parsedRecipients: (string | { key: string; label?: string })[] = [];\n for (let ri = 0; ri < envObj.recipients.length; ri++) {\n const entry = envObj.recipients[ri];\n if (typeof entry === \"string\") {\n const validation = validateAgePublicKey(entry);\n if (!validation.valid) {\n throw new ManifestValidationError(\n `Environment '${envObj.name}' recipient at index ${ri}: ${validation.error}`,\n \"environments\",\n );\n }\n parsedRecipients.push(validation.key!);\n } else if (typeof entry === \"object\" && entry !== null) {\n const entryObj = entry as Record<string, unknown>;\n if (typeof entryObj.key !== \"string\") {\n throw new ManifestValidationError(\n `Environment '${envObj.name}' recipient at index ${ri} must have a 'key' string.`,\n \"environments\",\n );\n }\n const validation = validateAgePublicKey(entryObj.key);\n if (!validation.valid) {\n throw new ManifestValidationError(\n `Environment '${envObj.name}' recipient at index ${ri}: ${validation.error}`,\n \"environments\",\n );\n }\n const recipientObj: { key: string; label?: string } = { key: validation.key! };\n if (typeof entryObj.label === \"string\") {\n recipientObj.label = entryObj.label;\n }\n parsedRecipients.push(recipientObj);\n } else {\n throw new ManifestValidationError(\n `Environment '${envObj.name}' recipient at index ${ri} must be a string or object.`,\n \"environments\",\n );\n }\n }\n if (parsedRecipients.length > 0) {\n result.recipients = parsedRecipients;\n }\n }\n\n return result;\n });\n\n // Check for duplicate environment names\n const envNames = new Set<string>();\n for (const env of environments) {\n if (envNames.has(env.name)) {\n throw new ManifestValidationError(\n `Duplicate environment name '${env.name}'. Each environment must have a unique name.`,\n \"environments\",\n );\n }\n envNames.add(env.name);\n }\n\n // namespaces\n // Design decision: all namespaces are encrypted. There is no `encrypted: false`\n // option on namespace definitions. This is intentional \u2014 see docs/guide/concepts.md\n // \"Design decision: all namespaces are encrypted\" for the full rationale.\n if (!obj.namespaces) {\n throw new ManifestValidationError(\n \"Missing required field 'namespaces'. Define at least one namespace.\",\n \"namespaces\",\n );\n }\n if (!Array.isArray(obj.namespaces) || obj.namespaces.length === 0) {\n throw new ManifestValidationError(\n \"Field 'namespaces' must be a non-empty array.\",\n \"namespaces\",\n );\n }\n const namespaces = obj.namespaces.map((ns: unknown, i: number) => {\n if (typeof ns !== \"object\" || ns === null) {\n throw new ManifestValidationError(\n `Namespace at index ${i} must be an object with 'name' and 'description'.`,\n \"namespaces\",\n );\n }\n const nsObj = ns as Record<string, unknown>;\n if (!nsObj.name || typeof nsObj.name !== \"string\") {\n throw new ManifestValidationError(\n `Namespace at index ${i} is missing a 'name' string.`,\n \"namespaces\",\n );\n }\n if (!nsObj.description || typeof nsObj.description !== \"string\") {\n throw new ManifestValidationError(\n `Namespace '${nsObj.name}' is missing a 'description' string.`,\n \"namespaces\",\n );\n }\n return {\n name: nsObj.name,\n description: nsObj.description,\n ...(typeof nsObj.schema === \"string\" ? { schema: nsObj.schema } : {}),\n ...(Array.isArray(nsObj.owners) ? { owners: nsObj.owners as string[] } : {}),\n };\n });\n\n // Check for duplicate namespace names\n const nsNames = new Set<string>();\n for (const ns of namespaces) {\n if (nsNames.has(ns.name)) {\n throw new ManifestValidationError(\n `Duplicate namespace name '${ns.name}'. Each namespace must have a unique name.`,\n \"namespaces\",\n );\n }\n nsNames.add(ns.name);\n }\n\n // sops\n if (!obj.sops) {\n throw new ManifestValidationError(\n \"Missing required field 'sops'. Configure at least 'default_backend'.\",\n \"sops\",\n );\n }\n if (typeof obj.sops !== \"object\" || obj.sops === null) {\n throw new ManifestValidationError(\"Field 'sops' must be an object.\", \"sops\");\n }\n const sopsObj = obj.sops as Record<string, unknown>;\n if (!sopsObj.default_backend || typeof sopsObj.default_backend !== \"string\") {\n throw new ManifestValidationError(\n \"Field 'sops.default_backend' is required and must be one of: age, awskms, gcpkms, azurekv, pgp.\",\n \"sops.default_backend\",\n );\n }\n if (!(VALID_BACKENDS as readonly string[]).includes(sopsObj.default_backend)) {\n throw new ManifestValidationError(\n `Invalid sops.default_backend '${sopsObj.default_backend}'. Must be one of: ${VALID_BACKENDS.join(\", \")}.`,\n \"sops.default_backend\",\n );\n }\n\n const sopsConfig = {\n default_backend: sopsObj.default_backend as (typeof VALID_BACKENDS)[number],\n ...(typeof sopsObj.aws_kms_arn === \"string\" ? { aws_kms_arn: sopsObj.aws_kms_arn } : {}),\n ...(typeof sopsObj.gcp_kms_resource_id === \"string\"\n ? { gcp_kms_resource_id: sopsObj.gcp_kms_resource_id }\n : {}),\n ...(typeof sopsObj.azure_kv_url === \"string\" ? { azure_kv_url: sopsObj.azure_kv_url } : {}),\n ...(typeof sopsObj.pgp_fingerprint === \"string\"\n ? { pgp_fingerprint: sopsObj.pgp_fingerprint }\n : {}),\n };\n\n // Post-processing: validate per-env recipients are only used with age backend\n for (const env of environments) {\n if (env.recipients && env.recipients.length > 0) {\n const effectiveBackend = env.sops?.backend ?? sopsConfig.default_backend;\n if (effectiveBackend !== \"age\") {\n throw new ManifestValidationError(\n `Environment '${env.name}' has per-environment recipients but uses '${effectiveBackend}' backend. Per-environment recipients are only supported with the 'age' backend.`,\n \"environments\",\n );\n }\n }\n }\n\n // file_pattern\n if (!obj.file_pattern || typeof obj.file_pattern !== \"string\") {\n throw new ManifestValidationError(\n \"Missing required field 'file_pattern'. Example: '{namespace}/{environment}.enc.yaml'.\",\n \"file_pattern\",\n );\n }\n for (const token of FILE_PATTERN_REQUIRED_TOKENS) {\n if (!obj.file_pattern.includes(token)) {\n throw new ManifestValidationError(\n `file_pattern must contain '${token}'. Got: '${obj.file_pattern}'.`,\n \"file_pattern\",\n );\n }\n }\n\n // service_identities (optional)\n let serviceIdentities: ServiceIdentityDefinition[] | undefined;\n if (obj.service_identities !== undefined) {\n if (!Array.isArray(obj.service_identities)) {\n throw new ManifestValidationError(\n \"Field 'service_identities' must be an array.\",\n \"service_identities\",\n );\n }\n serviceIdentities = obj.service_identities.map((si: unknown, i: number) => {\n if (typeof si !== \"object\" || si === null) {\n throw new ManifestValidationError(\n `Service identity at index ${i} must be an object.`,\n \"service_identities\",\n );\n }\n const siObj = si as Record<string, unknown>;\n\n if (!siObj.name || typeof siObj.name !== \"string\") {\n throw new ManifestValidationError(\n `Service identity at index ${i} is missing a 'name' string.`,\n \"service_identities\",\n );\n }\n const siName = siObj.name;\n\n if (!siObj.description || typeof siObj.description !== \"string\") {\n throw new ManifestValidationError(\n `Service identity '${siName}' is missing a 'description' string.`,\n \"service_identities\",\n );\n }\n\n // namespaces\n if (!Array.isArray(siObj.namespaces) || siObj.namespaces.length === 0) {\n throw new ManifestValidationError(\n `Service identity '${siName}' must have a non-empty 'namespaces' array.`,\n \"service_identities\",\n );\n }\n for (const ns of siObj.namespaces) {\n if (typeof ns !== \"string\") {\n throw new ManifestValidationError(\n `Service identity '${siName}' has a non-string entry in 'namespaces'.`,\n \"service_identities\",\n );\n }\n if (!nsNames.has(ns)) {\n throw new ManifestValidationError(\n `Service identity '${siName}' references unknown namespace '${ns}'.`,\n \"service_identities\",\n );\n }\n }\n\n // environments\n if (\n !siObj.environments ||\n typeof siObj.environments !== \"object\" ||\n Array.isArray(siObj.environments)\n ) {\n throw new ManifestValidationError(\n `Service identity '${siName}' must have an 'environments' object.`,\n \"service_identities\",\n );\n }\n const siEnvs = siObj.environments as Record<string, unknown>;\n const parsedEnvs: Record<string, ServiceIdentityEnvironmentConfig> = {};\n\n // Validate that all declared environments are covered\n for (const env of environments) {\n if (!(env.name in siEnvs)) {\n throw new ManifestValidationError(\n `Service identity '${siName}' is missing environment '${env.name}'. Service identities must cover all declared environments.`,\n \"service_identities\",\n );\n }\n }\n\n for (const [envName, envVal] of Object.entries(siEnvs)) {\n if (!envNames.has(envName)) {\n throw new ManifestValidationError(\n `Service identity '${siName}' references unknown environment '${envName}'.`,\n \"service_identities\",\n );\n }\n if (typeof envVal !== \"object\" || envVal === null) {\n throw new ManifestValidationError(\n `Service identity '${siName}' environment '${envName}' must be an object with 'recipient' or 'kms'.`,\n \"service_identities\",\n );\n }\n const envObj = envVal as Record<string, unknown>;\n const hasRecipient = envObj.recipient !== undefined;\n const hasKms = envObj.kms !== undefined;\n\n if (hasRecipient && hasKms) {\n throw new ManifestValidationError(\n `Service identity '${siName}' environment '${envName}': 'recipient' and 'kms' are mutually exclusive.`,\n \"service_identities\",\n );\n }\n if (!hasRecipient && !hasKms) {\n throw new ManifestValidationError(\n `Service identity '${siName}' environment '${envName}' must have either 'recipient' or 'kms'.`,\n \"service_identities\",\n );\n }\n\n if (hasRecipient) {\n if (typeof envObj.recipient !== \"string\") {\n throw new ManifestValidationError(\n `Service identity '${siName}' environment '${envName}': 'recipient' must be a string.`,\n \"service_identities\",\n );\n }\n const recipientValidation = validateAgePublicKey(envObj.recipient);\n if (!recipientValidation.valid) {\n throw new ManifestValidationError(\n `Service identity '${siName}' environment '${envName}': ${recipientValidation.error}`,\n \"service_identities\",\n );\n }\n parsedEnvs[envName] = { recipient: recipientValidation.key! };\n } else {\n const kmsObj = envObj.kms as Record<string, unknown>;\n if (typeof kmsObj !== \"object\" || kmsObj === null) {\n throw new ManifestValidationError(\n `Service identity '${siName}' environment '${envName}': 'kms' must be an object.`,\n \"service_identities\",\n );\n }\n const validProviders = [\"aws\", \"gcp\", \"azure\"];\n if (!kmsObj.provider || !validProviders.includes(kmsObj.provider as string)) {\n throw new ManifestValidationError(\n `Service identity '${siName}' environment '${envName}': kms.provider must be one of: ${validProviders.join(\", \")}.`,\n \"service_identities\",\n );\n }\n if (!kmsObj.keyId || typeof kmsObj.keyId !== \"string\") {\n throw new ManifestValidationError(\n `Service identity '${siName}' environment '${envName}': kms.keyId must be a non-empty string.`,\n \"service_identities\",\n );\n }\n parsedEnvs[envName] = {\n kms: {\n provider: kmsObj.provider as \"aws\" | \"gcp\" | \"azure\",\n keyId: kmsObj.keyId,\n region: typeof kmsObj.region === \"string\" ? kmsObj.region : undefined,\n },\n };\n }\n }\n\n return {\n name: siName,\n description: siObj.description as string,\n namespaces: siObj.namespaces as string[],\n environments: parsedEnvs,\n };\n });\n\n // Check for duplicate identity names\n const siNames = new Set<string>();\n for (const si of serviceIdentities) {\n if (siNames.has(si.name)) {\n throw new ManifestValidationError(\n `Duplicate service identity name '${si.name}'.`,\n \"service_identities\",\n );\n }\n siNames.add(si.name);\n }\n }\n\n // cloud (optional)\n let cloud: ClefCloudConfig | undefined;\n if (obj.cloud !== undefined) {\n if (typeof obj.cloud !== \"object\" || obj.cloud === null || Array.isArray(obj.cloud)) {\n throw new ManifestValidationError(\"Field 'cloud' must be an object.\", \"cloud\");\n }\n const cloudObj = obj.cloud as Record<string, unknown>;\n if (typeof cloudObj.integrationId !== \"string\" || cloudObj.integrationId.length === 0) {\n throw new ManifestValidationError(\n \"Field 'cloud.integrationId' is required and must be a non-empty string.\",\n \"cloud\",\n );\n }\n cloud = { integrationId: cloudObj.integrationId };\n }\n\n return {\n version: 1,\n environments,\n namespaces,\n sops: sopsConfig,\n file_pattern: obj.file_pattern,\n ...(serviceIdentities ? { service_identities: serviceIdentities } : {}),\n ...(cloud ? { cloud } : {}),\n };\n }\n\n /**\n * Watch a manifest file for changes and invoke a callback on each successful parse.\n *\n * @param filePath - Path to the manifest file to watch.\n * @param onChange - Called with the newly parsed manifest on each valid change.\n * @returns Unsubscribe function \u2014 call it to stop watching.\n */\n watch(filePath: string, onChange: (manifest: ClefManifest) => void): () => void {\n const watcher = fs.watch(filePath, () => {\n try {\n const manifest = this.parse(filePath);\n onChange(manifest);\n } catch {\n // Ignore parse errors during watch \u2014 file may be mid-save\n }\n });\n\n return () => {\n watcher.close();\n };\n }\n}\n", "export interface AgeKeyValidation {\n valid: boolean;\n key?: string;\n error?: string;\n}\n\nconst BECH32_CHARSET = \"qpzry9x8gf2tvdw0s3jn54khce6mua7l\";\nconst AGE_PREFIX = \"age1\";\nconst MIN_LENGTH = 10;\n\n/**\n * Validate that a string is a well-formed age public key (bech32, `age1` prefix).\n *\n * @param input - The string to validate.\n * @returns `{ valid: true, key: trimmedKey }` or `{ valid: false, error: message }`.\n */\nexport function validateAgePublicKey(input: string): AgeKeyValidation {\n const trimmed = input.trim();\n\n if (!trimmed.startsWith(AGE_PREFIX)) {\n return {\n valid: false,\n error: `age public key must start with '${AGE_PREFIX}'. Got: '${trimmed.slice(0, 10)}...'`,\n };\n }\n\n if (trimmed.length < MIN_LENGTH) {\n return {\n valid: false,\n error: `age public key is too short. Expected at least ${MIN_LENGTH} characters, got ${trimmed.length}.`,\n };\n }\n\n const body = trimmed.slice(AGE_PREFIX.length);\n for (const ch of body) {\n if (!BECH32_CHARSET.includes(ch)) {\n return {\n valid: false,\n error: `Invalid character '${ch}' in age public key. Only bech32 characters are allowed after the 'age1' prefix.`,\n };\n }\n }\n\n return { valid: true, key: trimmed };\n}\n\n/**\n * Return a short display preview of an age public key: `age1\u2026last8chars`.\n *\n * @param key - Full age public key string.\n */\nexport function keyPreview(key: string): string {\n const last8 = key.slice(-8);\n return `age1\\u2026${last8}`;\n}\n", "import * as fs from \"fs\";\nimport * as path from \"path\";\nimport type { ClefManifest, SubprocessRunner } from \"../types\";\nimport { matchPatterns, isHighEntropy, shannonEntropy, redactValue, ScanMatch } from \"./patterns\";\nimport { loadIgnoreRules, shouldIgnoreFile, shouldIgnoreMatch } from \"./ignore\";\n\nexport type { ScanMatch } from \"./patterns\";\nexport type { ClefIgnoreRules } from \"./ignore\";\nexport { shannonEntropy, isHighEntropy, matchPatterns, redactValue } from \"./patterns\";\nexport { loadIgnoreRules, shouldIgnoreFile, shouldIgnoreMatch, parseIgnoreContent } from \"./ignore\";\n\nexport interface ScanResult {\n matches: ScanMatch[];\n filesScanned: number;\n filesSkipped: number;\n unencryptedMatrixFiles: string[];\n durationMs: number;\n}\n\nexport interface ScanOptions {\n stagedOnly?: boolean;\n paths?: string[];\n severity?: \"all\" | \"high\";\n}\n\nconst ALWAYS_SKIP_EXTENSIONS = [\".enc.yaml\", \".enc.json\"] as const;\nconst ALWAYS_SKIP_NAMES = [\".clef-meta.yaml\"] as const;\nconst ALWAYS_SKIP_DIRS = [\"node_modules\", \".git\"] as const;\nconst MAX_FILE_SIZE = 1024 * 1024; // 1 MB\n\n/**\n * Scans repository files for plaintext secrets using pattern matching and entropy detection.\n *\n * @example\n * ```ts\n * const scanner = new ScanRunner(runner);\n * const result = await scanner.scan(repoRoot, manifest, { stagedOnly: true });\n * ```\n */\nexport class ScanRunner {\n constructor(private readonly runner: SubprocessRunner) {}\n\n /**\n * Scan tracked (or staged) files for secret-like values and unencrypted matrix files.\n *\n * The scan respects `.clefignore` rules and inline `# clef-ignore` suppressions.\n *\n * @param repoRoot - Absolute path to the repository root.\n * @param manifest - Parsed manifest used to identify matrix file paths.\n * @param options - Optional scan filters.\n */\n async scan(\n repoRoot: string,\n manifest: ClefManifest,\n options: ScanOptions = {},\n ): Promise<ScanResult> {\n const startMs = Date.now();\n const ignoreRules = loadIgnoreRules(repoRoot);\n const matches: ScanMatch[] = [];\n const unencryptedMatrixFiles: string[] = [];\n let filesScanned = 0;\n let filesSkipped = 0;\n\n // \u2500\u2500 Check 1: unencrypted matrix files \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n for (const ns of manifest.namespaces) {\n for (const env of manifest.environments) {\n const relPath = manifest.file_pattern\n .replace(\"{namespace}\", ns.name)\n .replace(\"{environment}\", env.name);\n const absPath = path.join(repoRoot, relPath);\n if (fs.existsSync(absPath)) {\n const content = fs.readFileSync(absPath, \"utf-8\");\n if (!content.includes(\"sops:\") && !content.includes('\"sops\"')) {\n unencryptedMatrixFiles.push(relPath);\n }\n }\n }\n }\n\n // \u2500\u2500 Determine files to scan \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n let filesToScan: string[];\n if (options.stagedOnly) {\n filesToScan = await this.getStagedFiles(repoRoot);\n } else if (options.paths && options.paths.length > 0) {\n filesToScan = await this.getFilesInPaths(repoRoot, options.paths);\n } else {\n filesToScan = await this.getAllTrackedFiles(repoRoot);\n }\n\n // \u2500\u2500 Check 2: secret-looking values \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n for (const relFile of filesToScan) {\n const absFile = path.isAbsolute(relFile) ? relFile : path.join(repoRoot, relFile);\n const relPath = path.relative(repoRoot, absFile).replace(/\\\\/g, \"/\");\n\n if (this.shouldAlwaysSkip(relPath)) {\n filesSkipped++;\n continue;\n }\n\n if (shouldIgnoreFile(relPath, ignoreRules)) {\n filesSkipped++;\n continue;\n }\n\n if (!fs.existsSync(absFile)) {\n filesSkipped++;\n continue;\n }\n\n let stat: fs.Stats;\n try {\n stat = fs.statSync(absFile);\n } catch {\n filesSkipped++;\n continue;\n }\n\n if (stat.size > MAX_FILE_SIZE) {\n filesSkipped++;\n continue;\n }\n\n if (this.isBinary(absFile)) {\n filesSkipped++;\n continue;\n }\n\n filesScanned++;\n const content = fs.readFileSync(absFile, \"utf-8\");\n const lines = content.split(\"\\n\");\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const lineNum = i + 1;\n\n // Inline suppress: # clef-ignore on the same line\n if (line.includes(\"# clef-ignore\")) continue;\n\n // Pattern matching\n const patternHits = matchPatterns(line, lineNum, relPath);\n for (const m of patternHits) {\n if (!shouldIgnoreMatch(m, ignoreRules)) {\n matches.push(m);\n }\n }\n\n // Entropy detection (skip when severity === 'high')\n if (options.severity !== \"high\") {\n const entropyHit = this.detectEntropy(line, lineNum, relPath);\n if (entropyHit && !shouldIgnoreMatch(entropyHit, ignoreRules)) {\n matches.push(entropyHit);\n }\n }\n }\n }\n\n return {\n matches,\n filesScanned,\n filesSkipped,\n unencryptedMatrixFiles,\n durationMs: Date.now() - startMs,\n };\n }\n\n private shouldAlwaysSkip(relPath: string): boolean {\n for (const dir of ALWAYS_SKIP_DIRS) {\n if (relPath === dir || relPath.startsWith(dir + \"/\")) return true;\n }\n for (const ext of ALWAYS_SKIP_EXTENSIONS) {\n if (relPath.endsWith(ext)) return true;\n }\n for (const name of ALWAYS_SKIP_NAMES) {\n if (relPath.endsWith(name)) return true;\n }\n return false;\n }\n\n private isBinary(filePath: string): boolean {\n try {\n const fd = fs.openSync(filePath, \"r\");\n const buf = Buffer.alloc(512);\n const bytesRead = fs.readSync(fd, buf, 0, 512, 0);\n fs.closeSync(fd);\n for (let i = 0; i < bytesRead; i++) {\n if (buf[i] === 0) return true;\n }\n return false;\n } catch {\n return false;\n }\n }\n\n private detectEntropy(line: string, lineNum: number, filePath: string): ScanMatch | null {\n // Look for values appearing after = or : (assignment positions)\n const valuePattern = /(?:=|:\\s*)[\"']?([A-Za-z0-9+/=_-]{20,})[\"']?/;\n const match = valuePattern.exec(line);\n if (!match) return null;\n\n const value = match[1];\n const entropy = shannonEntropy(value);\n\n if (!isHighEntropy(value)) return null;\n\n // Extract variable name for the preview\n const varMatch = /(\\w+)\\s*(?:=|:)/.exec(line);\n const varName = varMatch ? varMatch[1] : \"\";\n const preview = varName\n ? `${varName}=\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022`\n : redactValue(value);\n\n return {\n file: filePath,\n line: lineNum,\n column: match.index + 1,\n matchType: \"entropy\",\n entropy,\n preview,\n };\n }\n\n private async getStagedFiles(repoRoot: string): Promise<string[]> {\n const result = await this.runner.run(\n \"git\",\n [\"diff\", \"--cached\", \"--name-only\", \"--diff-filter=ACM\"],\n { cwd: repoRoot },\n );\n if (result.exitCode !== 0 || !result.stdout.trim()) return [];\n return result.stdout.trim().split(\"\\n\");\n }\n\n private async getFilesInPaths(repoRoot: string, paths: string[]): Promise<string[]> {\n const files: string[] = [];\n for (const p of paths) {\n const absPath = path.isAbsolute(p) ? p : path.join(repoRoot, p);\n if (!fs.existsSync(absPath)) continue;\n const stat = fs.statSync(absPath);\n if (stat.isDirectory()) {\n files.push(...this.walkDir(absPath, repoRoot));\n } else {\n files.push(path.relative(repoRoot, absPath).replace(/\\\\/g, \"/\"));\n }\n }\n return files;\n }\n\n private async getAllTrackedFiles(repoRoot: string): Promise<string[]> {\n // Use git ls-files to respect .gitignore automatically\n const result = await this.runner.run(\"git\", [\"ls-files\"], { cwd: repoRoot });\n if (result.exitCode !== 0) {\n return this.walkDir(repoRoot, repoRoot);\n }\n return result.stdout.trim() ? result.stdout.trim().split(\"\\n\") : [];\n }\n\n private walkDir(dir: string, repoRoot: string): string[] {\n const files: string[] = [];\n let entries: fs.Dirent[];\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true });\n } catch {\n return files;\n }\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n const relPath = path.relative(repoRoot, fullPath).replace(/\\\\/g, \"/\");\n if (entry.isDirectory()) {\n if (!(ALWAYS_SKIP_DIRS as readonly string[]).includes(entry.name)) {\n files.push(...this.walkDir(fullPath, repoRoot));\n }\n } else {\n files.push(relPath);\n }\n }\n return files;\n }\n}\n", "/**\n * TIER 1 MODULE \u2014 Security and correctness critical.\n *\n * This module requires exhaustive test coverage. Before\n * adding or modifying code here:\n * 1. Add tests for the happy path\n * 2. Add tests for all documented error paths\n * 3. Add at least one boundary/edge case test\n *\n * Coverage threshold: 95% lines/functions, 90% branches.\n * See docs/contributing/testing.md for the rationale.\n */\nexport interface ScanMatch {\n file: string;\n line: number;\n column: number;\n matchType: \"pattern\" | \"entropy\";\n patternName?: string;\n entropy?: number;\n preview: string;\n}\n\ninterface PatternDef {\n name: string;\n regex: RegExp;\n}\n\nconst PATTERNS: PatternDef[] = [\n { name: \"AWS access key\", regex: /AKIA[0-9A-Z]{16}/ },\n { name: \"Stripe live key\", regex: /sk_live_[0-9a-zA-Z]{24,}/ },\n { name: \"Stripe test key\", regex: /sk_test_[0-9a-zA-Z]{24,}/ },\n { name: \"GitHub personal access token\", regex: /ghp_[0-9a-zA-Z]{36}/ },\n { name: \"GitHub OAuth token\", regex: /gho_[0-9a-zA-Z]{36}/ },\n { name: \"GitHub Actions token\", regex: /ghs_[0-9a-zA-Z]{36}/ },\n { name: \"Slack token\", regex: /xox[baprs]-[0-9a-zA-Z-]{10,}/ },\n {\n name: \"Private key header\",\n regex: /-----BEGIN (?:RSA |EC |DSA |OPENSSH )?PRIVATE KEY-----/,\n },\n {\n name: \"Generic API key\",\n regex: /(?:API_KEY|SECRET_KEY|ACCESS_TOKEN|AUTH_TOKEN)\\s*=\\s*\\S{8,}/,\n },\n { name: \"Database URL\", regex: /(?:postgres|mysql|mongodb|redis):\\/\\/[^:]+:[^@]+@/ },\n];\n\n/**\n * Calculate Shannon entropy (bits per character) of a string.\n */\nexport function shannonEntropy(str: string): number {\n if (str.length === 0) return 0;\n const freq = new Map<string, number>();\n for (const c of str) {\n freq.set(c, (freq.get(c) ?? 0) + 1);\n }\n let entropy = 0;\n for (const count of freq.values()) {\n const p = count / str.length;\n entropy -= p * Math.log2(p);\n }\n return entropy;\n}\n\n/**\n * Returns true if a string has sufficiently high entropy to be considered a potential secret.\n * Threshold: > 4.5 bits/char, minimum 20 characters.\n */\nexport function isHighEntropy(value: string, threshold = 4.5, minLength = 20): boolean {\n return value.length >= minLength && shannonEntropy(value) > threshold;\n}\n\n/**\n * Redact a matched secret value \u2014 show first 4 characters, mask the rest.\n * Never exposes more than 4 characters of any secret.\n */\nexport function redactValue(value: string): string {\n if (value.length <= 4) return \"\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\";\n return value.slice(0, 4) + \"\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\";\n}\n\n/**\n * Match a line against all known secret patterns.\n * Returns one ScanMatch per matched pattern.\n */\nexport function matchPatterns(line: string, lineNumber: number, filePath: string): ScanMatch[] {\n const matches: ScanMatch[] = [];\n for (const { name, regex } of PATTERNS) {\n const match = regex.exec(line);\n if (match) {\n matches.push({\n file: filePath,\n line: lineNumber,\n column: match.index + 1,\n matchType: \"pattern\",\n patternName: name,\n preview: redactValue(match[0]),\n });\n }\n }\n return matches;\n}\n", "import * as fs from \"fs\";\nimport * as path from \"path\";\nimport type { ScanMatch } from \"./patterns\";\n\nexport interface ClefIgnoreRules {\n files: string[];\n patterns: string[];\n paths: string[];\n}\n\n/**\n * Load .clefignore rules from the repo root.\n * Returns empty rules if the file does not exist.\n */\nexport function loadIgnoreRules(repoRoot: string): ClefIgnoreRules {\n const ignorePath = path.join(repoRoot, \".clefignore\");\n try {\n const content = fs.readFileSync(ignorePath, \"utf-8\");\n return parseIgnoreContent(content);\n } catch {\n return { files: [], patterns: [], paths: [] };\n }\n}\n\n/**\n * Parse raw `.clefignore` content into structured rules.\n * Lines starting with `ignore-pattern:` suppress named patterns; lines ending with `/`\n * suppress entire directory paths; all other lines are treated as file glob patterns.\n *\n * @param content - Raw `.clefignore` file content.\n */\nexport function parseIgnoreContent(content: string): ClefIgnoreRules {\n const files: string[] = [];\n const patterns: string[] = [];\n const paths: string[] = [];\n\n for (const rawLine of content.split(\"\\n\")) {\n const line = rawLine.trim();\n if (!line || line.startsWith(\"#\")) continue;\n\n if (line.startsWith(\"ignore-pattern:\")) {\n const patternName = line.slice(\"ignore-pattern:\".length).trim();\n if (patternName) patterns.push(patternName);\n } else if (line.endsWith(\"/\")) {\n paths.push(line.slice(0, -1));\n } else {\n files.push(line);\n }\n }\n\n return { files, patterns, paths };\n}\n\n/**\n * Returns true if a file path should be ignored per .clefignore rules.\n */\nexport function shouldIgnoreFile(filePath: string, rules: ClefIgnoreRules): boolean {\n const normalized = filePath.replace(/\\\\/g, \"/\");\n\n for (const p of rules.paths) {\n const dir = p.replace(/\\\\/g, \"/\");\n if (normalized === dir || normalized.startsWith(dir + \"/\")) return true;\n }\n\n for (const pattern of rules.files) {\n if (matchesGlob(normalized, pattern)) return true;\n }\n\n return false;\n}\n\n/**\n * Returns true if a scan match should be suppressed per .clefignore rules.\n */\nexport function shouldIgnoreMatch(match: ScanMatch, rules: ClefIgnoreRules): boolean {\n if (match.matchType === \"pattern\" && match.patternName) {\n return rules.patterns.includes(match.patternName);\n }\n return false;\n}\n\nfunction matchesGlob(filePath: string, pattern: string): boolean {\n // Convert glob to regex: support *, **, and ? wildcards.\n // Step 1: stash ** segments, Step 2: escape all regex metacharacters,\n // Step 3: restore wildcards as their regex equivalents.\n const DOUBLE_STAR = \"\\x00DS\\x00\";\n const SINGLE_STAR = \"\\x00SS\\x00\";\n const QUESTION = \"\\x00QM\\x00\";\n\n const escaped = pattern\n .replace(/\\*\\*/g, DOUBLE_STAR)\n .replace(/\\*/g, SINGLE_STAR)\n .replace(/\\?/g, QUESTION)\n .replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\")\n .replace(DOUBLE_STAR, \".*\")\n .replace(SINGLE_STAR, \"[^/]*\")\n .replace(QUESTION, \"[^/]\");\n\n const regex = new RegExp(\"^\" + escaped + \"$\");\n // Also match if the pattern matches a prefix directory\n const prefixRegex = new RegExp(\"^\" + escaped + \"/\");\n return regex.test(filePath) || prefixRegex.test(filePath);\n}\n", "import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as YAML from \"yaml\";\nimport { ClefManifest, MatrixCell, MatrixIssue, MatrixStatus } from \"../types\";\nimport { EncryptionBackend } from \"../types\";\nimport { getPendingKeys } from \"../pending/metadata\";\n\n/**\n * Resolves and manages the namespace \u00D7 environment matrix of encrypted files.\n *\n * @example\n * ```ts\n * const manager = new MatrixManager();\n * const cells = manager.resolveMatrix(manifest, repoRoot);\n * ```\n */\nexport class MatrixManager {\n /**\n * Build the full grid of {@link MatrixCell} objects from the manifest.\n * Each cell reflects whether its encrypted file exists on disk.\n *\n * @param manifest - Parsed manifest.\n * @param repoRoot - Absolute path to the repository root.\n */\n resolveMatrix(manifest: ClefManifest, repoRoot: string): MatrixCell[] {\n const cells: MatrixCell[] = [];\n\n for (const ns of manifest.namespaces) {\n for (const env of manifest.environments) {\n const relativePath = manifest.file_pattern\n .replace(\"{namespace}\", ns.name)\n .replace(\"{environment}\", env.name);\n const filePath = path.join(repoRoot, relativePath);\n\n cells.push({\n namespace: ns.name,\n environment: env.name,\n filePath,\n exists: fs.existsSync(filePath),\n });\n }\n }\n\n return cells;\n }\n\n /**\n * Return only the cells whose encrypted files do not yet exist on disk.\n *\n * @param manifest - Parsed manifest.\n * @param repoRoot - Absolute path to the repository root.\n */\n detectMissingCells(manifest: ClefManifest, repoRoot: string): MatrixCell[] {\n return this.resolveMatrix(manifest, repoRoot).filter((cell) => !cell.exists);\n }\n\n /**\n * Create an empty encrypted SOPS file for a missing matrix cell.\n *\n * @param cell - The cell to scaffold (must not already exist).\n * @param sopsClient - SOPS client used to write the initial encrypted file.\n * @param manifest - Parsed manifest used to determine the encryption backend.\n */\n async scaffoldCell(\n cell: MatrixCell,\n sopsClient: EncryptionBackend,\n manifest: ClefManifest,\n ): Promise<void> {\n const dir = path.dirname(cell.filePath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n await sopsClient.encrypt(cell.filePath, {}, manifest, cell.environment);\n }\n\n /**\n * Decrypt each cell and return key counts, pending counts, and cross-environment issues.\n *\n * @param manifest - Parsed manifest.\n * @param repoRoot - Absolute path to the repository root.\n * @param sopsClient - SOPS client used to decrypt each cell.\n */\n async getMatrixStatus(\n manifest: ClefManifest,\n repoRoot: string,\n _sopsClient: EncryptionBackend,\n ): Promise<MatrixStatus[]> {\n const cells = this.resolveMatrix(manifest, repoRoot);\n const statuses: MatrixStatus[] = [];\n\n // First pass: read key names from plaintext YAML (no decryption)\n const cellKeys = new Map<string, string[]>();\n for (const cell of cells) {\n if (cell.exists) {\n cellKeys.set(cell.filePath, this.readKeyNames(cell.filePath));\n }\n }\n\n for (const cell of cells) {\n if (!cell.exists) {\n statuses.push({\n cell,\n keyCount: 0,\n pendingCount: 0,\n lastModified: null,\n issues: [\n {\n type: \"missing_keys\",\n message: `File '${cell.filePath}' does not exist. Run 'clef init' to scaffold missing files.`,\n },\n ],\n });\n continue;\n }\n\n // Read pending count from metadata (plaintext, no decryption needed)\n let pendingCount = 0;\n try {\n const pending = await getPendingKeys(cell.filePath);\n pendingCount = pending.length;\n } catch {\n // Metadata file missing or unreadable \u2014 0 pending\n }\n\n const keys = cellKeys.get(cell.filePath) ?? [];\n const keyCount = keys.length;\n const lastModified = this.readLastModified(cell.filePath);\n const issues: MatrixIssue[] = [];\n\n // Cross-environment key drift (using plaintext key names, no decrypt)\n const siblingCells = cells.filter(\n (c) => c.namespace === cell.namespace && c.environment !== cell.environment && c.exists,\n );\n for (const sibling of siblingCells) {\n const siblingKeys = cellKeys.get(sibling.filePath) ?? [];\n const missingKeys = siblingKeys.filter((k) => !keys.includes(k));\n for (const mk of missingKeys) {\n issues.push({\n type: \"missing_keys\",\n message: `Key '${mk}' exists in ${sibling.environment} but is missing here.`,\n key: mk,\n });\n }\n }\n\n statuses.push({ cell, keyCount, pendingCount, lastModified, issues });\n }\n\n return statuses;\n }\n\n /**\n * Read top-level key names from a SOPS file without decryption.\n * SOPS stores key names in plaintext \u2014 only values are encrypted.\n */\n private readKeyNames(filePath: string): string[] {\n try {\n const raw = fs.readFileSync(filePath, \"utf-8\");\n const parsed = YAML.parse(raw);\n if (!parsed || typeof parsed !== \"object\") return [];\n return Object.keys(parsed as Record<string, unknown>).filter((k) => k !== \"sops\");\n } catch {\n return [];\n }\n }\n\n /**\n * Read the lastModified timestamp from SOPS metadata without decryption.\n */\n private readLastModified(filePath: string): Date | null {\n try {\n const raw = fs.readFileSync(filePath, \"utf-8\");\n const parsed = YAML.parse(raw) as Record<string, unknown>;\n const sops = parsed?.sops as Record<string, unknown> | undefined;\n if (sops?.lastmodified) return new Date(String(sops.lastmodified));\n return null;\n } catch {\n return null;\n }\n }\n\n /**\n * Check whether an environment has the `protected` flag set in the manifest.\n *\n * @param manifest - Parsed manifest.\n * @param environment - Environment name to check.\n */\n isProtectedEnvironment(manifest: ClefManifest, environment: string): boolean {\n const env = manifest.environments.find((e) => e.name === environment);\n return env?.protected === true;\n }\n}\n", "/**\n * TIER 1 MODULE \u2014 Security and correctness critical.\n *\n * This module requires exhaustive test coverage. Before\n * adding or modifying code here:\n * 1. Add tests for the happy path\n * 2. Add tests for all documented error paths\n * 3. Add at least one boundary/edge case test\n *\n * Coverage threshold: 95% lines/functions, 90% branches.\n * See docs/contributing/testing.md for the rationale.\n */\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as crypto from \"crypto\";\nimport * as YAML from \"yaml\";\n\ninterface PendingKey {\n key: string;\n since: Date;\n setBy: string;\n}\n\ninterface PendingMetadata {\n version: 1;\n pending: PendingKey[];\n}\n\n/**\n * Derive the `.clef-meta.yaml` path from an `.enc.yaml` path.\n * Example: `database/dev.enc.yaml` \u2192 `database/dev.clef-meta.yaml`\n */\nfunction metadataPath(encryptedFilePath: string): string {\n const dir = path.dirname(encryptedFilePath);\n const base = path.basename(encryptedFilePath).replace(/\\.enc\\.(yaml|json)$/, \"\");\n return path.join(dir, `${base}.clef-meta.yaml`);\n}\n\nconst HEADER_COMMENT = \"# Managed by Clef. Do not edit manually.\\n\";\n\n/** Load pending-key metadata for an encrypted file. Returns empty metadata if the file is missing. */\nasync function loadMetadata(filePath: string): Promise<PendingMetadata> {\n const metaPath = metadataPath(filePath);\n try {\n if (!fs.existsSync(metaPath)) {\n return { version: 1, pending: [] };\n }\n const content = fs.readFileSync(metaPath, \"utf-8\");\n const parsed = YAML.parse(content);\n if (!parsed || !Array.isArray(parsed.pending)) {\n return { version: 1, pending: [] };\n }\n return {\n version: 1,\n pending: parsed.pending.map((p: { key: string; since: string; setBy: string }) => ({\n key: p.key,\n since: new Date(p.since),\n setBy: p.setBy,\n })),\n };\n } catch {\n return { version: 1, pending: [] };\n }\n}\n\n/** Write pending-key metadata to disk. Creates parent directories if needed. */\nasync function saveMetadata(filePath: string, metadata: PendingMetadata): Promise<void> {\n const metaPath = metadataPath(filePath);\n const dir = path.dirname(metaPath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n const data = {\n version: metadata.version,\n pending: metadata.pending.map((p) => ({\n key: p.key,\n since: p.since.toISOString(),\n setBy: p.setBy,\n })),\n };\n fs.writeFileSync(metaPath, HEADER_COMMENT + YAML.stringify(data), \"utf-8\");\n}\n\n/**\n * Mark one or more keys as pending (placeholder value) for an encrypted file.\n * If a key is already pending, its timestamp and `setBy` are updated.\n *\n * @param filePath - Path to the encrypted file.\n * @param keys - Key names to mark as pending.\n * @param setBy - Identifier of the actor setting these keys (e.g. a username or CI job).\n */\nasync function markPending(filePath: string, keys: string[], setBy: string): Promise<void> {\n const metadata = await loadMetadata(filePath);\n const now = new Date();\n for (const key of keys) {\n const existing = metadata.pending.findIndex((p) => p.key === key);\n if (existing >= 0) {\n // Upsert: update timestamp and setBy on re-randomization\n metadata.pending[existing] = { key, since: now, setBy };\n } else {\n metadata.pending.push({ key, since: now, setBy });\n }\n }\n await saveMetadata(filePath, metadata);\n}\n\n/** Remove keys from the pending list after they have received real values. */\nasync function markResolved(filePath: string, keys: string[]): Promise<void> {\n const metadata = await loadMetadata(filePath);\n metadata.pending = metadata.pending.filter((p) => !keys.includes(p.key));\n await saveMetadata(filePath, metadata);\n}\n\n/** Return the list of key names that are still pending for the given encrypted file. */\nasync function getPendingKeys(filePath: string): Promise<string[]> {\n const metadata = await loadMetadata(filePath);\n return metadata.pending.map((p) => p.key);\n}\n\n/** Check whether a single key is currently pending for the given encrypted file. */\nasync function isPending(filePath: string, key: string): Promise<boolean> {\n const metadata = await loadMetadata(filePath);\n return metadata.pending.some((p) => p.key === key);\n}\n\n/** Generate a cryptographically random 64-character hex string for use as a placeholder value. */\nfunction generateRandomValue(): string {\n return crypto.randomBytes(32).toString(\"hex\");\n}\n\n/**\n * Same as {@link markPending} but retries once after `retryDelayMs` on transient failure.\n *\n * @param filePath - Path to the encrypted file.\n * @param keys - Key names to mark as pending.\n * @param setBy - Identifier of the actor setting these keys.\n * @param retryDelayMs - Delay in milliseconds before the single retry (default: 200).\n */\nasync function markPendingWithRetry(\n filePath: string,\n keys: string[],\n setBy: string,\n retryDelayMs = 200,\n): Promise<void> {\n try {\n await markPending(filePath, keys, setBy);\n } catch {\n // One retry after short delay for transient failures\n await new Promise((r) => setTimeout(r, retryDelayMs));\n await markPending(filePath, keys, setBy);\n }\n}\n\nexport {\n PendingKey,\n PendingMetadata,\n metadataPath,\n loadMetadata,\n saveMetadata,\n markPending,\n markPendingWithRetry,\n markResolved,\n getPendingKeys,\n isPending,\n generateRandomValue,\n};\n", "import * as fs from \"fs\";\nimport * as YAML from \"yaml\";\nimport {\n NamespaceSchema,\n SchemaLoadError,\n ValidationError,\n ValidationResult,\n ValidationWarning,\n} from \"../types\";\n\n/**\n * Loads namespace schemas and validates decrypted key/value maps against them.\n *\n * @example\n * ```ts\n * const validator = new SchemaValidator();\n * const schema = validator.loadSchema(\"schemas/app.yaml\");\n * const result = validator.validate(decrypted.values, schema);\n * ```\n */\nexport class SchemaValidator {\n /**\n * Read and parse a YAML schema file from disk.\n *\n * @param filePath - Path to the schema YAML file.\n * @returns Parsed {@link NamespaceSchema}.\n * @throws {@link SchemaLoadError} If the file cannot be read or contains invalid YAML.\n */\n loadSchema(filePath: string): NamespaceSchema {\n let raw: string;\n try {\n raw = fs.readFileSync(filePath, \"utf-8\");\n } catch {\n throw new SchemaLoadError(`Could not read schema file at '${filePath}'.`, filePath);\n }\n\n let parsed: unknown;\n try {\n parsed = YAML.parse(raw);\n } catch {\n throw new SchemaLoadError(`Schema file '${filePath}' contains invalid YAML.`, filePath);\n }\n\n if (!parsed || typeof parsed !== \"object\") {\n throw new SchemaLoadError(\n `Schema file '${filePath}' must be a YAML object with a 'keys' map.`,\n filePath,\n );\n }\n\n const obj = parsed as Record<string, unknown>;\n if (!obj.keys || typeof obj.keys !== \"object\") {\n throw new SchemaLoadError(\n `Schema file '${filePath}' is missing the required 'keys' map.`,\n filePath,\n );\n }\n\n const keys: NamespaceSchema[\"keys\"] = {};\n const keysObj = obj.keys as Record<string, unknown>;\n\n for (const [keyName, keyDef] of Object.entries(keysObj)) {\n if (!keyDef || typeof keyDef !== \"object\") {\n throw new SchemaLoadError(\n `Schema key '${keyName}' must be an object with at least 'type' and 'required'.`,\n filePath,\n );\n }\n\n const def = keyDef as Record<string, unknown>;\n const type = def.type as string;\n if (![\"string\", \"integer\", \"boolean\"].includes(type)) {\n throw new SchemaLoadError(\n `Schema key '${keyName}' has invalid type '${type}'. Must be 'string', 'integer', or 'boolean'.`,\n filePath,\n );\n }\n\n keys[keyName] = {\n type: type as \"string\" | \"integer\" | \"boolean\",\n required: def.required === true,\n ...(typeof def.pattern === \"string\" ? { pattern: def.pattern } : {}),\n ...(def.default !== undefined ? { default: def.default } : {}),\n ...(typeof def.description === \"string\" ? { description: def.description } : {}),\n ...(typeof def.max === \"number\" ? { max: def.max } : {}),\n };\n }\n\n return { keys };\n }\n\n /**\n * Validate a set of decrypted values against a loaded namespace schema.\n *\n * @param values - Flat key/value map from a decrypted SOPS file.\n * @param schema - Schema loaded via {@link loadSchema}.\n * @returns {@link ValidationResult} with `valid: false` when any errors are present.\n */\n validate(values: Record<string, string>, schema: NamespaceSchema): ValidationResult {\n const errors: ValidationError[] = [];\n const warnings: ValidationWarning[] = [];\n\n // Check required keys and type/pattern validation\n for (const [keyName, keyDef] of Object.entries(schema.keys)) {\n const value = values[keyName];\n\n if (value === undefined || value === null) {\n if (keyDef.required) {\n errors.push({\n key: keyName,\n message: `Required key '${keyName}' is missing.`,\n rule: \"required\",\n });\n }\n continue;\n }\n\n // Type validation\n switch (keyDef.type) {\n case \"integer\": {\n const num = Number(value);\n if (!Number.isInteger(num) || value.trim() === \"\") {\n errors.push({\n key: keyName,\n message: `Key '${keyName}' must be an integer, got '${value}'.`,\n rule: \"type\",\n });\n } else if (keyDef.max !== undefined && num > keyDef.max) {\n warnings.push({\n key: keyName,\n message: `Key '${keyName}' value ${num} exceeds maximum ${keyDef.max}.`,\n rule: \"max_exceeded\",\n });\n }\n break;\n }\n case \"boolean\": {\n const lower = value.toLowerCase();\n if (![\"true\", \"false\"].includes(lower)) {\n errors.push({\n key: keyName,\n message: `Key '${keyName}' must be a boolean ('true' or 'false'), got '${value}'.`,\n rule: \"type\",\n });\n }\n break;\n }\n case \"string\":\n // Strings are always valid type-wise\n break;\n }\n\n // Pattern validation (only for strings)\n if (keyDef.pattern && keyDef.type === \"string\") {\n const regex = new RegExp(keyDef.pattern);\n if (!regex.test(value)) {\n errors.push({\n key: keyName,\n message: `Key '${keyName}' value does not match required pattern '${keyDef.pattern}'.`,\n rule: \"pattern\",\n });\n }\n }\n }\n\n // Check for undeclared keys\n for (const keyName of Object.keys(values)) {\n if (!(keyName in schema.keys)) {\n warnings.push({\n key: keyName,\n message: `Key '${keyName}' is not declared in the schema.`,\n rule: \"undeclared\",\n });\n }\n }\n\n return {\n valid: errors.length === 0,\n errors,\n warnings,\n };\n }\n}\n", "/**\n * TIER 1 MODULE \u2014 Security and correctness critical.\n *\n * This module requires exhaustive test coverage. Before\n * adding or modifying code here:\n * 1. Add tests for the happy path\n * 2. Add tests for all documented error paths\n * 3. Add at least one boundary/edge case test\n *\n * Coverage threshold: 95% lines/functions, 90% branches.\n * See docs/contributing/testing.md for the rationale.\n */\nimport * as path from \"path\";\nimport { ClefManifest, DiffResult, DiffRow, DiffStatus } from \"../types\";\nimport { EncryptionBackend } from \"../types\";\n\n/**\n * Compares decrypted values between two environments or two arbitrary key/value maps.\n *\n * @example\n * ```ts\n * const engine = new DiffEngine();\n * const result = await engine.diffFiles(\"app\", \"staging\", \"production\", manifest, sopsClient, repoRoot);\n * ```\n */\nexport class DiffEngine {\n /**\n * Compare two in-memory value maps and produce a sorted diff result.\n *\n * Rows are sorted with missing and changed keys first, identical keys last.\n *\n * @param valuesA - Decrypted values from environment A.\n * @param valuesB - Decrypted values from environment B.\n * @param envA - Name of environment A.\n * @param envB - Name of environment B.\n * @param namespace - Namespace label included in the result (optional).\n */\n diff(\n valuesA: Record<string, string>,\n valuesB: Record<string, string>,\n envA: string,\n envB: string,\n namespace: string = \"\",\n ): DiffResult {\n const allKeys = new Set([...Object.keys(valuesA), ...Object.keys(valuesB)]);\n const rows: DiffRow[] = [];\n\n for (const key of allKeys) {\n const inA = key in valuesA;\n const inB = key in valuesB;\n\n let status: DiffStatus;\n if (inA && inB) {\n status = valuesA[key] === valuesB[key] ? \"identical\" : \"changed\";\n } else if (inA && !inB) {\n status = \"missing_b\";\n } else {\n status = \"missing_a\";\n }\n\n rows.push({\n key,\n valueA: inA ? valuesA[key] : null,\n valueB: inB ? valuesB[key] : null,\n status,\n });\n }\n\n // Sort: missing and changed first, then identical\n rows.sort((a, b) => {\n const order: Record<DiffStatus, number> = {\n missing_a: 0,\n missing_b: 0,\n changed: 1,\n identical: 2,\n };\n return order[a.status] - order[b.status];\n });\n\n return { namespace, envA, envB, rows };\n }\n\n /**\n * Decrypt two matrix cells and diff their values.\n *\n * @param namespace - Namespace containing both cells.\n * @param envA - Name of environment A.\n * @param envB - Name of environment B.\n * @param manifest - Parsed manifest used to resolve file paths.\n * @param sopsClient - SOPS client used to decrypt both files.\n * @param repoRoot - Absolute path to the repository root.\n * @throws {@link SopsDecryptionError} If either file cannot be decrypted.\n */\n async diffFiles(\n namespace: string,\n envA: string,\n envB: string,\n manifest: ClefManifest,\n sopsClient: EncryptionBackend,\n repoRoot: string,\n ): Promise<DiffResult> {\n const fileA = path.join(\n repoRoot,\n manifest.file_pattern.replace(\"{namespace}\", namespace).replace(\"{environment}\", envA),\n );\n const fileB = path.join(\n repoRoot,\n manifest.file_pattern.replace(\"{namespace}\", namespace).replace(\"{environment}\", envB),\n );\n\n const [decryptedA, decryptedB] = await Promise.all([\n sopsClient.decrypt(fileA),\n sopsClient.decrypt(fileB),\n ]);\n\n return this.diff(decryptedA.values, decryptedB.values, envA, envB, namespace);\n }\n}\n", "import * as path from \"path\";\nimport { ClefManifest, MatrixCell } from \"../types\";\nimport { EncryptionBackend } from \"../types\";\n\n/**\n * Performs bulk set, delete, and copy operations across multiple environments.\n *\n * @example\n * ```ts\n * const bulk = new BulkOps();\n * await bulk.setAcrossEnvironments(\"app\", \"DATABASE_URL\", { staging: \"...\", production: \"...\" }, manifest, sopsClient, repoRoot);\n * ```\n */\nexport class BulkOps {\n /**\n * Set a key to different values in multiple environments at once.\n *\n * @param namespace - Target namespace.\n * @param key - Secret key name to set.\n * @param values - Map of `{ environment: value }` pairs.\n * @param manifest - Parsed manifest.\n * @param sopsClient - SOPS client used to decrypt and re-encrypt each file.\n * @param repoRoot - Absolute path to the repository root.\n * @throws `Error` with details if any environment fails.\n */\n async setAcrossEnvironments(\n namespace: string,\n key: string,\n values: Record<string, string>,\n manifest: ClefManifest,\n sopsClient: EncryptionBackend,\n repoRoot: string,\n ): Promise<void> {\n const errors: Array<{ environment: string; error: Error }> = [];\n\n for (const env of manifest.environments) {\n if (!(env.name in values)) {\n continue;\n }\n\n const filePath = path.join(\n repoRoot,\n manifest.file_pattern.replace(\"{namespace}\", namespace).replace(\"{environment}\", env.name),\n );\n\n try {\n const decrypted = await sopsClient.decrypt(filePath);\n decrypted.values[key] = values[env.name];\n await sopsClient.encrypt(filePath, decrypted.values, manifest, env.name);\n } catch (err) {\n errors.push({ environment: env.name, error: err as Error });\n }\n }\n\n if (errors.length > 0) {\n const details = errors.map((e) => ` - ${e.environment}: ${e.error.message}`).join(\"\\n\");\n throw new Error(\n `Failed to set key '${key}' in ${errors.length} environment(s):\\n${details}\\n` +\n `Successfully updated ${Object.keys(values).length - errors.length} environment(s).`,\n );\n }\n }\n\n /**\n * Delete a key from every environment in a namespace.\n *\n * @param namespace - Target namespace.\n * @param key - Secret key name to delete.\n * @param manifest - Parsed manifest.\n * @param sopsClient - SOPS client.\n * @param repoRoot - Absolute path to the repository root.\n * @throws `Error` with details if any environment fails.\n */\n async deleteAcrossEnvironments(\n namespace: string,\n key: string,\n manifest: ClefManifest,\n sopsClient: EncryptionBackend,\n repoRoot: string,\n ): Promise<void> {\n const errors: Array<{ environment: string; error: Error }> = [];\n\n for (const env of manifest.environments) {\n const filePath = path.join(\n repoRoot,\n manifest.file_pattern.replace(\"{namespace}\", namespace).replace(\"{environment}\", env.name),\n );\n\n try {\n const decrypted = await sopsClient.decrypt(filePath);\n if (key in decrypted.values) {\n delete decrypted.values[key];\n await sopsClient.encrypt(filePath, decrypted.values, manifest, env.name);\n }\n } catch (err) {\n errors.push({ environment: env.name, error: err as Error });\n }\n }\n\n if (errors.length > 0) {\n const details = errors.map((e) => ` - ${e.environment}: ${e.error.message}`).join(\"\\n\");\n throw new Error(\n `Failed to delete key '${key}' in ${errors.length} environment(s):\\n${details}`,\n );\n }\n }\n\n /**\n * Copy a single key's value from one matrix cell to another.\n *\n * @param key - Secret key name to copy.\n * @param fromCell - Source matrix cell.\n * @param toCell - Destination matrix cell.\n * @param sopsClient - SOPS client.\n * @param manifest - Parsed manifest.\n * @throws `Error` if the key does not exist in the source cell.\n */\n async copyValue(\n key: string,\n fromCell: MatrixCell,\n toCell: MatrixCell,\n sopsClient: EncryptionBackend,\n manifest: ClefManifest,\n ): Promise<void> {\n const source = await sopsClient.decrypt(fromCell.filePath);\n\n if (!(key in source.values)) {\n throw new Error(\n `Key '${key}' does not exist in ${fromCell.namespace}/${fromCell.environment}.`,\n );\n }\n\n const dest = await sopsClient.decrypt(toCell.filePath);\n dest.values[key] = source.values[key];\n await sopsClient.encrypt(toCell.filePath, dest.values, manifest, toCell.environment);\n }\n}\n", "import * as fs from \"fs\";\nimport * as path from \"path\";\nimport { GitCommit, GitOperationError, GitStatus, SubprocessRunner } from \"../types\";\n\nconst PRE_COMMIT_HOOK = `#!/bin/sh\n# Clef pre-commit hook \u2014 blocks commits of files missing SOPS encryption metadata\n# and scans staged files for plaintext secrets.\n# Installed by: clef hooks install\n\nSTAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM)\nEXIT_CODE=0\n\nfor FILE in $STAGED_FILES; do\n case \"$FILE\" in\n *.enc.yaml|*.enc.json)\n if ! grep -q '\"sops\":' \"$FILE\" && ! grep -q 'sops:' \"$FILE\"; then\n echo \"ERROR: $FILE appears to be missing SOPS metadata.\"\n echo \" This file may contain unencrypted secrets.\"\n echo \" Encrypt it with 'sops encrypt -i $FILE' before committing.\"\n EXIT_CODE=1\n fi\n ;;\n esac\ndone\n\nif [ $EXIT_CODE -eq 0 ]; then\n # Scan staged files for plaintext secrets\n if command -v clef >/dev/null 2>&1; then\n clef scan --staged\n SCAN_EXIT=$?\n if [ $SCAN_EXIT -ne 0 ]; then\n echo \"\"\n echo \"clef scan found potential secrets in staged files.\"\n echo \"Review the findings above before committing.\"\n echo \"To bypass (use with caution): git commit --no-verify\"\n EXIT_CODE=1\n fi\n fi\nfi\n\nexit $EXIT_CODE\n`;\n\n/**\n * Wraps git operations: staging, committing, log, diff, status, and hook installation.\n *\n * @example\n * ```ts\n * const git = new GitIntegration(runner);\n * await git.stageFiles([\"secrets/app/production.enc.yaml\"], repoRoot);\n * const hash = await git.commit(\"chore(secrets): rotate production keys\", repoRoot);\n * ```\n */\nexport class GitIntegration {\n constructor(private readonly runner: SubprocessRunner) {}\n\n /**\n * Stage one or more file paths with `git add`.\n *\n * @param filePaths - Paths to stage (relative or absolute).\n * @param repoRoot - Working directory for the git command.\n * @throws {@link GitOperationError} On failure.\n */\n async stageFiles(filePaths: string[], repoRoot: string): Promise<void> {\n if (filePaths.length === 0) return;\n\n const result = await this.runner.run(\"git\", [\"add\", ...filePaths], { cwd: repoRoot });\n\n if (result.exitCode !== 0) {\n throw new GitOperationError(\n `Failed to stage files: ${result.stderr.trim()}`,\n \"Check that the files exist and you are inside a git repository.\",\n );\n }\n }\n\n /**\n * Create a commit with the given message.\n *\n * @param message - Commit message.\n * @param repoRoot - Working directory for the git command.\n * @returns The short commit hash, or an empty string if parsing fails.\n * @throws {@link GitOperationError} On failure.\n */\n async commit(message: string, repoRoot: string): Promise<string> {\n const result = await this.runner.run(\"git\", [\"commit\", \"-m\", message], { cwd: repoRoot });\n\n if (result.exitCode !== 0) {\n throw new GitOperationError(\n `Failed to commit: ${result.stderr.trim()}`,\n \"Ensure there are staged changes and your git user is configured.\",\n );\n }\n\n // Extract commit hash from output\n const hashMatch = result.stdout.match(/\\[[\\w/-]+ ([a-f0-9]+)\\]/);\n return hashMatch ? hashMatch[1] : \"\";\n }\n\n /**\n * Retrieve recent commits for a specific file.\n *\n * @param filePath - Path to the file (relative to `repoRoot`).\n * @param repoRoot - Working directory for the git command.\n * @param limit - Maximum number of commits to return (default: 20).\n * @throws {@link GitOperationError} On failure.\n */\n async getLog(filePath: string, repoRoot: string, limit: number = 20): Promise<GitCommit[]> {\n const result = await this.runner.run(\n \"git\",\n [\"log\", `--max-count=${limit}`, \"--format=%H|%an|%aI|%s\", \"--\", filePath],\n { cwd: repoRoot },\n );\n\n if (result.exitCode !== 0) {\n throw new GitOperationError(\n `Failed to get git log for '${filePath}': ${result.stderr.trim()}`,\n );\n }\n\n if (!result.stdout.trim()) return [];\n\n return result.stdout\n .trim()\n .split(\"\\n\")\n .map((line) => {\n const [hash, author, dateStr, ...messageParts] = line.split(\"|\");\n return {\n hash,\n author,\n date: new Date(dateStr),\n message: messageParts.join(\"|\"),\n };\n });\n }\n\n /**\n * Get the staged diff (`git diff --cached`).\n *\n * @param repoRoot - Working directory for the git command.\n * @returns Raw diff output as a string.\n * @throws {@link GitOperationError} On failure.\n */\n async getDiff(repoRoot: string): Promise<string> {\n const result = await this.runner.run(\"git\", [\"diff\", \"--cached\"], { cwd: repoRoot });\n\n if (result.exitCode !== 0) {\n throw new GitOperationError(`Failed to get git diff: ${result.stderr.trim()}`);\n }\n\n return result.stdout;\n }\n\n /**\n * Parse `git status --porcelain` into staged, unstaged, and untracked lists.\n *\n * @param repoRoot - Working directory for the git command.\n * @throws {@link GitOperationError} On failure.\n */\n async getStatus(repoRoot: string): Promise<GitStatus> {\n const result = await this.runner.run(\"git\", [\"status\", \"--porcelain\"], { cwd: repoRoot });\n\n if (result.exitCode !== 0) {\n throw new GitOperationError(`Failed to get git status: ${result.stderr.trim()}`);\n }\n\n const staged: string[] = [];\n const unstaged: string[] = [];\n const untracked: string[] = [];\n\n if (!result.stdout.trim()) {\n return { staged, unstaged, untracked };\n }\n\n for (const line of result.stdout.trim().split(\"\\n\")) {\n const indexStatus = line[0];\n const workTreeStatus = line[1];\n const filePath = line.substring(3);\n\n if (indexStatus === \"?\") {\n untracked.push(filePath);\n } else {\n if (indexStatus !== \" \" && indexStatus !== \"?\") {\n staged.push(filePath);\n }\n if (workTreeStatus !== \" \" && workTreeStatus !== \"?\") {\n unstaged.push(filePath);\n }\n }\n }\n\n return { staged, unstaged, untracked };\n }\n\n /**\n * Configure the SOPS-aware git merge driver so that encrypted files\n * are merged at the plaintext level instead of producing ciphertext conflicts.\n *\n * Sets two things:\n * 1. `.gitattributes` \u2014 tells git which files use the custom driver.\n * 2. `.git/config [merge \"sops\"]` \u2014 tells git what command to run.\n *\n * Both operations are idempotent \u2014 safe to call repeatedly.\n *\n * @param repoRoot - Absolute path to the repository root.\n * @throws {@link GitOperationError} On failure.\n */\n async installMergeDriver(repoRoot: string): Promise<void> {\n // 1. Configure git merge driver in local config\n const configResult = await this.runner.run(\n \"git\",\n [\"config\", \"merge.sops.name\", \"SOPS-aware merge driver\"],\n { cwd: repoRoot },\n );\n if (configResult.exitCode !== 0) {\n throw new GitOperationError(\n `Failed to configure merge driver name: ${configResult.stderr.trim()}`,\n \"Ensure you are inside a git repository.\",\n );\n }\n\n const driverResult = await this.runner.run(\n \"git\",\n [\"config\", \"merge.sops.driver\", \"clef merge-driver %O %A %B\"],\n { cwd: repoRoot },\n );\n if (driverResult.exitCode !== 0) {\n throw new GitOperationError(\n `Failed to configure merge driver command: ${driverResult.stderr.trim()}`,\n \"Ensure you are inside a git repository.\",\n );\n }\n\n // 2. Ensure .gitattributes contains the rule\n await this.ensureGitattributes(repoRoot);\n }\n\n /**\n * Check whether the SOPS merge driver is configured in both\n * `.git/config` and `.gitattributes`.\n *\n * @param repoRoot - Absolute path to the repository root.\n * @returns An object indicating which parts are configured.\n */\n async checkMergeDriver(\n repoRoot: string,\n ): Promise<{ gitConfig: boolean; gitattributes: boolean }> {\n // Check git config\n const configResult = await this.runner.run(\"git\", [\"config\", \"--get\", \"merge.sops.driver\"], {\n cwd: repoRoot,\n });\n const gitConfig = configResult.exitCode === 0 && configResult.stdout.trim().length > 0;\n\n // Check .gitattributes\n const attrFilePath = path.join(repoRoot, \".gitattributes\");\n const attrContent = fs.existsSync(attrFilePath) ? fs.readFileSync(attrFilePath, \"utf-8\") : \"\";\n const gitattributes = attrContent.includes(\"merge=sops\");\n\n return { gitConfig, gitattributes };\n }\n\n private async ensureGitattributes(repoRoot: string): Promise<void> {\n const attrPath = path.join(repoRoot, \".gitattributes\");\n const mergeRule = \"*.enc.yaml merge=sops\\n*.enc.json merge=sops\";\n\n // Read existing content\n const existing = fs.existsSync(attrPath) ? fs.readFileSync(attrPath, \"utf-8\") : \"\";\n\n if (existing.includes(\"merge=sops\")) {\n return; // Already configured\n }\n\n const newContent = existing.trimEnd()\n ? `${existing.trimEnd()}\\n\\n# Clef: SOPS-aware merge driver for encrypted files\\n${mergeRule}\\n`\n : `# Clef: SOPS-aware merge driver for encrypted files\\n${mergeRule}\\n`;\n\n const writeResult = await this.runner.run(\"tee\", [attrPath], {\n stdin: newContent,\n cwd: repoRoot,\n });\n\n if (writeResult.exitCode !== 0) {\n throw new GitOperationError(`Failed to write .gitattributes: ${writeResult.stderr.trim()}`);\n }\n }\n\n /**\n * Write and chmod the Clef pre-commit hook into `.git/hooks/pre-commit`.\n * The hook blocks commits of unencrypted matrix files and scans staged files for secrets.\n *\n * @param repoRoot - Absolute path to the repository root.\n * @throws {@link GitOperationError} On failure.\n */\n async installPreCommitHook(repoRoot: string): Promise<void> {\n const hookPath = path.join(repoRoot, \".git\", \"hooks\", \"pre-commit\");\n\n // Write the hook using the subprocess runner to avoid direct fs writes in the integration\n const result = await this.runner.run(\"tee\", [hookPath], {\n stdin: PRE_COMMIT_HOOK,\n cwd: repoRoot,\n });\n\n if (result.exitCode !== 0) {\n throw new GitOperationError(\n `Failed to install pre-commit hook: ${result.stderr.trim()}`,\n \"Ensure .git/hooks/ directory exists.\",\n );\n }\n\n // Make it executable\n const chmodResult = await this.runner.run(\"chmod\", [\"+x\", hookPath], { cwd: repoRoot });\n\n if (chmodResult.exitCode !== 0) {\n throw new GitOperationError(\n `Failed to make pre-commit hook executable: ${chmodResult.stderr.trim()}`,\n );\n }\n }\n}\n", "/**\n * TIER 1 MODULE \u2014 Security and correctness critical.\n *\n * This module requires exhaustive test coverage. Before\n * adding or modifying code here:\n * 1. Add tests for the happy path\n * 2. Add tests for all documented error paths\n * 3. Add at least one boundary/edge case test\n *\n * Coverage threshold: 95% lines/functions, 90% branches.\n * See docs/contributing/testing.md for the rationale.\n */\nimport * as fs from \"fs\";\nimport * as net from \"net\";\nimport { randomBytes } from \"crypto\";\nimport * as YAML from \"yaml\";\nimport {\n ClefManifest,\n DecryptedFile,\n EncryptionBackend,\n SopsDecryptionError,\n SopsEncryptionError,\n SopsKeyNotFoundError,\n SopsMetadata,\n SubprocessRunner,\n resolveBackendConfig,\n} from \"../types\";\nimport { assertSops } from \"../dependencies/checker\";\nimport { deriveAgePublicKey } from \"../age/keygen\";\nimport { resolveSopsPath } from \"./resolver\";\n\nfunction formatFromPath(filePath: string): \"yaml\" | \"json\" {\n return filePath.endsWith(\".json\") ? \"json\" : \"yaml\";\n}\n\n/**\n * On Windows, /dev/stdin does not exist. Create a named pipe that sops can open\n * as its input file, feed the content through it, and return the pipe path.\n * The returned cleanup function closes the server once sops is done reading.\n *\n * Go's os.Open / CreateFile can open \\\\.\\pipe\\... paths directly, so sops\n * reads from the pipe exactly as it would from a regular file.\n */\nfunction openWindowsInputPipe(content: string): Promise<{ inputArg: string; cleanup: () => void }> {\n const pipeName = `\\\\\\\\.\\\\pipe\\\\clef-sops-${randomBytes(8).toString(\"hex\")}`;\n\n return new Promise((resolve, reject) => {\n const server = net.createServer((socket) => {\n // On Windows, socket.end() does not reliably signal EOF to named pipe\n // clients because libuv's uv_shutdown is a no-op for pipes. Write the\n // content and then force-destroy the socket so the pipe handle is closed,\n // which the Go client (sops) sees as ERROR_BROKEN_PIPE \u2192 io.EOF.\n socket.write(content, () => {\n socket.destroy();\n });\n });\n server.maxConnections = 1;\n server.on(\"error\", reject);\n server.listen(pipeName, () => {\n resolve({\n inputArg: pipeName,\n cleanup: () => server.close(),\n });\n });\n });\n}\n\n/**\n * Wraps the `sops` binary for encryption, decryption, re-encryption, and metadata extraction.\n * All decrypt/encrypt operations are piped via stdin/stdout \u2014 plaintext never touches disk.\n *\n * @example\n * ```ts\n * const client = new SopsClient(runner, \"/home/user/.age/key.txt\");\n * const decrypted = await client.decrypt(\"secrets/production.enc.yaml\");\n * ```\n */\nexport class SopsClient implements EncryptionBackend {\n private readonly sopsCommand: string;\n\n /**\n * @param runner - Subprocess runner used to invoke the `sops` binary.\n * @param ageKeyFile - Optional path to an age private key file. Passed as\n * `SOPS_AGE_KEY_FILE` to the subprocess environment.\n * @param ageKey - Optional inline age private key. Passed as `SOPS_AGE_KEY`\n * to the subprocess environment.\n * @param sopsPath - Optional explicit path to the sops binary. When omitted,\n * resolved automatically via {@link resolveSopsPath}.\n */\n constructor(\n private readonly runner: SubprocessRunner,\n private readonly ageKeyFile?: string,\n private readonly ageKey?: string,\n sopsPath?: string,\n ) {\n this.sopsCommand = sopsPath ?? resolveSopsPath().path;\n }\n\n private buildSopsEnv(): Record<string, string> | undefined {\n const env: Record<string, string> = {};\n if (this.ageKey) {\n env.SOPS_AGE_KEY = this.ageKey;\n }\n if (this.ageKeyFile) {\n env.SOPS_AGE_KEY_FILE = this.ageKeyFile;\n }\n return Object.keys(env).length > 0 ? env : undefined;\n }\n\n /**\n * Decrypt a SOPS-encrypted file and return its values and metadata.\n *\n * @param filePath - Path to the `.enc.yaml` or `.enc.json` file.\n * @returns {@link DecryptedFile} with plaintext values in memory only.\n * @throws {@link SopsKeyNotFoundError} If no matching decryption key is available.\n * @throws {@link SopsDecryptionError} On any other decryption failure.\n */\n async decrypt(filePath: string): Promise<DecryptedFile> {\n await assertSops(this.runner, this.sopsCommand);\n const fmt = formatFromPath(filePath);\n const env = this.buildSopsEnv();\n const result = await this.runner.run(\n this.sopsCommand,\n [\"decrypt\", \"--output-type\", fmt, filePath],\n {\n ...(env ? { env } : {}),\n },\n );\n\n if (result.exitCode !== 0) {\n const errorType = await this.classifyDecryptError(filePath);\n if (errorType === \"key-not-found\") {\n throw new SopsKeyNotFoundError(\n `No decryption key found for '${filePath}'. ${result.stderr.trim()}`,\n );\n }\n throw new SopsDecryptionError(\n `Failed to decrypt '${filePath}': ${result.stderr.trim()}`,\n filePath,\n );\n }\n\n let parsed: Record<string, unknown>;\n try {\n parsed = YAML.parse(result.stdout) ?? {};\n } catch {\n throw new SopsDecryptionError(\n `Decrypted content of '${filePath}' is not valid YAML.`,\n filePath,\n );\n }\n\n const values: Record<string, string> = {};\n for (const [key, value] of Object.entries(parsed)) {\n values[key] = String(value);\n }\n\n const metadata = await this.getMetadata(filePath);\n\n return { values, metadata };\n }\n\n /**\n * Encrypt a key/value map and write it to an encrypted SOPS file.\n *\n * @param filePath - Destination path for the encrypted file.\n * @param values - Flat key/value map to encrypt.\n * @param manifest - Manifest used to determine the encryption backend and key configuration.\n * @param environment - Optional environment name. When provided, per-env backend overrides\n * are resolved from the manifest. When omitted, the global `sops.default_backend` is used.\n * @throws {@link SopsEncryptionError} On encryption or write failure.\n */\n async encrypt(\n filePath: string,\n values: Record<string, string>,\n manifest: ClefManifest,\n environment?: string,\n ): Promise<void> {\n await assertSops(this.runner, this.sopsCommand);\n const fmt = formatFromPath(filePath);\n const content = fmt === \"json\" ? JSON.stringify(values, null, 2) : YAML.stringify(values);\n const args = this.buildEncryptArgs(filePath, manifest, environment);\n const env = this.buildSopsEnv();\n\n // sops requires an explicit input path \u2014 it does not read from stdin implicitly.\n // On Unix we pass /dev/stdin (a special file backed by the process's stdin pipe).\n // On Windows /dev/stdin does not exist, so we create a named pipe, feed content\n // through it, and pass the pipe path as the input file instead.\n let inputArg: string;\n let pipeCleanup: (() => void) | undefined;\n\n if (process.platform === \"win32\") {\n const pipe = await openWindowsInputPipe(content);\n inputArg = pipe.inputArg;\n pipeCleanup = pipe.cleanup;\n } else {\n inputArg = \"/dev/stdin\";\n }\n\n let result;\n try {\n result = await this.runner.run(\n this.sopsCommand,\n [\n \"encrypt\",\n ...args,\n \"--input-type\",\n fmt,\n \"--output-type\",\n fmt,\n \"--filename-override\",\n filePath,\n inputArg,\n ],\n {\n // stdin is still piped on Unix (/dev/stdin reads from it);\n // on Windows the named pipe server feeds content directly.\n ...(process.platform !== \"win32\" ? { stdin: content } : {}),\n ...(env ? { env } : {}),\n },\n );\n } finally {\n pipeCleanup?.();\n }\n\n if (result.exitCode !== 0) {\n throw new SopsEncryptionError(\n `Failed to encrypt '${filePath}': ${result.stderr.trim()}`,\n filePath,\n );\n }\n\n // Write the encrypted output to the file (using fs directly \u2014 tee is not available on Windows)\n try {\n fs.writeFileSync(filePath, result.stdout);\n } catch {\n throw new SopsEncryptionError(`Failed to write encrypted data to '${filePath}'.`, filePath);\n }\n }\n\n /**\n * Rotate encryption by adding a new age recipient key to an existing SOPS file.\n *\n * @param filePath - Path to the encrypted file to re-encrypt.\n * @param newKey - New age public key to add as a recipient.\n * @throws {@link SopsEncryptionError} On failure.\n */\n async reEncrypt(filePath: string, newKey: string): Promise<void> {\n await assertSops(this.runner, this.sopsCommand);\n const env = this.buildSopsEnv();\n const result = await this.runner.run(\n this.sopsCommand,\n [\"rotate\", \"-i\", \"--add-age\", newKey, filePath],\n {\n ...(env ? { env } : {}),\n },\n );\n\n if (result.exitCode !== 0) {\n throw new SopsEncryptionError(\n `Failed to re-encrypt '${filePath}': ${result.stderr.trim()}`,\n filePath,\n );\n }\n }\n\n /**\n * Add an age recipient to an existing SOPS file.\n *\n * @param filePath - Path to the encrypted file.\n * @param key - age public key to add as a recipient.\n * @throws {@link SopsEncryptionError} On failure.\n */\n async addRecipient(filePath: string, key: string): Promise<void> {\n await assertSops(this.runner, this.sopsCommand);\n const env = this.buildSopsEnv();\n const result = await this.runner.run(\n this.sopsCommand,\n [\"rotate\", \"-i\", \"--add-age\", key, filePath],\n {\n ...(env ? { env } : {}),\n },\n );\n\n if (result.exitCode !== 0) {\n throw new SopsEncryptionError(\n `Failed to add recipient to '${filePath}': ${result.stderr.trim()}`,\n filePath,\n );\n }\n }\n\n /**\n * Remove an age recipient from an existing SOPS file.\n *\n * @param filePath - Path to the encrypted file.\n * @param key - age public key to remove.\n * @throws {@link SopsEncryptionError} On failure.\n */\n async removeRecipient(filePath: string, key: string): Promise<void> {\n await assertSops(this.runner, this.sopsCommand);\n const env = this.buildSopsEnv();\n const result = await this.runner.run(\n this.sopsCommand,\n [\"rotate\", \"-i\", \"--rm-age\", key, filePath],\n {\n ...(env ? { env } : {}),\n },\n );\n\n if (result.exitCode !== 0) {\n throw new SopsEncryptionError(\n `Failed to remove recipient from '${filePath}': ${result.stderr.trim()}`,\n filePath,\n );\n }\n }\n\n /**\n * Check whether a file contains valid SOPS encryption metadata.\n *\n * @param filePath - Path to the file to check.\n * @returns `true` if valid SOPS metadata is present; `false` otherwise. Never throws.\n */\n async validateEncryption(filePath: string): Promise<boolean> {\n await assertSops(this.runner, this.sopsCommand);\n try {\n await this.getMetadata(filePath);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Extract SOPS metadata (backend, recipients, last-modified timestamp) from an encrypted file\n * without decrypting its values.\n *\n * @param filePath - Path to the encrypted file.\n * @returns {@link SopsMetadata} parsed from the file's `sops:` block.\n * @throws {@link SopsDecryptionError} If the file cannot be read or parsed.\n */\n async getMetadata(filePath: string): Promise<SopsMetadata> {\n await assertSops(this.runner, this.sopsCommand);\n const env = this.buildSopsEnv();\n const result = await this.runner.run(this.sopsCommand, [\"filestatus\", filePath], {\n ...(env ? { env } : {}),\n });\n\n // filestatus returns JSON with encrypted status; if it fails, try parsing the file directly\n if (result.exitCode !== 0) {\n // Fall back to reading SOPS metadata from the encrypted file\n return this.parseMetadataFromFile(filePath);\n }\n\n return this.parseMetadataFromFile(filePath);\n }\n\n /**\n * Determine whether a decrypt failure is caused by a missing/mismatched key (vs. some other\n * SOPS error) without relying on stderr message text.\n *\n * For age backends: reads the file's recipient list and checks whether any of the configured\n * private keys derive to a matching public key. For non-age backends (pgp, kms) we cannot\n * perform an equivalent check, so those always return \"other\".\n */\n private async classifyDecryptError(filePath: string): Promise<\"key-not-found\" | \"other\"> {\n let metadata: SopsMetadata;\n try {\n metadata = this.parseMetadataFromFile(filePath);\n } catch {\n return \"other\";\n }\n\n if (metadata.backend !== \"age\") return \"other\";\n\n // No age key configured at all\n if (!this.ageKey && !this.ageKeyFile) return \"key-not-found\";\n\n // Obtain the private key material from the constructor params\n let keyContent: string;\n try {\n keyContent = this.ageKey ?? fs.readFileSync(this.ageKeyFile!, \"utf-8\");\n } catch {\n return \"key-not-found\";\n }\n\n // Key files may contain multiple AGE-SECRET-KEY-1... lines (plus comments/blank lines)\n const privateKeys = keyContent\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter((line) => line.startsWith(\"AGE-SECRET-KEY-\"));\n\n if (privateKeys.length === 0) return \"key-not-found\";\n\n try {\n const publicKeys = await Promise.all(privateKeys.map((k) => deriveAgePublicKey(k)));\n const recipients = new Set(metadata.recipients);\n return publicKeys.some((pk) => recipients.has(pk)) ? \"other\" : \"key-not-found\";\n } catch {\n return \"other\";\n }\n }\n\n private parseMetadataFromFile(filePath: string): SopsMetadata {\n let content: string;\n try {\n content = fs.readFileSync(filePath, \"utf-8\");\n } catch {\n throw new SopsDecryptionError(\n `Could not read file '${filePath}' to extract SOPS metadata.`,\n filePath,\n );\n }\n\n let parsed: Record<string, unknown>;\n try {\n parsed = YAML.parse(content);\n } catch {\n throw new SopsDecryptionError(\n `File '${filePath}' is not valid YAML. Cannot extract SOPS metadata.`,\n filePath,\n );\n }\n\n const sops = parsed?.sops as Record<string, unknown> | undefined;\n if (!sops) {\n throw new SopsDecryptionError(\n `File '${filePath}' does not contain SOPS metadata. It may not be encrypted.`,\n filePath,\n );\n }\n\n const backend = this.detectBackend(sops);\n const recipients = this.extractRecipients(sops, backend);\n const lastModified = sops.lastmodified ? new Date(sops.lastmodified as string) : new Date();\n\n return { backend, recipients, lastModified };\n }\n\n private detectBackend(\n sops: Record<string, unknown>,\n ): \"age\" | \"awskms\" | \"gcpkms\" | \"azurekv\" | \"pgp\" {\n if (sops.age && Array.isArray(sops.age) && (sops.age as unknown[]).length > 0) return \"age\";\n if (sops.kms && Array.isArray(sops.kms) && (sops.kms as unknown[]).length > 0) return \"awskms\";\n if (sops.gcp_kms && Array.isArray(sops.gcp_kms) && (sops.gcp_kms as unknown[]).length > 0)\n return \"gcpkms\";\n if (sops.azure_kv && Array.isArray(sops.azure_kv) && (sops.azure_kv as unknown[]).length > 0)\n return \"azurekv\";\n if (sops.pgp && Array.isArray(sops.pgp) && (sops.pgp as unknown[]).length > 0) return \"pgp\";\n return \"age\"; // Interpretation: default to age when metadata is ambiguous\n }\n\n private extractRecipients(\n sops: Record<string, unknown>,\n backend: \"age\" | \"awskms\" | \"gcpkms\" | \"azurekv\" | \"pgp\",\n ): string[] {\n switch (backend) {\n case \"age\": {\n const entries = sops.age as Array<Record<string, unknown>> | undefined;\n return entries?.map((e) => String(e.recipient ?? \"\")) ?? [];\n }\n case \"awskms\": {\n const entries = sops.kms as Array<Record<string, unknown>> | undefined;\n return entries?.map((e) => String(e.arn ?? \"\")) ?? [];\n }\n case \"gcpkms\": {\n const entries = sops.gcp_kms as Array<Record<string, unknown>> | undefined;\n return entries?.map((e) => String(e.resource_id ?? \"\")) ?? [];\n }\n case \"azurekv\": {\n const entries = sops.azure_kv as Array<Record<string, unknown>> | undefined;\n return (\n entries?.map((e) => {\n const vaultUrl = String(e.vaultUrl ?? e.vault_url ?? \"\");\n const name = String(e.name ?? e.key ?? \"\");\n // Return the composite Key Vault key identifier\n return vaultUrl && name ? `${vaultUrl}/keys/${name}` : vaultUrl || name;\n }) ?? []\n );\n }\n case \"pgp\": {\n const entries = sops.pgp as Array<Record<string, unknown>> | undefined;\n return entries?.map((e) => String(e.fp ?? \"\")) ?? [];\n }\n }\n }\n\n private buildEncryptArgs(\n filePath: string,\n manifest: ClefManifest,\n environment?: string,\n ): string[] {\n const args: string[] = [];\n\n const config = environment\n ? resolveBackendConfig(manifest, environment)\n : {\n backend: manifest.sops.default_backend,\n aws_kms_arn: manifest.sops.aws_kms_arn,\n gcp_kms_resource_id: manifest.sops.gcp_kms_resource_id,\n azure_kv_url: manifest.sops.azure_kv_url,\n pgp_fingerprint: manifest.sops.pgp_fingerprint,\n };\n\n switch (config.backend) {\n case \"age\":\n // Key injection is handled via buildSopsEnv() \u2014 no extra args needed here\n break;\n case \"awskms\":\n if (config.aws_kms_arn) {\n args.push(\"--kms\", config.aws_kms_arn);\n }\n break;\n case \"gcpkms\":\n if (config.gcp_kms_resource_id) {\n args.push(\"--gcp-kms\", config.gcp_kms_resource_id);\n }\n break;\n case \"azurekv\":\n if (config.azure_kv_url) {\n args.push(\"--azure-kv\", config.azure_kv_url);\n }\n break;\n case \"pgp\":\n if (config.pgp_fingerprint) {\n args.push(\"--pgp\", config.pgp_fingerprint);\n }\n break;\n }\n\n return args;\n }\n}\n", "/**\n * Resolves the path to the `sops` binary using a three-tier resolution chain:\n *\n * 1. `CLEF_SOPS_PATH` environment variable (explicit user override)\n * 2. Bundled platform-specific package (`@clef-sh/sops-{os}-{arch}`)\n * 3. System PATH fallback (bare `\"sops\"` command name)\n *\n * The result is cached after the first call \u2014 subsequent calls return the\n * same resolution without re-probing the filesystem.\n */\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport { tryBundled } from \"./bundled\";\n\nfunction validateSopsPath(candidate: string): void {\n if (!path.isAbsolute(candidate)) {\n throw new Error(`CLEF_SOPS_PATH must be an absolute path, got '${candidate}'.`);\n }\n const segments = candidate.split(/[/\\\\]/);\n if (segments.includes(\"..\")) {\n throw new Error(\n `CLEF_SOPS_PATH contains '..' path segments ('${candidate}'). ` +\n \"Use an absolute path without directory traversal.\",\n );\n }\n}\n\nexport type SopsSource = \"env\" | \"bundled\" | \"system\";\n\nexport interface SopsResolution {\n /** Absolute path to the sops binary, or \"sops\" for system PATH fallback. */\n path: string;\n /** How the binary was located. */\n source: SopsSource;\n}\n\nlet cached: SopsResolution | undefined;\n\n/**\n * Resolve the sops binary path.\n *\n * Resolution order:\n * 1. `CLEF_SOPS_PATH` env var \u2014 explicit override, used as-is\n * 2. Bundled `@clef-sh/sops-{platform}-{arch}` package\n * 3. System PATH fallback \u2014 returns bare `\"sops\"`\n *\n * The result is cached module-wide. Call {@link resetSopsResolution} in tests\n * to clear the cache.\n */\nexport function resolveSopsPath(): SopsResolution {\n if (cached) return cached;\n\n // 1. Explicit environment override\n const envPath = process.env.CLEF_SOPS_PATH?.trim();\n if (envPath) {\n validateSopsPath(envPath);\n if (!fs.existsSync(envPath)) {\n throw new Error(`CLEF_SOPS_PATH points to '${envPath}' but the file does not exist.`);\n }\n cached = { path: envPath, source: \"env\" };\n return cached;\n }\n\n // 2. Bundled platform package\n const bundledPath = tryBundled();\n if (bundledPath) {\n cached = { path: bundledPath, source: \"bundled\" };\n return cached;\n }\n\n // 3. System PATH fallback\n cached = { path: \"sops\", source: \"system\" };\n return cached;\n}\n\n/**\n * Clear the cached resolution. Only intended for use in tests.\n */\nexport function resetSopsResolution(): void {\n cached = undefined;\n}\n", "/**\n * Locates the bundled sops binary from the platform-specific npm package.\n * Extracted into its own module for testability \u2014 the resolver imports this\n * so tests can mock it without overriding require.resolve.\n */\nimport * as fs from \"fs\";\nimport * as path from \"path\";\n\n/**\n * Try to locate the bundled sops binary from the platform-specific npm package.\n * Returns the resolved path or null if the package is not installed.\n */\nexport function tryBundled(): string | null {\n const platform = process.platform;\n const arch = process.arch;\n\n // Map Node.js arch names to our package names\n const archName = arch === \"x64\" ? \"x64\" : arch === \"arm64\" ? \"arm64\" : null;\n if (!archName) return null;\n\n // Map Node.js platform names to our package names\n const platformName =\n platform === \"darwin\"\n ? \"darwin\"\n : platform === \"linux\"\n ? \"linux\"\n : platform === \"win32\"\n ? \"win32\"\n : null;\n if (!platformName) return null;\n\n const packageName = `@clef-sh/sops-${platformName}-${archName}`;\n const binName = platform === \"win32\" ? \"sops.exe\" : \"sops\";\n\n try {\n // Use createRequire to resolve the platform package.\n const packageMain = require.resolve(`${packageName}/package.json`);\n const packageDir = path.dirname(packageMain);\n const binPath = path.join(packageDir, \"bin\", binName);\n return fs.existsSync(binPath) ? binPath : null;\n } catch {\n return null;\n }\n}\n", "import {\n DependencyStatus,\n DependencyVersion,\n SopsMissingError,\n SopsVersionError,\n SubprocessRunner,\n} from \"../types\";\nimport { resolveSopsPath } from \"../sops/resolver\";\n\n// Minimum versions \u2014 update .github/workflows/ci.yml when these change\nexport const REQUIREMENTS = {\n sops: \"3.8.0\",\n git: \"2.28.0\",\n} as const;\n\n/**\n * Parse a version string like \"3.8.1\" into [major, minor, patch].\n * Returns null if the string is not a valid semver-like version.\n */\nfunction parseSemver(version: string): [number, number, number] | null {\n const match = version.match(/^(\\d+)\\.(\\d+)\\.(\\d+)/);\n if (!match) return null;\n return [parseInt(match[1], 10), parseInt(match[2], 10), parseInt(match[3], 10)];\n}\n\n/**\n * Returns true if `installed` >= `required` using semver comparison.\n */\nfunction semverSatisfied(installed: string, required: string): boolean {\n const a = parseSemver(installed);\n const b = parseSemver(required);\n if (!a || !b) return false;\n\n if (a[0] !== b[0]) return a[0] > b[0];\n if (a[1] !== b[1]) return a[1] > b[1];\n return a[2] >= b[2];\n}\n\n/**\n * Extract version from sops output.\n * Format: \"sops 3.8.1 (latest)\" or \"sops 3.9.4\"\n */\nfunction parseSopsVersion(stdout: string): string | null {\n const match = stdout.match(/sops\\s+(\\d+\\.\\d+\\.\\d+)/);\n return match ? match[1] : null;\n}\n\n/**\n * Extract version from git output.\n * Format: \"git version 2.43.0\" or \"git version 2.50.1 (Apple Git-155)\"\n */\nfunction parseGitVersion(stdout: string): string | null {\n const match = stdout.match(/git version\\s+(\\d+\\.\\d+\\.\\d+)/);\n return match ? match[1] : null;\n}\n\n/**\n * Get the platform-appropriate install hint for a binary.\n */\nfunction getInstallHint(name: \"sops\" | \"git\"): string {\n const platform = process.platform;\n\n switch (name) {\n case \"sops\":\n if (platform === \"darwin\") return \"brew install sops\";\n return \"see https://github.com/getsops/sops/releases\";\n case \"git\":\n if (platform === \"darwin\") return \"brew install git\";\n if (platform === \"linux\") return \"apt install git\";\n return \"see https://git-scm.com/downloads\";\n }\n}\n\n/**\n * Check a single dependency. Returns null if the binary is not found.\n * Never throws.\n */\nexport async function checkDependency(\n name: \"sops\" | \"git\",\n runner: SubprocessRunner,\n commandOverride?: string,\n): Promise<DependencyVersion | null> {\n try {\n // For sops, use the resolver to find the binary path (unless overridden)\n const resolution = name === \"sops\" && !commandOverride ? resolveSopsPath() : undefined;\n const command = commandOverride ?? (resolution ? resolution.path : name);\n\n const result = await runner.run(command, [\"--version\"]);\n\n if (result.exitCode !== 0) {\n return null;\n }\n\n const output = result.stdout.trim() || result.stderr.trim();\n let installed: string | null = null;\n\n switch (name) {\n case \"sops\":\n installed = parseSopsVersion(output);\n break;\n case \"git\":\n installed = parseGitVersion(output);\n break;\n }\n\n if (!installed) {\n return null;\n }\n\n const required = REQUIREMENTS[name];\n return {\n installed,\n required,\n satisfied: semverSatisfied(installed, required),\n installHint: getInstallHint(name),\n source: resolution?.source,\n resolvedPath: resolution?.path,\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Check sops and git dependencies in parallel.\n */\nexport async function checkAll(runner: SubprocessRunner): Promise<DependencyStatus> {\n const [sops, git] = await Promise.all([\n checkDependency(\"sops\", runner),\n checkDependency(\"git\", runner),\n ]);\n\n return { sops, git };\n}\n\n/**\n * Assert that sops is installed and meets the minimum version.\n * Throws SopsMissingError or SopsVersionError.\n */\nexport async function assertSops(runner: SubprocessRunner, command?: string): Promise<void> {\n const dep = await checkDependency(\"sops\", runner, command);\n\n if (!dep) {\n throw new SopsMissingError(getInstallHint(\"sops\"));\n }\n\n if (!dep.satisfied) {\n throw new SopsVersionError(dep.installed, dep.required, getInstallHint(\"sops\"));\n }\n}\n\n// Exported for testing\nexport { parseSopsVersion, parseGitVersion, semverSatisfied };\n", "/**\n * age key generation using the age-encryption npm package.\n * Dynamic import() is required: age-encryption is ESM-only; this package compiles to CJS.\n */\n\nexport interface AgeIdentity {\n /** AGE-SECRET-KEY-1... armored private key string */\n privateKey: string;\n /** age1... bech32 public key string */\n publicKey: string;\n}\n\n/**\n * Generate a new age key pair using the `age-encryption` npm package.\n *\n * @returns Private key (`AGE-SECRET-KEY-1...` format) and derived public key (`age1...` bech32 format).\n */\nexport async function generateAgeIdentity(): Promise<AgeIdentity> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- dynamic ESM import of CJS-incompatible package\n const { generateIdentity, identityToRecipient } = await import(\"age-encryption\" as any);\n const privateKey = (await generateIdentity()) as string;\n const publicKey = (await identityToRecipient(privateKey)) as string;\n return { privateKey, publicKey };\n}\n\n/**\n * Derive the age public key (`age1...`) from an existing private key (`AGE-SECRET-KEY-1...`).\n */\nexport async function deriveAgePublicKey(privateKey: string): Promise<string> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- dynamic ESM import of CJS-incompatible package\n const { identityToRecipient } = await import(\"age-encryption\" as any);\n return (await identityToRecipient(privateKey)) as string;\n}\n\n/**\n * Format an age private key and public key into the standard key file format.\n * The output includes a `created` timestamp comment and is ready to write to disk.\n *\n * @param privateKey - `AGE-SECRET-KEY-1...` armored private key string.\n * @param publicKey - `age1...` bech32 public key string.\n */\nexport function formatAgeKeyFile(privateKey: string, publicKey: string): string {\n const now = new Date().toISOString();\n return `# created: ${now}\\n# public key: ${publicKey}\\n${privateKey}\\n`;\n}\n", "import * as path from \"path\";\nimport {\n ClefManifest,\n LintIssue,\n LintResult,\n resolveRecipientsForEnvironment,\n ServiceIdentityDefinition,\n} from \"../types\";\nimport { MatrixManager } from \"../matrix/manager\";\nimport { SchemaValidator } from \"../schema/validator\";\nimport { EncryptionBackend } from \"../types\";\nimport { getPendingKeys } from \"../pending/metadata\";\n\n/**\n * Runs matrix completeness, schema validation, SOPS integrity, and key-drift checks.\n *\n * @example\n * ```ts\n * const runner = new LintRunner(matrixManager, schemaValidator, sopsClient);\n * const result = await runner.run(manifest, repoRoot);\n * ```\n */\nexport class LintRunner {\n constructor(\n private readonly matrixManager: MatrixManager,\n private readonly schemaValidator: SchemaValidator,\n private readonly sopsClient: EncryptionBackend,\n ) {}\n\n /**\n * Lint the entire matrix: check missing files, schema errors, SOPS integrity,\n * single-recipient warnings, and cross-environment key drift.\n *\n * @param manifest - Parsed manifest.\n * @param repoRoot - Absolute path to the repository root.\n */\n async run(manifest: ClefManifest, repoRoot: string): Promise<LintResult> {\n const issues: LintIssue[] = [];\n const cells = this.matrixManager.resolveMatrix(manifest, repoRoot);\n let fileCount = 0;\n let pendingCount = 0;\n\n // Category 1: Matrix completeness\n const missingCells = cells.filter((c) => !c.exists);\n for (const cell of missingCells) {\n issues.push({\n severity: \"error\",\n category: \"matrix\",\n file: cell.filePath,\n message: `Missing encrypted file for ${cell.namespace}/${cell.environment}.`,\n fixCommand: `clef init`,\n });\n }\n\n const existingCells = cells.filter((c) => c.exists);\n fileCount = existingCells.length;\n\n // Build a map of keys per namespace to detect cross-env drift\n const namespaceKeys: Record<string, Record<string, Set<string>>> = {};\n\n for (const cell of existingCells) {\n // Category 3: SOPS integrity\n try {\n const isValid = await this.sopsClient.validateEncryption(cell.filePath);\n if (!isValid) {\n issues.push({\n severity: \"error\",\n category: \"sops\",\n file: cell.filePath,\n message: `File is missing valid SOPS encryption metadata.`,\n fixCommand: `sops encrypt -i ${cell.filePath}`,\n });\n continue;\n }\n } catch {\n issues.push({\n severity: \"error\",\n category: \"sops\",\n file: cell.filePath,\n message: `Could not validate SOPS metadata. The file may be corrupted.`,\n });\n continue;\n }\n\n // Decrypt for schema and key-drift checks\n try {\n const decrypted = await this.sopsClient.decrypt(cell.filePath);\n const keys = Object.keys(decrypted.values);\n\n // Track keys per namespace/environment\n if (!namespaceKeys[cell.namespace]) {\n namespaceKeys[cell.namespace] = {};\n }\n namespaceKeys[cell.namespace][cell.environment] = new Set(keys);\n\n // Check SOPS metadata for single-recipient warning\n if (decrypted.metadata.recipients.length <= 1) {\n issues.push({\n severity: \"info\",\n category: \"sops\",\n file: cell.filePath,\n message: `File is encrypted with only ${decrypted.metadata.recipients.length} recipient(s). Consider adding a backup key.`,\n });\n }\n\n // Per-environment recipient drift check\n const envRecipients = resolveRecipientsForEnvironment(manifest, cell.environment);\n if (envRecipients) {\n const expectedKeys = new Set(\n envRecipients.map((r) => (typeof r === \"string\" ? r : r.key)),\n );\n const actualKeys = new Set(decrypted.metadata.recipients);\n for (const expected of expectedKeys) {\n if (!actualKeys.has(expected)) {\n issues.push({\n severity: \"warning\",\n category: \"sops\",\n file: cell.filePath,\n message: `Expected recipient '${expected.slice(0, 4)}\u2026${expected.slice(-8)}' is missing from encrypted file.`,\n fixCommand: `clef recipients add ${expected} -e ${cell.environment}`,\n });\n }\n }\n for (const actual of actualKeys) {\n if (!expectedKeys.has(actual)) {\n issues.push({\n severity: \"warning\",\n category: \"sops\",\n file: cell.filePath,\n message: `Unexpected recipient '${actual.slice(0, 4)}\u2026${actual.slice(-8)}' found in encrypted file.`,\n fixCommand: `clef recipients remove ${actual} -e ${cell.environment}`,\n });\n }\n }\n }\n\n // Category 2: Schema validation\n const ns = manifest.namespaces.find((n) => n.name === cell.namespace);\n if (ns?.schema) {\n const schemaPath = path.join(repoRoot, ns.schema);\n try {\n const schema = this.schemaValidator.loadSchema(schemaPath);\n const result = this.schemaValidator.validate(decrypted.values, schema);\n\n for (const err of result.errors) {\n issues.push({\n severity: \"error\",\n category: \"schema\",\n file: cell.filePath,\n key: err.key,\n message: err.message,\n fixCommand: `clef set ${cell.namespace}/${cell.environment} ${err.key} <value>`,\n });\n }\n\n for (const warn of result.warnings) {\n issues.push({\n severity: \"warning\",\n category: \"schema\",\n file: cell.filePath,\n key: warn.key,\n message: warn.message,\n });\n }\n } catch {\n issues.push({\n severity: \"warning\",\n category: \"schema\",\n file: cell.filePath,\n message: `Could not load schema '${ns.schema}' for validation.`,\n });\n }\n } else {\n // No schema \u2014 flag keys with no schema as info\n for (const key of keys) {\n issues.push({\n severity: \"info\",\n category: \"schema\",\n file: cell.filePath,\n key,\n message: `Key '${key}' has no schema definition. Consider adding a schema for namespace '${cell.namespace}'.`,\n });\n }\n }\n\n // Check for pending keys\n try {\n const pendingKeys = await getPendingKeys(cell.filePath);\n pendingCount += pendingKeys.length;\n for (const pendingKey of pendingKeys) {\n issues.push({\n severity: \"warning\",\n category: \"schema\",\n file: cell.filePath,\n key: pendingKey,\n message: `Value is a random placeholder \\u2014 replace with the real secret.`,\n fixCommand: `clef set ${cell.namespace}/${cell.environment} ${pendingKey}`,\n });\n }\n } catch {\n // Metadata unreadable \u2014 skip pending check\n }\n } catch {\n issues.push({\n severity: \"error\",\n category: \"sops\",\n file: cell.filePath,\n message: `Failed to decrypt file. Ensure you have the correct decryption key.`,\n });\n }\n }\n\n // Detect cross-environment key drift\n for (const [nsName, envKeys] of Object.entries(namespaceKeys)) {\n const allKeys = new Set<string>();\n for (const keys of Object.values(envKeys)) {\n for (const k of keys) allKeys.add(k);\n }\n\n for (const [envName, keys] of Object.entries(envKeys)) {\n for (const key of allKeys) {\n if (!keys.has(key)) {\n const presentIn = Object.entries(envKeys)\n .filter(([, ks]) => ks.has(key))\n .map(([e]) => e);\n const cell = existingCells.find(\n (c) => c.namespace === nsName && c.environment === envName,\n );\n if (cell) {\n issues.push({\n severity: \"warning\",\n category: \"matrix\",\n file: cell.filePath,\n key,\n message: `Key '${key}' is missing in ${envName} but present in ${presentIn.join(\", \")}.`,\n fixCommand: `clef set ${nsName}/${envName} ${key} <value>`,\n });\n }\n }\n }\n }\n }\n\n // Service identity drift checks\n if (manifest.service_identities && manifest.service_identities.length > 0) {\n const siIssues = await this.lintServiceIdentities(\n manifest.service_identities,\n manifest,\n repoRoot,\n existingCells,\n );\n issues.push(...siIssues);\n }\n\n return { issues, fileCount: fileCount + missingCells.length, pendingCount };\n }\n\n /**\n * Lint service identity configurations for drift issues.\n */\n private async lintServiceIdentities(\n identities: ServiceIdentityDefinition[],\n manifest: ClefManifest,\n repoRoot: string,\n existingCells: { namespace: string; environment: string; filePath: string }[],\n ): Promise<LintIssue[]> {\n const issues: LintIssue[] = [];\n const declaredEnvNames = new Set(manifest.environments.map((e) => e.name));\n const declaredNsNames = new Set(manifest.namespaces.map((ns) => ns.name));\n\n for (const si of identities) {\n // Namespace references\n for (const ns of si.namespaces) {\n if (!declaredNsNames.has(ns)) {\n issues.push({\n severity: \"error\",\n category: \"service-identity\",\n file: \"clef.yaml\",\n message: `Service identity '${si.name}' references non-existent namespace '${ns}'.`,\n });\n }\n }\n\n // Environment coverage\n for (const envName of declaredEnvNames) {\n if (!(envName in si.environments)) {\n issues.push({\n severity: \"error\",\n category: \"service-identity\",\n file: \"clef.yaml\",\n message: `Service identity '${si.name}' is missing environment '${envName}'. Manually add an age key pair for this environment in clef.yaml.`,\n });\n }\n }\n\n // Recipient registration on scoped files\n // (KMS-backed environments skip recipient checks)\n for (const cell of existingCells) {\n const envConfig = si.environments[cell.environment];\n if (!envConfig) continue;\n if (!envConfig.recipient) continue;\n\n if (si.namespaces.includes(cell.namespace)) {\n try {\n const metadata = await this.sopsClient.getMetadata(cell.filePath);\n if (!metadata.recipients.includes(envConfig.recipient)) {\n issues.push({\n severity: \"warning\",\n category: \"service-identity\",\n file: cell.filePath,\n message: `Service identity '${si.name}' recipient is not registered in ${cell.namespace}/${cell.environment}.`,\n fixCommand: `clef service create ${si.name} --namespaces ${si.namespaces.join(\",\")}`,\n });\n }\n } catch {\n // Cannot read metadata \u2014 skip\n }\n } else {\n try {\n const metadata = await this.sopsClient.getMetadata(cell.filePath);\n if (metadata.recipients.includes(envConfig.recipient)) {\n issues.push({\n severity: \"warning\",\n category: \"service-identity\",\n file: cell.filePath,\n message: `Service identity '${si.name}' recipient found in ${cell.namespace}/${cell.environment} but namespace is not in scope.`,\n fixCommand: `clef recipients remove ${envConfig.recipient} -e ${cell.environment}`,\n });\n }\n } catch {\n // Cannot read metadata \u2014 skip\n }\n }\n }\n }\n\n return issues;\n }\n\n /**\n * Auto-fix safe issues (scaffold missing matrix files), then re-run lint.\n *\n * @param manifest - Parsed manifest.\n * @param repoRoot - Absolute path to the repository root.\n */\n async fix(manifest: ClefManifest, repoRoot: string): Promise<LintResult> {\n // Auto-fix safe issues: scaffold missing files\n const missingCells = this.matrixManager.detectMissingCells(manifest, repoRoot);\n\n for (const cell of missingCells) {\n await this.matrixManager.scaffoldCell(cell, this.sopsClient, manifest);\n }\n\n // Re-run lint after fixes\n return this.run(manifest, repoRoot);\n }\n}\n", "import { DecryptedFile, ExecOptions, ExportOptions } from \"../types\";\n\n/**\n * Prepares decrypted secrets for consumption via environment injection or shell export.\n *\n * @example\n * ```ts\n * const client = new ConsumptionClient();\n * const env = client.prepareEnvironment(decrypted, process.env, { prefix: \"APP_\" });\n * ```\n */\nexport class ConsumptionClient {\n /**\n * Merges decrypted values into a base environment, respecting --only, --prefix, and --no-override.\n * Returns a new environment record suitable for child_process.spawn.\n */\n prepareEnvironment(\n decryptedFile: DecryptedFile,\n baseEnv: Record<string, string | undefined>,\n options: ExecOptions = {},\n ): Record<string, string> {\n const result: Record<string, string> = {};\n\n // Copy base environment\n for (const [k, v] of Object.entries(baseEnv)) {\n if (v !== undefined) {\n result[k] = v;\n }\n }\n\n let entries = Object.entries(decryptedFile.values);\n\n // --only: filter to specified keys\n if (options.only && options.only.length > 0) {\n const allowed = new Set(options.only);\n entries = entries.filter(([key]) => allowed.has(key));\n }\n\n // Inject values with optional prefix\n for (const [key, value] of entries) {\n const envKey = options.prefix ? `${options.prefix}${key}` : key;\n\n // --no-override: skip keys that already exist in the base environment\n if (options.noOverride && envKey in result) {\n continue;\n }\n\n result[envKey] = value;\n }\n\n return result;\n }\n\n /**\n * Formats decrypted values for stdout output.\n * Values are single-quoted; embedded single quotes are escaped as '\\''.\n */\n formatExport(\n decryptedFile: DecryptedFile,\n format: ExportOptions[\"format\"],\n noExport: boolean,\n ): string {\n if (format !== \"env\") {\n throw new Error(\n `Unsupported export format '${format}'. Only 'env' is supported.\\n` +\n \"Clef does not support formats that encourage writing plaintext secrets to disk.\\n\" +\n \"Use 'clef exec' to inject secrets directly into a process, or 'clef export --format env' to print shell export statements to stdout.\",\n );\n }\n\n const lines: string[] = [];\n const prefix = noExport ? \"\" : \"export \";\n\n for (const [key, value] of Object.entries(decryptedFile.values)) {\n // Single-quote the value; escape embedded single quotes as '\\''\n const escaped = value.replace(/'/g, \"'\\\\''\");\n lines.push(`${prefix}${key}='${escaped}'`);\n }\n\n return lines.join(\"\\n\") + \"\\n\";\n }\n}\n", "import * as path from \"path\";\nimport { ClefManifest } from \"../types\";\nimport { EncryptionBackend } from \"../types\";\nimport { parse, ImportFormat } from \"./parsers\";\nexport type { ImportFormat, ParsedImport } from \"./parsers\";\n\nexport interface ImportOptions {\n format?: ImportFormat;\n prefix?: string;\n keys?: string[];\n overwrite?: boolean;\n dryRun?: boolean;\n stdin?: boolean;\n}\n\nexport interface ImportResult {\n imported: string[];\n skipped: string[];\n failed: Array<{ key: string; error: string }>;\n warnings: string[];\n dryRun: boolean;\n}\n\n/**\n * Imports secrets from `.env`, JSON, or YAML files into encrypted matrix cells.\n *\n * @example\n * ```ts\n * const runner = new ImportRunner(sopsClient);\n * const result = await runner.import(\"app/staging\", null, envContent, manifest, repoRoot, { format: \"dotenv\" });\n * ```\n */\nexport class ImportRunner {\n constructor(private readonly sopsClient: EncryptionBackend) {}\n\n /**\n * Parse a source file and import its key/value pairs into a target `namespace/environment` cell.\n *\n * @param target - Target cell in `namespace/environment` format.\n * @param sourcePath - Source file path used for format detection (pass `null` when reading from stdin).\n * @param content - Raw file content to import.\n * @param manifest - Parsed manifest.\n * @param repoRoot - Absolute path to the repository root.\n * @param options - Import options (format, prefix, key filter, overwrite, dry-run).\n */\n async import(\n target: string,\n sourcePath: string | null,\n content: string,\n manifest: ClefManifest,\n repoRoot: string,\n options: ImportOptions,\n ): Promise<ImportResult> {\n const [ns, env] = target.split(\"/\");\n const filePath = path.join(\n repoRoot,\n manifest.file_pattern.replace(\"{namespace}\", ns).replace(\"{environment}\", env),\n );\n\n // Parse content\n const parsed = parse(content, options.format ?? \"auto\", sourcePath ?? \"\");\n\n // Build candidate key/value pairs\n let candidates = Object.entries(parsed.pairs);\n\n // Apply prefix filter\n if (options.prefix) {\n const prefix = options.prefix;\n candidates = candidates.filter(([key]) => key.startsWith(prefix));\n }\n\n // Apply keys filter\n if (options.keys && options.keys.length > 0) {\n const keySet = new Set(options.keys);\n candidates = candidates.filter(([key]) => keySet.has(key));\n }\n\n const imported: string[] = [];\n const skipped: string[] = [];\n const failed: Array<{ key: string; error: string }> = [];\n const warnings = [...parsed.warnings];\n\n if (options.dryRun) {\n // Dry run: check existing keys but never call encrypt\n let existingKeys: Set<string>;\n try {\n const decrypted = await this.sopsClient.decrypt(filePath);\n existingKeys = new Set(Object.keys(decrypted.values));\n } catch {\n // File may not exist or be inaccessible \u2014 treat as empty\n existingKeys = new Set<string>();\n }\n\n for (const [key] of candidates) {\n if (existingKeys.has(key) && !options.overwrite) {\n skipped.push(key);\n } else {\n imported.push(key);\n }\n }\n\n return { imported, skipped, failed, warnings, dryRun: true };\n }\n\n // Real import\n const decrypted = await this.sopsClient.decrypt(filePath);\n let currentValues: Record<string, string> = { ...decrypted.values };\n const existingKeys = new Set(Object.keys(decrypted.values));\n\n for (const [key, value] of candidates) {\n if (existingKeys.has(key) && !options.overwrite) {\n skipped.push(key);\n continue;\n }\n\n try {\n const newValues = { ...currentValues, [key]: value };\n await this.sopsClient.encrypt(filePath, newValues, manifest, env);\n currentValues = newValues;\n imported.push(key);\n } catch (err) {\n const message = err instanceof Error ? err.message : \"Encryption failed\";\n failed.push({ key, error: message });\n // Do NOT update currentValues, do NOT rollback previous encrypts. Continue with rest.\n }\n }\n\n return { imported, skipped, failed, warnings, dryRun: false };\n }\n}\n", "import * as path from \"path\";\nimport * as YAML from \"yaml\";\n\nexport type ImportFormat = \"dotenv\" | \"json\" | \"yaml\" | \"auto\";\n\nexport interface ParsedImport {\n pairs: Record<string, string>;\n format: Exclude<ImportFormat, \"auto\">;\n skipped: string[];\n warnings: string[];\n}\n\n/**\n * Auto-detect the format of a file from its extension, basename, and content heuristics.\n *\n * @param filePath - File path used for extension and basename detection.\n * @param content - Raw file content used as a fallback heuristic.\n * @returns Detected format (`\"dotenv\"`, `\"json\"`, or `\"yaml\"`).\n */\nexport function detectFormat(filePath: string, content: string): Exclude<ImportFormat, \"auto\"> {\n const base = path.basename(filePath);\n const ext = path.extname(filePath).toLowerCase();\n\n // basename is \".env\" or starts with \".env.\"\n if (base === \".env\" || base.startsWith(\".env.\")) {\n return \"dotenv\";\n }\n\n // ends with \".env\"\n if (base.endsWith(\".env\")) {\n return \"dotenv\";\n }\n\n // extension-based\n if (ext === \".json\") return \"json\";\n if (ext === \".yaml\" || ext === \".yml\") return \"yaml\";\n\n // content heuristics\n const trimmed = content.trimStart();\n if (trimmed.startsWith(\"{\")) {\n return \"json\";\n }\n\n // try JSON.parse \u2014 if it's a non-array object, it's JSON\n try {\n const parsed = JSON.parse(content);\n if (parsed !== null && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n return \"json\";\n }\n } catch {\n // not JSON\n }\n\n // try YAML.parse \u2014 if it's a non-array object, it's YAML\n try {\n const parsed = YAML.parse(content);\n if (parsed !== null && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n return \"yaml\";\n }\n } catch {\n // not YAML\n }\n\n // fallback\n return \"dotenv\";\n}\n\n/**\n * Parse dotenv-formatted content into flat key/value pairs.\n * Supports `export KEY=VALUE`, inline comments, and both single- and double-quoted values.\n */\nexport function parseDotenv(content: string): ParsedImport {\n const pairs: Record<string, string> = {};\n const skipped: string[] = [];\n const warnings: string[] = [];\n\n const lines = content.split(\"\\n\");\n for (const rawLine of lines) {\n let line = rawLine.trim();\n\n // Skip blank lines and comments\n if (!line || line.startsWith(\"#\")) {\n continue;\n }\n\n // Strip \"export \" prefix\n if (line.startsWith(\"export \")) {\n line = line.slice(7);\n }\n\n // Must have KEY=VALUE format\n const eqIdx = line.indexOf(\"=\");\n if (eqIdx === -1) {\n continue;\n }\n\n const key = line.slice(0, eqIdx).trim();\n if (!key) {\n continue;\n }\n\n let value = line.slice(eqIdx + 1);\n\n // Strip inline comments: everything after \" #\" (space-hash)\n const inlineCommentIdx = value.indexOf(\" #\");\n if (inlineCommentIdx !== -1) {\n value = value.slice(0, inlineCommentIdx);\n }\n\n // Strip matching outer quotes (\" or ')\n if (\n (value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\n ) {\n value = value.slice(1, -1);\n }\n\n pairs[key] = value;\n }\n\n return { pairs, format: \"dotenv\", skipped, warnings };\n}\n\n/**\n * Parse a JSON object into flat string key/value pairs.\n * Non-string values (numbers, booleans, nulls, arrays, objects) are skipped with warnings.\n *\n * @throws `Error` If the content is not valid JSON or the root is not an object.\n */\nexport function parseJson(content: string): ParsedImport {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let parsed: any;\n try {\n parsed = JSON.parse(content);\n } catch (err) {\n throw new Error(`Invalid JSON: ${(err as Error).message}`);\n }\n\n if (Array.isArray(parsed)) {\n throw new Error(\n \"JSON root must be an object, not an array. Clef keys are flat key/value pairs.\",\n );\n }\n\n if (parsed === null || typeof parsed !== \"object\") {\n throw new Error(\"JSON root must be an object. Clef keys are flat key/value pairs.\");\n }\n\n const pairs: Record<string, string> = {};\n const skipped: string[] = [];\n const warnings: string[] = [];\n\n for (const [key, value] of Object.entries(parsed as Record<string, unknown>)) {\n if (typeof value === \"string\") {\n pairs[key] = value;\n } else if (value === null) {\n skipped.push(key);\n warnings.push(`${key}: skipped \u2014 value is null, not string`);\n } else if (Array.isArray(value)) {\n skipped.push(key);\n warnings.push(`${key}: skipped \u2014 value is array, not string`);\n } else if (typeof value === \"object\") {\n skipped.push(key);\n warnings.push(`${key}: skipped \u2014 value is nested object, not string`);\n } else {\n // number, boolean\n skipped.push(key);\n warnings.push(`${key}: skipped \u2014 value is ${typeof value}, not string`);\n }\n }\n\n return { pairs, format: \"json\", skipped, warnings };\n}\n\n/**\n * Parse a YAML mapping into flat string key/value pairs.\n * Non-string values are skipped with warnings.\n *\n * @throws `Error` If the content is not valid YAML or the root is not a mapping.\n */\nexport function parseYaml(content: string): ParsedImport {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let parsed: any;\n try {\n parsed = YAML.parse(content);\n } catch (err) {\n throw new Error(`Invalid YAML: ${(err as Error).message}`);\n }\n\n if (Array.isArray(parsed)) {\n throw new Error(\n \"YAML root must be a mapping, not a sequence. Clef keys are flat key/value pairs.\",\n );\n }\n\n if (parsed === null || typeof parsed !== \"object\") {\n throw new Error(\"YAML root must be a mapping. Clef keys are flat key/value pairs.\");\n }\n\n const pairs: Record<string, string> = {};\n const skipped: string[] = [];\n const warnings: string[] = [];\n\n for (const [key, value] of Object.entries(parsed as Record<string, unknown>)) {\n if (typeof value === \"string\") {\n pairs[key] = value;\n } else if (value === null) {\n skipped.push(key);\n warnings.push(`${key}: skipped \u2014 value is null, not string`);\n } else if (Array.isArray(value)) {\n skipped.push(key);\n warnings.push(`${key}: skipped \u2014 value is array, not string`);\n } else if (typeof value === \"object\") {\n skipped.push(key);\n warnings.push(`${key}: skipped \u2014 value is nested object, not string`);\n } else {\n // number, boolean\n skipped.push(key);\n warnings.push(`${key}: skipped \u2014 value is ${typeof value}, not string`);\n }\n }\n\n return { pairs, format: \"yaml\", skipped, warnings };\n}\n\n/**\n * Parse content in the given format (or auto-detect) and return flat key/value pairs.\n *\n * @param content - Raw file content to parse.\n * @param format - Explicit format, or `\"auto\"` to detect from `filePath` and content.\n * @param filePath - File path used for format detection when `format` is `\"auto\"`.\n */\nexport function parse(content: string, format: ImportFormat, filePath?: string): ParsedImport {\n const resolved: Exclude<ImportFormat, \"auto\"> =\n format === \"auto\" ? detectFormat(filePath ?? \"\", content) : format;\n\n switch (resolved) {\n case \"dotenv\":\n return parseDotenv(content);\n case \"json\":\n return parseJson(content);\n case \"yaml\":\n return parseYaml(content);\n }\n}\n", "import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as YAML from \"yaml\";\nimport { ClefManifest, EncryptionBackend } from \"../types\";\nimport { MatrixManager } from \"../matrix/manager\";\nimport { validateAgePublicKey, keyPreview } from \"./validator\";\nimport { CLEF_MANIFEST_FILENAME } from \"../manifest/parser\";\n\nexport interface Recipient {\n key: string;\n preview: string;\n label?: string;\n}\n\nexport interface RecipientsResult {\n added?: Recipient;\n removed?: Recipient;\n recipients: Recipient[];\n reEncryptedFiles: string[];\n failedFiles: string[];\n warnings: string[];\n}\n\ninterface RawRecipientEntry {\n key: string;\n label?: string;\n}\n\nfunction parseRecipientEntry(entry: unknown): RawRecipientEntry {\n if (typeof entry === \"string\") {\n return { key: entry };\n }\n if (typeof entry === \"object\" && entry !== null) {\n const obj = entry as Record<string, unknown>;\n return {\n key: String(obj.key ?? \"\"),\n ...(typeof obj.label === \"string\" ? { label: obj.label } : {}),\n };\n }\n return { key: \"\" };\n}\n\nfunction toRecipient(entry: RawRecipientEntry): Recipient {\n return {\n key: entry.key,\n preview: keyPreview(entry.key),\n ...(entry.label ? { label: entry.label } : {}),\n };\n}\n\nfunction readManifestYaml(repoRoot: string): Record<string, unknown> {\n const manifestPath = path.join(repoRoot, CLEF_MANIFEST_FILENAME);\n const raw = fs.readFileSync(manifestPath, \"utf-8\");\n return YAML.parse(raw) as Record<string, unknown>;\n}\n\nfunction writeManifestYaml(repoRoot: string, doc: Record<string, unknown>): void {\n const manifestPath = path.join(repoRoot, CLEF_MANIFEST_FILENAME);\n fs.writeFileSync(manifestPath, YAML.stringify(doc), \"utf-8\");\n}\n\nfunction getRecipientsArray(doc: Record<string, unknown>): unknown[] {\n const sops = doc.sops as Record<string, unknown> | undefined;\n if (!sops) return [];\n const age = sops.age as Record<string, unknown> | undefined;\n if (!age) return [];\n const recipients = age.recipients;\n if (!Array.isArray(recipients)) return [];\n return recipients;\n}\n\nfunction ensureRecipientsArray(doc: Record<string, unknown>): unknown[] {\n if (!doc.sops || typeof doc.sops !== \"object\") {\n doc.sops = {};\n }\n const sops = doc.sops as Record<string, unknown>;\n if (!sops.age || typeof sops.age !== \"object\") {\n sops.age = {};\n }\n const age = sops.age as Record<string, unknown>;\n if (!Array.isArray(age.recipients)) {\n age.recipients = [];\n }\n return age.recipients as unknown[];\n}\n\nfunction getEnvironmentRecipientsArray(doc: Record<string, unknown>, envName: string): unknown[] {\n const environments = doc.environments as Record<string, unknown>[] | undefined;\n if (!Array.isArray(environments)) return [];\n const env = environments.find((e) => (e as Record<string, unknown>).name === envName) as\n | Record<string, unknown>\n | undefined;\n if (!env) return [];\n const recipients = env.recipients;\n if (!Array.isArray(recipients)) return [];\n return recipients;\n}\n\nfunction ensureEnvironmentRecipientsArray(\n doc: Record<string, unknown>,\n envName: string,\n): unknown[] {\n const environments = doc.environments as Record<string, unknown>[] | undefined;\n if (!Array.isArray(environments)) {\n throw new Error(`No environments array in manifest.`);\n }\n const env = environments.find((e) => (e as Record<string, unknown>).name === envName) as\n | Record<string, unknown>\n | undefined;\n if (!env) {\n throw new Error(`Environment '${envName}' not found in manifest.`);\n }\n if (!Array.isArray(env.recipients)) {\n env.recipients = [];\n }\n return env.recipients as unknown[];\n}\n\n/**\n * Manages age recipient keys in the manifest and re-encrypts matrix files on add/remove.\n * All add/remove operations are transactional \u2014 a failure triggers a full rollback.\n *\n * @example\n * ```ts\n * const manager = new RecipientManager(runner, matrixManager);\n * const result = await manager.add(\"age1...\", \"Alice\", manifest, repoRoot);\n * ```\n */\nexport class RecipientManager {\n constructor(\n private readonly encryption: EncryptionBackend,\n private readonly matrixManager: MatrixManager,\n ) {}\n\n /**\n * List all age recipients declared in the manifest.\n *\n * @param manifest - Parsed manifest.\n * @param repoRoot - Absolute path to the repository root.\n * @param environment - Optional environment name to list per-env recipients.\n */\n async list(manifest: ClefManifest, repoRoot: string, environment?: string): Promise<Recipient[]> {\n if (environment) {\n const env = manifest.environments.find((e) => e.name === environment);\n if (!env) {\n throw new Error(`Environment '${environment}' not found in manifest.`);\n }\n }\n const doc = readManifestYaml(repoRoot);\n const entries = environment\n ? getEnvironmentRecipientsArray(doc, environment)\n : getRecipientsArray(doc);\n return entries.map((entry) => toRecipient(parseRecipientEntry(entry)));\n }\n\n /**\n * Add a new age recipient and re-encrypt all existing matrix files.\n * Rolls back the manifest and any already-re-encrypted files on failure.\n *\n * @param key - age public key to add (`age1...`).\n * @param label - Optional human-readable label for the recipient.\n * @param manifest - Parsed manifest.\n * @param repoRoot - Absolute path to the repository root.\n * @param environment - Optional environment name to scope the operation.\n * @throws `Error` If the key is invalid or already present.\n */\n async add(\n key: string,\n label: string | undefined,\n manifest: ClefManifest,\n repoRoot: string,\n environment?: string,\n ): Promise<RecipientsResult> {\n const validation = validateAgePublicKey(key);\n if (!validation.valid) {\n throw new Error(validation.error);\n }\n const normalizedKey = validation.key!;\n\n if (environment) {\n const env = manifest.environments.find((e) => e.name === environment);\n if (!env) {\n throw new Error(`Environment '${environment}' not found in manifest.`);\n }\n }\n\n // Read current manifest\n const doc = readManifestYaml(repoRoot);\n const currentEntries = environment\n ? getEnvironmentRecipientsArray(doc, environment)\n : getRecipientsArray(doc);\n const currentKeys = currentEntries.map((e) => parseRecipientEntry(e).key);\n\n if (currentKeys.includes(normalizedKey)) {\n throw new Error(`Recipient '${keyPreview(normalizedKey)}' is already present.`);\n }\n\n // Save backup of manifest for rollback\n const manifestPath = path.join(repoRoot, CLEF_MANIFEST_FILENAME);\n const manifestBackup = fs.readFileSync(manifestPath, \"utf-8\");\n\n // Add new recipient to manifest\n const recipients = environment\n ? ensureEnvironmentRecipientsArray(doc, environment)\n : ensureRecipientsArray(doc);\n if (label) {\n recipients.push({ key: normalizedKey, label });\n } else {\n recipients.push(normalizedKey);\n }\n writeManifestYaml(repoRoot, doc);\n\n // Re-encrypt matching files\n const allCells = this.matrixManager.resolveMatrix(manifest, repoRoot).filter((c) => c.exists);\n const cells = environment ? allCells.filter((c) => c.environment === environment) : allCells;\n const reEncryptedFiles: string[] = [];\n const failedFiles: string[] = [];\n const fileBackups = new Map<string, string>();\n\n for (const cell of cells) {\n try {\n // Save file backup before re-encryption\n fileBackups.set(cell.filePath, fs.readFileSync(cell.filePath, \"utf-8\"));\n\n await this.encryption.addRecipient(cell.filePath, normalizedKey);\n\n reEncryptedFiles.push(cell.filePath);\n } catch {\n failedFiles.push(cell.filePath);\n\n // Rollback: restore manifest\n fs.writeFileSync(manifestPath, manifestBackup, \"utf-8\");\n\n // Rollback: restore previously re-encrypted files\n for (const reEncryptedFile of reEncryptedFiles) {\n const backup = fileBackups.get(reEncryptedFile);\n if (backup) {\n fs.writeFileSync(reEncryptedFile, backup, \"utf-8\");\n }\n }\n\n // Re-read the restored manifest for the result\n const restoredDoc = readManifestYaml(repoRoot);\n const restoredEntries = environment\n ? getEnvironmentRecipientsArray(restoredDoc, environment)\n : getRecipientsArray(restoredDoc);\n const restoredRecipients = restoredEntries.map((e) => toRecipient(parseRecipientEntry(e)));\n\n return {\n added: toRecipient({ key: normalizedKey, label }),\n recipients: restoredRecipients,\n reEncryptedFiles: [],\n failedFiles,\n warnings: [\"Rollback completed: manifest and re-encrypted files have been restored.\"],\n };\n }\n }\n\n // Build final recipient list\n const updatedDoc = readManifestYaml(repoRoot);\n const updatedEntries = environment\n ? getEnvironmentRecipientsArray(updatedDoc, environment)\n : getRecipientsArray(updatedDoc);\n const finalRecipients = updatedEntries.map((e) => toRecipient(parseRecipientEntry(e)));\n\n return {\n added: toRecipient({ key: normalizedKey, label }),\n recipients: finalRecipients,\n reEncryptedFiles,\n failedFiles,\n warnings: [],\n };\n }\n\n /**\n * Remove an age recipient and re-encrypt all existing matrix files.\n * Rolls back on failure. Note: re-encryption removes _future_ access only;\n * rotate secret values to fully revoke access.\n *\n * @param key - age public key to remove.\n * @param manifest - Parsed manifest.\n * @param repoRoot - Absolute path to the repository root.\n * @param environment - Optional environment name to scope the operation.\n * @throws `Error` If the key is not in the manifest.\n */\n async remove(\n key: string,\n manifest: ClefManifest,\n repoRoot: string,\n environment?: string,\n ): Promise<RecipientsResult> {\n const trimmedKey = key.trim();\n\n if (environment) {\n const env = manifest.environments.find((e) => e.name === environment);\n if (!env) {\n throw new Error(`Environment '${environment}' not found in manifest.`);\n }\n }\n\n // Read current manifest\n const doc = readManifestYaml(repoRoot);\n const currentEntries = environment\n ? getEnvironmentRecipientsArray(doc, environment)\n : getRecipientsArray(doc);\n const parsed = currentEntries.map((e) => parseRecipientEntry(e));\n const matchIndex = parsed.findIndex((p) => p.key === trimmedKey);\n\n if (matchIndex === -1) {\n throw new Error(`Recipient '${keyPreview(trimmedKey)}' is not in the manifest.`);\n }\n\n const removedEntry = parsed[matchIndex];\n\n // Save backup of manifest for rollback\n const manifestPath = path.join(repoRoot, CLEF_MANIFEST_FILENAME);\n const manifestBackup = fs.readFileSync(manifestPath, \"utf-8\");\n\n // Remove recipient from manifest\n const recipients = environment\n ? ensureEnvironmentRecipientsArray(doc, environment)\n : ensureRecipientsArray(doc);\n recipients.splice(matchIndex, 1);\n writeManifestYaml(repoRoot, doc);\n\n // Re-encrypt matching files\n const allCells = this.matrixManager.resolveMatrix(manifest, repoRoot).filter((c) => c.exists);\n const cells = environment ? allCells.filter((c) => c.environment === environment) : allCells;\n const reEncryptedFiles: string[] = [];\n const failedFiles: string[] = [];\n const fileBackups = new Map<string, string>();\n\n for (const cell of cells) {\n try {\n // Save file backup before re-encryption\n fileBackups.set(cell.filePath, fs.readFileSync(cell.filePath, \"utf-8\"));\n\n await this.encryption.removeRecipient(cell.filePath, trimmedKey);\n\n reEncryptedFiles.push(cell.filePath);\n } catch {\n failedFiles.push(cell.filePath);\n\n // Rollback: restore manifest\n fs.writeFileSync(manifestPath, manifestBackup, \"utf-8\");\n\n // Rollback: restore previously re-encrypted files\n for (const reEncryptedFile of reEncryptedFiles) {\n const backup = fileBackups.get(reEncryptedFile);\n if (backup) {\n fs.writeFileSync(reEncryptedFile, backup, \"utf-8\");\n }\n }\n\n // Re-read the restored manifest for the result\n const restoredDoc = readManifestYaml(repoRoot);\n const restoredEntries = environment\n ? getEnvironmentRecipientsArray(restoredDoc, environment)\n : getRecipientsArray(restoredDoc);\n const restoredRecipients = restoredEntries.map((e) => toRecipient(parseRecipientEntry(e)));\n\n return {\n removed: toRecipient(removedEntry),\n recipients: restoredRecipients,\n reEncryptedFiles: [],\n failedFiles,\n warnings: [\n \"Rollback completed: manifest and re-encrypted files have been restored.\",\n \"Re-encryption removes future access, not past access. Rotate secret values to complete revocation.\",\n ],\n };\n }\n }\n\n // Build final recipient list\n const updatedDoc = readManifestYaml(repoRoot);\n const updatedEntries = environment\n ? getEnvironmentRecipientsArray(updatedDoc, environment)\n : getRecipientsArray(updatedDoc);\n const finalRecipients = updatedEntries.map((e) => toRecipient(parseRecipientEntry(e)));\n\n return {\n removed: toRecipient(removedEntry),\n recipients: finalRecipients,\n reEncryptedFiles,\n failedFiles,\n warnings: [\n \"Re-encryption removes future access, not past access. Rotate secret values to complete revocation.\",\n ],\n };\n }\n}\n", "import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as YAML from \"yaml\";\n\nexport const REQUESTS_FILENAME = \".clef-requests.yaml\";\n\nconst HEADER_COMMENT =\n \"# Pending recipient access requests. Approve with: clef recipients approve <label>\\n\";\n\nexport interface RecipientRequest {\n key: string;\n label: string;\n requestedAt: Date;\n environment?: string;\n}\n\ninterface RawRequest {\n key: string;\n label: string;\n requested_at: string;\n environment?: string;\n}\n\nexport function requestsFilePath(repoRoot: string): string {\n return path.join(repoRoot, REQUESTS_FILENAME);\n}\n\n/** Load all pending requests. Returns empty array if file is missing or malformed. */\nexport function loadRequests(repoRoot: string): RecipientRequest[] {\n const filePath = requestsFilePath(repoRoot);\n try {\n if (!fs.existsSync(filePath)) return [];\n const content = fs.readFileSync(filePath, \"utf-8\");\n const parsed = YAML.parse(content);\n if (!parsed || !Array.isArray(parsed.requests)) return [];\n return parsed.requests.map((r: RawRequest) => ({\n key: r.key,\n label: r.label,\n requestedAt: new Date(r.requested_at),\n environment: r.environment,\n }));\n } catch {\n return [];\n }\n}\n\n/** Save requests to disk. Deletes the file if no requests remain. */\nexport function saveRequests(repoRoot: string, requests: RecipientRequest[]): void {\n const filePath = requestsFilePath(repoRoot);\n if (requests.length === 0) {\n try {\n fs.unlinkSync(filePath);\n } catch {\n // File may not exist\n }\n return;\n }\n const data = {\n requests: requests.map((r) => {\n const raw: RawRequest = {\n key: r.key,\n label: r.label,\n requested_at: r.requestedAt.toISOString(),\n };\n if (r.environment) raw.environment = r.environment;\n return raw;\n }),\n };\n fs.writeFileSync(filePath, HEADER_COMMENT + YAML.stringify(data), \"utf-8\");\n}\n\n/**\n * Add or update a request. If a request with the same key already exists,\n * update its label, timestamp, and environment. Returns the upserted request.\n */\nexport function upsertRequest(\n repoRoot: string,\n key: string,\n label: string,\n environment?: string,\n): RecipientRequest {\n const requests = loadRequests(repoRoot);\n const now = new Date();\n const request: RecipientRequest = { key, label, requestedAt: now, environment };\n\n const existingIndex = requests.findIndex((r) => r.key === key);\n if (existingIndex >= 0) {\n requests[existingIndex] = request;\n } else {\n requests.push(request);\n }\n\n saveRequests(repoRoot, requests);\n return request;\n}\n\n/**\n * Remove a request by matching against label (case-insensitive) or key (exact).\n * Returns the removed request, or null if not found.\n */\nexport function removeRequest(repoRoot: string, identifier: string): RecipientRequest | null {\n const requests = loadRequests(repoRoot);\n const match = findInList(requests, identifier);\n if (!match) return null;\n\n const filtered = requests.filter((r) => r.key !== match.key);\n saveRequests(repoRoot, filtered);\n return match;\n}\n\n/**\n * Find a request by label (case-insensitive) or key (exact match).\n * Returns null if not found.\n */\nexport function findRequest(repoRoot: string, identifier: string): RecipientRequest | null {\n const requests = loadRequests(repoRoot);\n return findInList(requests, identifier);\n}\n\nfunction findInList(requests: RecipientRequest[], identifier: string): RecipientRequest | null {\n const lower = identifier.toLowerCase();\n // Match by label (case-insensitive)\n const byLabel = requests.find((r) => r.label.toLowerCase() === lower);\n if (byLabel) return byLabel;\n // Match by key (exact)\n const byKey = requests.find((r) => r.key === identifier);\n return byKey ?? null;\n}\n", "import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as YAML from \"yaml\";\nimport { ManifestParser, CLEF_MANIFEST_FILENAME } from \"../manifest/parser\";\nimport { MatrixManager } from \"../matrix/manager\";\nimport { DriftIssue, DriftResult } from \"../types\";\n\n/**\n * Compares key sets across two local Clef repositories without decryption.\n *\n * SOPS files store key names in plaintext \u2014 only values are encrypted.\n * This means drift detection works without the `sops` binary or any\n * decryption keys. The detector reads `.enc.yaml` files as plain YAML,\n * strips the `sops` metadata key, and compares the remaining top-level\n * keys across all environments from both repos within each shared namespace.\n */\nexport class DriftDetector {\n private parser = new ManifestParser();\n private matrix = new MatrixManager();\n\n /**\n * Compare key sets between two Clef repos.\n *\n * @param localRoot - Path to the first (local) Clef repository.\n * @param remoteRoot - Path to the second (remote/other) Clef repository.\n * @param namespaceFilter - Optional list of namespace names to scope comparison.\n * @returns Drift result with any issues found.\n */\n detect(localRoot: string, remoteRoot: string, namespaceFilter?: string[]): DriftResult {\n const localManifest = this.parser.parse(path.join(localRoot, CLEF_MANIFEST_FILENAME));\n const remoteManifest = this.parser.parse(path.join(remoteRoot, CLEF_MANIFEST_FILENAME));\n\n const localCells = this.matrix.resolveMatrix(localManifest, localRoot);\n const remoteCells = this.matrix.resolveMatrix(remoteManifest, remoteRoot);\n\n const localEnvNames = localManifest.environments.map((e) => e.name);\n const remoteEnvNames = remoteManifest.environments.map((e) => e.name);\n\n // Find shared namespaces\n const localNsNames = new Set(localManifest.namespaces.map((n) => n.name));\n const remoteNsNames = new Set(remoteManifest.namespaces.map((n) => n.name));\n let sharedNamespaces = [...localNsNames].filter((n) => remoteNsNames.has(n));\n\n if (namespaceFilter && namespaceFilter.length > 0) {\n const filterSet = new Set(namespaceFilter);\n sharedNamespaces = sharedNamespaces.filter((n) => filterSet.has(n));\n }\n\n const issues: DriftIssue[] = [];\n let namespacesClean = 0;\n\n for (const ns of sharedNamespaces) {\n // Collect key \u2192 environment sets across both repos\n const keyEnvs = new Map<string, Set<string>>();\n const allEnvs = new Set<string>();\n\n // Read keys from local cells\n const localNsCells = localCells.filter((c) => c.namespace === ns);\n for (const cell of localNsCells) {\n const keys = this.readKeysFromFile(cell.filePath);\n if (keys === null) continue;\n allEnvs.add(cell.environment);\n for (const key of keys) {\n if (!keyEnvs.has(key)) keyEnvs.set(key, new Set());\n keyEnvs.get(key)!.add(cell.environment);\n }\n }\n\n // Read keys from remote cells\n const remoteNsCells = remoteCells.filter((c) => c.namespace === ns);\n for (const cell of remoteNsCells) {\n const keys = this.readKeysFromFile(cell.filePath);\n if (keys === null) continue;\n allEnvs.add(cell.environment);\n for (const key of keys) {\n if (!keyEnvs.has(key)) keyEnvs.set(key, new Set());\n keyEnvs.get(key)!.add(cell.environment);\n }\n }\n\n // Compare: a key must exist in every environment that has a readable file\n const envList = [...allEnvs];\n let nsClean = true;\n\n for (const [key, envSet] of keyEnvs) {\n const missingFrom = envList.filter((e) => !envSet.has(e));\n if (missingFrom.length > 0) {\n nsClean = false;\n const presentIn = [...envSet].sort();\n issues.push({\n namespace: ns,\n key,\n presentIn,\n missingFrom: missingFrom.sort(),\n message: `Key '${key}' in namespace '${ns}' exists in [${presentIn.join(\", \")}] but is missing from [${missingFrom.sort().join(\", \")}]`,\n });\n }\n }\n\n if (nsClean) namespacesClean++;\n }\n\n return {\n issues,\n namespacesCompared: sharedNamespaces.length,\n namespacesClean,\n localEnvironments: localEnvNames,\n remoteEnvironments: remoteEnvNames,\n };\n }\n\n /**\n * Read top-level key names from an encrypted SOPS YAML file,\n * filtering out the `sops` metadata key.\n *\n * @returns Array of key names, or `null` if the file cannot be read.\n */\n private readKeysFromFile(filePath: string): string[] | null {\n try {\n if (!fs.existsSync(filePath)) return null;\n const raw = fs.readFileSync(filePath, \"utf-8\");\n const parsed = YAML.parse(raw);\n if (parsed === null || parsed === undefined || typeof parsed !== \"object\") return null;\n return Object.keys(parsed).filter((k) => k !== \"sops\");\n } catch {\n return null;\n }\n }\n}\n", "import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as YAML from \"yaml\";\nimport {\n ClefManifest,\n ClefReport,\n CLEF_REPORT_SCHEMA_VERSION,\n EncryptionBackend,\n MatrixCell,\n ReportCellMetadata,\n ReportManifestStructure,\n ReportMatrixCell,\n ReportPolicy,\n ReportRecipientSummary,\n ReportRepoIdentity,\n SubprocessRunner,\n} from \"../types\";\nimport { ManifestParser } from \"../manifest/parser\";\nimport { MatrixManager } from \"../matrix/manager\";\nimport { SchemaValidator } from \"../schema/validator\";\nimport { LintRunner } from \"../lint/runner\";\nimport { getPendingKeys } from \"../pending/metadata\";\nimport { checkDependency } from \"../dependencies/checker\";\nimport { ReportSanitizer } from \"./sanitizer\";\n\n/**\n * Orchestrates all data-gathering for a `clef report` invocation.\n * Matrix key counts are read from SOPS YAML directly (no decryption).\n * Policy issues are gathered via LintRunner then sanitized.\n */\nexport class ReportGenerator {\n constructor(\n private readonly runner: SubprocessRunner,\n private readonly sopsClient: EncryptionBackend,\n private readonly matrixManager: MatrixManager,\n private readonly schemaValidator: SchemaValidator,\n ) {}\n\n /**\n * Generate a full {@link ClefReport} for the given repository root.\n * Each section gathers data independently \u2014 partial failures return empty\n * values rather than aborting the entire report.\n *\n * @param repoRoot - Absolute path to the repository root.\n * @param clefVersion - The running CLI version string.\n * @param options - Optional namespace/environment filters.\n */\n async generate(\n repoRoot: string,\n clefVersion: string,\n options?: { namespaceFilter?: string[]; environmentFilter?: string[] },\n ): Promise<ClefReport> {\n let manifest: ClefManifest | null = null;\n try {\n const parser = new ManifestParser();\n manifest = parser.parse(path.join(repoRoot, \"clef.yaml\"));\n } catch {\n // Manifest parse failure \u2014 return minimal report\n const emptyManifest: ReportManifestStructure = {\n manifestVersion: 0,\n filePattern: \"\",\n environments: [],\n namespaces: [],\n defaultBackend: \"\",\n };\n return {\n schemaVersion: CLEF_REPORT_SCHEMA_VERSION,\n repoIdentity: await this.buildRepoIdentity(repoRoot, clefVersion),\n manifest: emptyManifest,\n matrix: [],\n policy: { issueCount: { error: 0, warning: 0, info: 0 }, issues: [] },\n recipients: {},\n };\n }\n\n const [repoIdentity, matrixCells, policy] = await Promise.all([\n this.buildRepoIdentity(repoRoot, clefVersion),\n this.buildMatrixCells(manifest, repoRoot, options),\n this.buildPolicy(manifest, repoRoot),\n ]);\n\n return {\n schemaVersion: CLEF_REPORT_SCHEMA_VERSION,\n repoIdentity,\n manifest: this.buildManifestStructure(manifest),\n matrix: matrixCells,\n policy,\n recipients: this.buildRecipients(matrixCells),\n };\n }\n\n private async buildRepoIdentity(\n repoRoot: string,\n clefVersion: string,\n ): Promise<ReportRepoIdentity> {\n let repoOrigin = \"\";\n let commitSha = \"\";\n let branch = \"\";\n let commitTimestamp = \"\";\n let sopsVersion: string | null = null;\n\n try {\n const r = await this.runner.run(\"git\", [\"remote\", \"get-url\", \"origin\"], { cwd: repoRoot });\n if (r.exitCode === 0) repoOrigin = this.normalizeRepoOrigin(r.stdout.trim());\n } catch {\n /* ignore */\n }\n\n try {\n const r = await this.runner.run(\"git\", [\"rev-parse\", \"HEAD\"], { cwd: repoRoot });\n if (r.exitCode === 0) commitSha = r.stdout.trim();\n } catch {\n /* ignore */\n }\n\n try {\n const r = await this.runner.run(\"git\", [\"branch\", \"--show-current\"], { cwd: repoRoot });\n if (r.exitCode === 0) branch = r.stdout.trim();\n } catch {\n /* ignore */\n }\n\n try {\n const r = await this.runner.run(\"git\", [\"log\", \"-1\", \"--format=%cI\"], { cwd: repoRoot });\n if (r.exitCode === 0) commitTimestamp = r.stdout.trim();\n } catch {\n /* ignore */\n }\n\n try {\n const dep = await checkDependency(\"sops\", this.runner);\n sopsVersion = dep?.installed ?? null;\n } catch {\n /* ignore */\n }\n\n return {\n repoOrigin,\n commitSha,\n branch,\n commitTimestamp,\n reportGeneratedAt: new Date().toISOString(),\n clefVersion,\n sopsVersion,\n };\n }\n\n private normalizeRepoOrigin(rawUrl: string): string {\n const sshMatch = rawUrl.match(/^git@([^:]+):(.+?)(?:\\.git)?$/);\n if (sshMatch) return `${sshMatch[1]}/${sshMatch[2]}`;\n const httpsMatch = rawUrl.match(/^https?:\\/\\/([^/]+)\\/(.+?)(?:\\.git)?$/);\n if (httpsMatch) return `${httpsMatch[1]}/${httpsMatch[2]}`;\n return rawUrl.replace(/\\.git$/, \"\");\n }\n\n private buildManifestStructure(manifest: ClefManifest): ReportManifestStructure {\n return {\n manifestVersion: manifest.version,\n filePattern: manifest.file_pattern,\n environments: manifest.environments.map((e) => ({\n name: e.name,\n protected: e.protected ?? false,\n })),\n namespaces: manifest.namespaces.map((ns) => ({\n name: ns.name,\n hasSchema: !!ns.schema,\n owners: ns.owners ?? [],\n })),\n defaultBackend: manifest.sops.default_backend,\n };\n }\n\n private async buildMatrixCells(\n manifest: ClefManifest,\n repoRoot: string,\n options?: { namespaceFilter?: string[]; environmentFilter?: string[] },\n ): Promise<ReportMatrixCell[]> {\n const allCells = this.matrixManager.resolveMatrix(manifest, repoRoot);\n const cells = allCells.filter((cell) => {\n const nsOk =\n !options?.namespaceFilter?.length || options.namespaceFilter.includes(cell.namespace);\n const envOk =\n !options?.environmentFilter?.length || options.environmentFilter.includes(cell.environment);\n return nsOk && envOk;\n });\n\n const result: ReportMatrixCell[] = [];\n\n for (const cell of cells) {\n result.push(await this.buildCell(cell));\n }\n\n return result;\n }\n\n private async buildCell(cell: MatrixCell): Promise<ReportMatrixCell> {\n if (!cell.exists) {\n return {\n namespace: cell.namespace,\n environment: cell.environment,\n filePath: cell.filePath,\n exists: false,\n keyCount: 0,\n pendingCount: 0,\n metadata: null,\n };\n }\n\n const keyCount = this.readKeyCount(cell.filePath);\n\n let pendingCount = 0;\n try {\n const pending = await getPendingKeys(cell.filePath);\n pendingCount = pending.length;\n } catch {\n /* ignore */\n }\n\n let metadata: ReportCellMetadata | null = null;\n try {\n const sopsMetadata = await this.sopsClient.getMetadata(cell.filePath);\n metadata = {\n backend: sopsMetadata.backend,\n recipients: sopsMetadata.recipients,\n lastModified: sopsMetadata.lastModified?.toISOString() ?? null,\n };\n } catch {\n /* ignore */\n }\n\n return {\n namespace: cell.namespace,\n environment: cell.environment,\n filePath: cell.filePath,\n exists: true,\n keyCount,\n pendingCount,\n metadata,\n };\n }\n\n private readKeyCount(filePath: string): number {\n try {\n if (!fs.existsSync(filePath)) return 0;\n const raw = fs.readFileSync(filePath, \"utf-8\");\n const parsed: unknown = YAML.parse(raw);\n if (parsed === null || parsed === undefined || typeof parsed !== \"object\") return 0;\n return Object.keys(parsed as Record<string, unknown>).filter((k) => k !== \"sops\").length;\n } catch {\n return 0;\n }\n }\n\n private async buildPolicy(manifest: ClefManifest, repoRoot: string): Promise<ReportPolicy> {\n try {\n const lintRunner = new LintRunner(this.matrixManager, this.schemaValidator, this.sopsClient);\n const lintResult = await lintRunner.run(manifest, repoRoot);\n return new ReportSanitizer().sanitize(lintResult.issues);\n } catch {\n return { issueCount: { error: 0, warning: 0, info: 0 }, issues: [] };\n }\n }\n\n private buildRecipients(cells: ReportMatrixCell[]): Record<string, ReportRecipientSummary> {\n const recipientMap = new Map<\n string,\n { type: string; environments: Set<string>; fileCount: number }\n >();\n\n for (const cell of cells) {\n if (!cell.metadata) continue;\n for (const recipient of cell.metadata.recipients) {\n const type = this.inferRecipientType(recipient);\n const existing = recipientMap.get(recipient);\n if (existing) {\n existing.environments.add(cell.environment);\n existing.fileCount++;\n } else {\n recipientMap.set(recipient, {\n type,\n environments: new Set([cell.environment]),\n fileCount: 1,\n });\n }\n }\n }\n\n const result: Record<string, ReportRecipientSummary> = {};\n for (const [recipient, data] of recipientMap.entries()) {\n result[recipient] = {\n type: data.type,\n environments: Array.from(data.environments),\n fileCount: data.fileCount,\n };\n }\n return result;\n }\n\n private inferRecipientType(recipient: string): string {\n if (recipient.startsWith(\"age1\")) return \"age\";\n if (recipient.startsWith(\"arn:aws:kms:\")) return \"awskms\";\n if (recipient.includes(\"projects/\") && recipient.includes(\"cryptoKeys/\")) return \"gcpkms\";\n return \"pgp\";\n }\n}\n", "import { LintIssue, ReportIssueCounts, ReportPolicy, ReportPolicyIssue } from \"../types\";\n\n/**\n * Transforms raw `LintIssue[]` from LintRunner into `ReportPolicy` with all\n * key names stripped and similar issues aggregated into counts.\n *\n * This is the trust boundary for Clef Pro: nothing emitted by this class\n * should contain a secret key name.\n */\nexport class ReportSanitizer {\n sanitize(lintIssues: LintIssue[]): ReportPolicy {\n const output: ReportPolicyIssue[] = [];\n\n // \u2500\u2500 Schema issues with a key field \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n const schemaWithKey = lintIssues.filter((i) => i.category === \"schema\" && i.key !== undefined);\n\n // Schema errors \u2192 group by file: \"N keys fail schema validation\"\n const schemaErrors = schemaWithKey.filter((i) => i.severity === \"error\");\n this.groupByFile(schemaErrors).forEach((issues, file) => {\n const n = issues.length;\n output.push({\n severity: \"error\",\n category: \"schema\",\n file,\n count: n,\n message: `${n} key${n !== 1 ? \"s\" : \"\"} fail schema validation`,\n });\n });\n\n // Schema warnings that are pending placeholders \u2192 group by file, reclassify to info/matrix\n const pendingWarnings = schemaWithKey.filter(\n (i) => i.severity === \"warning\" && i.message.includes(\"placeholder\"),\n );\n this.groupByFile(pendingWarnings).forEach((issues, file) => {\n const n = issues.length;\n output.push({\n severity: \"info\",\n category: \"matrix\",\n file,\n count: n,\n message: `${n} pending key${n !== 1 ? \"s\" : \"\"} awaiting values`,\n });\n });\n\n // Schema warnings that are NOT pending \u2192 group by file: \"N keys have schema warnings\"\n const schemaWarnings = schemaWithKey.filter(\n (i) => i.severity === \"warning\" && !i.message.includes(\"placeholder\"),\n );\n this.groupByFile(schemaWarnings).forEach((issues, file) => {\n const n = issues.length;\n output.push({\n severity: \"warning\",\n category: \"schema\",\n file,\n count: n,\n message: n === 1 ? \"1 key has schema warnings\" : `${n} keys have schema warnings`,\n });\n });\n\n // Schema info with key \u2192 DROP entirely (per-key noise that leaks key names)\n\n // \u2500\u2500 Schema issues without a key field \u2014 pass through \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n for (const issue of lintIssues.filter((i) => i.category === \"schema\" && i.key === undefined)) {\n output.push({\n severity: issue.severity,\n category: issue.category,\n file: issue.file,\n message: issue.message,\n });\n }\n\n // \u2500\u2500 Matrix issues \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n const matrixIssues = lintIssues.filter((i) => i.category === \"matrix\");\n\n // Matrix with key = cross-env drift \u2192 group by (namespace, targetEnv, sourceEnvs)\n const driftIssues = matrixIssues.filter((i) => i.key !== undefined);\n const driftGroups = new Map<\n string,\n { namespace: string; targetEnv: string; sourceEnvs: string; count: number }\n >();\n for (const issue of driftIssues) {\n // Use indexOf/lastIndexOf instead of a regex with unbounded quantifiers to\n // avoid ReDoS on uncontrolled `issue.message` input.\n const prefix = \"is missing in \";\n const middle = \" but present in \";\n const pi = issue.message.indexOf(prefix);\n if (pi === -1) continue;\n const afterPrefix = issue.message.indexOf(middle, pi + prefix.length);\n if (afterPrefix === -1) continue;\n const targetEnv = issue.message.slice(pi + prefix.length, afterPrefix);\n if (!targetEnv || /\\s/.test(targetEnv)) continue;\n const rest = issue.message.slice(afterPrefix + middle.length);\n if (!rest.endsWith(\".\")) continue;\n const sourceEnvs = rest.slice(0, -1);\n const namespace = this.extractNamespace(issue.file);\n const groupKey = `${namespace}|${targetEnv}|${sourceEnvs}`;\n const existing = driftGroups.get(groupKey);\n if (existing) {\n existing.count++;\n } else {\n driftGroups.set(groupKey, { namespace, targetEnv, sourceEnvs, count: 1 });\n }\n }\n for (const group of driftGroups.values()) {\n const n = group.count;\n output.push({\n severity: \"warning\",\n category: \"drift\",\n namespace: group.namespace,\n environment: group.targetEnv,\n sourceEnvironment: group.sourceEnvs,\n driftCount: n,\n message: `${n} key${n !== 1 ? \"s\" : \"\"} in [${group.sourceEnvs}] missing from ${group.targetEnv}`,\n });\n }\n\n // Matrix without key (missing file) \u2192 pass through\n for (const issue of matrixIssues.filter((i) => i.key === undefined)) {\n output.push({\n severity: issue.severity,\n category: issue.category,\n file: issue.file,\n message: issue.message,\n });\n }\n\n // \u2500\u2500 SOPS issues \u2014 pass through \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n for (const issue of lintIssues.filter((i) => i.category === \"sops\")) {\n output.push({\n severity: issue.severity,\n category: issue.category,\n file: issue.file,\n message: issue.message,\n });\n }\n\n // \u2500\u2500 Service-identity issues \u2014 pass through \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n for (const issue of lintIssues.filter((i) => i.category === \"service-identity\")) {\n output.push({\n severity: issue.severity,\n category: issue.category,\n file: issue.file,\n message: issue.message,\n });\n }\n\n const issueCount: ReportIssueCounts = {\n error: output.filter((i) => i.severity === \"error\").length,\n warning: output.filter((i) => i.severity === \"warning\").length,\n info: output.filter((i) => i.severity === \"info\").length,\n };\n\n return { issueCount, issues: output };\n }\n\n private groupByFile(issues: LintIssue[]): Map<string, LintIssue[]> {\n const map = new Map<string, LintIssue[]>();\n for (const issue of issues) {\n const arr = map.get(issue.file) ?? [];\n arr.push(issue);\n map.set(issue.file, arr);\n }\n return map;\n }\n\n private extractNamespace(filePath: string): string {\n const normalized = filePath.replace(/\\\\/g, \"/\");\n const parts = normalized.split(\"/\");\n return parts.length >= 2 ? (parts[parts.length - 2] ?? \"\") : (parts[0] ?? \"\");\n }\n}\n", "import {\n ClefReport,\n CloudApiReport,\n CloudCellHealthStatus,\n CloudPolicyResult,\n CloudReportCell,\n CloudReportDrift,\n CloudReportSummary,\n ReportMatrixCell,\n ReportPolicyIssue,\n} from \"../types\";\n\n/**\n * Transforms a local {@link ClefReport} into the {@link CloudApiReport} payload\n * expected by the Clef Pro API. Mapping is deterministic and side-effect-free.\n */\nexport class ReportTransformer {\n transform(report: ClefReport): CloudApiReport {\n const summary = this.buildSummary(report);\n const drift = this.buildDrift(report);\n const policyResults = this.buildPolicyResults(report.policy.issues);\n\n return {\n commitSha: report.repoIdentity.commitSha,\n branch: report.repoIdentity.branch,\n commitTimestamp: new Date(report.repoIdentity.commitTimestamp).getTime(),\n cliVersion: report.repoIdentity.clefVersion,\n summary,\n drift,\n policyResults,\n };\n }\n\n private buildSummary(report: ClefReport): CloudReportSummary {\n const namespaces = [...new Set(report.matrix.map((c) => c.namespace))];\n const environments = [...new Set(report.matrix.map((c) => c.environment))];\n const cells = report.matrix.map((cell) => this.buildCell(cell, report.policy.issues));\n const violations = report.policy.issues.filter((i) => i.severity === \"error\").length;\n\n return {\n filesScanned: report.matrix.length,\n namespaces,\n environments,\n cells,\n violations,\n passed: violations === 0,\n };\n }\n\n private buildCell(cell: ReportMatrixCell, issues: ReportPolicyIssue[]): CloudReportCell {\n const healthStatus = this.computeHealthStatus(cell, issues);\n const description = this.describeCell(cell, healthStatus);\n\n return {\n namespace: cell.namespace,\n environment: cell.environment,\n healthStatus,\n description,\n };\n }\n\n private computeHealthStatus(\n cell: ReportMatrixCell,\n issues: ReportPolicyIssue[],\n ): CloudCellHealthStatus {\n if (!cell.exists) return \"unknown\";\n\n const cellIssues = issues.filter(\n (i) =>\n (i.namespace === cell.namespace && i.environment === cell.environment) ||\n (i.file !== undefined &&\n i.file.includes(cell.namespace) &&\n i.file.includes(cell.environment)),\n );\n\n if (cellIssues.some((i) => i.severity === \"error\")) return \"critical\";\n if (cellIssues.some((i) => i.severity === \"warning\") || cell.pendingCount > 0) return \"warning\";\n return \"healthy\";\n }\n\n private describeCell(cell: ReportMatrixCell, status: CloudCellHealthStatus): string {\n switch (status) {\n case \"unknown\":\n return \"File does not exist\";\n case \"critical\":\n return \"Has error-severity policy issues\";\n case \"warning\":\n return cell.pendingCount > 0\n ? `${cell.pendingCount} pending key(s) awaiting values`\n : \"Has warning-severity policy issues\";\n case \"healthy\":\n return `${cell.keyCount} key(s), no issues`;\n }\n }\n\n private buildDrift(report: ClefReport): CloudReportDrift[] {\n const namespaces = [...new Set(report.matrix.map((c) => c.namespace))];\n const driftIssues = report.policy.issues.filter((i) => i.category === \"drift\");\n\n return namespaces.map((namespace) => {\n const nsIssues = driftIssues.filter((i) => i.namespace === namespace);\n const totalDrift = nsIssues.reduce((sum, i) => sum + (i.driftCount ?? 1), 0);\n return {\n namespace,\n isDrifted: totalDrift > 0,\n driftCount: totalDrift,\n };\n });\n }\n\n private buildPolicyResults(issues: ReportPolicyIssue[]): CloudPolicyResult[] {\n return issues.map((issue) => ({\n ruleId: `${issue.category}/${issue.severity}`,\n ruleName: issue.category,\n passed: issue.severity !== \"error\",\n severity: issue.severity,\n message: issue.message,\n ...(issue.namespace || issue.environment\n ? {\n scope: {\n ...(issue.namespace ? { namespace: issue.namespace } : {}),\n ...(issue.environment ? { environment: issue.environment } : {}),\n },\n }\n : {}),\n }));\n }\n}\n", "import {\n CloudApiError,\n CloudApiReport,\n CloudBatchPayload,\n CloudBatchResponse,\n CloudIntegrationResponse,\n CloudReportResponse,\n} from \"../types\";\n\nconst DEFAULT_RETRY_DELAY_MS = 1000;\n\n/**\n * HTTP client for the Clef Pro API.\n * Uses native `fetch()` (Node 18+). Retries once on 5xx or network errors.\n */\nexport class CloudClient {\n private readonly retryDelayMs: number;\n\n constructor(options?: { retryDelayMs?: number }) {\n this.retryDelayMs = options?.retryDelayMs ?? DEFAULT_RETRY_DELAY_MS;\n }\n async fetchIntegration(\n apiUrl: string,\n apiKey: string,\n integrationId: string,\n ): Promise<CloudIntegrationResponse> {\n const url = `${apiUrl}/api/v1/integrations/${encodeURIComponent(integrationId)}`;\n return this.request<CloudIntegrationResponse>(\"GET\", url, apiKey);\n }\n\n async submitReport(\n apiUrl: string,\n apiKey: string,\n report: CloudApiReport,\n ): Promise<CloudReportResponse> {\n const url = `${apiUrl}/api/v1/reports`;\n return this.request<CloudReportResponse>(\"POST\", url, apiKey, report);\n }\n\n async submitBatchReports(\n apiUrl: string,\n apiKey: string,\n batch: CloudBatchPayload,\n ): Promise<CloudBatchResponse> {\n const url = `${apiUrl}/api/v1/reports/batch`;\n return this.request<CloudBatchResponse>(\"POST\", url, apiKey, batch);\n }\n\n private async request<T>(\n method: string,\n url: string,\n apiKey: string,\n body?: unknown,\n ): Promise<T> {\n const headers: Record<string, string> = {\n Authorization: `Bearer ${apiKey}`,\n \"Content-Type\": \"application/json\",\n };\n\n const init: RequestInit = {\n method,\n headers,\n ...(body !== undefined ? { body: JSON.stringify(body) } : {}),\n };\n\n let response: Response;\n try {\n response = await fetch(url, init);\n } catch {\n // Network error \u2014 retry once\n await this.delay(this.retryDelayMs);\n try {\n response = await fetch(url, init);\n } catch (retryErr) {\n throw new CloudApiError(\n `Network error contacting Clef Pro: ${(retryErr as Error).message}`,\n 0,\n \"Check your network connection and CLEF_API_URL.\",\n );\n }\n }\n\n if (response.ok) {\n return (await response.json()) as T;\n }\n\n // 5xx \u2014 retry once\n if (response.status >= 500 && response.status < 600) {\n await this.delay(this.retryDelayMs);\n const retryResponse = await fetch(url, init);\n if (retryResponse.ok) {\n return (await retryResponse.json()) as T;\n }\n throw this.buildError(retryResponse);\n }\n\n // 4xx \u2014 do not retry\n throw this.buildError(response);\n }\n\n private buildError(response: Response): CloudApiError {\n const hint =\n response.status === 401 || response.status === 403\n ? \"Check your API token (--api-token or CLEF_API_TOKEN).\"\n : response.status === 404\n ? \"Check your cloud.integrationId in clef.yaml.\"\n : undefined;\n\n return new CloudApiError(\n `Clef Pro API returned ${response.status} ${response.statusText}`,\n response.status,\n hint,\n );\n }\n\n private delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n", "import { CloudCIContext } from \"../types\";\n\n/**\n * Detects the current CI provider from environment variables and returns\n * a {@link CloudCIContext} with provider, pipeline URL, and trigger info.\n *\n * Returns `undefined` when not running in a CI environment.\n */\nexport function collectCIContext(): CloudCIContext | undefined {\n const env = process.env;\n\n if (env.GITHUB_ACTIONS) {\n const serverUrl = env.GITHUB_SERVER_URL ?? \"https://github.com\";\n const repo = env.GITHUB_REPOSITORY ?? \"\";\n const runId = env.GITHUB_RUN_ID ?? \"\";\n const pipelineUrl = repo && runId ? `${serverUrl}/${repo}/actions/runs/${runId}` : undefined;\n return {\n provider: \"github-actions\",\n pipelineUrl,\n trigger: env.GITHUB_EVENT_NAME,\n };\n }\n\n if (env.GITLAB_CI) {\n return {\n provider: \"gitlab-ci\",\n pipelineUrl: env.CI_PIPELINE_URL,\n trigger: env.CI_PIPELINE_SOURCE,\n };\n }\n\n if (env.CIRCLECI) {\n return {\n provider: \"circleci\",\n pipelineUrl: env.CIRCLE_BUILD_URL,\n };\n }\n\n if (env.CI) {\n return {\n provider: \"unknown\",\n };\n }\n\n return undefined;\n}\n", "import { EncryptionBackend } from \"../types\";\n\n/** Status of a single key in a three-way merge. */\nexport type MergeKeyStatus = \"unchanged\" | \"ours\" | \"theirs\" | \"both_added\" | \"conflict\";\n\n/** One key's resolution in the three-way merge. */\nexport interface MergeKey {\n key: string;\n status: MergeKeyStatus;\n /** Resolved value when status is not \"conflict\". `null` for deletions or unresolvable conflicts. */\n value: string | null;\n /** Base value (common ancestor). `null` if the key did not exist in base. */\n baseValue: string | null;\n /** Value from ours. `null` if the key was deleted or absent in ours. */\n oursValue: string | null;\n /** Value from theirs. `null` if the key was deleted or absent in theirs. */\n theirsValue: string | null;\n}\n\n/** Result of a three-way merge. */\nexport interface MergeResult {\n /** `true` when all keys merged cleanly with no conflicts. */\n clean: boolean;\n /** The merged key/value map. Only complete when `clean` is `true`. */\n merged: Record<string, string>;\n /** Per-key resolution details. */\n keys: MergeKey[];\n /** Keys that could not be auto-resolved. Empty when `clean` is `true`. */\n conflicts: MergeKey[];\n}\n\n/**\n * Three-way merge driver for SOPS-encrypted files.\n *\n * Decrypts the base (common ancestor), ours (current branch), and theirs (incoming branch)\n * versions of a file, performs a three-way merge on the plaintext key/value maps, and\n * returns the merged result for re-encryption.\n *\n * @example\n * ```ts\n * const driver = new SopsMergeDriver(sopsClient);\n * const result = await driver.mergeFiles(basePath, oursPath, theirsPath);\n * if (result.clean) {\n * await sopsClient.encrypt(oursPath, result.merged, manifest, environment);\n * }\n * ```\n */\nexport class SopsMergeDriver {\n constructor(private readonly sopsClient: EncryptionBackend) {}\n\n /**\n * Perform a three-way merge on three in-memory key/value maps.\n *\n * Algorithm: For each key across all three maps, compare ours and theirs against base.\n * - If only one side changed relative to base, take that side's value.\n * - If both sides made the same change, take either (they agree).\n * - If both sides made different changes to the same key, it's a conflict.\n * - If a key was added on both sides with the same value, accept it.\n * - If a key was added on both sides with different values, it's a conflict.\n */\n merge(\n base: Record<string, string>,\n ours: Record<string, string>,\n theirs: Record<string, string>,\n ): MergeResult {\n const allKeys = new Set([...Object.keys(base), ...Object.keys(ours), ...Object.keys(theirs)]);\n\n const merged: Record<string, string> = {};\n const keys: MergeKey[] = [];\n const conflicts: MergeKey[] = [];\n\n for (const key of allKeys) {\n const inBase = key in base;\n const inOurs = key in ours;\n const inTheirs = key in theirs;\n const baseVal = inBase ? base[key] : null;\n const oursVal = inOurs ? ours[key] : null;\n const theirsVal = inTheirs ? theirs[key] : null;\n\n const oursChanged = oursVal !== baseVal;\n const theirsChanged = theirsVal !== baseVal;\n\n let status: MergeKeyStatus;\n let value: string | null;\n\n if (!oursChanged && !theirsChanged) {\n // Neither side changed this key relative to base\n status = \"unchanged\";\n value = baseVal;\n } else if (oursChanged && !theirsChanged) {\n // Only ours changed (including additions and deletions)\n status = \"ours\";\n value = oursVal;\n } else if (!oursChanged && theirsChanged) {\n // Only theirs changed (including additions and deletions)\n status = \"theirs\";\n value = theirsVal;\n } else if (oursVal === theirsVal) {\n // Both changed to the same value (or both deleted)\n status = !inBase && inOurs && inTheirs ? \"both_added\" : \"ours\";\n value = oursVal;\n } else {\n // Both changed to different values \u2014 conflict\n status = \"conflict\";\n value = null;\n }\n\n const mergeKey: MergeKey = {\n key,\n status,\n value,\n baseValue: baseVal,\n oursValue: oursVal,\n theirsValue: theirsVal,\n };\n keys.push(mergeKey);\n\n if (status === \"conflict\") {\n conflicts.push(mergeKey);\n } else if (value !== null) {\n merged[key] = value;\n }\n // value === null && status !== \"conflict\" means the key was deleted \u2014 omit from merged\n }\n\n // Sort keys alphabetically for stable output\n keys.sort((a, b) => a.key.localeCompare(b.key));\n conflicts.sort((a, b) => a.key.localeCompare(b.key));\n\n return { clean: conflicts.length === 0, merged, keys, conflicts };\n }\n\n /**\n * Decrypt three file versions and perform a three-way merge.\n *\n * @param basePath - Path to the common ancestor file (git %O).\n * @param oursPath - Path to the current branch file (git %A).\n * @param theirsPath - Path to the incoming branch file (git %B).\n * @returns The merge result. When `clean` is `true`, `merged` contains the resolved values.\n */\n async mergeFiles(basePath: string, oursPath: string, theirsPath: string): Promise<MergeResult> {\n const [baseDecrypted, oursDecrypted, theirsDecrypted] = await Promise.all([\n this.sopsClient.decrypt(basePath),\n this.sopsClient.decrypt(oursPath),\n this.sopsClient.decrypt(theirsPath),\n ]);\n\n return this.merge(baseDecrypted.values, oursDecrypted.values, theirsDecrypted.values);\n }\n}\n", "import * as fs from \"fs\";\nimport * as os from \"os\";\nimport * as path from \"path\";\nimport * as YAML from \"yaml\";\nimport {\n ClefManifest,\n EncryptionBackend,\n KmsConfig,\n ServiceIdentityDefinition,\n ServiceIdentityDriftIssue,\n ServiceIdentityEnvironmentConfig,\n isKmsEnvelope,\n} from \"../types\";\nimport { generateAgeIdentity } from \"../age/keygen\";\nimport { MatrixManager } from \"../matrix/manager\";\nimport { CLEF_MANIFEST_FILENAME } from \"../manifest/parser\";\n\n/**\n * Thrown when key rotation partially completes before a failure.\n * Contains the private keys for environments that were successfully rotated.\n */\nexport class PartialRotationError extends Error {\n constructor(\n message: string,\n public readonly rotatedKeys: Record<string, string>,\n ) {\n super(message);\n this.name = \"PartialRotationError\";\n }\n}\n\n/**\n * Manages service identities: creation, listing, key rotation, and drift validation.\n *\n * @example\n * ```ts\n * const manager = new ServiceIdentityManager(sopsClient, matrixManager);\n * const result = await manager.create(\"api-gw\", [\"api\"], \"API gateway\", manifest, repoRoot);\n * ```\n */\nexport class ServiceIdentityManager {\n constructor(\n private readonly encryption: EncryptionBackend,\n private readonly matrixManager: MatrixManager,\n ) {}\n\n /**\n * Create a new service identity with per-environment age key pairs or KMS envelope config.\n * For age-only: generates keys, updates the manifest, and registers public keys as SOPS recipients.\n * For KMS: stores KMS config in manifest, no age keys generated.\n *\n * @param kmsEnvConfigs - Optional per-environment KMS config. When provided, those envs use\n * KMS envelope encryption instead of generating age keys.\n * @returns The created identity definition and the per-environment private keys (empty for KMS envs).\n */\n async create(\n name: string,\n namespaces: string[],\n description: string,\n manifest: ClefManifest,\n repoRoot: string,\n kmsEnvConfigs?: Record<string, KmsConfig>,\n ): Promise<{\n identity: ServiceIdentityDefinition;\n privateKeys: Record<string, string>;\n }> {\n // Validate name uniqueness\n if (manifest.service_identities?.some((si) => si.name === name)) {\n throw new Error(`Service identity '${name}' already exists.`);\n }\n\n // Validate namespace references\n const validNamespaces = new Set(manifest.namespaces.map((ns) => ns.name));\n for (const ns of namespaces) {\n if (!validNamespaces.has(ns)) {\n throw new Error(`Namespace '${ns}' not found in manifest.`);\n }\n }\n\n // Generate per-environment config\n const environments: Record<string, ServiceIdentityEnvironmentConfig> = {};\n const privateKeys: Record<string, string> = {};\n\n for (const env of manifest.environments) {\n const kmsConfig = kmsEnvConfigs?.[env.name];\n if (kmsConfig) {\n // KMS envelope path \u2014 no age keys generated\n environments[env.name] = { kms: kmsConfig };\n } else {\n // Age-only path\n const identity = await generateAgeIdentity();\n environments[env.name] = { recipient: identity.publicKey };\n privateKeys[env.name] = identity.privateKey;\n }\n }\n\n const definition: ServiceIdentityDefinition = {\n name,\n description,\n namespaces,\n environments,\n };\n\n // Register public keys as SOPS recipients on scoped files BEFORE writing\n // the manifest, so a registration failure doesn't leave orphaned state.\n // (Only for age-only environments \u2014 KMS envs have no recipient to register.)\n await this.registerRecipients(definition, manifest, repoRoot);\n\n // Update manifest on disk\n const manifestPath = path.join(repoRoot, CLEF_MANIFEST_FILENAME);\n const raw = fs.readFileSync(manifestPath, \"utf-8\");\n const doc = YAML.parse(raw) as Record<string, unknown>;\n\n if (!Array.isArray(doc.service_identities)) {\n doc.service_identities = [];\n }\n (doc.service_identities as unknown[]).push({\n name,\n description,\n namespaces,\n environments,\n });\n const tmpCreate = path.join(os.tmpdir(), `clef-manifest-${process.pid}-${Date.now()}.tmp`);\n try {\n fs.writeFileSync(tmpCreate, YAML.stringify(doc), \"utf-8\");\n fs.renameSync(tmpCreate, manifestPath);\n } finally {\n try {\n fs.unlinkSync(tmpCreate);\n } catch {\n // Already renamed or never written \u2014 ignore\n }\n }\n\n return { identity: definition, privateKeys };\n }\n\n /**\n * List all service identities from the manifest.\n */\n list(manifest: ClefManifest): ServiceIdentityDefinition[] {\n return manifest.service_identities ?? [];\n }\n\n /**\n * Get a single service identity by name.\n */\n get(manifest: ClefManifest, name: string): ServiceIdentityDefinition | undefined {\n return manifest.service_identities?.find((si) => si.name === name);\n }\n\n /**\n * Delete a service identity: remove its recipients from scoped SOPS files\n * and remove it from the manifest.\n */\n async delete(name: string, manifest: ClefManifest, repoRoot: string): Promise<void> {\n const identity = this.get(manifest, name);\n if (!identity) {\n throw new Error(`Service identity '${name}' not found.`);\n }\n\n // Remove age recipients from scoped files\n const cells = this.matrixManager.resolveMatrix(manifest, repoRoot).filter((c) => c.exists);\n for (const cell of cells) {\n if (!identity.namespaces.includes(cell.namespace)) continue;\n const envConfig = identity.environments[cell.environment];\n if (!envConfig?.recipient) continue;\n if (isKmsEnvelope(envConfig)) continue;\n\n try {\n await this.encryption.removeRecipient(cell.filePath, envConfig.recipient);\n } catch {\n // May not be a current recipient\n }\n }\n\n // Remove from manifest on disk\n const manifestPath = path.join(repoRoot, CLEF_MANIFEST_FILENAME);\n const raw = fs.readFileSync(manifestPath, \"utf-8\");\n const doc = YAML.parse(raw) as Record<string, unknown>;\n const identities = doc.service_identities as Record<string, unknown>[];\n if (Array.isArray(identities)) {\n doc.service_identities = identities.filter(\n (si) => (si as Record<string, unknown>).name !== name,\n );\n }\n const tmp = path.join(os.tmpdir(), `clef-manifest-${process.pid}-${Date.now()}.tmp`);\n try {\n fs.writeFileSync(tmp, YAML.stringify(doc), \"utf-8\");\n fs.renameSync(tmp, manifestPath);\n } finally {\n try {\n fs.unlinkSync(tmp);\n } catch {\n // Already renamed or never written \u2014 ignore\n }\n }\n }\n\n /**\n * Update environment backends on an existing service identity.\n * Switches age \u2192 KMS (removes old recipient) or updates KMS config.\n * Returns new private keys for any environments switched from KMS \u2192 age.\n */\n async updateEnvironments(\n name: string,\n kmsEnvConfigs: Record<string, KmsConfig>,\n manifest: ClefManifest,\n repoRoot: string,\n ): Promise<{ privateKeys: Record<string, string> }> {\n const identity = this.get(manifest, name);\n if (!identity) {\n throw new Error(`Service identity '${name}' not found.`);\n }\n\n const manifestPath = path.join(repoRoot, CLEF_MANIFEST_FILENAME);\n const raw = fs.readFileSync(manifestPath, \"utf-8\");\n const doc = YAML.parse(raw) as Record<string, unknown>;\n const identities = doc.service_identities as Record<string, unknown>[];\n const siDoc = identities.find((si) => (si as Record<string, unknown>).name === name) as Record<\n string,\n unknown\n >;\n const envs = siDoc.environments as Record<string, Record<string, unknown>>;\n\n const cells = this.matrixManager.resolveMatrix(manifest, repoRoot).filter((c) => c.exists);\n const privateKeys: Record<string, string> = {};\n\n for (const [envName, kmsConfig] of Object.entries(kmsEnvConfigs)) {\n const oldConfig = identity.environments[envName];\n if (!oldConfig) {\n throw new Error(`Environment '${envName}' not found on identity '${name}'.`);\n }\n\n // If switching from age \u2192 KMS, remove the old age recipient from scoped files\n if (oldConfig.recipient) {\n const scopedCells = cells.filter(\n (c) => identity.namespaces.includes(c.namespace) && c.environment === envName,\n );\n for (const cell of scopedCells) {\n try {\n await this.encryption.removeRecipient(cell.filePath, oldConfig.recipient);\n } catch {\n // May not be a current recipient\n }\n }\n }\n\n // Update manifest entry to KMS\n envs[envName] = { kms: kmsConfig };\n identity.environments[envName] = { kms: kmsConfig };\n }\n\n // Write updated manifest\n const tmp = path.join(os.tmpdir(), `clef-manifest-${process.pid}-${Date.now()}.tmp`);\n try {\n fs.writeFileSync(tmp, YAML.stringify(doc), \"utf-8\");\n fs.renameSync(tmp, manifestPath);\n } finally {\n try {\n fs.unlinkSync(tmp);\n } catch {\n // Already renamed or never written \u2014 ignore\n }\n }\n\n return { privateKeys };\n }\n\n /**\n * Register a service identity's public keys as SOPS recipients on scoped matrix files.\n */\n async registerRecipients(\n identity: ServiceIdentityDefinition,\n manifest: ClefManifest,\n repoRoot: string,\n ): Promise<void> {\n const cells = this.matrixManager.resolveMatrix(manifest, repoRoot).filter((c) => c.exists);\n\n for (const cell of cells) {\n if (!identity.namespaces.includes(cell.namespace)) continue;\n\n const envConfig = identity.environments[cell.environment];\n if (!envConfig) continue;\n\n // KMS-backed environments have no recipient to register\n if (isKmsEnvelope(envConfig)) continue;\n if (!envConfig.recipient) continue;\n\n try {\n await this.encryption.addRecipient(cell.filePath, envConfig.recipient);\n } catch (err) {\n // SOPS exits non-zero for duplicate recipients \u2014 safe to ignore.\n // Re-throw genuine I/O or corruption errors.\n const message = err instanceof Error ? err.message : String(err);\n if (!message.includes(\"already\")) {\n throw err;\n }\n }\n }\n }\n\n /**\n * Rotate the age key for a service identity (all envs or a specific env).\n * Returns the new private keys.\n */\n async rotateKey(\n name: string,\n manifest: ClefManifest,\n repoRoot: string,\n environment?: string,\n ): Promise<Record<string, string>> {\n const identity = this.get(manifest, name);\n if (!identity) {\n throw new Error(`Service identity '${name}' not found.`);\n }\n\n const manifestPath = path.join(repoRoot, CLEF_MANIFEST_FILENAME);\n const raw = fs.readFileSync(manifestPath, \"utf-8\");\n const doc = YAML.parse(raw) as Record<string, unknown>;\n const identities = doc.service_identities as Record<string, unknown>[];\n const siDoc = identities.find((si) => (si as Record<string, unknown>).name === name) as Record<\n string,\n unknown\n >;\n const envs = siDoc.environments as Record<string, Record<string, string>>;\n\n const newPrivateKeys: Record<string, string> = {};\n const envsToRotate = environment ? [environment] : Object.keys(identity.environments);\n\n const cells = this.matrixManager.resolveMatrix(manifest, repoRoot).filter((c) => c.exists);\n\n try {\n for (const envName of envsToRotate) {\n const envConfig = identity.environments[envName];\n if (!envConfig) {\n throw new Error(`Environment '${envName}' not found on identity '${name}'.`);\n }\n // KMS-backed environments don't have age keys to rotate\n if (isKmsEnvelope(envConfig)) continue;\n const oldRecipient = envConfig.recipient;\n if (!oldRecipient) {\n throw new Error(`Environment '${envName}' not found on identity '${name}'.`);\n }\n\n const newIdentity = await generateAgeIdentity();\n newPrivateKeys[envName] = newIdentity.privateKey;\n\n // Update manifest\n envs[envName] = { recipient: newIdentity.publicKey };\n\n // Swap recipients on scoped files\n const scopedCells = cells.filter(\n (c) => identity.namespaces.includes(c.namespace) && c.environment === envName,\n );\n for (const cell of scopedCells) {\n try {\n await this.encryption.removeRecipient(cell.filePath, oldRecipient);\n } catch {\n // May not be a current recipient\n }\n try {\n await this.encryption.addRecipient(cell.filePath, newIdentity.publicKey);\n } catch (addErr) {\n // Attempt rollback: re-add old recipient\n try {\n await this.encryption.addRecipient(cell.filePath, oldRecipient);\n } catch {\n throw new Error(\n `Failed to add new recipient to ${cell.namespace}/${cell.environment} and rollback also failed. ` +\n `File may be in an inconsistent state. ` +\n `Old key: ${oldRecipient.slice(0, 12)}..., New key: ${newIdentity.publicKey.slice(0, 12)}...`,\n );\n }\n throw addErr;\n }\n }\n }\n } catch (err) {\n if (Object.keys(newPrivateKeys).length > 0) {\n const partialErr = new PartialRotationError(\n `Rotation failed after rotating ${Object.keys(newPrivateKeys).join(\", \")}: ${(err as Error).message}`,\n newPrivateKeys,\n );\n throw partialErr;\n }\n throw err;\n }\n\n const tmpRotate = path.join(os.tmpdir(), `clef-manifest-${process.pid}-${Date.now()}.tmp`);\n try {\n fs.writeFileSync(tmpRotate, YAML.stringify(doc), \"utf-8\");\n fs.renameSync(tmpRotate, manifestPath);\n } finally {\n try {\n fs.unlinkSync(tmpRotate);\n } catch {\n // Already renamed or never written \u2014 ignore\n }\n }\n return newPrivateKeys;\n }\n\n /**\n * Validate service identities and return drift issues.\n */\n async validate(manifest: ClefManifest, repoRoot: string): Promise<ServiceIdentityDriftIssue[]> {\n const issues: ServiceIdentityDriftIssue[] = [];\n const identities = manifest.service_identities ?? [];\n\n if (identities.length === 0) return issues;\n\n const declaredEnvNames = new Set(manifest.environments.map((e) => e.name));\n const declaredNsNames = new Set(manifest.namespaces.map((ns) => ns.name));\n const cells = this.matrixManager.resolveMatrix(manifest, repoRoot).filter((c) => c.exists);\n\n for (const si of identities) {\n // Check namespace references\n for (const ns of si.namespaces) {\n if (!declaredNsNames.has(ns)) {\n issues.push({\n identity: si.name,\n namespace: ns,\n type: \"namespace_not_found\",\n message: `Service identity '${si.name}' references non-existent namespace '${ns}'.`,\n });\n }\n }\n\n // Check environment coverage\n for (const envName of declaredEnvNames) {\n if (!(envName in si.environments)) {\n issues.push({\n identity: si.name,\n environment: envName,\n type: \"missing_environment\",\n message: `Service identity '${si.name}' is missing environment '${envName}'. Manually add an age key pair for this environment in clef.yaml.`,\n });\n }\n }\n\n // Check recipient registration on scoped files\n // (KMS-backed environments skip recipient checks \u2014 no recipient to register)\n for (const cell of cells) {\n const envConfig = si.environments[cell.environment];\n if (!envConfig) continue;\n if (isKmsEnvelope(envConfig)) continue;\n if (!envConfig.recipient) continue;\n\n if (si.namespaces.includes(cell.namespace)) {\n // Should be registered\n try {\n const metadata = await this.encryption.getMetadata(cell.filePath);\n if (!metadata.recipients.includes(envConfig.recipient)) {\n issues.push({\n identity: si.name,\n environment: cell.environment,\n namespace: cell.namespace,\n type: \"recipient_not_registered\",\n message: `Service identity '${si.name}' recipient is not registered in ${cell.namespace}/${cell.environment}.`,\n fixCommand: `clef service create ${si.name} --namespaces ${si.namespaces.join(\",\")}`,\n });\n }\n } catch {\n // Cannot read metadata \u2014 skip\n }\n } else {\n // Should NOT be registered (scope mismatch)\n try {\n const metadata = await this.encryption.getMetadata(cell.filePath);\n if (metadata.recipients.includes(envConfig.recipient)) {\n issues.push({\n identity: si.name,\n environment: cell.environment,\n namespace: cell.namespace,\n type: \"scope_mismatch\",\n message: `Service identity '${si.name}' recipient found in ${cell.namespace}/${cell.environment} but namespace '${cell.namespace}' is not in scope.`,\n fixCommand: `clef recipients remove ${envConfig.recipient} -e ${cell.environment}`,\n });\n }\n } catch {\n // Cannot read metadata \u2014 skip\n }\n }\n }\n }\n\n return issues;\n }\n}\n", "import {\n ClefManifest,\n EncryptionBackend,\n ServiceIdentityDefinition,\n ServiceIdentityEnvironmentConfig,\n} from \"../types\";\nimport { MatrixManager } from \"../matrix/manager\";\n\n/** Resolved identity secrets: merged key/value map plus metadata. */\nexport interface ResolvedSecrets {\n /** Flat key/value map (namespace-prefixed if multi-namespace). */\n values: Record<string, string>;\n /** The matched service identity definition. */\n identity: ServiceIdentityDefinition;\n /** Age public key for the target environment (undefined for KMS identities). */\n recipient?: string;\n /** Full environment config (age-only or KMS). */\n envConfig: ServiceIdentityEnvironmentConfig;\n}\n\n/**\n * Decrypt and merge scoped SOPS files for a service identity + environment.\n *\n * Shared by `ArtifactPacker` (and any future consumers) to avoid duplicating\n * the decrypt-merge-collision-check logic.\n */\nexport async function resolveIdentitySecrets(\n identityName: string,\n environment: string,\n manifest: ClefManifest,\n repoRoot: string,\n encryption: EncryptionBackend,\n matrixManager: MatrixManager,\n): Promise<ResolvedSecrets> {\n const identity = manifest.service_identities?.find((si) => si.name === identityName);\n if (!identity) {\n throw new Error(`Service identity '${identityName}' not found in manifest.`);\n }\n\n const envConfig = identity.environments[environment];\n if (!envConfig) {\n throw new Error(\n `Environment '${environment}' not found on service identity '${identityName}'.`,\n );\n }\n\n const allValues: Record<string, string> = {};\n const cells = matrixManager\n .resolveMatrix(manifest, repoRoot)\n .filter(\n (c) => c.exists && identity.namespaces.includes(c.namespace) && c.environment === environment,\n );\n\n const isMultiNamespace = identity.namespaces.length > 1;\n const collisions: string[] = [];\n\n for (const cell of cells) {\n const decrypted = await encryption.decrypt(cell.filePath);\n for (const [key, value] of Object.entries(decrypted.values)) {\n const qualifiedKey = isMultiNamespace ? `${cell.namespace}__${key}` : key;\n if (qualifiedKey in allValues && allValues[qualifiedKey] !== value) {\n collisions.push(qualifiedKey);\n }\n allValues[qualifiedKey] = value;\n }\n }\n\n if (collisions.length > 0) {\n throw new Error(\n `Key collision detected in bundle: ${collisions.join(\", \")}. ` +\n \"Keys with the same name but different values exist across namespaces.\",\n );\n }\n\n return {\n values: allValues,\n identity,\n recipient: envConfig.recipient,\n envConfig,\n };\n}\n", "import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as crypto from \"crypto\";\nimport { ClefManifest, EncryptionBackend, isKmsEnvelope } from \"../types\";\nimport { KmsProvider } from \"../kms\";\nimport { MatrixManager } from \"../matrix/manager\";\nimport { PackConfig, PackResult, PackedArtifact } from \"./types\";\nimport { resolveIdentitySecrets } from \"./resolve\";\nimport { buildSigningPayload, signEd25519, signKms } from \"./signer\";\n\n/**\n * Packs an encrypted artifact for a service identity + environment.\n *\n * The artifact is a JSON envelope containing age-encrypted secrets that can\n * be fetched by the runtime agent via HTTP or local file.\n */\nexport class ArtifactPacker {\n constructor(\n private readonly encryption: EncryptionBackend,\n private readonly matrixManager: MatrixManager,\n private readonly kms?: KmsProvider,\n ) {}\n\n /**\n * Pack an artifact: decrypt scoped SOPS files, age-encrypt the merged\n * values to the service identity's recipient, and write a JSON envelope.\n */\n async pack(config: PackConfig, manifest: ClefManifest, repoRoot: string): Promise<PackResult> {\n if (config.signingKey && config.signingKmsKeyId) {\n throw new Error(\n \"Cannot specify both signingKey (Ed25519) and signingKmsKeyId (KMS). Choose one.\",\n );\n }\n\n const resolved = await resolveIdentitySecrets(\n config.identity,\n config.environment,\n manifest,\n repoRoot,\n this.encryption,\n this.matrixManager,\n );\n\n const plaintext = JSON.stringify(resolved.values);\n\n let ciphertext: string;\n let artifact: PackedArtifact;\n\n if (isKmsEnvelope(resolved.envConfig)) {\n // KMS envelope path\n if (!this.kms) {\n throw new Error(\"KMS provider required for envelope encryption but none was provided.\");\n }\n\n // Generate ephemeral age key pair\n const { generateIdentity, identityToRecipient, Encrypter } = await import(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- dynamic ESM import of CJS-incompatible package\n \"age-encryption\" as any\n );\n const ephemeralPrivateKey = (await generateIdentity()) as string;\n const ephemeralPublicKey = (await identityToRecipient(ephemeralPrivateKey)) as string;\n\n try {\n const e = new Encrypter();\n e.addRecipient(ephemeralPublicKey);\n const encrypted = await e.encrypt(plaintext);\n ciphertext = Buffer.from(encrypted as Uint8Array).toString(\"base64\");\n } catch {\n throw new Error(\"Failed to age-encrypt artifact with ephemeral key.\");\n }\n\n // Wrap the ephemeral private key with KMS\n const kmsConfig = resolved.envConfig.kms;\n const wrapped = await this.kms.wrap(kmsConfig.keyId, Buffer.from(ephemeralPrivateKey));\n\n const revision = `${Date.now()}-${crypto.randomBytes(4).toString(\"hex\")}`;\n const ciphertextHash = crypto.createHash(\"sha256\").update(ciphertext).digest(\"hex\");\n\n artifact = {\n version: 1,\n identity: config.identity,\n environment: config.environment,\n packedAt: new Date().toISOString(),\n revision,\n ciphertextHash,\n ciphertext,\n keys: Object.keys(resolved.values),\n envelope: {\n provider: kmsConfig.provider,\n keyId: kmsConfig.keyId,\n wrappedKey: wrapped.wrappedKey.toString(\"base64\"),\n algorithm: wrapped.algorithm,\n },\n };\n } else {\n // Age-only path (v1, unchanged)\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- dynamic ESM import of CJS-incompatible package\n const { Encrypter } = await import(\"age-encryption\" as any);\n const e = new Encrypter();\n e.addRecipient(resolved.recipient!);\n const encrypted = await e.encrypt(plaintext);\n ciphertext = Buffer.from(encrypted as Uint8Array).toString(\"base64\");\n } catch {\n throw new Error(\"Failed to age-encrypt artifact. Check recipient key.\");\n }\n\n const revision = `${Date.now()}-${crypto.randomBytes(4).toString(\"hex\")}`;\n const ciphertextHash = crypto.createHash(\"sha256\").update(ciphertext).digest(\"hex\");\n\n artifact = {\n version: 1,\n identity: config.identity,\n environment: config.environment,\n packedAt: new Date().toISOString(),\n revision,\n ciphertextHash,\n ciphertext,\n keys: Object.keys(resolved.values),\n };\n }\n\n const outputDir = path.dirname(config.outputPath);\n if (!fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, { recursive: true });\n }\n\n // Set expiresAt before signing \u2014 the signature covers this field\n if (config.ttl && config.ttl > 0) {\n artifact.expiresAt = new Date(Date.now() + config.ttl * 1000).toISOString();\n }\n\n // Sign the artifact if a signing key is provided\n if (config.signingKey) {\n const payload = buildSigningPayload(artifact);\n artifact.signature = signEd25519(payload, config.signingKey);\n artifact.signatureAlgorithm = \"Ed25519\";\n } else if (config.signingKmsKeyId) {\n if (!this.kms) {\n throw new Error(\"KMS provider required for KMS signing but none was provided.\");\n }\n const payload = buildSigningPayload(artifact);\n artifact.signature = await signKms(payload, this.kms, config.signingKmsKeyId);\n artifact.signatureAlgorithm = \"ECDSA_SHA256\";\n }\n\n const json = JSON.stringify(artifact, null, 2);\n const tmpOutput = `${config.outputPath}.tmp.${process.pid}`;\n fs.writeFileSync(tmpOutput, json, \"utf-8\");\n fs.renameSync(tmpOutput, config.outputPath);\n\n return {\n outputPath: config.outputPath,\n namespaceCount: resolved.identity.namespaces.length,\n keyCount: Object.keys(resolved.values).length,\n artifactSize: Buffer.byteLength(json, \"utf-8\"),\n revision: artifact.revision,\n };\n }\n}\n", "import * as crypto from \"crypto\";\nimport type { PackedArtifact, SignatureAlgorithm } from \"./types\";\nimport type { KmsProvider } from \"../kms\";\n\n/**\n * Build the canonical signing payload from an artifact.\n *\n * The payload is a deterministic newline-separated string of all\n * security-relevant fields. The signature covers everything the\n * runtime acts on \u2014 version, identity, environment, revision, timing,\n * integrity hash, key list, expiry, and envelope fields.\n *\n * `ciphertextHash` transitively covers the ciphertext content, so the\n * (potentially large) ciphertext itself is not included.\n *\n * Keys are sorted to ensure deterministic ordering regardless of\n * insertion order in the source object.\n */\nexport function buildSigningPayload(artifact: PackedArtifact): Buffer {\n const fields = [\n \"clef-sig-v1\",\n String(artifact.version),\n artifact.identity,\n artifact.environment,\n artifact.revision,\n artifact.packedAt,\n artifact.ciphertextHash,\n [...artifact.keys].sort().join(\",\"),\n artifact.expiresAt ?? \"\",\n artifact.envelope?.provider ?? \"\",\n artifact.envelope?.keyId ?? \"\",\n artifact.envelope?.wrappedKey ?? \"\",\n artifact.envelope?.algorithm ?? \"\",\n ];\n return Buffer.from(fields.join(\"\\n\"), \"utf-8\");\n}\n\n/**\n * Generate an Ed25519 signing key pair.\n * Returns base64-encoded DER keys (SPKI for public, PKCS8 for private).\n */\nexport function generateSigningKeyPair(): { publicKey: string; privateKey: string } {\n const pair = crypto.generateKeyPairSync(\"ed25519\");\n return {\n publicKey: (pair.publicKey.export({ type: \"spki\", format: \"der\" }) as Buffer).toString(\n \"base64\",\n ),\n privateKey: (pair.privateKey.export({ type: \"pkcs8\", format: \"der\" }) as Buffer).toString(\n \"base64\",\n ),\n };\n}\n\n/**\n * Sign an artifact payload with an Ed25519 private key.\n *\n * @param payload - Canonical signing payload from {@link buildSigningPayload}\n * @param privateKeyBase64 - Base64-encoded DER PKCS8 private key\n * @returns Base64-encoded Ed25519 signature\n */\nexport function signEd25519(payload: Buffer, privateKeyBase64: string): string {\n const keyObj = crypto.createPrivateKey({\n key: Buffer.from(privateKeyBase64, \"base64\"),\n format: \"der\",\n type: \"pkcs8\",\n });\n const signature = crypto.sign(null, payload, keyObj);\n return signature.toString(\"base64\");\n}\n\n/**\n * Sign an artifact payload with a KMS asymmetric signing key (ECDSA_SHA_256).\n *\n * The KMS `sign` method receives a SHA-256 digest (not the raw payload),\n * matching AWS KMS `MessageType: \"DIGEST\"` semantics.\n *\n * @param payload - Canonical signing payload from {@link buildSigningPayload}\n * @param kms - KMS provider with `sign` method\n * @param signingKeyId - ARN or ID of the KMS asymmetric signing key\n * @returns Base64-encoded ECDSA signature\n */\nexport async function signKms(\n payload: Buffer,\n kms: KmsProvider,\n signingKeyId: string,\n): Promise<string> {\n if (!kms.sign) {\n throw new Error(\n \"KMS provider does not support signing. Ensure the provider implements the sign() method.\",\n );\n }\n const digest = crypto.createHash(\"sha256\").update(payload).digest();\n const signature = await kms.sign(signingKeyId, digest);\n return signature.toString(\"base64\");\n}\n\n/**\n * Verify a signature against a public key.\n *\n * The algorithm is derived from the key's type (Ed25519 or EC), not from\n * the artifact's claimed `signatureAlgorithm` field. This prevents an\n * attacker from downgrading the verification algorithm.\n *\n * @param payload - Canonical signing payload from {@link buildSigningPayload}\n * @param signatureBase64 - Base64-encoded signature to verify\n * @param publicKeyBase64 - Base64-encoded DER SPKI public key\n * @returns true if the signature is valid\n */\nexport function verifySignature(\n payload: Buffer,\n signatureBase64: string,\n publicKeyBase64: string,\n): boolean {\n const keyObj = crypto.createPublicKey({\n key: Buffer.from(publicKeyBase64, \"base64\"),\n format: \"der\",\n type: \"spki\",\n });\n const signature = Buffer.from(signatureBase64, \"base64\");\n\n const keyType = keyObj.asymmetricKeyType;\n if (keyType === \"ed25519\") {\n return crypto.verify(null, payload, keyObj, signature);\n }\n if (keyType === \"ec\") {\n return crypto.verify(\"sha256\", payload, keyObj, signature);\n }\n throw new Error(`Unsupported key type for signature verification: ${keyType}`);\n}\n\n/**\n * Detect the signature algorithm from a DER SPKI public key.\n *\n * @param publicKeyBase64 - Base64-encoded DER SPKI public key\n * @returns The corresponding SignatureAlgorithm\n */\nexport function detectAlgorithm(publicKeyBase64: string): SignatureAlgorithm {\n const keyObj = crypto.createPublicKey({\n key: Buffer.from(publicKeyBase64, \"base64\"),\n format: \"der\",\n type: \"spki\",\n });\n const keyType = keyObj.asymmetricKeyType;\n if (keyType === \"ed25519\") return \"Ed25519\";\n if (keyType === \"ec\") return \"ECDSA_SHA256\";\n throw new Error(`Unsupported key type: ${keyType}`);\n}\n"],
5
- "mappings": "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lB,cAAM,MAAM,MAAM,KAAK,EAAE;AACzB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,CAAC;AACxB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,CAAC;AACxB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,EAAE;AACzB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,EAAE;AACzB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,CAAC;AACxB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,CAAC;AACxB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,EAAE;AACzB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,EAAE;AACzB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,CAAC;AACxB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,CAAC;AACxB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,EAAE;AACzB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,EAAE;AACzB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,CAAC;AACxB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,CAAC;AACxB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,EAAE;AACzB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,EAAE;AACzB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,CAAC;AACxB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,CAAC;AACxB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,EAAE;AACzB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,EAAE;AACzB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,CAAC;AACxB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,CAAC;AACxB,cAAM,MAAM,MAAM;AAClB,c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",
6
- "names": ["exports", "module", "__defProp", "__getOwnPropDesc", "__getOwnPropNames", "__hasOwnProp", "__export", "__copyProps", "__toCommonJS", "randomBytes", "join", "randomBytes3", "sign", "verify", "randomBytes4", "parse", "fs", "path", "fs", "fs", "path", "YAML", "fs", "path", "crypto", "YAML", "fs", "YAML", "path", "path", "fs", "path", "fs", "YAML", "fs", "path", "fs", "path", "path", "path", "path", "YAML", "parse", "parse", "existingKeys", "decrypted", "fs", "path", "YAML", "fs", "path", "YAML", "HEADER_COMMENT", "fs", "path", "YAML", "fs", "path", "YAML", "fs", "path", "YAML", "fs", "path", "crypto", "crypto"]
3
+ "sources": ["age-encryption-cjs:age-encryption", "../src/index.ts", "../src/types/index.ts", "../src/manifest/parser.ts", "../src/recipients/validator.ts", "../src/scanner/index.ts", "../src/scanner/patterns.ts", "../src/scanner/ignore.ts", "../src/matrix/manager.ts", "../src/pending/metadata.ts", "../src/sops/keys.ts", "../src/schema/validator.ts", "../src/diff/engine.ts", "../src/bulk/ops.ts", "../src/git/integration.ts", "../src/sops/client.ts", "../src/sops/resolver.ts", "../src/sops/bundled.ts", "../src/dependencies/checker.ts", "../src/age/keygen.ts", "../src/lint/runner.ts", "../src/consumption/client.ts", "../src/import/index.ts", "../src/import/parsers.ts", "../src/recipients/index.ts", "../src/recipients/requests.ts", "../src/drift/detector.ts", "../src/report/generator.ts", "../src/report/sanitizer.ts", "../src/report/transformer.ts", "../src/report/cloud-client.ts", "../src/report/ci-context.ts", "../src/merge/driver.ts", "../src/service-identity/manager.ts", "../src/artifact/resolve.ts", "../src/artifact/packer.ts", "../src/artifact/signer.ts", "../src/kms/types.ts"],
4
+ "sourcesContent": ["var __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod3) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod3);\n\n// <stdin>\nvar stdin_exports = {};\n__export(stdin_exports, {\n Decrypter: () => Decrypter,\n Encrypter: () => Encrypter,\n Stanza: () => Stanza,\n armor: () => armor_exports,\n generateHybridIdentity: () => generateHybridIdentity,\n generateIdentity: () => generateIdentity,\n generateX25519Identity: () => generateX25519Identity,\n identityToRecipient: () => identityToRecipient,\n webauthn: () => webauthn_exports\n});\nmodule.exports = __toCommonJS(stdin_exports);\n\n// ../../node_modules/age-encryption/node_modules/@noble/hashes/utils.js\nfunction isBytes(a) {\n return a instanceof Uint8Array || ArrayBuffer.isView(a) && a.constructor.name === \"Uint8Array\";\n}\nfunction anumber(n, title = \"\") {\n if (!Number.isSafeInteger(n) || n < 0) {\n const prefix2 = title && `\"${title}\" `;\n throw new Error(`${prefix2}expected integer >= 0, got ${n}`);\n }\n}\nfunction abytes(value, length, title = \"\") {\n const bytes = isBytes(value);\n const len = value?.length;\n const needsLen = length !== void 0;\n if (!bytes || needsLen && len !== length) {\n const prefix2 = title && `\"${title}\" `;\n const ofLen = needsLen ? ` of length ${length}` : \"\";\n const got = bytes ? `length=${len}` : `type=${typeof value}`;\n throw new Error(prefix2 + \"expected Uint8Array\" + ofLen + \", got \" + got);\n }\n return value;\n}\nfunction ahash(h) {\n if (typeof h !== \"function\" || typeof h.create !== \"function\")\n throw new Error(\"Hash must wrapped by utils.createHasher\");\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\nfunction 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}\nfunction aoutput(out, instance) {\n abytes(out, void 0, \"digestInto() output\");\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('\"digestInto() output\" expected to be of length >=' + min);\n }\n}\nfunction u32(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\nfunction clean(...arrays) {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\nfunction createView(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\nfunction rotr(word, shift) {\n return word << 32 - shift | word >>> shift;\n}\nfunction rotl(word, shift) {\n return word << shift | word >>> 32 - shift >>> 0;\n}\nvar isLE = /* @__PURE__ */ (() => new Uint8Array(new Uint32Array([287454020]).buffer)[0] === 68)();\nfunction byteSwap(word) {\n return word << 24 & 4278190080 | word << 8 & 16711680 | word >>> 8 & 65280 | word >>> 24 & 255;\n}\nfunction byteSwap32(arr) {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\nvar swap32IfBE = isLE ? (u) => u : byteSwap32;\nfunction utf8ToBytes(str) {\n if (typeof str !== \"string\")\n throw new Error(\"string expected\");\n return new Uint8Array(new TextEncoder().encode(str));\n}\nfunction kdfInputToBytes(data, errorTitle = \"\") {\n if (typeof data === \"string\")\n return utf8ToBytes(data);\n return abytes(data, void 0, errorTitle);\n}\nfunction checkOpts(defaults, opts2) {\n if (opts2 !== void 0 && {}.toString.call(opts2) !== \"[object Object]\")\n throw new Error(\"options must be object or undefined\");\n const merged = Object.assign(defaults, opts2);\n return merged;\n}\nfunction createHasher(hashCons, info = {}) {\n const hashC = (msg, opts2) => hashCons(opts2).update(msg).digest();\n const tmp = hashCons(void 0);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts2) => hashCons(opts2);\n Object.assign(hashC, info);\n return Object.freeze(hashC);\n}\nfunction randomBytes(bytesLength = 32) {\n const cr = typeof globalThis === \"object\" ? globalThis.crypto : null;\n if (typeof cr?.getRandomValues !== \"function\")\n throw new Error(\"crypto.getRandomValues must be defined\");\n return cr.getRandomValues(new Uint8Array(bytesLength));\n}\nvar oidNist = (suffix) => ({\n oid: Uint8Array.from([6, 9, 96, 134, 72, 1, 101, 3, 4, 2, suffix])\n});\n\n// ../../node_modules/age-encryption/node_modules/@noble/hashes/hmac.js\nvar _HMAC = class {\n oHash;\n iHash;\n blockLen;\n outputLen;\n finished = false;\n destroyed = false;\n constructor(hash, key) {\n ahash(hash);\n abytes(key, void 0, \"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 pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 54;\n this.iHash.update(pad);\n this.oHash = hash.create();\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 54 ^ 92;\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, \"output\");\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 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};\nvar hmac = (hash, key, message) => new _HMAC(hash, key).update(message).digest();\nhmac.create = (hash, key) => new _HMAC(hash, key);\n\n// ../../node_modules/age-encryption/node_modules/@noble/hashes/hkdf.js\nfunction extract(hash, ikm, salt) {\n ahash(hash);\n if (salt === void 0)\n salt = new Uint8Array(hash.outputLen);\n return hmac(hash, salt, ikm);\n}\nvar HKDF_COUNTER = /* @__PURE__ */ Uint8Array.of(0);\nvar EMPTY_BUFFER = /* @__PURE__ */ Uint8Array.of();\nfunction expand(hash, prk, info, length = 32) {\n ahash(hash);\n anumber(length, \"length\");\n const olen = hash.outputLen;\n if (length > 255 * olen)\n throw new Error(\"Length must be <= 255*HashLen\");\n const blocks = Math.ceil(length / olen);\n if (info === void 0)\n info = EMPTY_BUFFER;\n else\n abytes(info, void 0, \"info\");\n const okm = new Uint8Array(blocks * olen);\n const HMAC = hmac.create(hash, prk);\n const HMACTmp = HMAC._cloneInto();\n const T = new Uint8Array(HMAC.outputLen);\n for (let counter = 0; counter < blocks; counter++) {\n HKDF_COUNTER[0] = counter + 1;\n HMACTmp.update(counter === 0 ? EMPTY_BUFFER : T).update(info).update(HKDF_COUNTER).digestInto(T);\n okm.set(T, olen * counter);\n HMAC._cloneInto(HMACTmp);\n }\n HMAC.destroy();\n HMACTmp.destroy();\n clean(T, HKDF_COUNTER);\n return okm.slice(0, length);\n}\nvar hkdf = (hash, ikm, salt, info, length) => expand(hash, extract(hash, ikm, salt), info, length);\n\n// ../../node_modules/age-encryption/node_modules/@noble/hashes/_md.js\nfunction Chi(a, b, c) {\n return a & b ^ ~a & c;\n}\nfunction Maj(a, b, c) {\n return a & b ^ a & c ^ b & c;\n}\nvar HashMD = class {\n blockLen;\n outputLen;\n padOffset;\n isLE;\n // For partial updates less than block size\n buffer;\n view;\n finished = false;\n length = 0;\n pos = 0;\n destroyed = false;\n constructor(blockLen, outputLen, padOffset, isLE4) {\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE4;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data) {\n aexists(this);\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 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 const { buffer, view, blockLen, isLE: isLE4 } = this;\n let { pos } = this;\n buffer[pos++] = 128;\n clean(this.buffer.subarray(pos));\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n for (let i = pos; i < blockLen; i++)\n buffer[i] = 0;\n view.setBigUint64(blockLen - 8, BigInt(this.length * 8), isLE4);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n if (len % 4)\n throw new Error(\"_sha2: outputLen must 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], isLE4);\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 ||= 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};\nvar SHA256_IV = /* @__PURE__ */ Uint32Array.from([\n 1779033703,\n 3144134277,\n 1013904242,\n 2773480762,\n 1359893119,\n 2600822924,\n 528734635,\n 1541459225\n]);\n\n// ../../node_modules/age-encryption/node_modules/@noble/hashes/sha2.js\nvar SHA256_K = /* @__PURE__ */ Uint32Array.from([\n 1116352408,\n 1899447441,\n 3049323471,\n 3921009573,\n 961987163,\n 1508970993,\n 2453635748,\n 2870763221,\n 3624381080,\n 310598401,\n 607225278,\n 1426881987,\n 1925078388,\n 2162078206,\n 2614888103,\n 3248222580,\n 3835390401,\n 4022224774,\n 264347078,\n 604807628,\n 770255983,\n 1249150122,\n 1555081692,\n 1996064986,\n 2554220882,\n 2821834349,\n 2952996808,\n 3210313671,\n 3336571891,\n 3584528711,\n 113926993,\n 338241895,\n 666307205,\n 773529912,\n 1294757372,\n 1396182291,\n 1695183700,\n 1986661051,\n 2177026350,\n 2456956037,\n 2730485921,\n 2820302411,\n 3259730800,\n 3345764771,\n 3516065817,\n 3600352804,\n 4094571909,\n 275423344,\n 430227734,\n 506948616,\n 659060556,\n 883997877,\n 958139571,\n 1322822218,\n 1537002063,\n 1747873779,\n 1955562222,\n 2024104815,\n 2227730452,\n 2361852424,\n 2428436474,\n 2756734187,\n 3204031479,\n 3329325298\n]);\nvar SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nvar SHA2_32B = class extends HashMD {\n constructor(outputLen) {\n super(64, outputLen, 8, false);\n }\n get() {\n const { A, B, C, D, E, F: F2, G, H } = this;\n return [A, B, C, D, E, F2, G, H];\n }\n // prettier-ignore\n set(A, B, C, D, E, F2, 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 = F2 | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n process(view, offset) {\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 let { A, B, C, D, E, F: F2, 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, F2, 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 = F2;\n F2 = E;\n E = D + T1 | 0;\n D = C;\n C = B;\n B = A;\n A = T1 + T2 | 0;\n }\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 F2 = F2 + this.F | 0;\n G = G + this.G | 0;\n H = H + this.H | 0;\n this.set(A, B, C, D, E, F2, 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};\nvar _SHA256 = class extends SHA2_32B {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n A = SHA256_IV[0] | 0;\n B = SHA256_IV[1] | 0;\n C = SHA256_IV[2] | 0;\n D = SHA256_IV[3] | 0;\n E = SHA256_IV[4] | 0;\n F = SHA256_IV[5] | 0;\n G = SHA256_IV[6] | 0;\n H = SHA256_IV[7] | 0;\n constructor() {\n super(32);\n }\n};\nvar sha256 = /* @__PURE__ */ createHasher(\n () => new _SHA256(),\n /* @__PURE__ */ oidNist(1)\n);\n\n// ../../node_modules/@scure/base/index.js\nfunction isBytes2(a) {\n return a instanceof Uint8Array || ArrayBuffer.isView(a) && a.constructor.name === \"Uint8Array\";\n}\nfunction abytes2(b) {\n if (!isBytes2(b))\n throw new Error(\"Uint8Array expected\");\n}\nfunction isArrayOf(isString, arr) {\n if (!Array.isArray(arr))\n return false;\n if (arr.length === 0)\n return true;\n if (isString) {\n return arr.every((item) => typeof item === \"string\");\n } else {\n return arr.every((item) => Number.isSafeInteger(item));\n }\n}\nfunction afn(input) {\n if (typeof input !== \"function\")\n throw new Error(\"function expected\");\n return true;\n}\nfunction astr(label2, input) {\n if (typeof input !== \"string\")\n throw new Error(`${label2}: string expected`);\n return true;\n}\nfunction anumber2(n) {\n if (!Number.isSafeInteger(n))\n throw new Error(`invalid integer: ${n}`);\n}\nfunction aArr(input) {\n if (!Array.isArray(input))\n throw new Error(\"array expected\");\n}\nfunction astrArr(label2, input) {\n if (!isArrayOf(true, input))\n throw new Error(`${label2}: array of strings expected`);\n}\nfunction anumArr(label2, input) {\n if (!isArrayOf(false, input))\n throw new Error(`${label2}: array of numbers expected`);\n}\n// @__NO_SIDE_EFFECTS__\nfunction chain(...args) {\n const id = (a) => a;\n const wrap = (a, b) => (c) => a(b(c));\n const encode2 = args.map((x) => x.encode).reduceRight(wrap, id);\n const decode2 = args.map((x) => x.decode).reduce(wrap, id);\n return { encode: encode2, decode: decode2 };\n}\n// @__NO_SIDE_EFFECTS__\nfunction alphabet(letters) {\n const lettersA = typeof letters === \"string\" ? letters.split(\"\") : letters;\n const len = lettersA.length;\n astrArr(\"alphabet\", lettersA);\n const indexes = new Map(lettersA.map((l, i) => [l, i]));\n return {\n encode: (digits) => {\n aArr(digits);\n return digits.map((i) => {\n if (!Number.isSafeInteger(i) || i < 0 || i >= len)\n throw new Error(`alphabet.encode: digit index outside alphabet \"${i}\". Allowed: ${letters}`);\n return lettersA[i];\n });\n },\n decode: (input) => {\n aArr(input);\n return input.map((letter) => {\n astr(\"alphabet.decode\", letter);\n const i = indexes.get(letter);\n if (i === void 0)\n throw new Error(`Unknown letter: \"${letter}\". Allowed: ${letters}`);\n return i;\n });\n }\n };\n}\n// @__NO_SIDE_EFFECTS__\nfunction join(separator = \"\") {\n astr(\"join\", separator);\n return {\n encode: (from) => {\n astrArr(\"join.decode\", from);\n return from.join(separator);\n },\n decode: (to) => {\n astr(\"join.decode\", to);\n return to.split(separator);\n }\n };\n}\n// @__NO_SIDE_EFFECTS__\nfunction padding(bits, chr = \"=\") {\n anumber2(bits);\n astr(\"padding\", chr);\n return {\n encode(data) {\n astrArr(\"padding.encode\", data);\n while (data.length * bits % 8)\n data.push(chr);\n return data;\n },\n decode(input) {\n astrArr(\"padding.decode\", input);\n let end = input.length;\n if (end * bits % 8)\n throw new Error(\"padding: invalid, string should have whole number of bytes\");\n for (; end > 0 && input[end - 1] === chr; end--) {\n const last = end - 1;\n const byte = last * bits;\n if (byte % 8 === 0)\n throw new Error(\"padding: invalid, string has too much padding\");\n }\n return input.slice(0, end);\n }\n };\n}\nvar gcd = (a, b) => b === 0 ? a : gcd(b, a % b);\nvar radix2carry = /* @__NO_SIDE_EFFECTS__ */ (from, to) => from + (to - gcd(from, to));\nvar powers = /* @__PURE__ */ (() => {\n let res = [];\n for (let i = 0; i < 40; i++)\n res.push(2 ** i);\n return res;\n})();\nfunction convertRadix2(data, from, to, padding2) {\n aArr(data);\n if (from <= 0 || from > 32)\n throw new Error(`convertRadix2: wrong from=${from}`);\n if (to <= 0 || to > 32)\n throw new Error(`convertRadix2: wrong to=${to}`);\n if (/* @__PURE__ */ radix2carry(from, to) > 32) {\n throw new Error(`convertRadix2: carry overflow from=${from} to=${to} carryBits=${/* @__PURE__ */ radix2carry(from, to)}`);\n }\n let carry = 0;\n let pos = 0;\n const max = powers[from];\n const mask = powers[to] - 1;\n const res = [];\n for (const n of data) {\n anumber2(n);\n if (n >= max)\n throw new Error(`convertRadix2: invalid data word=${n} from=${from}`);\n carry = carry << from | n;\n if (pos + from > 32)\n throw new Error(`convertRadix2: carry overflow pos=${pos} from=${from}`);\n pos += from;\n for (; pos >= to; pos -= to)\n res.push((carry >> pos - to & mask) >>> 0);\n const pow = powers[pos];\n if (pow === void 0)\n throw new Error(\"invalid carry\");\n carry &= pow - 1;\n }\n carry = carry << to - pos & mask;\n if (!padding2 && pos >= from)\n throw new Error(\"Excess padding\");\n if (!padding2 && carry > 0)\n throw new Error(`Non-zero padding: ${carry}`);\n if (padding2 && pos > 0)\n res.push(carry >>> 0);\n return res;\n}\n// @__NO_SIDE_EFFECTS__\nfunction radix2(bits, revPadding = false) {\n anumber2(bits);\n if (bits <= 0 || bits > 32)\n throw new Error(\"radix2: bits should be in (0..32]\");\n if (/* @__PURE__ */ radix2carry(8, bits) > 32 || /* @__PURE__ */ radix2carry(bits, 8) > 32)\n throw new Error(\"radix2: carry overflow\");\n return {\n encode: (bytes) => {\n if (!isBytes2(bytes))\n throw new Error(\"radix2.encode input should be Uint8Array\");\n return convertRadix2(Array.from(bytes), 8, bits, !revPadding);\n },\n decode: (digits) => {\n anumArr(\"radix2.decode\", digits);\n return Uint8Array.from(convertRadix2(digits, bits, 8, revPadding));\n }\n };\n}\nfunction unsafeWrapper(fn) {\n afn(fn);\n return function(...args) {\n try {\n return fn.apply(null, args);\n } catch (e) {\n }\n };\n}\nvar hasBase64Builtin = /* @__PURE__ */ (() => typeof Uint8Array.from([]).toBase64 === \"function\" && typeof Uint8Array.fromBase64 === \"function\")();\nvar decodeBase64Builtin = (s, isUrl) => {\n astr(\"base64\", s);\n const re = isUrl ? /^[A-Za-z0-9=_-]+$/ : /^[A-Za-z0-9=+/]+$/;\n const alphabet2 = isUrl ? \"base64url\" : \"base64\";\n if (s.length > 0 && !re.test(s))\n throw new Error(\"invalid base64\");\n return Uint8Array.fromBase64(s, { alphabet: alphabet2, lastChunkHandling: \"strict\" });\n};\nvar base64 = hasBase64Builtin ? {\n encode(b) {\n abytes2(b);\n return b.toBase64();\n },\n decode(s) {\n return decodeBase64Builtin(s, false);\n }\n} : /* @__PURE__ */ chain(/* @__PURE__ */ radix2(6), /* @__PURE__ */ alphabet(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\"), /* @__PURE__ */ padding(6), /* @__PURE__ */ join(\"\"));\nvar base64nopad = /* @__PURE__ */ chain(/* @__PURE__ */ radix2(6), /* @__PURE__ */ alphabet(\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\"), /* @__PURE__ */ join(\"\"));\nvar BECH_ALPHABET = /* @__PURE__ */ chain(/* @__PURE__ */ alphabet(\"qpzry9x8gf2tvdw0s3jn54khce6mua7l\"), /* @__PURE__ */ join(\"\"));\nvar POLYMOD_GENERATORS = [996825010, 642813549, 513874426, 1027748829, 705979059];\nfunction bech32Polymod(pre) {\n const b = pre >> 25;\n let chk = (pre & 33554431) << 5;\n for (let i = 0; i < POLYMOD_GENERATORS.length; i++) {\n if ((b >> i & 1) === 1)\n chk ^= POLYMOD_GENERATORS[i];\n }\n return chk;\n}\nfunction bechChecksum(prefix2, words, encodingConst = 1) {\n const len = prefix2.length;\n let chk = 1;\n for (let i = 0; i < len; i++) {\n const c = prefix2.charCodeAt(i);\n if (c < 33 || c > 126)\n throw new Error(`Invalid prefix (${prefix2})`);\n chk = bech32Polymod(chk) ^ c >> 5;\n }\n chk = bech32Polymod(chk);\n for (let i = 0; i < len; i++)\n chk = bech32Polymod(chk) ^ prefix2.charCodeAt(i) & 31;\n for (let v of words)\n chk = bech32Polymod(chk) ^ v;\n for (let i = 0; i < 6; i++)\n chk = bech32Polymod(chk);\n chk ^= encodingConst;\n return BECH_ALPHABET.encode(convertRadix2([chk % powers[30]], 30, 5, false));\n}\n// @__NO_SIDE_EFFECTS__\nfunction genBech32(encoding) {\n const ENCODING_CONST = encoding === \"bech32\" ? 1 : 734539939;\n const _words = /* @__PURE__ */ radix2(5);\n const fromWords = _words.decode;\n const toWords = _words.encode;\n const fromWordsUnsafe = unsafeWrapper(fromWords);\n function encode2(prefix2, words, limit = 90) {\n astr(\"bech32.encode prefix\", prefix2);\n if (isBytes2(words))\n words = Array.from(words);\n anumArr(\"bech32.encode\", words);\n const plen = prefix2.length;\n if (plen === 0)\n throw new TypeError(`Invalid prefix length ${plen}`);\n const actualLength = plen + 7 + words.length;\n if (limit !== false && actualLength > limit)\n throw new TypeError(`Length ${actualLength} exceeds limit ${limit}`);\n const lowered = prefix2.toLowerCase();\n const sum = bechChecksum(lowered, words, ENCODING_CONST);\n return `${lowered}1${BECH_ALPHABET.encode(words)}${sum}`;\n }\n function decode2(str, limit = 90) {\n astr(\"bech32.decode input\", str);\n const slen = str.length;\n if (slen < 8 || limit !== false && slen > limit)\n throw new TypeError(`invalid string length: ${slen} (${str}). Expected (8..${limit})`);\n const lowered = str.toLowerCase();\n if (str !== lowered && str !== str.toUpperCase())\n throw new Error(`String must be lowercase or uppercase`);\n const sepIndex = lowered.lastIndexOf(\"1\");\n if (sepIndex === 0 || sepIndex === -1)\n throw new Error(`Letter \"1\" must be present between prefix and data only`);\n const prefix2 = lowered.slice(0, sepIndex);\n const data = lowered.slice(sepIndex + 1);\n if (data.length < 6)\n throw new Error(\"Data must be at least 6 characters long\");\n const words = BECH_ALPHABET.decode(data).slice(0, -6);\n const sum = bechChecksum(prefix2, words, ENCODING_CONST);\n if (!data.endsWith(sum))\n throw new Error(`Invalid checksum in ${str}: expected \"${sum}\"`);\n return { prefix: prefix2, words };\n }\n const decodeUnsafe = unsafeWrapper(decode2);\n function decodeToBytes(str) {\n const { prefix: prefix2, words } = decode2(str, false);\n return { prefix: prefix2, words, bytes: fromWords(words) };\n }\n function encodeFromBytes(prefix2, bytes) {\n return encode2(prefix2, toWords(bytes));\n }\n return {\n encode: encode2,\n decode: decode2,\n encodeFromBytes,\n decodeToBytes,\n decodeUnsafe,\n fromWords,\n fromWordsUnsafe,\n toWords\n };\n}\nvar bech32 = /* @__PURE__ */ genBech32(\"bech32\");\n\n// ../../node_modules/age-encryption/node_modules/@noble/hashes/pbkdf2.js\nfunction pbkdf2Init(hash, _password, _salt, _opts) {\n ahash(hash);\n const opts2 = checkOpts({ dkLen: 32, asyncTick: 10 }, _opts);\n const { c, dkLen, asyncTick } = opts2;\n anumber(c, \"c\");\n anumber(dkLen, \"dkLen\");\n anumber(asyncTick, \"asyncTick\");\n if (c < 1)\n throw new Error(\"iterations (c) must be >= 1\");\n const password = kdfInputToBytes(_password, \"password\");\n const salt = kdfInputToBytes(_salt, \"salt\");\n const DK = new Uint8Array(dkLen);\n const PRF = hmac.create(hash, password);\n const PRFSalt = PRF._cloneInto().update(salt);\n return { c, dkLen, asyncTick, DK, PRF, PRFSalt };\n}\nfunction pbkdf2Output(PRF, PRFSalt, DK, prfW, u) {\n PRF.destroy();\n PRFSalt.destroy();\n if (prfW)\n prfW.destroy();\n clean(u);\n return DK;\n}\nfunction pbkdf2(hash, password, salt, opts2) {\n const { c, dkLen, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts2);\n let prfW;\n const arr = new Uint8Array(4);\n const view = createView(arr);\n const u = new Uint8Array(PRF.outputLen);\n for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) {\n const Ti = DK.subarray(pos, pos + PRF.outputLen);\n view.setInt32(0, ti, false);\n (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u);\n Ti.set(u.subarray(0, Ti.length));\n for (let ui = 1; ui < c; ui++) {\n PRF._cloneInto(prfW).update(u).digestInto(u);\n for (let i = 0; i < Ti.length; i++)\n Ti[i] ^= u[i];\n }\n }\n return pbkdf2Output(PRF, PRFSalt, DK, prfW, u);\n}\n\n// ../../node_modules/age-encryption/node_modules/@noble/hashes/scrypt.js\nfunction XorAndSalsa(prev, pi, input, ii, out, oi) {\n let y00 = prev[pi++] ^ input[ii++], y01 = prev[pi++] ^ input[ii++];\n let y02 = prev[pi++] ^ input[ii++], y03 = prev[pi++] ^ input[ii++];\n let y04 = prev[pi++] ^ input[ii++], y05 = prev[pi++] ^ input[ii++];\n let y06 = prev[pi++] ^ input[ii++], y07 = prev[pi++] ^ input[ii++];\n let y08 = prev[pi++] ^ input[ii++], y09 = prev[pi++] ^ input[ii++];\n let y10 = prev[pi++] ^ input[ii++], y11 = prev[pi++] ^ input[ii++];\n let y12 = prev[pi++] ^ input[ii++], y13 = prev[pi++] ^ input[ii++];\n let y14 = prev[pi++] ^ input[ii++], y15 = prev[pi++] ^ input[ii++];\n let x00 = y00, x01 = y01, x02 = y02, x03 = y03, x04 = y04, x05 = y05, x06 = y06, x07 = y07, x08 = y08, x09 = y09, x10 = y10, x11 = y11, x12 = y12, x13 = y13, x14 = y14, x15 = y15;\n for (let i = 0; i < 8; i += 2) {\n x04 ^= rotl(x00 + x12 | 0, 7);\n x08 ^= rotl(x04 + x00 | 0, 9);\n x12 ^= rotl(x08 + x04 | 0, 13);\n x00 ^= rotl(x12 + x08 | 0, 18);\n x09 ^= rotl(x05 + x01 | 0, 7);\n x13 ^= rotl(x09 + x05 | 0, 9);\n x01 ^= rotl(x13 + x09 | 0, 13);\n x05 ^= rotl(x01 + x13 | 0, 18);\n x14 ^= rotl(x10 + x06 | 0, 7);\n x02 ^= rotl(x14 + x10 | 0, 9);\n x06 ^= rotl(x02 + x14 | 0, 13);\n x10 ^= rotl(x06 + x02 | 0, 18);\n x03 ^= rotl(x15 + x11 | 0, 7);\n x07 ^= rotl(x03 + x15 | 0, 9);\n x11 ^= rotl(x07 + x03 | 0, 13);\n x15 ^= rotl(x11 + x07 | 0, 18);\n x01 ^= rotl(x00 + x03 | 0, 7);\n x02 ^= rotl(x01 + x00 | 0, 9);\n x03 ^= rotl(x02 + x01 | 0, 13);\n x00 ^= rotl(x03 + x02 | 0, 18);\n x06 ^= rotl(x05 + x04 | 0, 7);\n x07 ^= rotl(x06 + x05 | 0, 9);\n x04 ^= rotl(x07 + x06 | 0, 13);\n x05 ^= rotl(x04 + x07 | 0, 18);\n x11 ^= rotl(x10 + x09 | 0, 7);\n x08 ^= rotl(x11 + x10 | 0, 9);\n x09 ^= rotl(x08 + x11 | 0, 13);\n x10 ^= rotl(x09 + x08 | 0, 18);\n x12 ^= rotl(x15 + x14 | 0, 7);\n x13 ^= rotl(x12 + x15 | 0, 9);\n x14 ^= rotl(x13 + x12 | 0, 13);\n x15 ^= rotl(x14 + x13 | 0, 18);\n }\n out[oi++] = y00 + x00 | 0;\n out[oi++] = y01 + x01 | 0;\n out[oi++] = y02 + x02 | 0;\n out[oi++] = y03 + x03 | 0;\n out[oi++] = y04 + x04 | 0;\n out[oi++] = y05 + x05 | 0;\n out[oi++] = y06 + x06 | 0;\n out[oi++] = y07 + x07 | 0;\n out[oi++] = y08 + x08 | 0;\n out[oi++] = y09 + x09 | 0;\n out[oi++] = y10 + x10 | 0;\n out[oi++] = y11 + x11 | 0;\n out[oi++] = y12 + x12 | 0;\n out[oi++] = y13 + x13 | 0;\n out[oi++] = y14 + x14 | 0;\n out[oi++] = y15 + x15 | 0;\n}\nfunction BlockMix(input, ii, out, oi, r) {\n let head = oi + 0;\n let tail = oi + 16 * r;\n for (let i = 0; i < 16; i++)\n out[tail + i] = input[ii + (2 * r - 1) * 16 + i];\n for (let i = 0; i < r; i++, head += 16, ii += 16) {\n XorAndSalsa(out, tail, input, ii, out, head);\n if (i > 0)\n tail += 16;\n XorAndSalsa(out, head, input, ii += 16, out, tail);\n }\n}\nfunction scryptInit(password, salt, _opts) {\n const opts2 = checkOpts({\n dkLen: 32,\n asyncTick: 10,\n maxmem: 1024 ** 3 + 1024\n }, _opts);\n const { N: N2, r, p, dkLen, asyncTick, maxmem, onProgress } = opts2;\n anumber(N2, \"N\");\n anumber(r, \"r\");\n anumber(p, \"p\");\n anumber(dkLen, \"dkLen\");\n anumber(asyncTick, \"asyncTick\");\n anumber(maxmem, \"maxmem\");\n if (onProgress !== void 0 && typeof onProgress !== \"function\")\n throw new Error(\"progressCb must be a function\");\n const blockSize = 128 * r;\n const blockSize32 = blockSize / 4;\n const pow32 = Math.pow(2, 32);\n if (N2 <= 1 || (N2 & N2 - 1) !== 0 || N2 > pow32)\n throw new Error('\"N\" expected a power of 2, and 2^1 <= N <= 2^32');\n if (p < 1 || p > (pow32 - 1) * 32 / blockSize)\n throw new Error('\"p\" expected integer 1..((2^32 - 1) * 32) / (128 * r)');\n if (dkLen < 1 || dkLen > (pow32 - 1) * 32)\n throw new Error('\"dkLen\" expected integer 1..(2^32 - 1) * 32');\n const memUsed = blockSize * (N2 + p);\n if (memUsed > maxmem)\n throw new Error('\"maxmem\" limit was hit, expected 128*r*(N+p) <= \"maxmem\"=' + maxmem);\n const B = pbkdf2(sha256, password, salt, { c: 1, dkLen: blockSize * p });\n const B32 = u32(B);\n const V = u32(new Uint8Array(blockSize * N2));\n const tmp = u32(new Uint8Array(blockSize));\n let blockMixCb = () => {\n };\n if (onProgress) {\n const totalBlockMix = 2 * N2 * p;\n const callbackPer = Math.max(Math.floor(totalBlockMix / 1e4), 1);\n let blockMixCnt = 0;\n blockMixCb = () => {\n blockMixCnt++;\n if (onProgress && (!(blockMixCnt % callbackPer) || blockMixCnt === totalBlockMix))\n onProgress(blockMixCnt / totalBlockMix);\n };\n }\n return { N: N2, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb, asyncTick };\n}\nfunction scryptOutput(password, dkLen, B, V, tmp) {\n const res = pbkdf2(sha256, password, B, { c: 1, dkLen });\n clean(B, V, tmp);\n return res;\n}\nfunction scrypt(password, salt, opts2) {\n const { N: N2, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb } = scryptInit(password, salt, opts2);\n swap32IfBE(B32);\n for (let pi = 0; pi < p; pi++) {\n const Pi = blockSize32 * pi;\n for (let i = 0; i < blockSize32; i++)\n V[i] = B32[Pi + i];\n for (let i = 0, pos = 0; i < N2 - 1; i++) {\n BlockMix(V, pos, V, pos += blockSize32, r);\n blockMixCb();\n }\n BlockMix(V, (N2 - 1) * blockSize32, B32, Pi, r);\n blockMixCb();\n for (let i = 0; i < N2; i++) {\n const j = (B32[Pi + blockSize32 - 16] & N2 - 1) >>> 0;\n for (let k = 0; k < blockSize32; k++)\n tmp[k] = B32[Pi + k] ^ V[j * blockSize32 + k];\n BlockMix(tmp, 0, B32, Pi, r);\n blockMixCb();\n }\n }\n swap32IfBE(B32);\n return scryptOutput(password, dkLen, B, V, tmp);\n}\n\n// ../../node_modules/@noble/ciphers/utils.js\nfunction isBytes3(a) {\n return a instanceof Uint8Array || ArrayBuffer.isView(a) && a.constructor.name === \"Uint8Array\";\n}\nfunction abool(b) {\n if (typeof b !== \"boolean\")\n throw new Error(`boolean expected, not ${b}`);\n}\nfunction anumber3(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error(\"positive integer expected, got \" + n);\n}\nfunction abytes3(value, length, title = \"\") {\n const bytes = isBytes3(value);\n const len = value?.length;\n const needsLen = length !== void 0;\n if (!bytes || needsLen && len !== length) {\n const prefix2 = title && `\"${title}\" `;\n const ofLen = needsLen ? ` of length ${length}` : \"\";\n const got = bytes ? `length=${len}` : `type=${typeof value}`;\n throw new Error(prefix2 + \"expected Uint8Array\" + ofLen + \", got \" + got);\n }\n return value;\n}\nfunction aexists2(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 aoutput2(out, instance) {\n abytes3(out, void 0, \"output\");\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}\nfunction u322(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\nfunction clean2(...arrays) {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\nfunction createView2(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\nvar isLE2 = /* @__PURE__ */ (() => new Uint8Array(new Uint32Array([287454020]).buffer)[0] === 68)();\nfunction checkOpts2(defaults, opts2) {\n if (opts2 == null || typeof opts2 !== \"object\")\n throw new Error(\"options must be defined\");\n const merged = Object.assign(defaults, opts2);\n return merged;\n}\nfunction 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}\nvar wrapCipher = /* @__NO_SIDE_EFFECTS__ */ (params, constructor) => {\n function wrappedCipher(key, ...args) {\n abytes3(key, void 0, \"key\");\n if (!isLE2)\n throw new Error(\"Non little-endian hardware is not yet supported\");\n if (params.nonceLength !== void 0) {\n const nonce = args[0];\n abytes3(nonce, params.varSizeNonce ? void 0 : params.nonceLength, \"nonce\");\n }\n const tagl = params.tagLength;\n if (tagl && args[1] !== void 0)\n abytes3(args[1], void 0, \"AAD\");\n const cipher = constructor(key, ...args);\n const checkOutput = (fnLength, output) => {\n if (output !== void 0) {\n if (fnLength !== 2)\n throw new Error(\"cipher output not supported\");\n abytes3(output, void 0, \"output\");\n }\n };\n let called = false;\n const wrCipher = {\n encrypt(data, output) {\n if (called)\n throw new Error(\"cannot encrypt() twice with same key + nonce\");\n called = true;\n abytes3(data);\n checkOutput(cipher.encrypt.length, output);\n return cipher.encrypt(data, output);\n },\n decrypt(data, output) {\n abytes3(data);\n if (tagl && data.length < tagl)\n throw new Error('\"ciphertext\" expected length bigger than tagLength=' + tagl);\n checkOutput(cipher.decrypt.length, output);\n return cipher.decrypt(data, output);\n }\n };\n return wrCipher;\n }\n Object.assign(wrappedCipher, params);\n return wrappedCipher;\n};\nfunction getOutput(expectedLength, out, onlyAligned = true) {\n if (out === void 0)\n return new Uint8Array(expectedLength);\n if (out.length !== expectedLength)\n throw new Error('\"output\" expected Uint8Array of length ' + expectedLength + \", got: \" + out.length);\n if (onlyAligned && !isAligned32(out))\n throw new Error(\"invalid output, must be aligned\");\n return out;\n}\nfunction u64Lengths(dataLength, aadLength, isLE4) {\n abool(isLE4);\n const num = new Uint8Array(16);\n const view = createView2(num);\n view.setBigUint64(0, BigInt(aadLength), isLE4);\n view.setBigUint64(8, BigInt(dataLength), isLE4);\n return num;\n}\nfunction isAligned32(bytes) {\n return bytes.byteOffset % 4 === 0;\n}\nfunction copyBytes(bytes) {\n return Uint8Array.from(bytes);\n}\n\n// ../../node_modules/@noble/ciphers/_arx.js\nvar encodeStr = (str) => Uint8Array.from(str.split(\"\"), (c) => c.charCodeAt(0));\nvar sigma16 = encodeStr(\"expand 16-byte k\");\nvar sigma32 = encodeStr(\"expand 32-byte k\");\nvar sigma16_32 = u322(sigma16);\nvar sigma32_32 = u322(sigma32);\nfunction rotl2(a, b) {\n return a << b | a >>> 32 - b;\n}\nfunction isAligned322(b) {\n return b.byteOffset % 4 === 0;\n}\nvar BLOCK_LEN = 64;\nvar BLOCK_LEN32 = 16;\nvar MAX_COUNTER = 2 ** 32 - 1;\nvar U32_EMPTY = Uint32Array.of();\nfunction runCipher(core, sigma, key, nonce, data, output, counter, rounds) {\n const len = data.length;\n const block = new Uint8Array(BLOCK_LEN);\n const b32 = u322(block);\n const isAligned = isAligned322(data) && isAligned322(output);\n const d32 = isAligned ? u322(data) : U32_EMPTY;\n const o32 = isAligned ? u322(output) : U32_EMPTY;\n for (let pos = 0; pos < len; counter++) {\n core(sigma, key, nonce, b32, counter, rounds);\n if (counter >= MAX_COUNTER)\n throw new Error(\"arx: counter overflow\");\n const take = Math.min(BLOCK_LEN, len - pos);\n if (isAligned && take === BLOCK_LEN) {\n const pos32 = pos / 4;\n if (pos % 4 !== 0)\n throw new Error(\"arx: invalid block position\");\n for (let j = 0, posj; j < BLOCK_LEN32; j++) {\n posj = pos32 + j;\n o32[posj] = d32[posj] ^ b32[j];\n }\n pos += BLOCK_LEN;\n continue;\n }\n for (let j = 0, posj; j < take; j++) {\n posj = pos + j;\n output[posj] = data[posj] ^ block[j];\n }\n pos += take;\n }\n}\nfunction createCipher(core, opts2) {\n const { allowShortKeys, extendNonceFn, counterLength, counterRight, rounds } = checkOpts2({ allowShortKeys: false, counterLength: 8, counterRight: false, rounds: 20 }, opts2);\n if (typeof core !== \"function\")\n throw new Error(\"core must be a function\");\n anumber3(counterLength);\n anumber3(rounds);\n abool(counterRight);\n abool(allowShortKeys);\n return (key, nonce, data, output, counter = 0) => {\n abytes3(key, void 0, \"key\");\n abytes3(nonce, void 0, \"nonce\");\n abytes3(data, void 0, \"data\");\n const len = data.length;\n if (output === void 0)\n output = new Uint8Array(len);\n abytes3(output, void 0, \"output\");\n anumber3(counter);\n if (counter < 0 || counter >= MAX_COUNTER)\n throw new Error(\"arx: counter overflow\");\n if (output.length < len)\n throw new Error(`arx: output (${output.length}) is shorter than data (${len})`);\n const toClean = [];\n let l = key.length;\n let k;\n let sigma;\n if (l === 32) {\n toClean.push(k = copyBytes(key));\n sigma = sigma32_32;\n } else if (l === 16 && allowShortKeys) {\n k = new Uint8Array(32);\n k.set(key);\n k.set(key, 16);\n sigma = sigma16_32;\n toClean.push(k);\n } else {\n abytes3(key, 32, \"arx key\");\n throw new Error(\"invalid key size\");\n }\n if (!isAligned322(nonce))\n toClean.push(nonce = copyBytes(nonce));\n const k32 = u322(k);\n if (extendNonceFn) {\n if (nonce.length !== 24)\n throw new Error(`arx: extended nonce must be 24 bytes`);\n extendNonceFn(sigma, k32, u322(nonce.subarray(0, 16)), k32);\n nonce = nonce.subarray(16);\n }\n const nonceNcLen = 16 - counterLength;\n if (nonceNcLen !== nonce.length)\n throw new Error(`arx: nonce must be ${nonceNcLen} or 16 bytes`);\n if (nonceNcLen !== 12) {\n const nc = new Uint8Array(12);\n nc.set(nonce, counterRight ? 0 : 12 - nonce.length);\n nonce = nc;\n toClean.push(nonce);\n }\n const n32 = u322(nonce);\n runCipher(core, sigma, k32, n32, data, output, counter, rounds);\n clean2(...toClean);\n return output;\n };\n}\n\n// ../../node_modules/@noble/ciphers/_poly1305.js\nfunction u8to16(a, i) {\n return a[i++] & 255 | (a[i++] & 255) << 8;\n}\nvar Poly1305 = class {\n blockLen = 16;\n outputLen = 16;\n buffer = new Uint8Array(16);\n r = new Uint16Array(10);\n // Allocating 1 array with .subarray() here is slower than 3\n h = new Uint16Array(10);\n pad = new Uint16Array(8);\n pos = 0;\n finished = false;\n // Can be speed-up using BigUint64Array, at the cost of complexity\n constructor(key) {\n key = copyBytes(abytes3(key, 32, \"key\"));\n const t0 = u8to16(key, 0);\n const t1 = u8to16(key, 2);\n const t2 = u8to16(key, 4);\n const t3 = u8to16(key, 6);\n const t4 = u8to16(key, 8);\n const t5 = u8to16(key, 10);\n const t6 = u8to16(key, 12);\n const t7 = u8to16(key, 14);\n this.r[0] = t0 & 8191;\n this.r[1] = (t0 >>> 13 | t1 << 3) & 8191;\n this.r[2] = (t1 >>> 10 | t2 << 6) & 7939;\n this.r[3] = (t2 >>> 7 | t3 << 9) & 8191;\n this.r[4] = (t3 >>> 4 | t4 << 12) & 255;\n this.r[5] = t4 >>> 1 & 8190;\n this.r[6] = (t4 >>> 14 | t5 << 2) & 8191;\n this.r[7] = (t5 >>> 11 | t6 << 5) & 8065;\n this.r[8] = (t6 >>> 8 | t7 << 8) & 8191;\n this.r[9] = t7 >>> 5 & 127;\n for (let i = 0; i < 8; i++)\n this.pad[i] = u8to16(key, 16 + 2 * i);\n }\n process(data, offset, isLast = false) {\n const hibit = isLast ? 0 : 1 << 11;\n const { h, r } = this;\n const r0 = r[0];\n const r1 = r[1];\n const r2 = r[2];\n const r3 = r[3];\n const r4 = r[4];\n const r5 = r[5];\n const r6 = r[6];\n const r7 = r[7];\n const r8 = r[8];\n const r9 = r[9];\n const t0 = u8to16(data, offset + 0);\n const t1 = u8to16(data, offset + 2);\n const t2 = u8to16(data, offset + 4);\n const t3 = u8to16(data, offset + 6);\n const t4 = u8to16(data, offset + 8);\n const t5 = u8to16(data, offset + 10);\n const t6 = u8to16(data, offset + 12);\n const t7 = u8to16(data, offset + 14);\n let h0 = h[0] + (t0 & 8191);\n let h1 = h[1] + ((t0 >>> 13 | t1 << 3) & 8191);\n let h2 = h[2] + ((t1 >>> 10 | t2 << 6) & 8191);\n let h3 = h[3] + ((t2 >>> 7 | t3 << 9) & 8191);\n let h4 = h[4] + ((t3 >>> 4 | t4 << 12) & 8191);\n let h5 = h[5] + (t4 >>> 1 & 8191);\n let h6 = h[6] + ((t4 >>> 14 | t5 << 2) & 8191);\n let h7 = h[7] + ((t5 >>> 11 | t6 << 5) & 8191);\n let h8 = h[8] + ((t6 >>> 8 | t7 << 8) & 8191);\n let h9 = h[9] + (t7 >>> 5 | hibit);\n let c = 0;\n let d0 = c + h0 * r0 + h1 * (5 * r9) + h2 * (5 * r8) + h3 * (5 * r7) + h4 * (5 * r6);\n c = d0 >>> 13;\n d0 &= 8191;\n d0 += h5 * (5 * r5) + h6 * (5 * r4) + h7 * (5 * r3) + h8 * (5 * r2) + h9 * (5 * r1);\n c += d0 >>> 13;\n d0 &= 8191;\n let d1 = c + h0 * r1 + h1 * r0 + h2 * (5 * r9) + h3 * (5 * r8) + h4 * (5 * r7);\n c = d1 >>> 13;\n d1 &= 8191;\n d1 += h5 * (5 * r6) + h6 * (5 * r5) + h7 * (5 * r4) + h8 * (5 * r3) + h9 * (5 * r2);\n c += d1 >>> 13;\n d1 &= 8191;\n let d2 = c + h0 * r2 + h1 * r1 + h2 * r0 + h3 * (5 * r9) + h4 * (5 * r8);\n c = d2 >>> 13;\n d2 &= 8191;\n d2 += h5 * (5 * r7) + h6 * (5 * r6) + h7 * (5 * r5) + h8 * (5 * r4) + h9 * (5 * r3);\n c += d2 >>> 13;\n d2 &= 8191;\n let d3 = c + h0 * r3 + h1 * r2 + h2 * r1 + h3 * r0 + h4 * (5 * r9);\n c = d3 >>> 13;\n d3 &= 8191;\n d3 += h5 * (5 * r8) + h6 * (5 * r7) + h7 * (5 * r6) + h8 * (5 * r5) + h9 * (5 * r4);\n c += d3 >>> 13;\n d3 &= 8191;\n let d4 = c + h0 * r4 + h1 * r3 + h2 * r2 + h3 * r1 + h4 * r0;\n c = d4 >>> 13;\n d4 &= 8191;\n d4 += h5 * (5 * r9) + h6 * (5 * r8) + h7 * (5 * r7) + h8 * (5 * r6) + h9 * (5 * r5);\n c += d4 >>> 13;\n d4 &= 8191;\n let d5 = c + h0 * r5 + h1 * r4 + h2 * r3 + h3 * r2 + h4 * r1;\n c = d5 >>> 13;\n d5 &= 8191;\n d5 += h5 * r0 + h6 * (5 * r9) + h7 * (5 * r8) + h8 * (5 * r7) + h9 * (5 * r6);\n c += d5 >>> 13;\n d5 &= 8191;\n let d6 = c + h0 * r6 + h1 * r5 + h2 * r4 + h3 * r3 + h4 * r2;\n c = d6 >>> 13;\n d6 &= 8191;\n d6 += h5 * r1 + h6 * r0 + h7 * (5 * r9) + h8 * (5 * r8) + h9 * (5 * r7);\n c += d6 >>> 13;\n d6 &= 8191;\n let d7 = c + h0 * r7 + h1 * r6 + h2 * r5 + h3 * r4 + h4 * r3;\n c = d7 >>> 13;\n d7 &= 8191;\n d7 += h5 * r2 + h6 * r1 + h7 * r0 + h8 * (5 * r9) + h9 * (5 * r8);\n c += d7 >>> 13;\n d7 &= 8191;\n let d8 = c + h0 * r8 + h1 * r7 + h2 * r6 + h3 * r5 + h4 * r4;\n c = d8 >>> 13;\n d8 &= 8191;\n d8 += h5 * r3 + h6 * r2 + h7 * r1 + h8 * r0 + h9 * (5 * r9);\n c += d8 >>> 13;\n d8 &= 8191;\n let d9 = c + h0 * r9 + h1 * r8 + h2 * r7 + h3 * r6 + h4 * r5;\n c = d9 >>> 13;\n d9 &= 8191;\n d9 += h5 * r4 + h6 * r3 + h7 * r2 + h8 * r1 + h9 * r0;\n c += d9 >>> 13;\n d9 &= 8191;\n c = (c << 2) + c | 0;\n c = c + d0 | 0;\n d0 = c & 8191;\n c = c >>> 13;\n d1 += c;\n h[0] = d0;\n h[1] = d1;\n h[2] = d2;\n h[3] = d3;\n h[4] = d4;\n h[5] = d5;\n h[6] = d6;\n h[7] = d7;\n h[8] = d8;\n h[9] = d9;\n }\n finalize() {\n const { h, pad } = this;\n const g = new Uint16Array(10);\n let c = h[1] >>> 13;\n h[1] &= 8191;\n for (let i = 2; i < 10; i++) {\n h[i] += c;\n c = h[i] >>> 13;\n h[i] &= 8191;\n }\n h[0] += c * 5;\n c = h[0] >>> 13;\n h[0] &= 8191;\n h[1] += c;\n c = h[1] >>> 13;\n h[1] &= 8191;\n h[2] += c;\n g[0] = h[0] + 5;\n c = g[0] >>> 13;\n g[0] &= 8191;\n for (let i = 1; i < 10; i++) {\n g[i] = h[i] + c;\n c = g[i] >>> 13;\n g[i] &= 8191;\n }\n g[9] -= 1 << 13;\n let mask = (c ^ 1) - 1;\n for (let i = 0; i < 10; i++)\n g[i] &= mask;\n mask = ~mask;\n for (let i = 0; i < 10; i++)\n h[i] = h[i] & mask | g[i];\n h[0] = (h[0] | h[1] << 13) & 65535;\n h[1] = (h[1] >>> 3 | h[2] << 10) & 65535;\n h[2] = (h[2] >>> 6 | h[3] << 7) & 65535;\n h[3] = (h[3] >>> 9 | h[4] << 4) & 65535;\n h[4] = (h[4] >>> 12 | h[5] << 1 | h[6] << 14) & 65535;\n h[5] = (h[6] >>> 2 | h[7] << 11) & 65535;\n h[6] = (h[7] >>> 5 | h[8] << 8) & 65535;\n h[7] = (h[8] >>> 8 | h[9] << 5) & 65535;\n let f = h[0] + pad[0];\n h[0] = f & 65535;\n for (let i = 1; i < 8; i++) {\n f = (h[i] + pad[i] | 0) + (f >>> 16) | 0;\n h[i] = f & 65535;\n }\n clean2(g);\n }\n update(data) {\n aexists2(this);\n abytes3(data);\n data = copyBytes(data);\n const { 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 if (take === blockLen) {\n for (; blockLen <= len - pos; pos += blockLen)\n this.process(data, 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(buffer, 0, false);\n this.pos = 0;\n }\n }\n return this;\n }\n destroy() {\n clean2(this.h, this.r, this.buffer, this.pad);\n }\n digestInto(out) {\n aexists2(this);\n aoutput2(out, this);\n this.finished = true;\n const { buffer, h } = this;\n let { pos } = this;\n if (pos) {\n buffer[pos++] = 1;\n for (; pos < 16; pos++)\n buffer[pos] = 0;\n this.process(buffer, 0, true);\n }\n this.finalize();\n let opos = 0;\n for (let i = 0; i < 8; i++) {\n out[opos++] = h[i] >>> 0;\n out[opos++] = h[i] >>> 8;\n }\n return out;\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};\nfunction wrapConstructorWithKey(hashCons) {\n const hashC = (msg, key) => hashCons(key).update(msg).digest();\n const tmp = hashCons(new Uint8Array(32));\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (key) => hashCons(key);\n return hashC;\n}\nvar poly1305 = /* @__PURE__ */ (() => wrapConstructorWithKey((key) => new Poly1305(key)))();\n\n// ../../node_modules/@noble/ciphers/chacha.js\nfunction chachaCore(s, k, n, out, cnt, rounds = 20) {\n let y00 = s[0], y01 = s[1], y02 = s[2], y03 = s[3], y04 = k[0], y05 = k[1], y06 = k[2], y07 = k[3], y08 = k[4], y09 = k[5], y10 = k[6], y11 = k[7], y12 = cnt, y13 = n[0], y14 = n[1], y15 = n[2];\n let x00 = y00, x01 = y01, x02 = y02, x03 = y03, x04 = y04, x05 = y05, x06 = y06, x07 = y07, x08 = y08, x09 = y09, x10 = y10, x11 = y11, x12 = y12, x13 = y13, x14 = y14, x15 = y15;\n for (let r = 0; r < rounds; r += 2) {\n x00 = x00 + x04 | 0;\n x12 = rotl2(x12 ^ x00, 16);\n x08 = x08 + x12 | 0;\n x04 = rotl2(x04 ^ x08, 12);\n x00 = x00 + x04 | 0;\n x12 = rotl2(x12 ^ x00, 8);\n x08 = x08 + x12 | 0;\n x04 = rotl2(x04 ^ x08, 7);\n x01 = x01 + x05 | 0;\n x13 = rotl2(x13 ^ x01, 16);\n x09 = x09 + x13 | 0;\n x05 = rotl2(x05 ^ x09, 12);\n x01 = x01 + x05 | 0;\n x13 = rotl2(x13 ^ x01, 8);\n x09 = x09 + x13 | 0;\n x05 = rotl2(x05 ^ x09, 7);\n x02 = x02 + x06 | 0;\n x14 = rotl2(x14 ^ x02, 16);\n x10 = x10 + x14 | 0;\n x06 = rotl2(x06 ^ x10, 12);\n x02 = x02 + x06 | 0;\n x14 = rotl2(x14 ^ x02, 8);\n x10 = x10 + x14 | 0;\n x06 = rotl2(x06 ^ x10, 7);\n x03 = x03 + x07 | 0;\n x15 = rotl2(x15 ^ x03, 16);\n x11 = x11 + x15 | 0;\n x07 = rotl2(x07 ^ x11, 12);\n x03 = x03 + x07 | 0;\n x15 = rotl2(x15 ^ x03, 8);\n x11 = x11 + x15 | 0;\n x07 = rotl2(x07 ^ x11, 7);\n x00 = x00 + x05 | 0;\n x15 = rotl2(x15 ^ x00, 16);\n x10 = x10 + x15 | 0;\n x05 = rotl2(x05 ^ x10, 12);\n x00 = x00 + x05 | 0;\n x15 = rotl2(x15 ^ x00, 8);\n x10 = x10 + x15 | 0;\n x05 = rotl2(x05 ^ x10, 7);\n x01 = x01 + x06 | 0;\n x12 = rotl2(x12 ^ x01, 16);\n x11 = x11 + x12 | 0;\n x06 = rotl2(x06 ^ x11, 12);\n x01 = x01 + x06 | 0;\n x12 = rotl2(x12 ^ x01, 8);\n x11 = x11 + x12 | 0;\n x06 = rotl2(x06 ^ x11, 7);\n x02 = x02 + x07 | 0;\n x13 = rotl2(x13 ^ x02, 16);\n x08 = x08 + x13 | 0;\n x07 = rotl2(x07 ^ x08, 12);\n x02 = x02 + x07 | 0;\n x13 = rotl2(x13 ^ x02, 8);\n x08 = x08 + x13 | 0;\n x07 = rotl2(x07 ^ x08, 7);\n x03 = x03 + x04 | 0;\n x14 = rotl2(x14 ^ x03, 16);\n x09 = x09 + x14 | 0;\n x04 = rotl2(x04 ^ x09, 12);\n x03 = x03 + x04 | 0;\n x14 = rotl2(x14 ^ x03, 8);\n x09 = x09 + x14 | 0;\n x04 = rotl2(x04 ^ x09, 7);\n }\n let oi = 0;\n out[oi++] = y00 + x00 | 0;\n out[oi++] = y01 + x01 | 0;\n out[oi++] = y02 + x02 | 0;\n out[oi++] = y03 + x03 | 0;\n out[oi++] = y04 + x04 | 0;\n out[oi++] = y05 + x05 | 0;\n out[oi++] = y06 + x06 | 0;\n out[oi++] = y07 + x07 | 0;\n out[oi++] = y08 + x08 | 0;\n out[oi++] = y09 + x09 | 0;\n out[oi++] = y10 + x10 | 0;\n out[oi++] = y11 + x11 | 0;\n out[oi++] = y12 + x12 | 0;\n out[oi++] = y13 + x13 | 0;\n out[oi++] = y14 + x14 | 0;\n out[oi++] = y15 + x15 | 0;\n}\nfunction hchacha(s, k, i, out) {\n let x00 = s[0], x01 = s[1], x02 = s[2], x03 = s[3], x04 = k[0], x05 = k[1], x06 = k[2], x07 = k[3], x08 = k[4], x09 = k[5], x10 = k[6], x11 = k[7], x12 = i[0], x13 = i[1], x14 = i[2], x15 = i[3];\n for (let r = 0; r < 20; r += 2) {\n x00 = x00 + x04 | 0;\n x12 = rotl2(x12 ^ x00, 16);\n x08 = x08 + x12 | 0;\n x04 = rotl2(x04 ^ x08, 12);\n x00 = x00 + x04 | 0;\n x12 = rotl2(x12 ^ x00, 8);\n x08 = x08 + x12 | 0;\n x04 = rotl2(x04 ^ x08, 7);\n x01 = x01 + x05 | 0;\n x13 = rotl2(x13 ^ x01, 16);\n x09 = x09 + x13 | 0;\n x05 = rotl2(x05 ^ x09, 12);\n x01 = x01 + x05 | 0;\n x13 = rotl2(x13 ^ x01, 8);\n x09 = x09 + x13 | 0;\n x05 = rotl2(x05 ^ x09, 7);\n x02 = x02 + x06 | 0;\n x14 = rotl2(x14 ^ x02, 16);\n x10 = x10 + x14 | 0;\n x06 = rotl2(x06 ^ x10, 12);\n x02 = x02 + x06 | 0;\n x14 = rotl2(x14 ^ x02, 8);\n x10 = x10 + x14 | 0;\n x06 = rotl2(x06 ^ x10, 7);\n x03 = x03 + x07 | 0;\n x15 = rotl2(x15 ^ x03, 16);\n x11 = x11 + x15 | 0;\n x07 = rotl2(x07 ^ x11, 12);\n x03 = x03 + x07 | 0;\n x15 = rotl2(x15 ^ x03, 8);\n x11 = x11 + x15 | 0;\n x07 = rotl2(x07 ^ x11, 7);\n x00 = x00 + x05 | 0;\n x15 = rotl2(x15 ^ x00, 16);\n x10 = x10 + x15 | 0;\n x05 = rotl2(x05 ^ x10, 12);\n x00 = x00 + x05 | 0;\n x15 = rotl2(x15 ^ x00, 8);\n x10 = x10 + x15 | 0;\n x05 = rotl2(x05 ^ x10, 7);\n x01 = x01 + x06 | 0;\n x12 = rotl2(x12 ^ x01, 16);\n x11 = x11 + x12 | 0;\n x06 = rotl2(x06 ^ x11, 12);\n x01 = x01 + x06 | 0;\n x12 = rotl2(x12 ^ x01, 8);\n x11 = x11 + x12 | 0;\n x06 = rotl2(x06 ^ x11, 7);\n x02 = x02 + x07 | 0;\n x13 = rotl2(x13 ^ x02, 16);\n x08 = x08 + x13 | 0;\n x07 = rotl2(x07 ^ x08, 12);\n x02 = x02 + x07 | 0;\n x13 = rotl2(x13 ^ x02, 8);\n x08 = x08 + x13 | 0;\n x07 = rotl2(x07 ^ x08, 7);\n x03 = x03 + x04 | 0;\n x14 = rotl2(x14 ^ x03, 16);\n x09 = x09 + x14 | 0;\n x04 = rotl2(x04 ^ x09, 12);\n x03 = x03 + x04 | 0;\n x14 = rotl2(x14 ^ x03, 8);\n x09 = x09 + x14 | 0;\n x04 = rotl2(x04 ^ x09, 7);\n }\n let oi = 0;\n out[oi++] = x00;\n out[oi++] = x01;\n out[oi++] = x02;\n out[oi++] = x03;\n out[oi++] = x12;\n out[oi++] = x13;\n out[oi++] = x14;\n out[oi++] = x15;\n}\nvar chacha20 = /* @__PURE__ */ createCipher(chachaCore, {\n counterRight: false,\n counterLength: 4,\n allowShortKeys: false\n});\nvar xchacha20 = /* @__PURE__ */ createCipher(chachaCore, {\n counterRight: false,\n counterLength: 8,\n extendNonceFn: hchacha,\n allowShortKeys: false\n});\nvar ZEROS16 = /* @__PURE__ */ new Uint8Array(16);\nvar updatePadded = (h, msg) => {\n h.update(msg);\n const leftover = msg.length % 16;\n if (leftover)\n h.update(ZEROS16.subarray(leftover));\n};\nvar ZEROS32 = /* @__PURE__ */ new Uint8Array(32);\nfunction computeTag(fn, key, nonce, ciphertext, AAD) {\n if (AAD !== void 0)\n abytes3(AAD, void 0, \"AAD\");\n const authKey = fn(key, nonce, ZEROS32);\n const lengths = u64Lengths(ciphertext.length, AAD ? AAD.length : 0, true);\n const h = poly1305.create(authKey);\n if (AAD)\n updatePadded(h, AAD);\n updatePadded(h, ciphertext);\n h.update(lengths);\n const res = h.digest();\n clean2(authKey, lengths);\n return res;\n}\nvar _poly1305_aead = (xorStream) => (key, nonce, AAD) => {\n const tagLength = 16;\n return {\n encrypt(plaintext, output) {\n const plength = plaintext.length;\n output = getOutput(plength + tagLength, output, false);\n output.set(plaintext);\n const oPlain = output.subarray(0, -tagLength);\n xorStream(key, nonce, oPlain, oPlain, 1);\n const tag = computeTag(xorStream, key, nonce, oPlain, AAD);\n output.set(tag, plength);\n clean2(tag);\n return output;\n },\n decrypt(ciphertext, output) {\n output = getOutput(ciphertext.length - tagLength, output, false);\n const data = ciphertext.subarray(0, -tagLength);\n const passedTag = ciphertext.subarray(-tagLength);\n const tag = computeTag(xorStream, key, nonce, data, AAD);\n if (!equalBytes(passedTag, tag))\n throw new Error(\"invalid tag\");\n output.set(ciphertext.subarray(0, -tagLength));\n xorStream(key, nonce, output, output, 1);\n clean2(tag);\n return output;\n }\n };\n};\nvar chacha20poly1305 = /* @__PURE__ */ wrapCipher({ blockSize: 64, nonceLength: 12, tagLength: 16 }, _poly1305_aead(chacha20));\nvar xchacha20poly1305 = /* @__PURE__ */ wrapCipher({ blockSize: 64, nonceLength: 24, tagLength: 16 }, _poly1305_aead(xchacha20));\n\n// ../../node_modules/@noble/curves/node_modules/@noble/hashes/utils.js\nfunction isBytes4(a) {\n return a instanceof Uint8Array || ArrayBuffer.isView(a) && a.constructor.name === \"Uint8Array\";\n}\nfunction anumber4(n, title = \"\") {\n if (!Number.isSafeInteger(n) || n < 0) {\n const prefix2 = title && `\"${title}\" `;\n throw new Error(`${prefix2}expected integer >= 0, got ${n}`);\n }\n}\nfunction abytes4(value, length, title = \"\") {\n const bytes = isBytes4(value);\n const len = value?.length;\n const needsLen = length !== void 0;\n if (!bytes || needsLen && len !== length) {\n const prefix2 = title && `\"${title}\" `;\n const ofLen = needsLen ? ` of length ${length}` : \"\";\n const got = bytes ? `length=${len}` : `type=${typeof value}`;\n throw new Error(prefix2 + \"expected Uint8Array\" + ofLen + \", got \" + got);\n }\n return value;\n}\nfunction ahash2(h) {\n if (typeof h !== \"function\" || typeof h.create !== \"function\")\n throw new Error(\"Hash must wrapped by utils.createHasher\");\n anumber4(h.outputLen);\n anumber4(h.blockLen);\n}\nfunction aexists3(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 aoutput3(out, instance) {\n abytes4(out, void 0, \"digestInto() output\");\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('\"digestInto() output\" expected to be of length >=' + min);\n }\n}\nfunction clean3(...arrays) {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\nfunction createView3(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\nfunction rotr2(word, shift) {\n return word << 32 - shift | word >>> shift;\n}\nvar hasHexBuiltin = /* @__PURE__ */ (() => (\n // @ts-ignore\n typeof Uint8Array.from([]).toHex === \"function\" && typeof Uint8Array.fromHex === \"function\"\n))();\nvar hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, \"0\"));\nfunction bytesToHex2(bytes) {\n abytes4(bytes);\n if (hasHexBuiltin)\n return bytes.toHex();\n let hex = \"\";\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\nvar 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;\n if (ch >= asciis.A && ch <= asciis.F)\n return ch - (asciis.A - 10);\n if (ch >= asciis.a && ch <= asciis.f)\n return ch - (asciis.a - 10);\n return;\n}\nfunction hexToBytes(hex) {\n if (typeof hex !== \"string\")\n throw new Error(\"hex string expected, got \" + typeof hex);\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 === void 0 || n2 === void 0) {\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;\n }\n return array;\n}\nfunction concatBytes2(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes4(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}\nfunction createHasher2(hashCons, info = {}) {\n const hashC = (msg, opts2) => hashCons(opts2).update(msg).digest();\n const tmp = hashCons(void 0);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts2) => hashCons(opts2);\n Object.assign(hashC, info);\n return Object.freeze(hashC);\n}\nfunction randomBytes3(bytesLength = 32) {\n const cr = typeof globalThis === \"object\" ? globalThis.crypto : null;\n if (typeof cr?.getRandomValues !== \"function\")\n throw new Error(\"crypto.getRandomValues must be defined\");\n return cr.getRandomValues(new Uint8Array(bytesLength));\n}\nvar oidNist2 = (suffix) => ({\n oid: Uint8Array.from([6, 9, 96, 134, 72, 1, 101, 3, 4, 2, suffix])\n});\n\n// ../../node_modules/@noble/curves/utils.js\nvar _0n = /* @__PURE__ */ BigInt(0);\nvar _1n = /* @__PURE__ */ BigInt(1);\nfunction abool2(value, title = \"\") {\n if (typeof value !== \"boolean\") {\n const prefix2 = title && `\"${title}\" `;\n throw new Error(prefix2 + \"expected boolean, got type=\" + typeof value);\n }\n return value;\n}\nfunction abignumber(n) {\n if (typeof n === \"bigint\") {\n if (!isPosBig(n))\n throw new Error(\"positive bigint expected, got \" + n);\n } else\n anumber4(n);\n return n;\n}\nfunction numberToHexUnpadded(num) {\n const hex = abignumber(num).toString(16);\n return hex.length & 1 ? \"0\" + hex : hex;\n}\nfunction hexToNumber2(hex) {\n if (typeof hex !== \"string\")\n throw new Error(\"hex string expected, got \" + typeof hex);\n return hex === \"\" ? _0n : BigInt(\"0x\" + hex);\n}\nfunction bytesToNumberBE(bytes) {\n return hexToNumber2(bytesToHex2(bytes));\n}\nfunction bytesToNumberLE(bytes) {\n return hexToNumber2(bytesToHex2(copyBytes2(abytes4(bytes)).reverse()));\n}\nfunction numberToBytesBE2(n, len) {\n anumber4(len);\n n = abignumber(n);\n const res = hexToBytes(n.toString(16).padStart(len * 2, \"0\"));\n if (res.length !== len)\n throw new Error(\"number too large\");\n return res;\n}\nfunction numberToBytesLE(n, len) {\n return numberToBytesBE2(n, len).reverse();\n}\nfunction copyBytes2(bytes) {\n return Uint8Array.from(bytes);\n}\nfunction 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}\nvar isPosBig = (n) => typeof n === \"bigint\" && _0n <= n;\nfunction inRange(n, min, max) {\n return isPosBig(n) && isPosBig(min) && isPosBig(max) && min <= n && n < max;\n}\nfunction aInRange(title, n, min, max) {\n if (!inRange(n, min, max))\n throw new Error(\"expected valid \" + title + \": \" + min + \" <= n < \" + max + \", got \" + n);\n}\nfunction bitLen(n) {\n let len;\n for (len = 0; n > _0n; n >>= _1n, len += 1)\n ;\n return len;\n}\nvar bitMask = (n) => (_1n << BigInt(n)) - _1n;\nfunction createHmacDrbg(hashLen, qByteLen, hmacFn) {\n anumber4(hashLen, \"hashLen\");\n anumber4(qByteLen, \"qByteLen\");\n if (typeof hmacFn !== \"function\")\n throw new Error(\"hmacFn must be a function\");\n const u8n = (len) => new Uint8Array(len);\n const NULL = Uint8Array.of();\n const byte0 = Uint8Array.of(0);\n const byte1 = Uint8Array.of(1);\n const _maxDrbgIters = 1e3;\n let v = u8n(hashLen);\n let k = u8n(hashLen);\n let i = 0;\n const reset = () => {\n v.fill(1);\n k.fill(0);\n i = 0;\n };\n const h = (...msgs) => hmacFn(k, concatBytes2(v, ...msgs));\n const reseed = (seed = NULL) => {\n k = h(byte0, seed);\n v = h();\n if (seed.length === 0)\n return;\n k = h(byte1, seed);\n v = h();\n };\n const gen = () => {\n if (i++ >= _maxDrbgIters)\n throw new Error(\"drbg: tried max amount of iterations\");\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 concatBytes2(...out);\n };\n const genUntil = (seed, pred) => {\n reset();\n reseed(seed);\n let res = void 0;\n while (!(res = pred(gen())))\n reseed();\n reset();\n return res;\n };\n return genUntil;\n}\nfunction 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 === void 0)\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 const iter = (f, isOpt) => Object.entries(f).forEach(([k, v]) => checkField(k, v, isOpt));\n iter(fields, false);\n iter(optFields, true);\n}\nfunction memoized(fn) {\n const map = /* @__PURE__ */ new WeakMap();\n return (arg, ...args) => {\n const val = map.get(arg);\n if (val !== void 0)\n return val;\n const computed = fn(arg, ...args);\n map.set(arg, computed);\n return computed;\n };\n}\n\n// ../../node_modules/@noble/curves/abstract/modular.js\nvar _0n2 = /* @__PURE__ */ BigInt(0);\nvar _1n2 = /* @__PURE__ */ BigInt(1);\nvar _2n = /* @__PURE__ */ BigInt(2);\nvar _3n = /* @__PURE__ */ BigInt(3);\nvar _4n = /* @__PURE__ */ BigInt(4);\nvar _5n = /* @__PURE__ */ BigInt(5);\nvar _7n = /* @__PURE__ */ BigInt(7);\nvar _8n = /* @__PURE__ */ BigInt(8);\nvar _9n = /* @__PURE__ */ BigInt(9);\nvar _16n = /* @__PURE__ */ BigInt(16);\nfunction mod(a, b) {\n const result = a % b;\n return result >= _0n2 ? result : b + result;\n}\nfunction pow2(x, power, modulo) {\n let res = x;\n while (power-- > _0n2) {\n res *= res;\n res %= modulo;\n }\n return res;\n}\nfunction invert(number, modulo) {\n if (number === _0n2)\n throw new Error(\"invert: expected non-zero number\");\n if (modulo <= _0n2)\n throw new Error(\"invert: expected positive modulus, got \" + modulo);\n let a = mod(number, modulo);\n let b = modulo;\n let x = _0n2, y = _1n2, u = _1n2, v = _0n2;\n while (a !== _0n2) {\n const q = b / a;\n const r = b % a;\n const m = x - u * q;\n const n = y - v * q;\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n const gcd2 = b;\n if (gcd2 !== _1n2)\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}\nfunction sqrt3mod4(Fp, n) {\n const p1div4 = (Fp.ORDER + _1n2) / _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}\nfunction sqrt9mod16(P) {\n const Fp_ = Field(P);\n const tn = tonelliShanks(P);\n const c1 = tn(Fp_, Fp_.neg(Fp_.ONE));\n const c2 = tn(Fp_, c1);\n const c3 = tn(Fp_, Fp_.neg(c1));\n const c4 = (P + _7n) / _16n;\n return (Fp, n) => {\n let tv1 = Fp.pow(n, c4);\n let tv2 = Fp.mul(tv1, c1);\n const tv3 = Fp.mul(tv1, c2);\n const tv4 = Fp.mul(tv1, c3);\n const e1 = Fp.eql(Fp.sqr(tv2), n);\n const e2 = Fp.eql(Fp.sqr(tv3), n);\n tv1 = Fp.cmov(tv1, tv2, e1);\n tv2 = Fp.cmov(tv4, tv3, e2);\n const e3 = Fp.eql(Fp.sqr(tv2), n);\n const root = Fp.cmov(tv1, tv2, e3);\n assertIsSquare(Fp, root, n);\n return root;\n };\n}\nfunction tonelliShanks(P) {\n if (P < _3n)\n throw new Error(\"sqrt is not defined for small field\");\n let Q2 = P - _1n2;\n let S = 0;\n while (Q2 % _2n === _0n2) {\n Q2 /= _2n;\n S++;\n }\n let Z = _2n;\n const _Fp = Field(P);\n while (FpLegendre(_Fp, Z) === 1) {\n if (Z++ > 1e3)\n throw new Error(\"Cannot find square root: probably non-prime P\");\n }\n if (S === 1)\n return sqrt3mod4;\n let cc = _Fp.pow(Z, Q2);\n const Q1div2 = (Q2 + _1n2) / _2n;\n return function tonelliSlow(Fp, n) {\n if (Fp.is0(n))\n return n;\n if (FpLegendre(Fp, n) !== 1)\n throw new Error(\"Cannot find square root\");\n let M = S;\n let c = Fp.mul(Fp.ONE, cc);\n let t = Fp.pow(n, Q2);\n let R = Fp.pow(n, Q1div2);\n while (!Fp.eql(t, Fp.ONE)) {\n if (Fp.is0(t))\n return Fp.ZERO;\n let i = 1;\n let t_tmp = Fp.sqr(t);\n while (!Fp.eql(t_tmp, Fp.ONE)) {\n i++;\n t_tmp = Fp.sqr(t_tmp);\n if (i === M)\n throw new Error(\"Cannot find square root\");\n }\n const exponent = _1n2 << BigInt(M - i - 1);\n const b = Fp.pow(c, exponent);\n M = i;\n c = Fp.sqr(b);\n t = Fp.mul(t, c);\n R = Fp.mul(R, b);\n }\n return R;\n };\n}\nfunction FpSqrt(P) {\n if (P % _4n === _3n)\n return sqrt3mod4;\n if (P % _8n === _5n)\n return sqrt5mod8;\n if (P % _16n === _9n)\n return sqrt9mod16(P);\n return tonelliShanks(P);\n}\nvar FIELD_FIELDS = [\n \"create\",\n \"isValid\",\n \"is0\",\n \"neg\",\n \"inv\",\n \"sqrt\",\n \"sqr\",\n \"eql\",\n \"add\",\n \"sub\",\n \"mul\",\n \"pow\",\n \"div\",\n \"addN\",\n \"subN\",\n \"mulN\",\n \"sqrN\"\n];\nfunction validateField(field) {\n const initial = {\n ORDER: \"bigint\",\n BYTES: \"number\",\n BITS: \"number\"\n };\n const opts2 = FIELD_FIELDS.reduce((map, val) => {\n map[val] = \"function\";\n return map;\n }, initial);\n validateObject(field, opts2);\n return field;\n}\nfunction FpPow(Fp, num, power) {\n if (power < _0n2)\n throw new Error(\"invalid exponent, negatives unsupported\");\n if (power === _0n2)\n return Fp.ONE;\n if (power === _1n2)\n return num;\n let p = Fp.ONE;\n let d = num;\n while (power > _0n2) {\n if (power & _1n2)\n p = Fp.mul(p, d);\n d = Fp.sqr(d);\n power >>= _1n2;\n }\n return p;\n}\nfunction FpInvertBatch(Fp, nums, passZero = false) {\n const inverted = new Array(nums.length).fill(passZero ? Fp.ZERO : void 0);\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 const invertedAcc = Fp.inv(multipliedAcc);\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}\nfunction FpLegendre(Fp, n) {\n const p1mod2 = (Fp.ORDER - _1n2) / _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}\nfunction nLength(n, nBitLength) {\n if (nBitLength !== void 0)\n anumber4(nBitLength);\n const _nBitLength = nBitLength !== void 0 ? nBitLength : n.toString(2).length;\n const nByteLength = Math.ceil(_nBitLength / 8);\n return { nBitLength: _nBitLength, nByteLength };\n}\nvar _Field = class {\n ORDER;\n BITS;\n BYTES;\n isLE;\n ZERO = _0n2;\n ONE = _1n2;\n _lengths;\n _sqrt;\n // cached sqrt\n _mod;\n constructor(ORDER, opts2 = {}) {\n if (ORDER <= _0n2)\n throw new Error(\"invalid field: expected ORDER > 0, got \" + ORDER);\n let _nbitLength = void 0;\n this.isLE = false;\n if (opts2 != null && typeof opts2 === \"object\") {\n if (typeof opts2.BITS === \"number\")\n _nbitLength = opts2.BITS;\n if (typeof opts2.sqrt === \"function\")\n this.sqrt = opts2.sqrt;\n if (typeof opts2.isLE === \"boolean\")\n this.isLE = opts2.isLE;\n if (opts2.allowedLengths)\n this._lengths = opts2.allowedLengths?.slice();\n if (typeof opts2.modFromBytes === \"boolean\")\n this._mod = opts2.modFromBytes;\n }\n const { nBitLength, nByteLength } = nLength(ORDER, _nbitLength);\n if (nByteLength > 2048)\n throw new Error(\"invalid field: expected ORDER of <= 2048 bytes\");\n this.ORDER = ORDER;\n this.BITS = nBitLength;\n this.BYTES = nByteLength;\n this._sqrt = void 0;\n Object.preventExtensions(this);\n }\n create(num) {\n return mod(num, this.ORDER);\n }\n isValid(num) {\n if (typeof num !== \"bigint\")\n throw new Error(\"invalid field element: expected bigint, got \" + typeof num);\n return _0n2 <= num && num < this.ORDER;\n }\n is0(num) {\n return num === _0n2;\n }\n // is valid and invertible\n isValidNot0(num) {\n return !this.is0(num) && this.isValid(num);\n }\n isOdd(num) {\n return (num & _1n2) === _1n2;\n }\n neg(num) {\n return mod(-num, this.ORDER);\n }\n eql(lhs, rhs) {\n return lhs === rhs;\n }\n sqr(num) {\n return mod(num * num, this.ORDER);\n }\n add(lhs, rhs) {\n return mod(lhs + rhs, this.ORDER);\n }\n sub(lhs, rhs) {\n return mod(lhs - rhs, this.ORDER);\n }\n mul(lhs, rhs) {\n return mod(lhs * rhs, this.ORDER);\n }\n pow(num, power) {\n return FpPow(this, num, power);\n }\n div(lhs, rhs) {\n return mod(lhs * invert(rhs, this.ORDER), this.ORDER);\n }\n // Same as above, but doesn't normalize\n sqrN(num) {\n return num * num;\n }\n addN(lhs, rhs) {\n return lhs + rhs;\n }\n subN(lhs, rhs) {\n return lhs - rhs;\n }\n mulN(lhs, rhs) {\n return lhs * rhs;\n }\n inv(num) {\n return invert(num, this.ORDER);\n }\n sqrt(num) {\n if (!this._sqrt)\n this._sqrt = FpSqrt(this.ORDER);\n return this._sqrt(this, num);\n }\n toBytes(num) {\n return this.isLE ? numberToBytesLE(num, this.BYTES) : numberToBytesBE2(num, this.BYTES);\n }\n fromBytes(bytes, skipValidation = false) {\n abytes4(bytes);\n const { _lengths: allowedLengths, BYTES, isLE: isLE4, ORDER, _mod: modFromBytes } = this;\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 padded.set(bytes, isLE4 ? 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 = isLE4 ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n if (modFromBytes)\n scalar = mod(scalar, ORDER);\n if (!skipValidation) {\n if (!this.isValid(scalar))\n throw new Error(\"invalid field element: outside of range 0..ORDER\");\n }\n return scalar;\n }\n // TODO: we don't need it here, move out to separate fn\n invertBatch(lst) {\n return FpInvertBatch(this, lst);\n }\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, condition) {\n return condition ? b : a;\n }\n};\nfunction Field(ORDER, opts2 = {}) {\n return new _Field(ORDER, opts2);\n}\nfunction 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}\nfunction getMinHashLength(fieldOrder) {\n const length = getFieldBytesLength(fieldOrder);\n return length + Math.ceil(length / 2);\n}\nfunction mapHashToField(key, fieldOrder, isLE4 = false) {\n abytes4(key);\n const len = key.length;\n const fieldLen = getFieldBytesLength(fieldOrder);\n const minLen = getMinHashLength(fieldOrder);\n if (len < 16 || len < minLen || len > 1024)\n throw new Error(\"expected \" + minLen + \"-1024 bytes of input, got \" + len);\n const num = isLE4 ? bytesToNumberLE(key) : bytesToNumberBE(key);\n const reduced = mod(num, fieldOrder - _1n2) + _1n2;\n return isLE4 ? numberToBytesLE(reduced, fieldLen) : numberToBytesBE2(reduced, fieldLen);\n}\n\n// ../../node_modules/@noble/curves/abstract/curve.js\nvar _0n3 = /* @__PURE__ */ BigInt(0);\nvar _1n3 = /* @__PURE__ */ BigInt(1);\nfunction negateCt(condition, item) {\n const neg = item.negate();\n return condition ? neg : item;\n}\nfunction 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;\n const windowSize = 2 ** (W - 1);\n const maxNumber = 2 ** W;\n const mask = bitMask(W);\n const shiftBy = BigInt(W);\n return { windows, windowSize, mask, maxNumber, shiftBy };\n}\nfunction calcOffsets(n, window2, wOpts) {\n const { windowSize, mask, maxNumber, shiftBy } = wOpts;\n let wbits = Number(n & mask);\n let nextN = n >> shiftBy;\n if (wbits > windowSize) {\n wbits -= maxNumber;\n nextN += _1n3;\n }\n const offsetStart = window2 * windowSize;\n const offset = offsetStart + Math.abs(wbits) - 1;\n const isZero = wbits === 0;\n const isNeg = wbits < 0;\n const isNegF = window2 % 2 !== 0;\n const offsetF = offsetStart;\n return { nextN, offset, isZero, isNeg, isNegF, offsetF };\n}\nvar pointPrecomputes = /* @__PURE__ */ new WeakMap();\nvar pointWindowSizes = /* @__PURE__ */ new WeakMap();\nfunction getW(P) {\n return pointWindowSizes.get(P) || 1;\n}\nfunction assert0(n) {\n if (n !== _0n3)\n throw new Error(\"invalid wNAF\");\n}\nvar wNAF = class {\n BASE;\n ZERO;\n Fn;\n bits;\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 > _0n3) {\n if (n & _1n3)\n p = p.add(d);\n d = d.double();\n n >>= _1n3;\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^(\uD835\uDC4A\u22121) * (Math.ceil(\uD835\uDC5B / \uD835\uDC4A) + 1), where:\n * - \uD835\uDC4A is the window size\n * - \uD835\uDC5B 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 window2 = 0; window2 < windows; window2++) {\n base = p;\n points.push(base);\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 if (!this.Fn.isValid(n))\n throw new Error(\"invalid scalar\");\n let p = this.ZERO;\n let f = this.BASE;\n const wo = calcWOpts(W, this.bits);\n for (let window2 = 0; window2 < wo.windows; window2++) {\n const { nextN, offset, isZero, isNeg, isNegF, offsetF } = calcOffsets(n, window2, wo);\n n = nextN;\n if (isZero) {\n f = f.add(negateCt(isNegF, precomputes[offsetF]));\n } else {\n p = p.add(negateCt(isNeg, precomputes[offset]));\n }\n }\n assert0(n);\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 window2 = 0; window2 < wo.windows; window2++) {\n if (n === _0n3)\n break;\n const { nextN, offset, isZero, isNeg } = calcOffsets(n, window2, wo);\n n = nextN;\n if (isZero) {\n continue;\n } else {\n const item = precomputes[offset];\n acc = acc.add(isNeg ? item.negate() : item);\n }\n }\n assert0(n);\n return acc;\n }\n getPrecomputes(W, point, transform) {\n let comp = pointPrecomputes.get(point);\n if (!comp) {\n comp = this.precomputeWindow(point, W);\n if (W !== 1) {\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);\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};\nfunction mulEndoUnsafe(Point, point, k1, k2) {\n let acc = point;\n let p1 = Point.ZERO;\n let p2 = Point.ZERO;\n while (k1 > _0n3 || k2 > _0n3) {\n if (k1 & _1n3)\n p1 = p1.add(acc);\n if (k2 & _1n3)\n p2 = p2.add(acc);\n acc = acc.double();\n k1 >>= _1n3;\n k2 >>= _1n3;\n }\n return { p1, p2 };\n}\nfunction createField(order, field, isLE4) {\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 } else {\n return Field(order, { isLE: isLE4 });\n }\n}\nfunction createCurveFields(type, CURVE, curveOpts = {}, FpFnLE) {\n if (FpFnLE === void 0)\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 > _0n3))\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 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}\nfunction createKeygen(randomSecretKey, getPublicKey) {\n return function keygen(seed) {\n const secretKey = randomSecretKey(seed);\n return { secretKey, publicKey: getPublicKey(secretKey) };\n };\n}\n\n// ../../node_modules/@noble/curves/abstract/montgomery.js\nvar _0n4 = BigInt(0);\nvar _1n4 = BigInt(1);\nvar _2n2 = BigInt(2);\nfunction validateOpts(curve) {\n validateObject(curve, {\n adjustScalarBytes: \"function\",\n powPminus2: \"function\"\n });\n return Object.freeze({ ...curve });\n}\nfunction montgomery(curveDef) {\n const CURVE = validateOpts(curveDef);\n const { P, type, adjustScalarBytes: adjustScalarBytes2, powPminus2, randomBytes: rand } = CURVE;\n const is25519 = type === \"x25519\";\n if (!is25519 && type !== \"x448\")\n throw new Error(\"invalid type\");\n const randomBytes_ = rand || randomBytes3;\n const montgomeryBits = is25519 ? 255 : 448;\n const fieldLen = is25519 ? 32 : 56;\n const Gu = is25519 ? BigInt(9) : BigInt(5);\n const a24 = is25519 ? BigInt(121665) : BigInt(39081);\n const minScalar = is25519 ? _2n2 ** BigInt(254) : _2n2 ** BigInt(447);\n const maxAdded = is25519 ? BigInt(8) * _2n2 ** BigInt(251) - _1n4 : BigInt(4) * _2n2 ** BigInt(445) - _1n4;\n const maxScalar = minScalar + maxAdded + _1n4;\n const modP = (n) => mod(n, P);\n const GuBytes = encodeU(Gu);\n function encodeU(u) {\n return numberToBytesLE(modP(u), fieldLen);\n }\n function decodeU(u) {\n const _u = copyBytes2(abytes4(u, fieldLen, \"uCoordinate\"));\n if (is25519)\n _u[31] &= 127;\n return modP(bytesToNumberLE(_u));\n }\n function decodeScalar(scalar) {\n return bytesToNumberLE(adjustScalarBytes2(copyBytes2(abytes4(scalar, fieldLen, \"scalar\"))));\n }\n function scalarMult2(scalar, u) {\n const pu = montgomeryLadder(decodeU(u), decodeScalar(scalar));\n if (pu === _0n4)\n throw new Error(\"invalid private or public key received\");\n return encodeU(pu);\n }\n function scalarMultBase2(scalar) {\n return scalarMult2(scalar, GuBytes);\n }\n const getPublicKey = scalarMultBase2;\n const getSharedSecret = scalarMult2;\n function cswap(swap, x_2, x_3) {\n const dummy = modP(swap * (x_2 - x_3));\n x_2 = modP(x_2 - dummy);\n x_3 = modP(x_3 + dummy);\n return { x_2, x_3 };\n }\n function montgomeryLadder(u, scalar) {\n aInRange(\"u\", u, _0n4, P);\n aInRange(\"scalar\", scalar, minScalar, maxScalar);\n const k = scalar;\n const x_1 = u;\n let x_2 = _1n4;\n let z_2 = _0n4;\n let x_3 = u;\n let z_3 = _1n4;\n let swap = _0n4;\n for (let t = BigInt(montgomeryBits - 1); t >= _0n4; t--) {\n const k_t = k >> t & _1n4;\n swap ^= k_t;\n ({ x_2, x_3 } = cswap(swap, x_2, x_3));\n ({ x_2: z_2, x_3: z_3 } = cswap(swap, z_2, z_3));\n swap = k_t;\n const A = x_2 + z_2;\n const AA = modP(A * A);\n const B = x_2 - z_2;\n const BB = modP(B * B);\n const E = AA - BB;\n const C = x_3 + z_3;\n const D = x_3 - z_3;\n const DA = modP(D * A);\n const CB = modP(C * B);\n const dacb = DA + CB;\n const da_cb = DA - CB;\n x_3 = modP(dacb * dacb);\n z_3 = modP(x_1 * modP(da_cb * da_cb));\n x_2 = modP(AA * BB);\n z_2 = modP(E * (AA + modP(a24 * E)));\n }\n ({ x_2, x_3 } = cswap(swap, x_2, x_3));\n ({ x_2: z_2, x_3: z_3 } = cswap(swap, z_2, z_3));\n const z2 = powPminus2(z_2);\n return modP(x_2 * z2);\n }\n const lengths = {\n secretKey: fieldLen,\n publicKey: fieldLen,\n seed: fieldLen\n };\n const randomSecretKey = (seed = randomBytes_(fieldLen)) => {\n abytes4(seed, lengths.seed, \"seed\");\n return seed;\n };\n const utils = { randomSecretKey };\n return Object.freeze({\n keygen: createKeygen(randomSecretKey, getPublicKey),\n getSharedSecret,\n getPublicKey,\n scalarMult: scalarMult2,\n scalarMultBase: scalarMultBase2,\n utils,\n GuBytes: GuBytes.slice(),\n lengths\n });\n}\n\n// ../../node_modules/@noble/curves/node_modules/@noble/hashes/hmac.js\nvar _HMAC2 = class {\n oHash;\n iHash;\n blockLen;\n outputLen;\n finished = false;\n destroyed = false;\n constructor(hash, key) {\n ahash2(hash);\n abytes4(key, void 0, \"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 pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 54;\n this.iHash.update(pad);\n this.oHash = hash.create();\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 54 ^ 92;\n this.oHash.update(pad);\n clean3(pad);\n }\n update(buf) {\n aexists3(this);\n this.iHash.update(buf);\n return this;\n }\n digestInto(out) {\n aexists3(this);\n abytes4(out, this.outputLen, \"output\");\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 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};\nvar hmac2 = (hash, key, message) => new _HMAC2(hash, key).update(message).digest();\nhmac2.create = (hash, key) => new _HMAC2(hash, key);\n\n// ../../node_modules/@noble/curves/abstract/weierstrass.js\nvar divNearest = (num, den) => (num + (num >= 0 ? den : -den) / _2n3) / den;\nfunction _splitEndoScalar(k, basis, n) {\n const [[a1, b1], [a2, b2]] = basis;\n const c1 = divNearest(b2 * k, n);\n const c2 = divNearest(-b1 * k, n);\n let k1 = k - c1 * a1 - c2 * a2;\n let k2 = -c1 * b1 - c2 * b2;\n const k1neg = k1 < _0n5;\n const k2neg = k2 < _0n5;\n if (k1neg)\n k1 = -k1;\n if (k2neg)\n k2 = -k2;\n const MAX_NUM = bitMask(Math.ceil(bitLen(n) / 2)) + _1n5;\n if (k1 < _0n5 || k1 >= MAX_NUM || k2 < _0n5 || 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(opts2, def) {\n const optsn = {};\n for (let optName of Object.keys(def)) {\n optsn[optName] = opts2[optName] === void 0 ? def[optName] : opts2[optName];\n }\n abool2(optsn.lowS, \"lowS\");\n abool2(optsn.prehash, \"prehash\");\n if (optsn.format !== void 0)\n validateSigFormat(optsn.format);\n return optsn;\n}\nvar DERErr = class extends Error {\n constructor(m = \"\") {\n super(m);\n }\n};\nvar 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 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);\n let length = 0;\n if (!isLong)\n length = first;\n else {\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\");\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 < _0n5)\n throw new E(\"integer: negative integers are not allowed\");\n let hex = numberToHexUnpadded(num);\n if (Number.parseInt(hex[0], 16) & 8)\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] === 0 && !(data[1] & 128))\n throw new E(\"invalid signature integer: unnecessary leading zero\");\n return bytesToNumberBE(data);\n }\n },\n toSig(bytes) {\n const { Err: E, _int: int, _tlv: tlv } = DER;\n const data = abytes4(bytes, void 0, \"signature\");\n const { v: seqBytes, l: seqLeftBytes } = tlv.decode(48, data);\n if (seqLeftBytes.length)\n throw new E(\"invalid signature: left bytes after parsing\");\n const { v: rBytes, l: rLeftBytes } = tlv.decode(2, seqBytes);\n const { v: sBytes, l: sLeftBytes } = tlv.decode(2, 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(2, int.encode(sig.r));\n const ss = tlv.encode(2, int.encode(sig.s));\n const seq = rs + ss;\n return tlv.encode(48, seq);\n }\n};\nvar _0n5 = BigInt(0);\nvar _1n5 = BigInt(1);\nvar _2n3 = BigInt(2);\nvar _3n2 = BigInt(3);\nvar _4n2 = BigInt(4);\nfunction weierstrass(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 });\n const { endo } = extraOpts;\n if (endo) {\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 function pointToBytes(_c, point, isCompressed) {\n const { x, y } = point.toAffine();\n const bx = Fp.toBytes(x);\n abool2(isCompressed, \"isCompressed\");\n if (isCompressed) {\n assertCompressionIsSupported();\n const hasEvenY = !Fp.isOdd(y);\n return concatBytes2(pprefix(hasEvenY), bx);\n } else {\n return concatBytes2(Uint8Array.of(4), bx, Fp.toBytes(y));\n }\n }\n function pointFromBytes(bytes) {\n abytes4(bytes, void 0, \"Point\");\n const { publicKey: comp, publicKeyUncompressed: uncomp } = lengths;\n const length = bytes.length;\n const head = bytes[0];\n const tail = bytes.subarray(1);\n if (length === comp && (head === 2 || head === 3)) {\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);\n let y;\n try {\n y = Fp.sqrt(y2);\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 evenY = Fp.isOdd(y);\n const evenH = (head & 1) === 1;\n if (evenH !== evenY)\n y = Fp.neg(y);\n return { x, y };\n } else if (length === uncomp && head === 4) {\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 } 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);\n const x3 = Fp.mul(x2, x);\n return Fp.add(Fp.add(x3, Fp.mul(x, CURVE.a)), CURVE.b);\n }\n function isValidXY(x, y) {\n const left = Fp.sqr(y);\n const right = weierstrassEquation(x);\n return Fp.eql(left, right);\n }\n if (!isValidXY(CURVE.Gx, CURVE.Gy))\n throw new Error(\"bad curve params: generator point\");\n const _4a3 = Fp.mul(Fp.pow(CURVE.a, _3n2), _4n2);\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 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(\"Weierstrass Point 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 const toAffineMemo = memoized((p, iz) => {\n const { X, Y, Z } = p;\n if (Fp.eql(Z, Fp.ONE))\n return { x: X, y: Y };\n const is0 = p.is0();\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 const assertValidMemo = memoized((p) => {\n if (p.is0()) {\n if (extraOpts.allowInfinityPoint && !Fp.is0(p.Y))\n return;\n throw new Error(\"bad point: ZERO\");\n }\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 class Point {\n // base / generator point\n static BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);\n // zero / infinity / identity point\n static ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO);\n // 0, 1, 0\n // math field\n static Fp = Fp;\n // scalar field\n static Fn = Fn;\n X;\n Y;\n Z;\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 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(abytes4(bytes, void 0, \"point\")));\n P.assertValidity();\n return P;\n }\n static fromHex(hex) {\n return Point.fromBytes(hexToBytes(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(_3n2);\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, _3n2);\n const { X: X1, Y: Y1, Z: Z1 } = this;\n let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO;\n let t0 = Fp.mul(X1, X1);\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);\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);\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);\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);\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);\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);\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;\n const a = CURVE.a;\n const b3 = Fp.mul(CURVE.b, _3n2);\n let t0 = Fp.mul(X1, X2);\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);\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);\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);\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);\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);\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);\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);\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);\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: endo2 } = extraOpts;\n if (!Fn.isValidNot0(scalar))\n throw new Error(\"invalid scalar: out of range\");\n let point, fake;\n const mul = (n) => wnaf.cached(this, n, (p) => normalizeZ(Point, p));\n if (endo2) {\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(endo2.beta, k1p, k2p, k1neg, k2neg);\n } else {\n const { p, f } = mul(scalar);\n point = p;\n fake = f;\n }\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: endo2 } = extraOpts;\n const p = this;\n if (!Fn.isValid(sc))\n throw new Error(\"invalid scalar: out of range\");\n if (sc === _0n5 || p.is0())\n return Point.ZERO;\n if (sc === _1n5)\n return p;\n if (wnaf.hasCache(this))\n return this.multiply(sc);\n if (endo2) {\n const { k1neg, k1, k2neg, k2 } = splitEndoScalarN(sc);\n const { p1, p2 } = mulEndoUnsafe(Point, p, k1, k2);\n return finishEndo(endo2.beta, p1, p2, k1neg, k2neg);\n } else {\n return wnaf.unsafe(p, sc);\n }\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 === _1n5)\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 === _1n5)\n return this;\n if (clearCofactor)\n return clearCofactor(Point, this);\n return this.multiplyUnsafe(cofactor);\n }\n isSmallOrder() {\n return this.multiplyUnsafe(cofactor).is0();\n }\n toBytes(isCompressed = true) {\n abool2(isCompressed, \"isCompressed\");\n this.assertValidity();\n return encodePoint(Point, this, isCompressed);\n }\n toHex(isCompressed = true) {\n return bytesToHex2(this.toBytes(isCompressed));\n }\n toString() {\n return `<Point ${this.is0() ? \"ZERO\" : this.toHex()}>`;\n }\n }\n const bits = Fn.BITS;\n const wnaf = new wNAF(Point, extraOpts.endo ? Math.ceil(bits / 2) : bits);\n Point.BASE.precompute(8);\n return Point;\n}\nfunction pprefix(hasEvenY) {\n return Uint8Array.of(hasEvenY ? 2 : 3);\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}\nfunction ecdh(Point, ecdhOpts = {}) {\n const { Fn } = Point;\n const randomBytes_ = ecdhOpts.randomBytes || randomBytes3;\n const lengths = Object.assign(getWLengths(Point.Fp, Fn), { seed: getMinHashLength(Fn.ORDER) });\n function isValidSecretKey(secretKey) {\n try {\n const num = Fn.fromBytes(secretKey);\n return Fn.isValidNot0(num);\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 } catch (error) {\n return false;\n }\n }\n function randomSecretKey(seed = randomBytes_(lengths.seed)) {\n return mapHashToField(abytes4(seed, lengths.seed, \"seed\"), Fn.ORDER);\n }\n function getPublicKey(secretKey, isCompressed = true) {\n return Point.BASE.multiply(Fn.fromBytes(secretKey)).toBytes(isCompressed);\n }\n function isProbPub(item) {\n const { secretKey, publicKey, publicKeyUncompressed } = lengths;\n if (!isBytes4(item))\n return void 0;\n if (\"_lengths\" in Fn && Fn._lengths || secretKey === publicKey)\n return void 0;\n const l = abytes4(item, void 0, \"key\").length;\n return l === publicKey || l === publicKeyUncompressed;\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 = Fn.fromBytes(secretKeyA);\n const b = Point.fromBytes(publicKeyB);\n return b.multiply(s).toBytes(isCompressed);\n }\n const utils = {\n isValidSecretKey,\n isValidPublicKey,\n randomSecretKey\n };\n const keygen = createKeygen(randomSecretKey, getPublicKey);\n return Object.freeze({ getPublicKey, getSharedSecret, keygen, Point, utils, lengths });\n}\nfunction ecdsa(Point, hash, ecdsaOpts = {}) {\n ahash2(hash);\n validateObject(ecdsaOpts, {}, {\n hmac: \"function\",\n lowS: \"boolean\",\n randomBytes: \"function\",\n bits2int: \"function\",\n bits2int_modN: \"function\"\n });\n ecdsaOpts = Object.assign({}, ecdsaOpts);\n const randomBytes6 = ecdsaOpts.randomBytes || randomBytes3;\n const hmac4 = ecdsaOpts.hmac || ((key, msg) => hmac2(hash, key, msg));\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: true,\n lowS: typeof ecdsaOpts.lowS === \"boolean\" ? ecdsaOpts.lowS : true,\n format: \"compact\",\n extraEntropy: false\n };\n const hasLargeCofactor = CURVE_ORDER * _2n3 < Fp.ORDER;\n function isBiggerThanHalfOrder(number) {\n const HALF = CURVE_ORDER >> _1n5;\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 assertSmallCofactor() {\n if (hasLargeCofactor)\n throw new Error('\"recovered\" sig type is not supported for cofactor >2 curves');\n }\n function validateSigLength(bytes, format) {\n validateSigFormat(format);\n const size = lengths.signature;\n const sizer = format === \"compact\" ? size : format === \"recovered\" ? size + 1 : void 0;\n return abytes4(bytes, sizer);\n }\n class Signature {\n r;\n s;\n recovery;\n constructor(r, s, recovery) {\n this.r = validateRS(\"r\", r);\n this.s = validateRS(\"s\", s);\n if (recovery != null) {\n assertSmallCofactor();\n if (![0, 1, 2, 3].includes(recovery))\n throw new Error(\"invalid recovery id\");\n this.recovery = recovery;\n }\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: r2, s: s2 } = DER.toSig(abytes4(bytes));\n return new Signature(r2, s2);\n }\n if (format === \"recovered\") {\n recid = bytes[0];\n format = \"compact\";\n bytes = bytes.subarray(1);\n }\n const L = lengths.signature / 2;\n const r = bytes.subarray(0, L);\n const s = bytes.subarray(L, L * 2);\n return new Signature(Fn.fromBytes(r), Fn.fromBytes(s), recid);\n }\n static fromHex(hex, format) {\n return this.fromBytes(hexToBytes(hex), format);\n }\n assertRecovery() {\n const { recovery } = this;\n if (recovery == null)\n throw new Error(\"invalid recovery id: must be present\");\n return recovery;\n }\n addRecoveryBit(recovery) {\n return new Signature(this.r, this.s, recovery);\n }\n recoverPublicKey(messageHash) {\n const { r, s } = this;\n const recovery = this.assertRecovery();\n const radj = recovery === 2 || recovery === 3 ? r + CURVE_ORDER : r;\n if (!Fp.isValid(radj))\n throw new Error(\"invalid recovery id: sig.r+curve.n != R.x\");\n const x = Fp.toBytes(radj);\n const R = Point.fromBytes(concatBytes2(pprefix((recovery & 1) === 0), x));\n const ir = Fn.inv(radj);\n const h = bits2int_modN(abytes4(messageHash, void 0, \"msgHash\"));\n const u1 = Fn.create(-h * ir);\n const u2 = Fn.create(s * ir);\n const Q2 = Point.BASE.multiplyUnsafe(u1).add(R.multiplyUnsafe(u2));\n if (Q2.is0())\n throw new Error(\"invalid recovery: point at infinify\");\n Q2.assertValidity();\n return Q2;\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, s } = this;\n const rb = Fn.toBytes(r);\n const sb = Fn.toBytes(s);\n if (format === \"recovered\") {\n assertSmallCofactor();\n return concatBytes2(Uint8Array.of(this.assertRecovery()), rb, sb);\n }\n return concatBytes2(rb, sb);\n }\n toHex(format) {\n return bytesToHex2(this.toBytes(format));\n }\n }\n const bits2int = ecdsaOpts.bits2int || function bits2int_def(bytes) {\n if (bytes.length > 8192)\n throw new Error(\"input is too large\");\n const num = bytesToNumberBE(bytes);\n const delta = bytes.length * 8 - fnBits;\n return delta > 0 ? num >> BigInt(delta) : num;\n };\n const bits2int_modN = ecdsaOpts.bits2int_modN || function bits2int_modN_def(bytes) {\n return Fn.create(bits2int(bytes));\n };\n const ORDER_MASK = bitMask(fnBits);\n function int2octets(num) {\n aInRange(\"num < 2^\" + fnBits, num, _0n5, ORDER_MASK);\n return Fn.toBytes(num);\n }\n function validateMsgAndHash(message, prehash) {\n abytes4(message, void 0, \"message\");\n return prehash ? abytes4(hash(message), void 0, \"prehashed message\") : message;\n }\n function prepSig(message, secretKey, opts2) {\n const { lowS, prehash, extraEntropy } = validateSigOpts(opts2, defaultSigOpts);\n message = validateMsgAndHash(message, prehash);\n const h1int = bits2int_modN(message);\n const d = Fn.fromBytes(secretKey);\n if (!Fn.isValidNot0(d))\n throw new Error(\"invalid private key\");\n const seedArgs = [int2octets(d), int2octets(h1int)];\n if (extraEntropy != null && extraEntropy !== false) {\n const e = extraEntropy === true ? randomBytes6(lengths.secretKey) : extraEntropy;\n seedArgs.push(abytes4(e, void 0, \"extraEntropy\"));\n }\n const seed = concatBytes2(...seedArgs);\n const m = h1int;\n function k2sig(kBytes) {\n const k = bits2int(kBytes);\n if (!Fn.isValidNot0(k))\n return;\n const ik = Fn.inv(k);\n const q = Point.BASE.multiply(k).toAffine();\n const r = Fn.create(q.x);\n if (r === _0n5)\n return;\n const s = Fn.create(ik * Fn.create(m + r * d));\n if (s === _0n5)\n return;\n let recovery = (q.x === r ? 0 : 2) | Number(q.y & _1n5);\n let normS = s;\n if (lowS && isBiggerThanHalfOrder(s)) {\n normS = Fn.neg(s);\n recovery ^= 1;\n }\n return new Signature(r, normS, hasLargeCofactor ? void 0 : recovery);\n }\n return { seed, k2sig };\n }\n function sign(message, secretKey, opts2 = {}) {\n const { seed, k2sig } = prepSig(message, secretKey, opts2);\n const drbg = createHmacDrbg(hash.outputLen, Fn.BYTES, hmac4);\n const sig = drbg(seed, k2sig);\n return sig.toBytes(opts2.format);\n }\n function verify(signature, message, publicKey, opts2 = {}) {\n const { lowS, prehash, format } = validateSigOpts(opts2, defaultSigOpts);\n publicKey = abytes4(publicKey, void 0, \"publicKey\");\n message = validateMsgAndHash(message, prehash);\n if (!isBytes4(signature)) {\n const end = signature instanceof Signature ? \", use sig.toBytes()\" : \"\";\n throw new Error(\"verify expects Uint8Array signature\" + end);\n }\n validateSigLength(signature, format);\n try {\n const sig = Signature.fromBytes(signature, format);\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);\n const is = Fn.inv(s);\n const u1 = Fn.create(h * is);\n const u2 = Fn.create(r * is);\n const R = Point.BASE.multiplyUnsafe(u1).add(P.multiplyUnsafe(u2));\n if (R.is0())\n return false;\n const v = Fn.create(R.x);\n return v === r;\n } catch (e) {\n return false;\n }\n }\n function recoverPublicKey(signature, message, opts2 = {}) {\n const { prehash } = validateSigOpts(opts2, 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\n// ../../node_modules/@noble/curves/node_modules/@noble/hashes/_md.js\nfunction Chi2(a, b, c) {\n return a & b ^ ~a & c;\n}\nfunction Maj2(a, b, c) {\n return a & b ^ a & c ^ b & c;\n}\nvar HashMD2 = class {\n blockLen;\n outputLen;\n padOffset;\n isLE;\n // For partial updates less than block size\n buffer;\n view;\n finished = false;\n length = 0;\n pos = 0;\n destroyed = false;\n constructor(blockLen, outputLen, padOffset, isLE4) {\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE4;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView3(this.buffer);\n }\n update(data) {\n aexists3(this);\n abytes4(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 if (take === blockLen) {\n const dataView = createView3(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 aexists3(this);\n aoutput3(out, this);\n this.finished = true;\n const { buffer, view, blockLen, isLE: isLE4 } = this;\n let { pos } = this;\n buffer[pos++] = 128;\n clean3(this.buffer.subarray(pos));\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n for (let i = pos; i < blockLen; i++)\n buffer[i] = 0;\n view.setBigUint64(blockLen - 8, BigInt(this.length * 8), isLE4);\n this.process(view, 0);\n const oview = createView3(out);\n const len = this.outputLen;\n if (len % 4)\n throw new Error(\"_sha2: outputLen must 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], isLE4);\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 ||= 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};\nvar SHA256_IV2 = /* @__PURE__ */ Uint32Array.from([\n 1779033703,\n 3144134277,\n 1013904242,\n 2773480762,\n 1359893119,\n 2600822924,\n 528734635,\n 1541459225\n]);\nvar SHA384_IV2 = /* @__PURE__ */ Uint32Array.from([\n 3418070365,\n 3238371032,\n 1654270250,\n 914150663,\n 2438529370,\n 812702999,\n 355462360,\n 4144912697,\n 1731405415,\n 4290775857,\n 2394180231,\n 1750603025,\n 3675008525,\n 1694076839,\n 1203062813,\n 3204075428\n]);\n\n// ../../node_modules/@noble/curves/node_modules/@noble/hashes/_u64.js\nvar U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nvar _32n = /* @__PURE__ */ BigInt(32);\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 const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for (let i = 0; i < len; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\nvar shrSH = (h, _l, s) => h >>> s;\nvar shrSL = (h, l, s) => h << 32 - s | l >>> s;\nvar rotrSH = (h, l, s) => h >>> s | l << 32 - s;\nvar rotrSL = (h, l, s) => h << 32 - s | l >>> s;\nvar rotrBH = (h, l, s) => h << 64 - s | l >>> s - 32;\nvar rotrBL = (h, l, s) => h >>> s - 32 | l << 64 - s;\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}\nvar add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nvar add3H = (low, Ah, Bh, Ch) => Ah + Bh + Ch + (low / 2 ** 32 | 0) | 0;\nvar add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nvar add4H = (low, Ah, Bh, Ch, Dh) => Ah + Bh + Ch + Dh + (low / 2 ** 32 | 0) | 0;\nvar add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nvar add5H = (low, Ah, Bh, Ch, Dh, Eh) => Ah + Bh + Ch + Dh + Eh + (low / 2 ** 32 | 0) | 0;\n\n// ../../node_modules/@noble/curves/node_modules/@noble/hashes/sha2.js\nvar SHA256_K2 = /* @__PURE__ */ Uint32Array.from([\n 1116352408,\n 1899447441,\n 3049323471,\n 3921009573,\n 961987163,\n 1508970993,\n 2453635748,\n 2870763221,\n 3624381080,\n 310598401,\n 607225278,\n 1426881987,\n 1925078388,\n 2162078206,\n 2614888103,\n 3248222580,\n 3835390401,\n 4022224774,\n 264347078,\n 604807628,\n 770255983,\n 1249150122,\n 1555081692,\n 1996064986,\n 2554220882,\n 2821834349,\n 2952996808,\n 3210313671,\n 3336571891,\n 3584528711,\n 113926993,\n 338241895,\n 666307205,\n 773529912,\n 1294757372,\n 1396182291,\n 1695183700,\n 1986661051,\n 2177026350,\n 2456956037,\n 2730485921,\n 2820302411,\n 3259730800,\n 3345764771,\n 3516065817,\n 3600352804,\n 4094571909,\n 275423344,\n 430227734,\n 506948616,\n 659060556,\n 883997877,\n 958139571,\n 1322822218,\n 1537002063,\n 1747873779,\n 1955562222,\n 2024104815,\n 2227730452,\n 2361852424,\n 2428436474,\n 2756734187,\n 3204031479,\n 3329325298\n]);\nvar SHA256_W2 = /* @__PURE__ */ new Uint32Array(64);\nvar SHA2_32B2 = class extends HashMD2 {\n constructor(outputLen) {\n super(64, outputLen, 8, false);\n }\n get() {\n const { A, B, C, D, E, F: F2, G, H } = this;\n return [A, B, C, D, E, F2, G, H];\n }\n // prettier-ignore\n set(A, B, C, D, E, F2, 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 = F2 | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n process(view, offset) {\n for (let i = 0; i < 16; i++, offset += 4)\n SHA256_W2[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W2[i - 15];\n const W2 = SHA256_W2[i - 2];\n const s0 = rotr2(W15, 7) ^ rotr2(W15, 18) ^ W15 >>> 3;\n const s1 = rotr2(W2, 17) ^ rotr2(W2, 19) ^ W2 >>> 10;\n SHA256_W2[i] = s1 + SHA256_W2[i - 7] + s0 + SHA256_W2[i - 16] | 0;\n }\n let { A, B, C, D, E, F: F2, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr2(E, 6) ^ rotr2(E, 11) ^ rotr2(E, 25);\n const T1 = H + sigma1 + Chi2(E, F2, G) + SHA256_K2[i] + SHA256_W2[i] | 0;\n const sigma0 = rotr2(A, 2) ^ rotr2(A, 13) ^ rotr2(A, 22);\n const T2 = sigma0 + Maj2(A, B, C) | 0;\n H = G;\n G = F2;\n F2 = E;\n E = D + T1 | 0;\n D = C;\n C = B;\n B = A;\n A = T1 + T2 | 0;\n }\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 F2 = F2 + this.F | 0;\n G = G + this.G | 0;\n H = H + this.H | 0;\n this.set(A, B, C, D, E, F2, G, H);\n }\n roundClean() {\n clean3(SHA256_W2);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n clean3(this.buffer);\n }\n};\nvar _SHA2562 = class extends SHA2_32B2 {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n A = SHA256_IV2[0] | 0;\n B = SHA256_IV2[1] | 0;\n C = SHA256_IV2[2] | 0;\n D = SHA256_IV2[3] | 0;\n E = SHA256_IV2[4] | 0;\n F = SHA256_IV2[5] | 0;\n G = SHA256_IV2[6] | 0;\n H = SHA256_IV2[7] | 0;\n constructor() {\n super(32);\n }\n};\nvar K512 = /* @__PURE__ */ (() => split([\n \"0x428a2f98d728ae22\",\n \"0x7137449123ef65cd\",\n \"0xb5c0fbcfec4d3b2f\",\n \"0xe9b5dba58189dbbc\",\n \"0x3956c25bf348b538\",\n \"0x59f111f1b605d019\",\n \"0x923f82a4af194f9b\",\n \"0xab1c5ed5da6d8118\",\n \"0xd807aa98a3030242\",\n \"0x12835b0145706fbe\",\n \"0x243185be4ee4b28c\",\n \"0x550c7dc3d5ffb4e2\",\n \"0x72be5d74f27b896f\",\n \"0x80deb1fe3b1696b1\",\n \"0x9bdc06a725c71235\",\n \"0xc19bf174cf692694\",\n \"0xe49b69c19ef14ad2\",\n \"0xefbe4786384f25e3\",\n \"0x0fc19dc68b8cd5b5\",\n \"0x240ca1cc77ac9c65\",\n \"0x2de92c6f592b0275\",\n \"0x4a7484aa6ea6e483\",\n \"0x5cb0a9dcbd41fbd4\",\n \"0x76f988da831153b5\",\n \"0x983e5152ee66dfab\",\n \"0xa831c66d2db43210\",\n \"0xb00327c898fb213f\",\n \"0xbf597fc7beef0ee4\",\n \"0xc6e00bf33da88fc2\",\n \"0xd5a79147930aa725\",\n \"0x06ca6351e003826f\",\n \"0x142929670a0e6e70\",\n \"0x27b70a8546d22ffc\",\n \"0x2e1b21385c26c926\",\n \"0x4d2c6dfc5ac42aed\",\n \"0x53380d139d95b3df\",\n \"0x650a73548baf63de\",\n \"0x766a0abb3c77b2a8\",\n \"0x81c2c92e47edaee6\",\n \"0x92722c851482353b\",\n \"0xa2bfe8a14cf10364\",\n \"0xa81a664bbc423001\",\n \"0xc24b8b70d0f89791\",\n \"0xc76c51a30654be30\",\n \"0xd192e819d6ef5218\",\n \"0xd69906245565a910\",\n \"0xf40e35855771202a\",\n \"0x106aa07032bbd1b8\",\n \"0x19a4c116b8d2d0c8\",\n \"0x1e376c085141ab53\",\n \"0x2748774cdf8eeb99\",\n \"0x34b0bcb5e19b48a8\",\n \"0x391c0cb3c5c95a63\",\n \"0x4ed8aa4ae3418acb\",\n \"0x5b9cca4f7763e373\",\n \"0x682e6ff3d6b2b8a3\",\n \"0x748f82ee5defb2fc\",\n \"0x78a5636f43172f60\",\n \"0x84c87814a1f0ab72\",\n \"0x8cc702081a6439ec\",\n \"0x90befffa23631e28\",\n \"0xa4506cebde82bde9\",\n \"0xbef9a3f7b2c67915\",\n \"0xc67178f2e372532b\",\n \"0xca273eceea26619c\",\n \"0xd186b8c721c0c207\",\n \"0xeada7dd6cde0eb1e\",\n \"0xf57d4f7fee6ed178\",\n \"0x06f067aa72176fba\",\n \"0x0a637dc5a2c898a6\",\n \"0x113f9804bef90dae\",\n \"0x1b710b35131c471b\",\n \"0x28db77f523047d84\",\n \"0x32caab7b40c72493\",\n \"0x3c9ebe0a15c9bebc\",\n \"0x431d67c49c100d4c\",\n \"0x4cc5d4becb3e42b6\",\n \"0x597f299cfc657e2a\",\n \"0x5fcb6fab3ad6faec\",\n \"0x6c44198c4a475817\"\n].map((n) => BigInt(n))))();\nvar SHA512_Kh = /* @__PURE__ */ (() => K512[0])();\nvar SHA512_Kl = /* @__PURE__ */ (() => K512[1])();\nvar SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nvar SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\nvar SHA2_64B = class extends HashMD2 {\n constructor(outputLen) {\n super(128, outputLen, 16, false);\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 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 const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = rotrSH(W15h, W15l, 1) ^ rotrSH(W15h, W15l, 8) ^ shrSH(W15h, W15l, 7);\n const s0l = rotrSL(W15h, W15l, 1) ^ rotrSL(W15h, W15l, 8) ^ shrSL(W15h, W15l, 7);\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = rotrSH(W2h, W2l, 19) ^ rotrBH(W2h, W2l, 61) ^ shrSH(W2h, W2l, 6);\n const s1l = rotrSL(W2h, W2l, 19) ^ rotrBL(W2h, W2l, 61) ^ shrSL(W2h, W2l, 6);\n const SUMl = add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = 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 for (let i = 0; i < 80; i++) {\n const sigma1h = rotrSH(Eh, El, 14) ^ rotrSH(Eh, El, 18) ^ rotrBH(Eh, El, 41);\n const sigma1l = rotrSL(Eh, El, 14) ^ rotrSL(Eh, El, 18) ^ rotrBL(Eh, El, 41);\n const CHIh = Eh & Fh ^ ~Eh & Gh;\n const CHIl = El & Fl ^ ~El & Gl;\n const T1ll = add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n const sigma0h = rotrSH(Ah, Al, 28) ^ rotrBH(Ah, Al, 34) ^ rotrBH(Ah, Al, 39);\n const sigma0l = rotrSL(Ah, Al, 28) ^ rotrBL(Ah, Al, 34) ^ 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 } = 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 = add3L(T1l, sigma0l, MAJl);\n Ah = add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n ({ h: Ah, l: Al } = add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = 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 clean3(SHA512_W_H, SHA512_W_L);\n }\n destroy() {\n clean3(this.buffer);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n};\nvar _SHA384 = class extends SHA2_64B {\n Ah = SHA384_IV2[0] | 0;\n Al = SHA384_IV2[1] | 0;\n Bh = SHA384_IV2[2] | 0;\n Bl = SHA384_IV2[3] | 0;\n Ch = SHA384_IV2[4] | 0;\n Cl = SHA384_IV2[5] | 0;\n Dh = SHA384_IV2[6] | 0;\n Dl = SHA384_IV2[7] | 0;\n Eh = SHA384_IV2[8] | 0;\n El = SHA384_IV2[9] | 0;\n Fh = SHA384_IV2[10] | 0;\n Fl = SHA384_IV2[11] | 0;\n Gh = SHA384_IV2[12] | 0;\n Gl = SHA384_IV2[13] | 0;\n Hh = SHA384_IV2[14] | 0;\n Hl = SHA384_IV2[15] | 0;\n constructor() {\n super(48);\n }\n};\nvar sha2562 = /* @__PURE__ */ createHasher2(\n () => new _SHA2562(),\n /* @__PURE__ */ oidNist2(1)\n);\nvar sha384 = /* @__PURE__ */ createHasher2(\n () => new _SHA384(),\n /* @__PURE__ */ oidNist2(2)\n);\n\n// ../../node_modules/@noble/curves/ed25519.js\nvar _1n6 = BigInt(1);\nvar _2n4 = BigInt(2);\nvar _3n3 = /* @__PURE__ */ BigInt(3);\nvar _5n2 = BigInt(5);\nvar _8n2 = BigInt(8);\nvar ed25519_CURVE_p = BigInt(\"0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed\");\nfunction ed25519_pow_2_252_3(x) {\n const _10n = BigInt(10), _20n = BigInt(20), _40n = BigInt(40), _80n = BigInt(80);\n const P = ed25519_CURVE_p;\n const x2 = x * x % P;\n const b2 = x2 * x % P;\n const b4 = pow2(b2, _2n4, P) * b2 % P;\n const b5 = pow2(b4, _1n6, P) * x % P;\n const b10 = pow2(b5, _5n2, P) * b5 % P;\n const b20 = pow2(b10, _10n, P) * b10 % P;\n const b40 = pow2(b20, _20n, P) * b20 % P;\n const b80 = pow2(b40, _40n, P) * b40 % P;\n const b160 = pow2(b80, _80n, P) * b80 % P;\n const b240 = pow2(b160, _80n, P) * b80 % P;\n const b250 = pow2(b240, _10n, P) * b10 % P;\n const pow_p_5_8 = pow2(b250, _2n4, P) * x % P;\n return { pow_p_5_8, b2 };\n}\nfunction adjustScalarBytes(bytes) {\n bytes[0] &= 248;\n bytes[31] &= 127;\n bytes[31] |= 64;\n return bytes;\n}\nvar x25519 = /* @__PURE__ */ (() => {\n const P = ed25519_CURVE_p;\n return montgomery({\n P,\n type: \"x25519\",\n powPminus2: (x) => {\n const { pow_p_5_8, b2 } = ed25519_pow_2_252_3(x);\n return mod(pow2(pow_p_5_8, _3n3, P) * b2, P);\n },\n adjustScalarBytes\n });\n})();\n\n// ../../node_modules/@noble/curves/nist.js\nvar p256_CURVE = /* @__PURE__ */ (() => ({\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}))();\nvar p384_CURVE = /* @__PURE__ */ (() => ({\n p: BigInt(\"0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff\"),\n n: BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973\"),\n h: BigInt(1),\n a: BigInt(\"0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc\"),\n b: BigInt(\"0xb3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef\"),\n Gx: BigInt(\"0xaa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7\"),\n Gy: BigInt(\"0x3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f\")\n}))();\nvar p256_Point = /* @__PURE__ */ weierstrass(p256_CURVE);\nvar p256 = /* @__PURE__ */ ecdsa(p256_Point, sha2562);\nvar p384_Point = /* @__PURE__ */ weierstrass(p384_CURVE);\nvar p384 = /* @__PURE__ */ ecdsa(p384_Point, sha384);\n\n// ../../node_modules/@noble/post-quantum/node_modules/@noble/hashes/utils.js\nfunction isBytes5(a) {\n return a instanceof Uint8Array || ArrayBuffer.isView(a) && a.constructor.name === \"Uint8Array\";\n}\nfunction anumber5(n, title = \"\") {\n if (!Number.isSafeInteger(n) || n < 0) {\n const prefix2 = title && `\"${title}\" `;\n throw new Error(`${prefix2}expected integer >= 0, got ${n}`);\n }\n}\nfunction abytes5(value, length, title = \"\") {\n const bytes = isBytes5(value);\n const len = value?.length;\n const needsLen = length !== void 0;\n if (!bytes || needsLen && len !== length) {\n const prefix2 = title && `\"${title}\" `;\n const ofLen = needsLen ? ` of length ${length}` : \"\";\n const got = bytes ? `length=${len}` : `type=${typeof value}`;\n throw new Error(prefix2 + \"expected Uint8Array\" + ofLen + \", got \" + got);\n }\n return value;\n}\nfunction ahash3(h) {\n if (typeof h !== \"function\" || typeof h.create !== \"function\")\n throw new Error(\"Hash must wrapped by utils.createHasher\");\n anumber5(h.outputLen);\n anumber5(h.blockLen);\n}\nfunction aexists4(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 aoutput4(out, instance) {\n abytes5(out, void 0, \"digestInto() output\");\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('\"digestInto() output\" expected to be of length >=' + min);\n }\n}\nfunction u323(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\nfunction clean4(...arrays) {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\nfunction createView4(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\nfunction rotr3(word, shift) {\n return word << 32 - shift | word >>> shift;\n}\nvar isLE3 = /* @__PURE__ */ (() => new Uint8Array(new Uint32Array([287454020]).buffer)[0] === 68)();\nfunction byteSwap2(word) {\n return word << 24 & 4278190080 | word << 8 & 16711680 | word >>> 8 & 65280 | word >>> 24 & 255;\n}\nfunction byteSwap322(arr) {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap2(arr[i]);\n }\n return arr;\n}\nvar swap32IfBE2 = isLE3 ? (u) => u : byteSwap322;\nfunction createHasher3(hashCons, info = {}) {\n const hashC = (msg, opts2) => hashCons(opts2).update(msg).digest();\n const tmp = hashCons(void 0);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts2) => hashCons(opts2);\n Object.assign(hashC, info);\n return Object.freeze(hashC);\n}\nfunction randomBytes4(bytesLength = 32) {\n const cr = typeof globalThis === \"object\" ? globalThis.crypto : null;\n if (typeof cr?.getRandomValues !== \"function\")\n throw new Error(\"crypto.getRandomValues must be defined\");\n return cr.getRandomValues(new Uint8Array(bytesLength));\n}\nvar oidNist3 = (suffix) => ({\n oid: Uint8Array.from([6, 9, 96, 134, 72, 1, 101, 3, 4, 2, suffix])\n});\n\n// ../../node_modules/@noble/post-quantum/node_modules/@noble/hashes/hmac.js\nvar _HMAC3 = class {\n oHash;\n iHash;\n blockLen;\n outputLen;\n finished = false;\n destroyed = false;\n constructor(hash, key) {\n ahash3(hash);\n abytes5(key, void 0, \"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 pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 54;\n this.iHash.update(pad);\n this.oHash = hash.create();\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 54 ^ 92;\n this.oHash.update(pad);\n clean4(pad);\n }\n update(buf) {\n aexists4(this);\n this.iHash.update(buf);\n return this;\n }\n digestInto(out) {\n aexists4(this);\n abytes5(out, this.outputLen, \"output\");\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 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};\nvar hmac3 = (hash, key, message) => new _HMAC3(hash, key).update(message).digest();\nhmac3.create = (hash, key) => new _HMAC3(hash, key);\n\n// ../../node_modules/@noble/post-quantum/node_modules/@noble/hashes/hkdf.js\nfunction extract2(hash, ikm, salt) {\n ahash3(hash);\n if (salt === void 0)\n salt = new Uint8Array(hash.outputLen);\n return hmac3(hash, salt, ikm);\n}\nvar HKDF_COUNTER2 = /* @__PURE__ */ Uint8Array.of(0);\nvar EMPTY_BUFFER2 = /* @__PURE__ */ Uint8Array.of();\nfunction expand2(hash, prk, info, length = 32) {\n ahash3(hash);\n anumber5(length, \"length\");\n const olen = hash.outputLen;\n if (length > 255 * olen)\n throw new Error(\"Length must be <= 255*HashLen\");\n const blocks = Math.ceil(length / olen);\n if (info === void 0)\n info = EMPTY_BUFFER2;\n else\n abytes5(info, void 0, \"info\");\n const okm = new Uint8Array(blocks * olen);\n const HMAC = hmac3.create(hash, prk);\n const HMACTmp = HMAC._cloneInto();\n const T = new Uint8Array(HMAC.outputLen);\n for (let counter = 0; counter < blocks; counter++) {\n HKDF_COUNTER2[0] = counter + 1;\n HMACTmp.update(counter === 0 ? EMPTY_BUFFER2 : T).update(info).update(HKDF_COUNTER2).digestInto(T);\n okm.set(T, olen * counter);\n HMAC._cloneInto(HMACTmp);\n }\n HMAC.destroy();\n HMACTmp.destroy();\n clean4(T, HKDF_COUNTER2);\n return okm.slice(0, length);\n}\n\n// ../../node_modules/@noble/post-quantum/node_modules/@noble/hashes/_md.js\nfunction Chi3(a, b, c) {\n return a & b ^ ~a & c;\n}\nfunction Maj3(a, b, c) {\n return a & b ^ a & c ^ b & c;\n}\nvar HashMD3 = class {\n blockLen;\n outputLen;\n padOffset;\n isLE;\n // For partial updates less than block size\n buffer;\n view;\n finished = false;\n length = 0;\n pos = 0;\n destroyed = false;\n constructor(blockLen, outputLen, padOffset, isLE4) {\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE4;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView4(this.buffer);\n }\n update(data) {\n aexists4(this);\n abytes5(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 if (take === blockLen) {\n const dataView = createView4(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 aexists4(this);\n aoutput4(out, this);\n this.finished = true;\n const { buffer, view, blockLen, isLE: isLE4 } = this;\n let { pos } = this;\n buffer[pos++] = 128;\n clean4(this.buffer.subarray(pos));\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n for (let i = pos; i < blockLen; i++)\n buffer[i] = 0;\n view.setBigUint64(blockLen - 8, BigInt(this.length * 8), isLE4);\n this.process(view, 0);\n const oview = createView4(out);\n const len = this.outputLen;\n if (len % 4)\n throw new Error(\"_sha2: outputLen must 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], isLE4);\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 ||= 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};\nvar SHA256_IV3 = /* @__PURE__ */ Uint32Array.from([\n 1779033703,\n 3144134277,\n 1013904242,\n 2773480762,\n 1359893119,\n 2600822924,\n 528734635,\n 1541459225\n]);\n\n// ../../node_modules/@noble/post-quantum/node_modules/@noble/hashes/_u64.js\nvar U32_MASK642 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nvar _32n2 = /* @__PURE__ */ BigInt(32);\nfunction fromBig2(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK642), l: Number(n >> _32n2 & U32_MASK642) };\n return { h: Number(n >> _32n2 & U32_MASK642) | 0, l: Number(n & U32_MASK642) | 0 };\n}\nfunction split2(lst, le = false) {\n const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for (let i = 0; i < len; i++) {\n const { h, l } = fromBig2(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\nvar rotlSH = (h, l, s) => h << s | l >>> 32 - s;\nvar rotlSL = (h, l, s) => l << s | h >>> 32 - s;\nvar rotlBH = (h, l, s) => l << s - 32 | h >>> 64 - s;\nvar rotlBL = (h, l, s) => h << s - 32 | l >>> 64 - s;\n\n// ../../node_modules/@noble/post-quantum/node_modules/@noble/hashes/sha2.js\nvar SHA256_K3 = /* @__PURE__ */ Uint32Array.from([\n 1116352408,\n 1899447441,\n 3049323471,\n 3921009573,\n 961987163,\n 1508970993,\n 2453635748,\n 2870763221,\n 3624381080,\n 310598401,\n 607225278,\n 1426881987,\n 1925078388,\n 2162078206,\n 2614888103,\n 3248222580,\n 3835390401,\n 4022224774,\n 264347078,\n 604807628,\n 770255983,\n 1249150122,\n 1555081692,\n 1996064986,\n 2554220882,\n 2821834349,\n 2952996808,\n 3210313671,\n 3336571891,\n 3584528711,\n 113926993,\n 338241895,\n 666307205,\n 773529912,\n 1294757372,\n 1396182291,\n 1695183700,\n 1986661051,\n 2177026350,\n 2456956037,\n 2730485921,\n 2820302411,\n 3259730800,\n 3345764771,\n 3516065817,\n 3600352804,\n 4094571909,\n 275423344,\n 430227734,\n 506948616,\n 659060556,\n 883997877,\n 958139571,\n 1322822218,\n 1537002063,\n 1747873779,\n 1955562222,\n 2024104815,\n 2227730452,\n 2361852424,\n 2428436474,\n 2756734187,\n 3204031479,\n 3329325298\n]);\nvar SHA256_W3 = /* @__PURE__ */ new Uint32Array(64);\nvar SHA2_32B3 = class extends HashMD3 {\n constructor(outputLen) {\n super(64, outputLen, 8, false);\n }\n get() {\n const { A, B, C, D, E, F: F2, G, H } = this;\n return [A, B, C, D, E, F2, G, H];\n }\n // prettier-ignore\n set(A, B, C, D, E, F2, 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 = F2 | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n process(view, offset) {\n for (let i = 0; i < 16; i++, offset += 4)\n SHA256_W3[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W3[i - 15];\n const W2 = SHA256_W3[i - 2];\n const s0 = rotr3(W15, 7) ^ rotr3(W15, 18) ^ W15 >>> 3;\n const s1 = rotr3(W2, 17) ^ rotr3(W2, 19) ^ W2 >>> 10;\n SHA256_W3[i] = s1 + SHA256_W3[i - 7] + s0 + SHA256_W3[i - 16] | 0;\n }\n let { A, B, C, D, E, F: F2, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr3(E, 6) ^ rotr3(E, 11) ^ rotr3(E, 25);\n const T1 = H + sigma1 + Chi3(E, F2, G) + SHA256_K3[i] + SHA256_W3[i] | 0;\n const sigma0 = rotr3(A, 2) ^ rotr3(A, 13) ^ rotr3(A, 22);\n const T2 = sigma0 + Maj3(A, B, C) | 0;\n H = G;\n G = F2;\n F2 = E;\n E = D + T1 | 0;\n D = C;\n C = B;\n B = A;\n A = T1 + T2 | 0;\n }\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 F2 = F2 + this.F | 0;\n G = G + this.G | 0;\n H = H + this.H | 0;\n this.set(A, B, C, D, E, F2, G, H);\n }\n roundClean() {\n clean4(SHA256_W3);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n clean4(this.buffer);\n }\n};\nvar _SHA2563 = class extends SHA2_32B3 {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n A = SHA256_IV3[0] | 0;\n B = SHA256_IV3[1] | 0;\n C = SHA256_IV3[2] | 0;\n D = SHA256_IV3[3] | 0;\n E = SHA256_IV3[4] | 0;\n F = SHA256_IV3[5] | 0;\n G = SHA256_IV3[6] | 0;\n H = SHA256_IV3[7] | 0;\n constructor() {\n super(32);\n }\n};\nvar sha2563 = /* @__PURE__ */ createHasher3(\n () => new _SHA2563(),\n /* @__PURE__ */ oidNist3(1)\n);\n\n// ../../node_modules/@noble/post-quantum/node_modules/@noble/hashes/sha3.js\nvar _0n6 = BigInt(0);\nvar _1n7 = BigInt(1);\nvar _2n5 = BigInt(2);\nvar _7n2 = BigInt(7);\nvar _256n = BigInt(256);\nvar _0x71n = BigInt(113);\nvar SHA3_PI = [];\nvar SHA3_ROTL = [];\nvar _SHA3_IOTA = [];\nfor (let round = 0, R = _1n7, x = 1, y = 0; round < 24; round++) {\n [x, y] = [y, (2 * x + 3 * y) % 5];\n SHA3_PI.push(2 * (5 * y + x));\n SHA3_ROTL.push((round + 1) * (round + 2) / 2 % 64);\n let t = _0n6;\n for (let j = 0; j < 7; j++) {\n R = (R << _1n7 ^ (R >> _7n2) * _0x71n) % _256n;\n if (R & _2n5)\n t ^= _1n7 << (_1n7 << BigInt(j)) - _1n7;\n }\n _SHA3_IOTA.push(t);\n}\nvar IOTAS = split2(_SHA3_IOTA, true);\nvar SHA3_IOTA_H = IOTAS[0];\nvar SHA3_IOTA_L = IOTAS[1];\nvar rotlH = (h, l, s) => s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s);\nvar rotlL = (h, l, s) => s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s);\nfunction keccakP(s, rounds = 24) {\n const B = new Uint32Array(5 * 2);\n for (let round = 24 - rounds; round < 24; round++) {\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 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 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 s[0] ^= SHA3_IOTA_H[round];\n s[1] ^= SHA3_IOTA_L[round];\n }\n clean4(B);\n}\nvar Keccak = class _Keccak {\n state;\n pos = 0;\n posOut = 0;\n finished = false;\n state32;\n destroyed = false;\n blockLen;\n suffix;\n outputLen;\n enableXOF = false;\n rounds;\n // NOTE: we accept arguments in bytes instead of bits here.\n constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24) {\n this.blockLen = blockLen;\n this.suffix = suffix;\n this.outputLen = outputLen;\n this.enableXOF = enableXOF;\n this.rounds = rounds;\n anumber5(outputLen, \"outputLen\");\n if (!(0 < blockLen && blockLen < 200))\n throw new Error(\"only keccak-f1600 function is supported\");\n this.state = new Uint8Array(200);\n this.state32 = u323(this.state);\n }\n clone() {\n return this._cloneInto();\n }\n keccak() {\n swap32IfBE2(this.state32);\n keccakP(this.state32, this.rounds);\n swap32IfBE2(this.state32);\n this.posOut = 0;\n this.pos = 0;\n }\n update(data) {\n aexists4(this);\n abytes5(data);\n const { blockLen, state } = this;\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 state[pos] ^= suffix;\n if ((suffix & 128) !== 0 && pos === blockLen - 1)\n this.keccak();\n state[blockLen - 1] ^= 128;\n this.keccak();\n }\n writeInto(out) {\n aexists4(this, false);\n abytes5(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 if (!this.enableXOF)\n throw new Error(\"XOF is not possible for this instance\");\n return this.writeInto(out);\n }\n xof(bytes) {\n anumber5(bytes);\n return this.xofInto(new Uint8Array(bytes));\n }\n digestInto(out) {\n aoutput4(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 clean4(this.state);\n }\n _cloneInto(to) {\n const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n 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 to.suffix = suffix;\n to.outputLen = outputLen;\n to.enableXOF = enableXOF;\n to.destroyed = this.destroyed;\n return to;\n }\n};\nvar genKeccak = (suffix, blockLen, outputLen, info = {}) => createHasher3(() => new Keccak(blockLen, suffix, outputLen), info);\nvar sha3_256 = /* @__PURE__ */ genKeccak(\n 6,\n 136,\n 32,\n /* @__PURE__ */ oidNist3(8)\n);\nvar sha3_512 = /* @__PURE__ */ genKeccak(\n 6,\n 72,\n 64,\n /* @__PURE__ */ oidNist3(10)\n);\nvar genShake = (suffix, blockLen, outputLen, info = {}) => createHasher3((opts2 = {}) => new Keccak(blockLen, suffix, opts2.dkLen === void 0 ? outputLen : opts2.dkLen, true), info);\nvar shake128 = /* @__PURE__ */ genShake(31, 168, 16, /* @__PURE__ */ oidNist3(11));\nvar shake256 = /* @__PURE__ */ genShake(31, 136, 32, /* @__PURE__ */ oidNist3(12));\n\n// ../../node_modules/@noble/curves/abstract/fft.js\nfunction checkU32(n) {\n if (!Number.isSafeInteger(n) || n < 0 || n > 4294967295)\n throw new Error(\"wrong u32 integer:\" + n);\n return n;\n}\nfunction isPowerOfTwo(x) {\n checkU32(x);\n return (x & x - 1) === 0 && x !== 0;\n}\nfunction reverseBits(n, bits) {\n checkU32(n);\n let reversed = 0;\n for (let i = 0; i < bits; i++, n >>>= 1)\n reversed = reversed << 1 | n & 1;\n return reversed;\n}\nfunction log2(n) {\n checkU32(n);\n return 31 - Math.clz32(n);\n}\nfunction bitReversalInplace(values) {\n const n = values.length;\n if (n < 2 || !isPowerOfTwo(n))\n throw new Error(\"n must be a power of 2 and greater than 1. Got \" + n);\n const bits = log2(n);\n for (let i = 0; i < n; i++) {\n const j = reverseBits(i, bits);\n if (i < j) {\n const tmp = values[i];\n values[i] = values[j];\n values[j] = tmp;\n }\n }\n return values;\n}\nvar FFTCore = (F2, coreOpts) => {\n const { N: N2, roots, dit, invertButterflies = false, skipStages = 0, brp = true } = coreOpts;\n const bits = log2(N2);\n if (!isPowerOfTwo(N2))\n throw new Error(\"FFT: Polynomial size should be power of two\");\n const isDit = dit !== invertButterflies;\n isDit;\n return (values) => {\n if (values.length !== N2)\n throw new Error(\"FFT: wrong Polynomial length\");\n if (dit && brp)\n bitReversalInplace(values);\n for (let i = 0, g = 1; i < bits - skipStages; i++) {\n const s = dit ? i + 1 + skipStages : bits - i;\n const m = 1 << s;\n const m2 = m >> 1;\n const stride = N2 >> s;\n for (let k = 0; k < N2; k += m) {\n for (let j = 0, grp = g++; j < m2; j++) {\n const rootPos = invertButterflies ? dit ? N2 - grp : grp : j * stride;\n const i0 = k + j;\n const i1 = k + j + m2;\n const omega = roots[rootPos];\n const b = values[i1];\n const a = values[i0];\n if (isDit) {\n const t = F2.mul(b, omega);\n values[i0] = F2.add(a, t);\n values[i1] = F2.sub(a, t);\n } else if (invertButterflies) {\n values[i0] = F2.add(b, a);\n values[i1] = F2.mul(F2.sub(b, a), omega);\n } else {\n values[i0] = F2.add(a, b);\n values[i1] = F2.mul(F2.sub(a, b), omega);\n }\n }\n }\n }\n if (!dit && brp)\n bitReversalInplace(values);\n return values;\n };\n};\n\n// ../../node_modules/@noble/post-quantum/utils.js\nvar randomBytes5 = randomBytes4;\nfunction equalBytes2(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}\nfunction copyBytes3(bytes) {\n return Uint8Array.from(bytes);\n}\nfunction splitCoder(label2, ...lengths) {\n const getLength = (c) => typeof c === \"number\" ? c : c.bytesLen;\n const bytesLen = lengths.reduce((sum, a) => sum + getLength(a), 0);\n return {\n bytesLen,\n encode: (bufs) => {\n const res = new Uint8Array(bytesLen);\n for (let i = 0, pos = 0; i < lengths.length; i++) {\n const c = lengths[i];\n const l = getLength(c);\n const b = typeof c === \"number\" ? bufs[i] : c.encode(bufs[i]);\n abytes5(b, l, label2);\n res.set(b, pos);\n if (typeof c !== \"number\")\n b.fill(0);\n pos += l;\n }\n return res;\n },\n decode: (buf) => {\n abytes5(buf, bytesLen, label2);\n const res = [];\n for (const c of lengths) {\n const l = getLength(c);\n const b = buf.subarray(0, l);\n res.push(typeof c === \"number\" ? b : c.decode(b));\n buf = buf.subarray(l);\n }\n return res;\n }\n };\n}\nfunction vecCoder(c, vecLen) {\n const bytesLen = vecLen * c.bytesLen;\n return {\n bytesLen,\n encode: (u) => {\n if (u.length !== vecLen)\n throw new Error(`vecCoder.encode: wrong length=${u.length}. Expected: ${vecLen}`);\n const res = new Uint8Array(bytesLen);\n for (let i = 0, pos = 0; i < u.length; i++) {\n const b = c.encode(u[i]);\n res.set(b, pos);\n b.fill(0);\n pos += b.length;\n }\n return res;\n },\n decode: (a) => {\n abytes5(a, bytesLen);\n const r = [];\n for (let i = 0; i < a.length; i += c.bytesLen)\n r.push(c.decode(a.subarray(i, i + c.bytesLen)));\n return r;\n }\n };\n}\nfunction cleanBytes(...list) {\n for (const t of list) {\n if (Array.isArray(t))\n for (const b of t)\n b.fill(0);\n else\n t.fill(0);\n }\n}\nfunction getMask(bits) {\n return (1 << bits) - 1;\n}\nvar EMPTY = Uint8Array.of();\n\n// ../../node_modules/@noble/post-quantum/_crystals.js\nvar genCrystals = (opts2) => {\n const { newPoly, N: N2, Q: Q2, F: F2, ROOT_OF_UNITY: ROOT_OF_UNITY2, brvBits, isKyber } = opts2;\n const mod3 = (a, modulo = Q2) => {\n const result = a % modulo | 0;\n return (result >= 0 ? result | 0 : modulo + result | 0) | 0;\n };\n const smod = (a, modulo = Q2) => {\n const r = mod3(a, modulo) | 0;\n return (r > modulo >> 1 ? r - modulo | 0 : r) | 0;\n };\n function getZettas() {\n const out = newPoly(N2);\n for (let i = 0; i < N2; i++) {\n const b = reverseBits(i, brvBits);\n const p = BigInt(ROOT_OF_UNITY2) ** BigInt(b) % BigInt(Q2);\n out[i] = Number(p) | 0;\n }\n return out;\n }\n const nttZetas2 = getZettas();\n const field = {\n add: (a, b) => mod3((a | 0) + (b | 0)) | 0,\n sub: (a, b) => mod3((a | 0) - (b | 0)) | 0,\n mul: (a, b) => mod3((a | 0) * (b | 0)) | 0,\n inv: (_a) => {\n throw new Error(\"not implemented\");\n }\n };\n const nttOpts = {\n N: N2,\n roots: nttZetas2,\n invertButterflies: true,\n skipStages: isKyber ? 1 : 0,\n brp: false\n };\n const dif = FFTCore(field, { dit: false, ...nttOpts });\n const dit = FFTCore(field, { dit: true, ...nttOpts });\n const NTT2 = {\n encode: (r) => {\n return dif(r);\n },\n decode: (r) => {\n dit(r);\n for (let i = 0; i < r.length; i++)\n r[i] = mod3(F2 * r[i]);\n return r;\n }\n };\n const bitsCoder2 = (d, c) => {\n const mask = getMask(d);\n const bytesLen = d * (N2 / 8);\n return {\n bytesLen,\n encode: (poly) => {\n const r = new Uint8Array(bytesLen);\n for (let i = 0, buf = 0, bufLen = 0, pos = 0; i < poly.length; i++) {\n buf |= (c.encode(poly[i]) & mask) << bufLen;\n bufLen += d;\n for (; bufLen >= 8; bufLen -= 8, buf >>= 8)\n r[pos++] = buf & getMask(bufLen);\n }\n return r;\n },\n decode: (bytes) => {\n const r = newPoly(N2);\n for (let i = 0, buf = 0, bufLen = 0, pos = 0; i < bytes.length; i++) {\n buf |= bytes[i] << bufLen;\n bufLen += 8;\n for (; bufLen >= d; bufLen -= d, buf >>= d)\n r[pos++] = c.decode(buf & mask);\n }\n return r;\n }\n };\n };\n return { mod: mod3, smod, nttZetas: nttZetas2, NTT: NTT2, bitsCoder: bitsCoder2 };\n};\nvar createXofShake = (shake) => (seed, blockLen) => {\n if (!blockLen)\n blockLen = shake.blockLen;\n const _seed = new Uint8Array(seed.length + 2);\n _seed.set(seed);\n const seedLen = seed.length;\n const buf = new Uint8Array(blockLen);\n let h = shake.create({});\n let calls = 0;\n let xofs = 0;\n return {\n stats: () => ({ calls, xofs }),\n get: (x, y) => {\n _seed[seedLen + 0] = x;\n _seed[seedLen + 1] = y;\n h.destroy();\n h = shake.create({}).update(_seed);\n calls++;\n return () => {\n xofs++;\n return h.xofInto(buf);\n };\n },\n clean: () => {\n h.destroy();\n cleanBytes(buf, _seed);\n }\n };\n};\nvar XOF128 = /* @__PURE__ */ createXofShake(shake128);\n\n// ../../node_modules/@noble/post-quantum/ml-kem.js\nvar N = 256;\nvar Q = 3329;\nvar F = 3303;\nvar ROOT_OF_UNITY = 17;\nvar { mod: mod2, nttZetas, NTT, bitsCoder } = genCrystals({\n N,\n Q,\n F,\n ROOT_OF_UNITY,\n newPoly: (n) => new Uint16Array(n),\n brvBits: 7,\n isKyber: true\n});\nvar PARAMS = {\n 512: { N, Q, K: 2, ETA1: 3, ETA2: 2, du: 10, dv: 4, RBGstrength: 128 },\n 768: { N, Q, K: 3, ETA1: 2, ETA2: 2, du: 10, dv: 4, RBGstrength: 192 },\n 1024: { N, Q, K: 4, ETA1: 2, ETA2: 2, du: 11, dv: 5, RBGstrength: 256 }\n};\nvar compress = (d) => {\n if (d >= 12)\n return { encode: (i) => i, decode: (i) => i };\n const a = 2 ** (d - 1);\n return {\n // const compress = (i: number) => round((2 ** d / Q) * i) % 2 ** d;\n encode: (i) => ((i << d) + Q / 2) / Q,\n // const decompress = (i: number) => round((Q / 2 ** d) * i);\n decode: (i) => i * Q + a >>> d\n };\n};\nvar polyCoder = (d) => bitsCoder(d, compress(d));\nfunction polyAdd(a, b) {\n for (let i = 0; i < N; i++)\n a[i] = mod2(a[i] + b[i]);\n}\nfunction polySub(a, b) {\n for (let i = 0; i < N; i++)\n a[i] = mod2(a[i] - b[i]);\n}\nfunction BaseCaseMultiply(a0, a1, b0, b1, zeta) {\n const c0 = mod2(a1 * b1 * zeta + a0 * b0);\n const c1 = mod2(a0 * b1 + a1 * b0);\n return { c0, c1 };\n}\nfunction MultiplyNTTs(f, g) {\n for (let i = 0; i < N / 2; i++) {\n let z = nttZetas[64 + (i >> 1)];\n if (i & 1)\n z = -z;\n const { c0, c1 } = BaseCaseMultiply(f[2 * i + 0], f[2 * i + 1], g[2 * i + 0], g[2 * i + 1], z);\n f[2 * i + 0] = c0;\n f[2 * i + 1] = c1;\n }\n return f;\n}\nfunction SampleNTT(xof) {\n const r = new Uint16Array(N);\n for (let j = 0; j < N; ) {\n const b = xof();\n if (b.length % 3)\n throw new Error(\"SampleNTT: unaligned block\");\n for (let i = 0; j < N && i + 3 <= b.length; i += 3) {\n const d1 = (b[i + 0] >> 0 | b[i + 1] << 8) & 4095;\n const d2 = (b[i + 1] >> 4 | b[i + 2] << 4) & 4095;\n if (d1 < Q)\n r[j++] = d1;\n if (j < N && d2 < Q)\n r[j++] = d2;\n }\n }\n return r;\n}\nfunction sampleCBD(PRF, seed, nonce, eta) {\n const buf = PRF(eta * N / 4, seed, nonce);\n const r = new Uint16Array(N);\n const b32 = u323(buf);\n let len = 0;\n for (let i = 0, p = 0, bb = 0, t0 = 0; i < b32.length; i++) {\n let b = b32[i];\n for (let j = 0; j < 32; j++) {\n bb += b & 1;\n b >>= 1;\n len += 1;\n if (len === eta) {\n t0 = bb;\n bb = 0;\n } else if (len === 2 * eta) {\n r[p++] = mod2(t0 - bb);\n bb = 0;\n len = 0;\n }\n }\n }\n if (len)\n throw new Error(`sampleCBD: leftover bits: ${len}`);\n return r;\n}\nvar genKPKE = (opts2) => {\n const { K, PRF, XOF, HASH512, ETA1, ETA2, du, dv } = opts2;\n const poly1 = polyCoder(1);\n const polyV = polyCoder(dv);\n const polyU = polyCoder(du);\n const publicCoder = splitCoder(\"publicKey\", vecCoder(polyCoder(12), K), 32);\n const secretCoder = vecCoder(polyCoder(12), K);\n const cipherCoder = splitCoder(\"ciphertext\", vecCoder(polyU, K), polyV);\n const seedCoder = splitCoder(\"seed\", 32, 32);\n return {\n secretCoder,\n lengths: {\n secretKey: secretCoder.bytesLen,\n publicKey: publicCoder.bytesLen,\n cipherText: cipherCoder.bytesLen\n },\n keygen: (seed) => {\n abytes5(seed, 32, \"seed\");\n const seedDst = new Uint8Array(33);\n seedDst.set(seed);\n seedDst[32] = K;\n const seedHash = HASH512(seedDst);\n const [rho, sigma] = seedCoder.decode(seedHash);\n const sHat = [];\n const tHat = [];\n for (let i = 0; i < K; i++)\n sHat.push(NTT.encode(sampleCBD(PRF, sigma, i, ETA1)));\n const x = XOF(rho);\n for (let i = 0; i < K; i++) {\n const e = NTT.encode(sampleCBD(PRF, sigma, K + i, ETA1));\n for (let j = 0; j < K; j++) {\n const aji = SampleNTT(x.get(j, i));\n polyAdd(e, MultiplyNTTs(aji, sHat[j]));\n }\n tHat.push(e);\n }\n x.clean();\n const res = {\n publicKey: publicCoder.encode([tHat, rho]),\n secretKey: secretCoder.encode(sHat)\n };\n cleanBytes(rho, sigma, sHat, tHat, seedDst, seedHash);\n return res;\n },\n encrypt: (publicKey, msg, seed) => {\n const [tHat, rho] = publicCoder.decode(publicKey);\n const rHat = [];\n for (let i = 0; i < K; i++)\n rHat.push(NTT.encode(sampleCBD(PRF, seed, i, ETA1)));\n const x = XOF(rho);\n const tmp2 = new Uint16Array(N);\n const u = [];\n for (let i = 0; i < K; i++) {\n const e1 = sampleCBD(PRF, seed, K + i, ETA2);\n const tmp = new Uint16Array(N);\n for (let j = 0; j < K; j++) {\n const aij = SampleNTT(x.get(i, j));\n polyAdd(tmp, MultiplyNTTs(aij, rHat[j]));\n }\n polyAdd(e1, NTT.decode(tmp));\n u.push(e1);\n polyAdd(tmp2, MultiplyNTTs(tHat[i], rHat[i]));\n cleanBytes(tmp);\n }\n x.clean();\n const e2 = sampleCBD(PRF, seed, 2 * K, ETA2);\n polyAdd(e2, NTT.decode(tmp2));\n const v = poly1.decode(msg);\n polyAdd(v, e2);\n cleanBytes(tHat, rHat, tmp2, e2);\n return cipherCoder.encode([u, v]);\n },\n decrypt: (cipherText, privateKey) => {\n const [u, v] = cipherCoder.decode(cipherText);\n const sk = secretCoder.decode(privateKey);\n const tmp = new Uint16Array(N);\n for (let i = 0; i < K; i++)\n polyAdd(tmp, MultiplyNTTs(sk[i], NTT.encode(u[i])));\n polySub(v, NTT.decode(tmp));\n cleanBytes(tmp, sk, u);\n return poly1.encode(v);\n }\n };\n};\nfunction createKyber(opts2) {\n const KPKE = genKPKE(opts2);\n const { HASH256, HASH512, KDF } = opts2;\n const { secretCoder: KPKESecretCoder, lengths } = KPKE;\n const secretCoder = splitCoder(\"secretKey\", lengths.secretKey, lengths.publicKey, 32, 32);\n const msgLen = 32;\n const seedLen = 64;\n return {\n info: { type: \"ml-kem\" },\n lengths: {\n ...lengths,\n seed: 64,\n msg: msgLen,\n msgRand: msgLen,\n secretKey: secretCoder.bytesLen\n },\n keygen: (seed = randomBytes5(seedLen)) => {\n abytes5(seed, seedLen, \"seed\");\n const { publicKey, secretKey: sk } = KPKE.keygen(seed.subarray(0, 32));\n const publicKeyHash = HASH256(publicKey);\n const secretKey = secretCoder.encode([sk, publicKey, publicKeyHash, seed.subarray(32)]);\n cleanBytes(sk, publicKeyHash);\n return { publicKey, secretKey };\n },\n getPublicKey: (secretKey) => {\n const [_sk, publicKey, _publicKeyHash, _z] = secretCoder.decode(secretKey);\n return Uint8Array.from(publicKey);\n },\n encapsulate: (publicKey, msg = randomBytes5(msgLen)) => {\n abytes5(publicKey, lengths.publicKey, \"publicKey\");\n abytes5(msg, msgLen, \"message\");\n const eke = publicKey.subarray(0, 384 * opts2.K);\n const ek = KPKESecretCoder.encode(KPKESecretCoder.decode(copyBytes3(eke)));\n if (!equalBytes2(ek, eke)) {\n cleanBytes(ek);\n throw new Error(\"ML-KEM.encapsulate: wrong publicKey modulus\");\n }\n cleanBytes(ek);\n const kr = HASH512.create().update(msg).update(HASH256(publicKey)).digest();\n const cipherText = KPKE.encrypt(publicKey, msg, kr.subarray(32, 64));\n cleanBytes(kr.subarray(32));\n return { cipherText, sharedSecret: kr.subarray(0, 32) };\n },\n decapsulate: (cipherText, secretKey) => {\n abytes5(secretKey, secretCoder.bytesLen, \"secretKey\");\n abytes5(cipherText, lengths.cipherText, \"cipherText\");\n const k768 = secretCoder.bytesLen - 96;\n const start = k768 + 32;\n const test = HASH256(secretKey.subarray(k768 / 2, start));\n if (!equalBytes2(test, secretKey.subarray(start, start + 32)))\n throw new Error(\"invalid secretKey: hash check failed\");\n const [sk, publicKey, publicKeyHash, z] = secretCoder.decode(secretKey);\n const msg = KPKE.decrypt(cipherText, sk);\n const kr = HASH512.create().update(msg).update(publicKeyHash).digest();\n const Khat = kr.subarray(0, 32);\n const cipherText2 = KPKE.encrypt(publicKey, msg, kr.subarray(32, 64));\n const isValid = equalBytes2(cipherText, cipherText2);\n const Kbar = KDF.create({ dkLen: 32 }).update(z).update(cipherText).digest();\n cleanBytes(msg, cipherText2, !isValid ? Khat : Kbar);\n return isValid ? Khat : Kbar;\n }\n };\n}\nfunction shakePRF(dkLen, key, nonce) {\n return shake256.create({ dkLen }).update(key).update(new Uint8Array([nonce])).digest();\n}\nvar opts = {\n HASH256: sha3_256,\n HASH512: sha3_512,\n KDF: shake256,\n XOF: XOF128,\n PRF: shakePRF\n};\nvar ml_kem512 = /* @__PURE__ */ createKyber({\n ...opts,\n ...PARAMS[512]\n});\nvar ml_kem768 = /* @__PURE__ */ createKyber({\n ...opts,\n ...PARAMS[768]\n});\nvar ml_kem1024 = /* @__PURE__ */ createKyber({\n ...opts,\n ...PARAMS[1024]\n});\n\n// ../../node_modules/@noble/post-quantum/hybrid.js\nfunction ecKeygen(curve, allowZeroKey = false) {\n const lengths = curve.lengths;\n let keygen = curve.keygen;\n if (allowZeroKey) {\n const wCurve = curve;\n const Fn = wCurve.Point.Fn;\n if (!Fn)\n throw new Error(\"No Point.Fn\");\n keygen = (seed = randomBytes5(lengths.seed)) => {\n abytes5(seed, lengths.seed, \"seed\");\n const seedScalar = Fn.isLE ? bytesToNumberLE(seed) : bytesToNumberBE(seed);\n const secretKey = Fn.toBytes(Fn.create(seedScalar));\n return { secretKey, publicKey: curve.getPublicKey(secretKey) };\n };\n }\n return {\n lengths: { secretKey: lengths.secretKey, publicKey: lengths.publicKey, seed: lengths.seed },\n keygen,\n getPublicKey: (secretKey) => curve.getPublicKey(secretKey)\n };\n}\nfunction ecdhKem(curve, allowZeroKey = false) {\n const kg = ecKeygen(curve, allowZeroKey);\n if (!curve.getSharedSecret)\n throw new Error(\"wrong curve\");\n return {\n lengths: { ...kg.lengths, msg: kg.lengths.seed, cipherText: kg.lengths.publicKey },\n keygen: kg.keygen,\n getPublicKey: kg.getPublicKey,\n encapsulate(publicKey, rand = randomBytes5(curve.lengths.seed)) {\n const ek = this.keygen(rand).secretKey;\n const sharedSecret = this.decapsulate(publicKey, ek);\n const cipherText = curve.getPublicKey(ek);\n cleanBytes(ek);\n return { sharedSecret, cipherText };\n },\n decapsulate(cipherText, secretKey) {\n const res = curve.getSharedSecret(secretKey, cipherText);\n return curve.lengths.publicKeyHasPrefix ? res.subarray(1) : res;\n }\n };\n}\nfunction splitLengths(lst, name) {\n return splitCoder(name, ...lst.map((i) => {\n if (typeof i.lengths[name] !== \"number\")\n throw new Error(\"wrong length: \" + name);\n return i.lengths[name];\n }));\n}\nfunction expandSeedXof(xof) {\n return (seed, seedLen) => xof(seed, { dkLen: seedLen });\n}\nfunction combineKeys(realSeedLen, expandSeed, ...ck) {\n const seedCoder = splitLengths(ck, \"seed\");\n const pkCoder = splitLengths(ck, \"publicKey\");\n if (realSeedLen === void 0)\n realSeedLen = seedCoder.bytesLen;\n anumber5(realSeedLen);\n function expandDecapsulationKey(seed) {\n abytes5(seed, realSeedLen);\n const expanded = seedCoder.decode(expandSeed(seed, seedCoder.bytesLen));\n const keys = ck.map((i, j) => i.keygen(expanded[j]));\n const secretKey = keys.map((i) => i.secretKey);\n const publicKey = keys.map((i) => i.publicKey);\n return { secretKey, publicKey };\n }\n return {\n info: { lengths: { seed: realSeedLen, publicKey: pkCoder.bytesLen, secretKey: realSeedLen } },\n getPublicKey(secretKey) {\n return this.keygen(secretKey).publicKey;\n },\n keygen(seed = randomBytes5(realSeedLen)) {\n const { publicKey: pk, secretKey } = expandDecapsulationKey(seed);\n const publicKey = pkCoder.encode(pk);\n cleanBytes(pk);\n cleanBytes(secretKey);\n return { secretKey: seed, publicKey };\n },\n expandDecapsulationKey,\n realSeedLen\n };\n}\nfunction combineKEMS(realSeedLen, realMsgLen, expandSeed, combiner, ...kems) {\n const keys = combineKeys(realSeedLen, expandSeed, ...kems);\n const ctCoder = splitLengths(kems, \"cipherText\");\n const pkCoder = splitLengths(kems, \"publicKey\");\n const msgCoder = splitLengths(kems, \"msg\");\n if (realMsgLen === void 0)\n realMsgLen = msgCoder.bytesLen;\n anumber5(realMsgLen);\n return {\n lengths: {\n ...keys.info.lengths,\n msg: realMsgLen,\n msgRand: msgCoder.bytesLen,\n cipherText: ctCoder.bytesLen\n },\n getPublicKey: keys.getPublicKey,\n keygen: keys.keygen,\n encapsulate(pk, randomness = randomBytes5(msgCoder.bytesLen)) {\n const pks = pkCoder.decode(pk);\n const rand = msgCoder.decode(randomness);\n const enc = kems.map((i, j) => i.encapsulate(pks[j], rand[j]));\n const sharedSecret = enc.map((i) => i.sharedSecret);\n const cipherText = enc.map((i) => i.cipherText);\n const res = {\n sharedSecret: combiner(pks, cipherText, sharedSecret),\n cipherText: ctCoder.encode(cipherText)\n };\n cleanBytes(sharedSecret, cipherText);\n return res;\n },\n decapsulate(ct, seed) {\n const cts = ctCoder.decode(ct);\n const { publicKey, secretKey } = keys.expandDecapsulationKey(seed);\n const sharedSecret = kems.map((i, j) => i.decapsulate(cts[j], secretKey[j]));\n return combiner(publicKey, cts, sharedSecret);\n }\n };\n}\nfunction QSF(label2, pqc, curveKEM, xof, kdf) {\n ahash3(xof);\n ahash3(kdf);\n return combineKEMS(32, 32, expandSeedXof(xof), (pk, ct, ss) => kdf(concatBytes2(ss[0], ss[1], ct[1], pk[1], asciiToBytes(label2))), pqc, curveKEM);\n}\nvar QSF_ml_kem768_p256 = QSF(\"QSF-KEM(ML-KEM-768,P-256)-XOF(SHAKE256)-KDF(SHA3-256)\", ml_kem768, ecdhKem(p256, true), shake256, sha3_256);\nvar QSF_ml_kem1024_p384 = QSF(\"QSF-KEM(ML-KEM-1024,P-384)-XOF(SHAKE256)-KDF(SHA3-256)\", ml_kem1024, ecdhKem(p384, true), shake256, sha3_256);\nfunction createKitchenSink(label2, pqc, curveKEM, xof, hash) {\n ahash3(xof);\n ahash3(hash);\n return combineKEMS(32, 32, expandSeedXof(xof), (pk, ct, ss) => {\n const preimage = concatBytes2(ss[0], ss[1], ct[0], pk[0], ct[1], pk[1], asciiToBytes(label2));\n const len = 32;\n const ikm = concatBytes2(asciiToBytes(\"hybrid_prk\"), preimage);\n const prk = extract2(hash, ikm);\n const info = concatBytes2(numberToBytesBE2(len, 2), asciiToBytes(\"shared_secret\"), asciiToBytes(\"\"));\n const res = expand2(hash, prk, info, len);\n cleanBytes(prk, info, ikm, preimage);\n return res;\n }, pqc, curveKEM);\n}\nvar x25519kem = ecdhKem(x25519);\nvar KitchenSink_ml_kem768_x25519 = createKitchenSink(\"KitchenSink-KEM(ML-KEM-768,X25519)-XOF(SHAKE256)-KDF(HKDF-SHA-256)\", ml_kem768, x25519kem, shake256, sha2563);\nvar ml_kem768_x25519 = /* @__PURE__ */ (() => combineKEMS(\n 32,\n 32,\n expandSeedXof(shake256),\n // Awesome label, so much escaping hell in a single line.\n (pk, ct, ss) => sha3_256(concatBytes2(ss[0], ss[1], ct[1], pk[1], asciiToBytes(\"\\\\.//^\\\\\"))),\n ml_kem768,\n x25519kem\n))();\nfunction nistCurveKem(curve, scalarLen, elemLen, nseed) {\n const Fn = curve.Point.Fn;\n if (!Fn)\n throw new Error(\"no Point.Fn\");\n function rejectionSampling(seed) {\n let sk;\n for (let start = 0, end = scalarLen; ; start = end, end += scalarLen) {\n if (end > seed.length)\n throw new Error(\"rejection sampling failed\");\n sk = Fn.fromBytes(seed.subarray(start, end), true);\n if (Fn.isValidNot0(sk))\n break;\n }\n const secretKey = Fn.toBytes(Fn.create(sk));\n const publicKey = curve.getPublicKey(secretKey, false);\n return { secretKey, publicKey };\n }\n return {\n lengths: {\n secretKey: scalarLen,\n publicKey: elemLen,\n seed: nseed,\n msg: nseed,\n cipherText: elemLen\n },\n keygen(seed = randomBytes5(nseed)) {\n abytes5(seed, nseed, \"seed\");\n return rejectionSampling(seed);\n },\n getPublicKey(secretKey) {\n return curve.getPublicKey(secretKey, false);\n },\n encapsulate(publicKey, rand = randomBytes5(nseed)) {\n abytes5(rand, nseed, \"rand\");\n const { secretKey: ek } = rejectionSampling(rand);\n const sharedSecret = this.decapsulate(publicKey, ek);\n const cipherText = curve.getPublicKey(ek, false);\n cleanBytes(ek);\n return { sharedSecret, cipherText };\n },\n decapsulate(cipherText, secretKey) {\n const full = curve.getSharedSecret(secretKey, cipherText);\n return full.subarray(1);\n }\n };\n}\nfunction concreteHybridKem(label2, mlkem, curve, nseed) {\n const { secretKey: scalarLen, publicKeyUncompressed: elemLen } = curve.lengths;\n if (!scalarLen || !elemLen)\n throw new Error(\"wrong curve\");\n const curveKem = nistCurveKem(curve, scalarLen, elemLen, nseed);\n const mlkemSeedLen = 64;\n const totalSeedLen = mlkemSeedLen + nseed;\n return combineKEMS(32, 32, (seed) => {\n abytes5(seed, 32);\n const expanded = shake256(seed, { dkLen: totalSeedLen });\n const mlkemSeed = expanded.subarray(0, mlkemSeedLen);\n const curveSeed = expanded.subarray(mlkemSeedLen, totalSeedLen);\n return concatBytes2(mlkemSeed, curveSeed);\n }, (pk, ct, ss) => sha3_256(concatBytes2(ss[0], ss[1], ct[1], pk[1], asciiToBytes(label2))), mlkem, curveKem);\n}\nvar ml_kem768_p256 = /* @__PURE__ */ (() => concreteHybridKem(\"MLKEM768-P256\", ml_kem768, p256, 128))();\nvar MLKEM768X25519 = ml_kem768_x25519;\nvar MLKEM768P256 = ml_kem768_p256;\n\n// ../../node_modules/age-encryption/dist/x25519.js\nvar exportable = false;\nvar webCryptoOff = false;\nasync function webCryptoFallback(func, fallback) {\n if (webCryptoOff) {\n return await fallback();\n }\n try {\n return await func();\n } catch (error) {\n if (error instanceof ReferenceError || error instanceof DOMException && error.name === \"NotSupportedError\") {\n return await fallback();\n } else {\n throw error;\n }\n }\n}\nasync function scalarMult(scalar, u) {\n return await webCryptoFallback(async () => {\n const key = isCryptoKey(scalar) ? scalar : await importX25519Key(scalar);\n const peer = await crypto.subtle.importKey(\"raw\", domBuffer(u), { name: \"X25519\" }, exportable, []);\n return new Uint8Array(await crypto.subtle.deriveBits({ name: \"X25519\", public: peer }, key, 256));\n }, () => {\n if (isCryptoKey(scalar)) {\n throw new Error(\"CryptoKey provided but X25519 WebCrypto is not supported\");\n }\n return x25519.scalarMult(scalar, u);\n });\n}\nasync function scalarMultBase(scalar) {\n return await webCryptoFallback(async () => {\n return scalarMult(scalar, x25519.GuBytes);\n }, () => {\n if (isCryptoKey(scalar)) {\n throw new Error(\"CryptoKey provided but X25519 WebCrypto is not supported\");\n }\n return x25519.scalarMultBase(scalar);\n });\n}\nvar pkcs8Prefix = /* @__PURE__ */ new Uint8Array([\n 48,\n 46,\n 2,\n 1,\n 0,\n 48,\n 5,\n 6,\n 3,\n 43,\n 101,\n 110,\n 4,\n 34,\n 4,\n 32\n]);\nasync function importX25519Key(key) {\n if (key.length !== 32) {\n throw new Error(\"X25519 private key must be 32 bytes\");\n }\n const pkcs8 = new Uint8Array([...pkcs8Prefix, ...key]);\n return crypto.subtle.importKey(\"pkcs8\", pkcs8, { name: \"X25519\" }, exportable, [\"deriveBits\"]);\n}\nfunction isCryptoKey(key) {\n return typeof CryptoKey !== \"undefined\" && key instanceof CryptoKey;\n}\nfunction domBuffer(arr) {\n return arr;\n}\n\n// ../../node_modules/age-encryption/dist/io.js\nvar LineReader = class {\n s;\n transcript = [];\n buf = new Uint8Array(0);\n constructor(stream2) {\n this.s = stream2.getReader();\n }\n async readLine() {\n const line = [];\n while (true) {\n const i = this.buf.indexOf(\"\\n\".charCodeAt(0));\n if (i >= 0) {\n line.push(this.buf.subarray(0, i));\n this.transcript.push(this.buf.subarray(0, i + 1));\n this.buf = this.buf.subarray(i + 1);\n return asciiString(flatten(line));\n }\n if (this.buf.length > 0) {\n line.push(this.buf);\n this.transcript.push(this.buf);\n }\n const next = await this.s.read();\n if (next.done) {\n this.buf = flatten(line);\n return null;\n }\n this.buf = next.value;\n }\n }\n close() {\n this.s.releaseLock();\n return { rest: this.buf, transcript: flatten(this.transcript) };\n }\n};\nfunction asciiString(bytes) {\n bytes.forEach((b) => {\n if (b < 32 || b > 126) {\n throw Error(\"invalid non-ASCII byte in header\");\n }\n });\n return new TextDecoder().decode(bytes);\n}\nfunction flatten(arr) {\n const len = arr.reduce((sum, line) => sum + line.length, 0);\n const out = new Uint8Array(len);\n let n = 0;\n for (const a of arr) {\n out.set(a, n);\n n += a.length;\n }\n return out;\n}\nfunction prepend(s, ...prefixes) {\n return s.pipeThrough(new TransformStream({\n start(controller) {\n for (const p of prefixes) {\n controller.enqueue(p);\n }\n }\n }));\n}\nfunction stream(a) {\n return new ReadableStream({\n start(controller) {\n controller.enqueue(a);\n controller.close();\n }\n });\n}\nasync function readAll(stream2) {\n if (!(stream2 instanceof ReadableStream)) {\n throw new Error(\"readAll expects a ReadableStream<Uint8Array>\");\n }\n return new Uint8Array(await new Response(stream2).arrayBuffer());\n}\nasync function readAllString(stream2) {\n if (!(stream2 instanceof ReadableStream)) {\n throw new Error(\"readAllString expects a ReadableStream<Uint8Array>\");\n }\n return await new Response(stream2).text();\n}\nasync function read(stream2, n) {\n const reader = stream2.getReader();\n const chunks = [];\n let readBytes = 0;\n while (readBytes < n) {\n const { done, value } = await reader.read();\n if (done) {\n throw Error(\"stream ended before reading \" + n.toString() + \" bytes\");\n }\n chunks.push(value);\n readBytes += value.length;\n }\n reader.releaseLock();\n const buf = flatten(chunks);\n const data = buf.subarray(0, n);\n const rest = prepend(stream2, buf.subarray(n));\n return { data, rest };\n}\n\n// ../../node_modules/age-encryption/dist/format.js\nvar Stanza = class {\n /**\n * All space-separated arguments on the first line of the stanza.\n * Each argument is a string that does not contain spaces.\n * The first argument is often a recipient type, which should look like\n * `example.com/...` to avoid collisions.\n */\n args;\n /**\n * The raw body of the stanza. This is automatically base64-encoded and\n * split into lines of 48 characters each.\n */\n body;\n constructor(args, body) {\n this.args = args;\n this.body = body;\n }\n};\nasync function parseNextStanza(hdr) {\n const argsLine = await hdr.readLine();\n if (argsLine === null) {\n throw Error(\"invalid stanza\");\n }\n const args = argsLine.split(\" \");\n if (args.length < 2 || args.shift() !== \"->\") {\n return { next: argsLine };\n }\n for (const arg of args) {\n if (arg.length === 0) {\n throw Error(\"invalid stanza\");\n }\n }\n const bodyLines = [];\n for (; ; ) {\n const nextLine = await hdr.readLine();\n if (nextLine === null) {\n throw Error(\"invalid stanza\");\n }\n const line = base64nopad.decode(nextLine);\n if (line.length > 48) {\n throw Error(\"invalid stanza\");\n }\n bodyLines.push(line);\n if (line.length < 48) {\n break;\n }\n }\n const body = flatten(bodyLines);\n return { s: new Stanza(args, body) };\n}\nasync function parseHeader(header) {\n const hdr = new LineReader(header);\n const versionLine = await hdr.readLine();\n if (versionLine !== \"age-encryption.org/v1\") {\n throw Error(\"invalid version \" + (versionLine ?? \"line\"));\n }\n const stanzas = [];\n for (; ; ) {\n const { s, next: macLine } = await parseNextStanza(hdr);\n if (s !== void 0) {\n stanzas.push(s);\n continue;\n }\n if (!macLine.startsWith(\"--- \")) {\n throw Error(\"invalid header\");\n }\n const MAC = base64nopad.decode(macLine.slice(4));\n const { rest, transcript } = hdr.close();\n const headerNoMAC = transcript.slice(0, transcript.length - 1 - macLine.length + 3);\n return { stanzas, headerNoMAC, MAC, headerSize: transcript.length, rest: prepend(header, rest) };\n }\n}\nfunction encodeHeaderNoMAC(recipients) {\n const lines = [];\n lines.push(\"age-encryption.org/v1\\n\");\n for (const s of recipients) {\n lines.push(\"-> \" + s.args.join(\" \") + \"\\n\");\n for (let i = 0; i < s.body.length; i += 48) {\n let end = i + 48;\n if (end > s.body.length)\n end = s.body.length;\n lines.push(base64nopad.encode(s.body.subarray(i, end)) + \"\\n\");\n }\n if (s.body.length % 48 === 0)\n lines.push(\"\\n\");\n }\n lines.push(\"---\");\n return new TextEncoder().encode(lines.join(\"\"));\n}\nfunction encodeHeader(recipients, MAC) {\n return flatten([\n encodeHeaderNoMAC(recipients),\n new TextEncoder().encode(\" \" + base64nopad.encode(MAC) + \"\\n\")\n ]);\n}\n\n// ../../node_modules/age-encryption/dist/recipients.js\nfunction generateIdentity() {\n return generateX25519Identity();\n}\nfunction generateX25519Identity() {\n const scalar = randomBytes(32);\n const identity = bech32.encodeFromBytes(\"AGE-SECRET-KEY-\", scalar).toUpperCase();\n return Promise.resolve(identity);\n}\nfunction generateHybridIdentity() {\n const scalar = randomBytes(32);\n const identity = bech32.encodeFromBytes(\"AGE-SECRET-KEY-PQ-\", scalar).toUpperCase();\n return Promise.resolve(identity);\n}\nasync function identityToRecipient(identity) {\n let scalar;\n if (isCryptoKey2(identity)) {\n scalar = identity;\n } else if (identity.startsWith(\"AGE-SECRET-KEY-PQ-1\")) {\n const res = bech32.decodeToBytes(identity);\n if (res.prefix.toUpperCase() !== \"AGE-SECRET-KEY-PQ-\" || res.bytes.length !== 32) {\n throw Error(\"invalid identity\");\n }\n const recipient2 = MLKEM768X25519.getPublicKey(res.bytes);\n return bech32.encode(\"age1pq\", bech32.toWords(recipient2), false);\n } else {\n const res = bech32.decodeToBytes(identity);\n if (!identity.startsWith(\"AGE-SECRET-KEY-1\") || res.prefix.toUpperCase() !== \"AGE-SECRET-KEY-\" || res.bytes.length !== 32) {\n throw Error(\"invalid identity\");\n }\n scalar = res.bytes;\n }\n const recipient = await scalarMultBase(scalar);\n return bech32.encodeFromBytes(\"age\", recipient);\n}\nvar HybridRecipient = class {\n recipient;\n constructor(s) {\n const res = bech32.decodeToBytes(s);\n if (!s.startsWith(\"age1pq1\") || res.prefix.toLowerCase() !== \"age1pq\" || res.bytes.length !== 1216) {\n throw Error(\"invalid recipient\");\n }\n this.recipient = res.bytes;\n }\n wrapFileKey(fileKey) {\n const { cipherText: encapsulatedKey, sharedSecret } = MLKEM768X25519.encapsulate(this.recipient);\n const label2 = new TextEncoder().encode(\"age-encryption.org/mlkem768x25519\");\n const { key, nonce } = hpkeContext(hpkeMLKEM768X25519, sharedSecret, label2);\n const ciphertext = chacha20poly1305(key, nonce).encrypt(fileKey);\n return [new Stanza([\"mlkem768x25519\", base64nopad.encode(encapsulatedKey)], ciphertext)];\n }\n};\nvar HybridIdentity = class {\n identity;\n constructor(s) {\n const res = bech32.decodeToBytes(s);\n if (!s.startsWith(\"AGE-SECRET-KEY-PQ-1\") || res.prefix.toUpperCase() !== \"AGE-SECRET-KEY-PQ-\" || res.bytes.length !== 32) {\n throw Error(\"invalid identity\");\n }\n this.identity = res.bytes;\n }\n unwrapFileKey(stanzas) {\n for (const s of stanzas) {\n if (s.args.length < 1 || s.args[0] !== \"mlkem768x25519\") {\n continue;\n }\n if (s.args.length !== 2) {\n throw Error(\"invalid mlkem768x25519 stanza\");\n }\n const share = base64nopad.decode(s.args[1]);\n if (share.length !== 1120) {\n throw Error(\"invalid mlkem768x25519 stanza\");\n }\n if (s.body.length !== 32) {\n throw Error(\"invalid mlkem768x25519 stanza\");\n }\n const sharedSecret = MLKEM768X25519.decapsulate(share, this.identity);\n const label2 = new TextEncoder().encode(\"age-encryption.org/mlkem768x25519\");\n const { key, nonce } = hpkeContext(hpkeMLKEM768X25519, sharedSecret, label2);\n try {\n return chacha20poly1305(key, nonce).decrypt(s.body);\n } catch {\n continue;\n }\n }\n return null;\n }\n};\nvar hpkeMLKEM768X25519 = 25722;\nvar hpkeMLKEM768P256 = 80;\nvar hpkeDHKEMP256 = 16;\nfunction hpkeContext(kemID, sharedSecret, info) {\n const suiteID = hpkeSuiteID(kemID);\n const pskIDHash = hpkeLabeledExtract(suiteID, void 0, \"psk_id_hash\", new Uint8Array(0));\n const infoHash = hpkeLabeledExtract(suiteID, void 0, \"info_hash\", info);\n const ksContext = new Uint8Array(1 + pskIDHash.length + infoHash.length);\n ksContext[0] = 0;\n ksContext.set(pskIDHash, 1);\n ksContext.set(infoHash, 1 + pskIDHash.length);\n const secret = hpkeLabeledExtract(suiteID, sharedSecret, \"secret\", new Uint8Array(0));\n const key = hpkeLabeledExpand(suiteID, secret, \"key\", ksContext, 32);\n const nonce = hpkeLabeledExpand(suiteID, secret, \"base_nonce\", ksContext, 12);\n return { key, nonce };\n}\nfunction hpkeSuiteID(kemID) {\n const suiteID = new Uint8Array(10);\n suiteID.set(new TextEncoder().encode(\"HPKE\"), 0);\n suiteID[4] = kemID >> 8 & 255;\n suiteID[5] = kemID & 255;\n suiteID[6] = 0;\n suiteID[7] = 1;\n suiteID[8] = 0;\n suiteID[9] = 3;\n return suiteID;\n}\nfunction hpkeLabeledExtract(suiteID, salt, label2, ikm) {\n const labeledIKM = new Uint8Array(7 + suiteID.length + label2.length + ikm.length);\n let offset = 0;\n labeledIKM.set(new TextEncoder().encode(\"HPKE-v1\"), offset);\n offset += \"HPKE-v1\".length;\n labeledIKM.set(suiteID, offset);\n offset += suiteID.length;\n labeledIKM.set(new TextEncoder().encode(label2), offset);\n offset += label2.length;\n labeledIKM.set(ikm, offset);\n return extract(sha256, labeledIKM, salt);\n}\nfunction hpkeLabeledExpand(suiteID, prk, label2, info, length) {\n const labeledInfo = new Uint8Array(2 + 7 + suiteID.length + label2.length + info.length);\n let offset = 0;\n labeledInfo[offset] = length >> 8 & 255;\n labeledInfo[offset + 1] = length & 255;\n offset += 2;\n labeledInfo.set(new TextEncoder().encode(\"HPKE-v1\"), offset);\n offset += \"HPKE-v1\".length;\n labeledInfo.set(suiteID, offset);\n offset += suiteID.length;\n labeledInfo.set(new TextEncoder().encode(label2), offset);\n offset += label2.length;\n labeledInfo.set(info, offset);\n return expand(sha256, prk, labeledInfo, length);\n}\nfunction hpkeDHKEMP256Encapsulate(recipient) {\n if (recipient.length !== p256.lengths.publicKeyUncompressed) {\n recipient = p256.Point.fromBytes(recipient).toBytes(false);\n }\n const ephemeral = p256.utils.randomSecretKey();\n const encapsulatedKey = p256.getPublicKey(ephemeral, false);\n const ss = p256.getSharedSecret(ephemeral, recipient, true).subarray(1);\n const kemContext = new Uint8Array(encapsulatedKey.length + recipient.length);\n kemContext.set(encapsulatedKey, 0);\n kemContext.set(recipient, encapsulatedKey.length);\n const suiteID = new Uint8Array(5);\n suiteID.set(new TextEncoder().encode(\"KEM\"), 0);\n suiteID[3] = hpkeDHKEMP256 >> 8;\n suiteID[4] = hpkeDHKEMP256 & 255;\n const eaePRK = hpkeLabeledExtract(suiteID, void 0, \"eae_prk\", ss);\n const sharedSecret = hpkeLabeledExpand(suiteID, eaePRK, \"shared_secret\", kemContext, 32);\n return { encapsulatedKey, sharedSecret };\n}\nvar TagRecipient = class {\n recipient;\n constructor(s) {\n const res = bech32.decodeToBytes(s);\n if (!s.startsWith(\"age1tag1\") || res.prefix.toLowerCase() !== \"age1tag\" || res.bytes.length !== 33) {\n throw Error(\"invalid recipient\");\n }\n this.recipient = res.bytes;\n }\n wrapFileKey(fileKey) {\n const { encapsulatedKey, sharedSecret } = hpkeDHKEMP256Encapsulate(this.recipient);\n const label2 = new TextEncoder().encode(\"age-encryption.org/p256tag\");\n const tag = (() => {\n const recipientHash = sha256(this.recipient).subarray(0, 4);\n const ikm = new Uint8Array(encapsulatedKey.length + recipientHash.length);\n ikm.set(encapsulatedKey, 0);\n ikm.set(recipientHash, encapsulatedKey.length);\n return extract(sha256, ikm, label2).subarray(0, 4);\n })();\n const { key, nonce } = hpkeContext(hpkeDHKEMP256, sharedSecret, label2);\n const ciphertext = chacha20poly1305(key, nonce).encrypt(fileKey);\n return [new Stanza([\"p256tag\", base64nopad.encode(tag), base64nopad.encode(encapsulatedKey)], ciphertext)];\n }\n};\nvar HybridTagRecipient = class {\n recipient;\n constructor(s) {\n const res = bech32.decodeToBytes(s);\n if (!s.startsWith(\"age1tagpq1\") || res.prefix.toLowerCase() !== \"age1tagpq\" || res.bytes.length !== 1249) {\n throw Error(\"invalid recipient\");\n }\n this.recipient = res.bytes;\n }\n wrapFileKey(fileKey) {\n const { cipherText: encapsulatedKey, sharedSecret } = MLKEM768P256.encapsulate(this.recipient);\n const label2 = new TextEncoder().encode(\"age-encryption.org/mlkem768p256tag\");\n const tag = (() => {\n const recipientHash = sha256(this.recipient.subarray(1184)).subarray(0, 4);\n const ikm = new Uint8Array(encapsulatedKey.length + recipientHash.length);\n ikm.set(encapsulatedKey, 0);\n ikm.set(recipientHash, encapsulatedKey.length);\n return extract(sha256, ikm, label2).subarray(0, 4);\n })();\n const { key, nonce } = hpkeContext(hpkeMLKEM768P256, sharedSecret, label2);\n const ciphertext = chacha20poly1305(key, nonce).encrypt(fileKey);\n return [new Stanza([\"mlkem768p256tag\", base64nopad.encode(tag), base64nopad.encode(encapsulatedKey)], ciphertext)];\n }\n};\nvar X25519Recipient = class {\n recipient;\n constructor(s) {\n const res = bech32.decodeToBytes(s);\n if (!s.startsWith(\"age1\") || res.prefix.toLowerCase() !== \"age\" || res.bytes.length !== 32) {\n throw Error(\"invalid recipient\");\n }\n this.recipient = res.bytes;\n }\n async wrapFileKey(fileKey) {\n const ephemeral = randomBytes(32);\n const share = await scalarMultBase(ephemeral);\n const secret = await scalarMult(ephemeral, this.recipient);\n const salt = new Uint8Array(share.length + this.recipient.length);\n salt.set(share);\n salt.set(this.recipient, share.length);\n const label2 = new TextEncoder().encode(\"age-encryption.org/v1/X25519\");\n const key = hkdf(sha256, secret, salt, label2, 32);\n return [new Stanza([\"X25519\", base64nopad.encode(share)], encryptFileKey(fileKey, key))];\n }\n};\nvar X25519Identity = class {\n identity;\n recipient;\n constructor(s) {\n if (isCryptoKey2(s)) {\n this.identity = s;\n this.recipient = scalarMultBase(s);\n return;\n }\n const res = bech32.decodeToBytes(s);\n if (!s.startsWith(\"AGE-SECRET-KEY-1\") || res.prefix.toUpperCase() !== \"AGE-SECRET-KEY-\" || res.bytes.length !== 32) {\n throw Error(\"invalid identity\");\n }\n this.identity = res.bytes;\n this.recipient = scalarMultBase(res.bytes);\n }\n async unwrapFileKey(stanzas) {\n for (const s of stanzas) {\n if (s.args.length < 1 || s.args[0] !== \"X25519\") {\n continue;\n }\n if (s.args.length !== 2) {\n throw Error(\"invalid X25519 stanza\");\n }\n const share = base64nopad.decode(s.args[1]);\n if (share.length !== 32) {\n throw Error(\"invalid X25519 stanza\");\n }\n const secret = await scalarMult(this.identity, share);\n const recipient = await this.recipient;\n const salt = new Uint8Array(share.length + recipient.length);\n salt.set(share);\n salt.set(recipient, share.length);\n const label2 = new TextEncoder().encode(\"age-encryption.org/v1/X25519\");\n const key = hkdf(sha256, secret, salt, label2, 32);\n const fileKey = decryptFileKey(s.body, key);\n if (fileKey !== null)\n return fileKey;\n }\n return null;\n }\n};\nvar ScryptRecipient = class {\n passphrase;\n logN;\n constructor(passphrase, logN) {\n this.passphrase = passphrase;\n this.logN = logN;\n }\n wrapFileKey(fileKey) {\n const salt = randomBytes(16);\n const label2 = \"age-encryption.org/v1/scrypt\";\n const labelAndSalt = new Uint8Array(label2.length + 16);\n labelAndSalt.set(new TextEncoder().encode(label2));\n labelAndSalt.set(salt, label2.length);\n const key = scrypt(this.passphrase, labelAndSalt, { N: 2 ** this.logN, r: 8, p: 1, dkLen: 32 });\n return [new Stanza([\"scrypt\", base64nopad.encode(salt), this.logN.toString()], encryptFileKey(fileKey, key))];\n }\n};\nvar ScryptIdentity = class {\n passphrase;\n constructor(passphrase) {\n this.passphrase = passphrase;\n }\n unwrapFileKey(stanzas) {\n for (const s of stanzas) {\n if (s.args.length < 1 || s.args[0] !== \"scrypt\") {\n continue;\n }\n if (stanzas.length !== 1) {\n throw Error(\"scrypt recipient is not the only one in the header\");\n }\n if (s.args.length !== 3) {\n throw Error(\"invalid scrypt stanza\");\n }\n if (!/^[1-9][0-9]*$/.test(s.args[2])) {\n throw Error(\"invalid scrypt stanza\");\n }\n const salt = base64nopad.decode(s.args[1]);\n if (salt.length !== 16) {\n throw Error(\"invalid scrypt stanza\");\n }\n const logN = Number(s.args[2]);\n if (logN > 20) {\n throw Error(\"scrypt work factor is too high\");\n }\n const label2 = \"age-encryption.org/v1/scrypt\";\n const labelAndSalt = new Uint8Array(label2.length + 16);\n labelAndSalt.set(new TextEncoder().encode(label2));\n labelAndSalt.set(salt, label2.length);\n const key = scrypt(this.passphrase, labelAndSalt, { N: 2 ** logN, r: 8, p: 1, dkLen: 32 });\n const fileKey = decryptFileKey(s.body, key);\n if (fileKey !== null)\n return fileKey;\n }\n return null;\n }\n};\nfunction encryptFileKey(fileKey, key) {\n const nonce = new Uint8Array(12);\n return chacha20poly1305(key, nonce).encrypt(fileKey);\n}\nfunction decryptFileKey(body, key) {\n if (body.length !== 32) {\n throw Error(\"invalid stanza\");\n }\n const nonce = new Uint8Array(12);\n try {\n return chacha20poly1305(key, nonce).decrypt(body);\n } catch {\n return null;\n }\n}\nfunction isCryptoKey2(key) {\n return typeof CryptoKey !== \"undefined\" && key instanceof CryptoKey;\n}\n\n// ../../node_modules/age-encryption/dist/stream.js\nvar chacha20poly1305Overhead = 16;\nvar chunkSize = /* @__PURE__ */ (() => 64 * 1024)();\nvar chunkSizeWithOverhead = /* @__PURE__ */ (() => chunkSize + chacha20poly1305Overhead)();\nfunction decryptSTREAM(key) {\n const streamNonce = new Uint8Array(12);\n const incNonce = () => {\n for (let i = streamNonce.length - 2; i >= 0; i--) {\n streamNonce[i]++;\n if (streamNonce[i] !== 0)\n break;\n }\n };\n let firstChunk = true;\n const ciphertextBuffer = new Uint8Array(chunkSizeWithOverhead);\n let ciphertextBufferUsed = 0;\n return new TransformStream({\n transform(chunk, controller) {\n while (chunk.length > 0) {\n if (ciphertextBufferUsed === ciphertextBuffer.length) {\n const decryptedChunk = chacha20poly1305(key, streamNonce).decrypt(ciphertextBuffer);\n controller.enqueue(decryptedChunk);\n incNonce();\n ciphertextBufferUsed = 0;\n firstChunk = false;\n }\n const n = Math.min(ciphertextBuffer.length - ciphertextBufferUsed, chunk.length);\n ciphertextBuffer.set(chunk.subarray(0, n), ciphertextBufferUsed);\n ciphertextBufferUsed += n;\n chunk = chunk.subarray(n);\n }\n },\n flush(controller) {\n streamNonce[11] = 1;\n const decryptedChunk = chacha20poly1305(key, streamNonce).decrypt(ciphertextBuffer.subarray(0, ciphertextBufferUsed));\n if (!firstChunk && decryptedChunk.length === 0) {\n throw new Error(\"final chunk is empty\");\n }\n controller.enqueue(decryptedChunk);\n }\n });\n}\nfunction plaintextSize(ciphertextSize2) {\n if (ciphertextSize2 < chacha20poly1305Overhead) {\n throw Error(\"ciphertext is too small\");\n }\n if (ciphertextSize2 === chacha20poly1305Overhead) {\n return 0;\n }\n const fullChunks = Math.floor(ciphertextSize2 / chunkSizeWithOverhead);\n const lastChunk = ciphertextSize2 % chunkSizeWithOverhead;\n if (0 < lastChunk && lastChunk <= chacha20poly1305Overhead) {\n throw Error(\"ciphertext size is invalid\");\n }\n let size = ciphertextSize2;\n size -= fullChunks * chacha20poly1305Overhead;\n size -= lastChunk > 0 ? chacha20poly1305Overhead : 0;\n return size;\n}\nfunction encryptSTREAM(key) {\n const streamNonce = new Uint8Array(12);\n const incNonce = () => {\n for (let i = streamNonce.length - 2; i >= 0; i--) {\n streamNonce[i]++;\n if (streamNonce[i] !== 0)\n break;\n }\n };\n const plaintextBuffer = new Uint8Array(chunkSize);\n let plaintextBufferUsed = 0;\n return new TransformStream({\n transform(chunk, controller) {\n while (chunk.length > 0) {\n if (plaintextBufferUsed === plaintextBuffer.length) {\n const encryptedChunk = chacha20poly1305(key, streamNonce).encrypt(plaintextBuffer);\n controller.enqueue(encryptedChunk);\n incNonce();\n plaintextBufferUsed = 0;\n }\n const n = Math.min(plaintextBuffer.length - plaintextBufferUsed, chunk.length);\n plaintextBuffer.set(chunk.subarray(0, n), plaintextBufferUsed);\n plaintextBufferUsed += n;\n chunk = chunk.subarray(n);\n }\n },\n flush(controller) {\n streamNonce[11] = 1;\n const encryptedChunk = chacha20poly1305(key, streamNonce).encrypt(plaintextBuffer.subarray(0, plaintextBufferUsed));\n controller.enqueue(encryptedChunk);\n }\n });\n}\nfunction ciphertextSize(plaintextSize2) {\n const chunks = Math.max(1, Math.ceil(plaintextSize2 / chunkSize));\n return plaintextSize2 + chacha20poly1305Overhead * chunks;\n}\n\n// ../../node_modules/age-encryption/dist/armor.js\nvar armor_exports = {};\n__export(armor_exports, {\n decode: () => decode,\n encode: () => encode\n});\nfunction encode(file) {\n const lines = [];\n lines.push(\"-----BEGIN AGE ENCRYPTED FILE-----\\n\");\n for (let i = 0; i < file.length; i += 48) {\n let end = i + 48;\n if (end > file.length)\n end = file.length;\n lines.push(base64.encode(file.subarray(i, end)) + \"\\n\");\n }\n lines.push(\"-----END AGE ENCRYPTED FILE-----\\n\");\n return lines.join(\"\");\n}\nfunction decode(file) {\n const lines = file.trim().replaceAll(\"\\r\\n\", \"\\n\").split(\"\\n\");\n if (lines.shift() !== \"-----BEGIN AGE ENCRYPTED FILE-----\") {\n throw Error(\"invalid header\");\n }\n if (lines.pop() !== \"-----END AGE ENCRYPTED FILE-----\") {\n throw Error(\"invalid footer\");\n }\n function isLineLengthValid(i, l) {\n if (i === lines.length - 1) {\n return l.length > 0 && l.length <= 64 && l.length % 4 === 0;\n }\n return l.length === 64;\n }\n if (!lines.every((l, i) => isLineLengthValid(i, l))) {\n throw Error(\"invalid line length\");\n }\n if (!lines.every((l) => /^[A-Za-z0-9+/=]+$/.test(l))) {\n throw Error(\"invalid base64\");\n }\n return base64.decode(lines.join(\"\"));\n}\n\n// ../../node_modules/age-encryption/dist/webauthn.js\nvar webauthn_exports = {};\n__export(webauthn_exports, {\n WebAuthnIdentity: () => WebAuthnIdentity,\n WebAuthnRecipient: () => WebAuthnRecipient,\n createCredential: () => createCredential\n});\n\n// ../../node_modules/age-encryption/dist/cbor.js\nfunction readTypeAndArgument(b) {\n if (b.length === 0) {\n throw Error(\"cbor: unexpected EOF\");\n }\n const major = b[0] >> 5;\n const minor = b[0] & 31;\n if (minor <= 23) {\n return [major, minor, b.subarray(1)];\n }\n if (minor === 24) {\n if (b.length < 2) {\n throw Error(\"cbor: unexpected EOF\");\n }\n return [major, b[1], b.subarray(2)];\n }\n if (minor === 25) {\n if (b.length < 3) {\n throw Error(\"cbor: unexpected EOF\");\n }\n return [major, b[1] << 8 | b[2], b.subarray(3)];\n }\n throw Error(\"cbor: unsupported argument encoding\");\n}\nfunction readUint(b) {\n const [major, minor, rest] = readTypeAndArgument(b);\n if (major !== 0) {\n throw Error(\"cbor: expected unsigned integer\");\n }\n return [minor, rest];\n}\nfunction readByteString(b) {\n const [major, minor, rest] = readTypeAndArgument(b);\n if (major !== 2) {\n throw Error(\"cbor: expected byte string\");\n }\n if (minor > rest.length) {\n throw Error(\"cbor: unexpected EOF\");\n }\n return [rest.subarray(0, minor), rest.subarray(minor)];\n}\nfunction readTextString(b) {\n const [major, minor, rest] = readTypeAndArgument(b);\n if (major !== 3) {\n throw Error(\"cbor: expected text string\");\n }\n if (minor > rest.length) {\n throw Error(\"cbor: unexpected EOF\");\n }\n const decoder = new TextDecoder(\"utf-8\", { fatal: true, ignoreBOM: true });\n return [decoder.decode(rest.subarray(0, minor)), rest.subarray(minor)];\n}\nfunction readArray(b) {\n const [major, minor, r] = readTypeAndArgument(b);\n if (major !== 4) {\n throw Error(\"cbor: expected array\");\n }\n let rest = r;\n const args = [];\n for (let i = 0; i < minor; i++) {\n let arg;\n [arg, rest] = readTextString(rest);\n args.push(arg);\n }\n return [args, rest];\n}\nfunction encodeUint(n) {\n if (n <= 23) {\n return new Uint8Array([n]);\n }\n if (n <= 255) {\n return new Uint8Array([24, n]);\n }\n if (n <= 65535) {\n return new Uint8Array([25, n >> 8, n & 255]);\n }\n throw Error(\"cbor: unsigned integer too large\");\n}\nfunction encodeByteString(b) {\n if (b.length <= 23) {\n return new Uint8Array([2 << 5 | b.length, ...b]);\n }\n if (b.length <= 255) {\n return new Uint8Array([2 << 5 | 24, b.length, ...b]);\n }\n if (b.length <= 65535) {\n return new Uint8Array([2 << 5 | 25, b.length >> 8, b.length & 255, ...b]);\n }\n throw Error(\"cbor: byte string too long\");\n}\nfunction encodeTextString(s) {\n const b = new TextEncoder().encode(s);\n if (b.length <= 23) {\n return new Uint8Array([3 << 5 | b.length, ...b]);\n }\n if (b.length <= 255) {\n return new Uint8Array([3 << 5 | 24, b.length, ...b]);\n }\n if (b.length <= 65535) {\n return new Uint8Array([3 << 5 | 25, b.length >> 8, b.length & 255, ...b]);\n }\n throw Error(\"cbor: text string too long\");\n}\nfunction encodeArray(args) {\n const body = args.flatMap((x) => [...encodeTextString(x)]);\n if (args.length <= 23) {\n return new Uint8Array([4 << 5 | args.length, ...body]);\n }\n if (args.length <= 255) {\n return new Uint8Array([4 << 5 | 24, args.length, ...body]);\n }\n if (args.length <= 65535) {\n return new Uint8Array([4 << 5 | 25, args.length >> 8, args.length & 255, ...body]);\n }\n throw Error(\"cbor: array too long\");\n}\n\n// ../../node_modules/age-encryption/dist/webauthn.js\nvar defaultAlgorithms = [\n { type: \"public-key\", alg: -8 },\n // Ed25519\n { type: \"public-key\", alg: -7 },\n // ECDSA with P-256 and SHA-256\n { type: \"public-key\", alg: -257 }\n // RSA PKCS#1 v1.5 with SHA-256\n];\nasync function createCredential(options) {\n const cred = await navigator.credentials.create({\n publicKey: {\n rp: { name: \"\", id: options.rpId },\n user: {\n name: options.keyName,\n id: domBuffer2(randomBytes(8)),\n // avoid overwriting existing keys\n displayName: \"\"\n },\n pubKeyCredParams: defaultAlgorithms,\n authenticatorSelection: {\n requireResidentKey: options.type !== \"security-key\",\n residentKey: options.type !== \"security-key\" ? \"required\" : \"discouraged\",\n userVerification: \"required\"\n // prf requires UV\n },\n hints: options.type === \"security-key\" ? [\"security-key\"] : [],\n extensions: { prf: {} },\n challenge: new Uint8Array([0]).buffer\n // unused without attestation\n }\n });\n if (!cred.getClientExtensionResults().prf?.enabled) {\n throw Error(\"PRF extension not available (need macOS 15+, Chrome 132+)\");\n }\n const rpId = options.rpId ?? new URL(window.origin).hostname;\n return encodeIdentity(cred, rpId);\n}\nvar prefix = \"AGE-PLUGIN-FIDO2PRF-\";\nfunction encodeIdentity(credential, rpId) {\n const res = credential.response;\n const version = encodeUint(1);\n const credId = encodeByteString(new Uint8Array(credential.rawId));\n const rp = encodeTextString(rpId);\n const transports = encodeArray(res.getTransports());\n const identityData = new Uint8Array([...version, ...credId, ...rp, ...transports]);\n return bech32.encode(prefix, bech32.toWords(identityData), false).toUpperCase();\n}\nfunction decodeIdentity(identity) {\n const res = bech32.decodeToBytes(identity);\n if (!identity.startsWith(prefix + \"1\")) {\n throw Error(\"invalid identity\");\n }\n const [version, rest1] = readUint(res.bytes);\n if (version !== 1) {\n throw Error(\"unsupported identity version\");\n }\n const [credId, rest2] = readByteString(rest1);\n const [rpId, rest3] = readTextString(rest2);\n const [transports] = readArray(rest3);\n return [credId, rpId, transports];\n}\nvar label = \"age-encryption.org/fido2prf\";\nvar WebAuthnInternal = class {\n credId;\n transports;\n rpId;\n constructor(options) {\n if (options?.identity) {\n const [credId, rpId, transports] = decodeIdentity(options.identity);\n this.credId = credId;\n this.transports = transports;\n this.rpId = rpId;\n } else {\n this.rpId = options?.rpId;\n }\n }\n async getCredential(nonce) {\n const assertion = await navigator.credentials.get({\n publicKey: {\n allowCredentials: this.credId ? [{\n id: domBuffer2(this.credId),\n transports: this.transports,\n type: \"public-key\"\n }] : [],\n challenge: domBuffer2(randomBytes(16)),\n extensions: { prf: { eval: prfInputs(nonce) } },\n userVerification: \"required\",\n // prf requires UV\n rpId: this.rpId\n }\n });\n const results = assertion.getClientExtensionResults().prf?.results;\n if (results === void 0) {\n throw Error(\"PRF extension not available (need macOS 15+, Chrome 132+)\");\n }\n return results;\n }\n};\nvar WebAuthnRecipient = class extends WebAuthnInternal {\n /**\n * Implements {@link Recipient.wrapFileKey}.\n */\n async wrapFileKey(fileKey) {\n const nonce = randomBytes(16);\n const results = await this.getCredential(nonce);\n const key = deriveKey(results);\n return [new Stanza([label, base64nopad.encode(nonce)], encryptFileKey(fileKey, key))];\n }\n};\nvar WebAuthnIdentity = class extends WebAuthnInternal {\n /**\n * Implements {@link Identity.unwrapFileKey}.\n */\n async unwrapFileKey(stanzas) {\n for (const s of stanzas) {\n if (s.args.length < 1 || s.args[0] !== label) {\n continue;\n }\n if (s.args.length !== 2) {\n throw Error(\"invalid prf stanza\");\n }\n const nonce = base64nopad.decode(s.args[1]);\n if (nonce.length !== 16) {\n throw Error(\"invalid prf stanza\");\n }\n const results = await this.getCredential(nonce);\n const key = deriveKey(results);\n const fileKey = decryptFileKey(s.body, key);\n if (fileKey !== null)\n return fileKey;\n }\n return null;\n }\n};\nfunction prfInputs(nonce) {\n const prefix2 = new TextEncoder().encode(label);\n const first = new Uint8Array(prefix2.length + nonce.length + 1);\n first.set(prefix2, 0);\n first[prefix2.length] = 1;\n first.set(nonce, prefix2.length + 1);\n const second = new Uint8Array(prefix2.length + nonce.length + 1);\n second.set(prefix2, 0);\n second[prefix2.length] = 2;\n second.set(nonce, prefix2.length + 1);\n return { first, second };\n}\nfunction deriveKey(results) {\n if (results.second === void 0) {\n throw Error(\"Missing second PRF result\");\n }\n const prf = new Uint8Array(results.first.byteLength + results.second.byteLength);\n prf.set(new Uint8Array(results.first), 0);\n prf.set(new Uint8Array(results.second), results.first.byteLength);\n return extract(sha256, prf, new TextEncoder().encode(label));\n}\nfunction domBuffer2(arr) {\n return arr;\n}\n\n// ../../node_modules/age-encryption/dist/index.js\nvar Encrypter = class {\n passphrase = null;\n scryptWorkFactor = 18;\n recipients = [];\n /**\n * Set the passphrase to encrypt the file(s) with. This method can only be\n * called once, and can't be called if {@link Encrypter.addRecipient} has\n * been called.\n *\n * The passphrase is passed through the scrypt key derivation function, but\n * it needs to have enough entropy to resist offline brute-force attacks.\n * You should use at least 8-10 random alphanumeric characters, or 4-5\n * random words from a list of at least 2000 words.\n *\n * @param s - The passphrase to encrypt the file with.\n */\n setPassphrase(s) {\n if (this.passphrase !== null) {\n throw new Error(\"can encrypt to at most one passphrase\");\n }\n if (this.recipients.length !== 0) {\n throw new Error(\"can't encrypt to both recipients and passphrases\");\n }\n this.passphrase = s;\n }\n /**\n * Set the scrypt work factor to use when encrypting the file(s) with a\n * passphrase. The default is 18. Using a lower value will require stronger\n * passphrases to resist offline brute-force attacks.\n *\n * @param logN - The base-2 logarithm of the scrypt work factor.\n */\n setScryptWorkFactor(logN) {\n this.scryptWorkFactor = logN;\n }\n /**\n * Add a recipient to encrypt the file(s) for. This method can be called\n * multiple times to encrypt the file(s) for multiple recipients.\n *\n * This version supports native X25519 recipients (`age1...`), hybrid\n * post-quantum recipients (`age1pq1...`), tag recipients (`age1tag1...`),\n * and hybrid tag recipients (`age1tagpq1...`).\n *\n * @param s - The recipient to encrypt the file for. Either a string\n * beginning with `age1...` or an object implementing the {@link Recipient}\n * interface.\n */\n addRecipient(s) {\n if (this.passphrase !== null) {\n throw new Error(\"can't encrypt to both recipients and passphrases\");\n }\n if (typeof s === \"string\") {\n if (s.startsWith(\"age1pq1\")) {\n this.recipients.push(new HybridRecipient(s));\n } else if (s.startsWith(\"age1tag1\")) {\n this.recipients.push(new TagRecipient(s));\n } else if (s.startsWith(\"age1tagpq1\")) {\n this.recipients.push(new HybridTagRecipient(s));\n } else if (s.startsWith(\"age1\")) {\n this.recipients.push(new X25519Recipient(s));\n } else {\n throw new Error(\"unrecognized recipient type\");\n }\n } else {\n this.recipients.push(s);\n }\n }\n async encrypt(file) {\n const fileKey = randomBytes(16);\n const stanzas = [];\n let recipients = this.recipients;\n if (this.passphrase !== null) {\n recipients = [new ScryptRecipient(this.passphrase, this.scryptWorkFactor)];\n }\n for (const recipient of recipients) {\n stanzas.push(...await recipient.wrapFileKey(fileKey));\n }\n const labelHeader = new TextEncoder().encode(\"header\");\n const hmacKey = hkdf(sha256, fileKey, void 0, labelHeader, 32);\n const mac = hmac(sha256, hmacKey, encodeHeaderNoMAC(stanzas));\n const header = encodeHeader(stanzas, mac);\n const nonce = randomBytes(16);\n const labelPayload = new TextEncoder().encode(\"payload\");\n const streamKey = hkdf(sha256, fileKey, nonce, labelPayload, 32);\n const encrypter = encryptSTREAM(streamKey);\n if (!(file instanceof ReadableStream)) {\n if (typeof file === \"string\")\n file = new TextEncoder().encode(file);\n return await readAll(prepend(stream(file).pipeThrough(encrypter), header, nonce));\n }\n return Object.assign(prepend(file.pipeThrough(encrypter), header, nonce), {\n size: (size) => ciphertextSize(size) + header.length + nonce.length\n });\n }\n};\nvar Decrypter = class {\n identities = [];\n /**\n * Add a passphrase to decrypt password-encrypted file(s) with. This method\n * can be called multiple times to try multiple passphrases.\n *\n * @param s - The passphrase to decrypt the file with.\n */\n addPassphrase(s) {\n this.identities.push(new ScryptIdentity(s));\n }\n /**\n * Add an identity to decrypt file(s) with. This method can be called\n * multiple times to try multiple identities.\n *\n * @param s - The identity to decrypt the file with. Either a string\n * beginning with `AGE-SECRET-KEY-PQ-1...` or `AGE-SECRET-KEY-1...`, an\n * X25519 private\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/CryptoKey | CryptoKey}\n * object, or an object implementing the {@link Identity} interface.\n *\n * A CryptoKey object must have\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/CryptoKey/type | type}\n * `private`,\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/CryptoKey/algorithm | algorithm}\n * `{name: 'X25519'}`, and\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/CryptoKey/usages | usages}\n * `[\"deriveBits\"]`. For example:\n * ```js\n * const keyPair = await crypto.subtle.generateKey({ name: \"X25519\" }, false, [\"deriveBits\"])\n * decrypter.addIdentity(key.privateKey)\n * ```\n */\n addIdentity(s) {\n if (isCryptoKey3(s)) {\n this.identities.push(new X25519Identity(s));\n } else if (typeof s === \"string\") {\n if (s.startsWith(\"AGE-SECRET-KEY-1\")) {\n this.identities.push(new X25519Identity(s));\n } else if (s.startsWith(\"AGE-SECRET-KEY-PQ-1\")) {\n this.identities.push(new HybridIdentity(s));\n } else {\n throw new Error(\"unrecognized identity type\");\n }\n } else {\n this.identities.push(s);\n }\n }\n async decrypt(file, outputFormat) {\n const s = file instanceof ReadableStream ? file : stream(file);\n const { fileKey, headerSize, rest } = await this.decryptHeaderInternal(s);\n const { data: nonce, rest: payload } = await read(rest, 16);\n const label2 = new TextEncoder().encode(\"payload\");\n const streamKey = hkdf(sha256, fileKey, nonce, label2, 32);\n const decrypter = decryptSTREAM(streamKey);\n const out = payload.pipeThrough(decrypter);\n const outWithSize = Object.assign(out, {\n size: (size) => plaintextSize(size - headerSize - nonce.length)\n });\n if (file instanceof ReadableStream)\n return outWithSize;\n if (outputFormat === \"text\")\n return await readAllString(out);\n return await readAll(out);\n }\n /**\n * Decrypt the file key from a detached header. This is a low-level\n * function that can be used to implement delegated decryption logic.\n * Most users won't need this.\n *\n * It is the caller's responsibility to keep track of what file the\n * returned file key decrypts, and to ensure the file key is not used\n * for any other purpose.\n *\n * @param header - The file's textual header, including the MAC.\n *\n * @returns The file key used to encrypt the file.\n */\n async decryptHeader(header) {\n return (await this.decryptHeaderInternal(stream(header))).fileKey;\n }\n async decryptHeaderInternal(file) {\n const h = await parseHeader(file);\n const fileKey = await this.unwrapFileKey(h.stanzas);\n if (fileKey === null)\n throw Error(\"no identity matched any of the file's recipients\");\n const label2 = new TextEncoder().encode(\"header\");\n const hmacKey = hkdf(sha256, fileKey, void 0, label2, 32);\n const mac = hmac(sha256, hmacKey, h.headerNoMAC);\n if (!compareBytes(h.MAC, mac))\n throw Error(\"invalid header HMAC\");\n return { fileKey, headerSize: h.headerSize, rest: h.rest };\n }\n async unwrapFileKey(stanzas) {\n for (const identity of this.identities) {\n const fileKey = await identity.unwrapFileKey(stanzas);\n if (fileKey !== null)\n return fileKey;\n }\n return null;\n }\n};\nfunction compareBytes(a, b) {\n if (a.length !== b.length) {\n return false;\n }\n let acc = 0;\n for (let i = 0; i < a.length; i++) {\n acc |= a[i] ^ b[i];\n }\n return acc === 0;\n}\nfunction isCryptoKey3(key) {\n return typeof CryptoKey !== \"undefined\" && key instanceof CryptoKey;\n}\n// Annotate the CommonJS export names for ESM import in node:\n0 && (module.exports = {\n Decrypter,\n Encrypter,\n Stanza,\n armor,\n generateHybridIdentity,\n generateIdentity,\n generateX25519Identity,\n identityToRecipient,\n webauthn\n});\n/*! Bundled license information:\n\n@noble/hashes/utils.js:\n (*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) *)\n\n@scure/base/index.js:\n (*! scure-base - MIT License (c) 2022 Paul Miller (paulmillr.com) *)\n\n@noble/ciphers/utils.js:\n (*! noble-ciphers - MIT License (c) 2023 Paul Miller (paulmillr.com) *)\n\n@noble/hashes/utils.js:\n (*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) *)\n\n@noble/curves/utils.js:\n (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)\n\n@noble/curves/abstract/modular.js:\n (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)\n\n@noble/curves/abstract/curve.js:\n (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)\n\n@noble/curves/abstract/montgomery.js:\n (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)\n\n@noble/curves/abstract/weierstrass.js:\n (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)\n\n@noble/curves/ed25519.js:\n (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)\n\n@noble/curves/nist.js:\n (*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) *)\n\n@noble/hashes/utils.js:\n (*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) *)\n\n@noble/post-quantum/utils.js:\n (*! noble-post-quantum - MIT License (c) 2024 Paul Miller (paulmillr.com) *)\n\n@noble/post-quantum/_crystals.js:\n (*! noble-post-quantum - MIT License (c) 2024 Paul Miller (paulmillr.com) *)\n\n@noble/post-quantum/ml-kem.js:\n (*! noble-post-quantum - MIT License (c) 2024 Paul Miller (paulmillr.com) *)\n\n@noble/post-quantum/hybrid.js:\n (*! noble-post-quantum - MIT License (c) 2024 Paul Miller (paulmillr.com) *)\n*/\n", "export * from \"./types\";\nexport { ManifestParser, CLEF_MANIFEST_FILENAME } from \"./manifest/parser\";\nexport {\n ScanRunner,\n shannonEntropy,\n isHighEntropy,\n matchPatterns,\n redactValue,\n loadIgnoreRules,\n shouldIgnoreFile,\n shouldIgnoreMatch,\n parseIgnoreContent,\n} from \"./scanner\";\nexport type { ScanMatch, ScanResult, ScanOptions, ClefIgnoreRules } from \"./scanner\";\nexport { MatrixManager } from \"./matrix/manager\";\nexport { SchemaValidator } from \"./schema/validator\";\nexport { DiffEngine } from \"./diff/engine\";\nexport { BulkOps } from \"./bulk/ops\";\nexport { GitIntegration } from \"./git/integration\";\nexport { SopsClient } from \"./sops/client\";\nexport { resolveSopsPath, resetSopsResolution } from \"./sops/resolver\";\nexport type { SopsResolution, SopsSource } from \"./sops/resolver\";\nexport { LintRunner } from \"./lint/runner\";\nexport { ConsumptionClient } from \"./consumption/client\";\nexport { checkDependency, checkAll, assertSops, REQUIREMENTS } from \"./dependencies/checker\";\nexport { generateAgeIdentity, deriveAgePublicKey, formatAgeKeyFile } from \"./age/keygen\";\nexport type { AgeIdentity } from \"./age/keygen\";\nexport {\n metadataPath,\n loadMetadata,\n saveMetadata,\n markPending,\n markPendingWithRetry,\n markResolved,\n getPendingKeys,\n isPending,\n generateRandomValue,\n} from \"./pending/metadata\";\nexport type { PendingKey, PendingMetadata } from \"./pending/metadata\";\nexport { ImportRunner } from \"./import\";\nexport type { ImportFormat, ImportOptions, ImportResult, ParsedImport } from \"./import\";\nexport { parse, parseDotenv, parseJson, parseYaml, detectFormat } from \"./import/parsers\";\nexport { RecipientManager } from \"./recipients\";\nexport type { Recipient, RecipientsResult } from \"./recipients\";\nexport { validateAgePublicKey, keyPreview } from \"./recipients/validator\";\nexport type { AgeKeyValidation } from \"./recipients/validator\";\nexport {\n REQUESTS_FILENAME,\n requestsFilePath,\n loadRequests,\n saveRequests,\n upsertRequest,\n removeRequest as removeAccessRequest,\n findRequest,\n} from \"./recipients/requests\";\nexport type { RecipientRequest } from \"./recipients/requests\";\nexport { DriftDetector } from \"./drift/detector\";\nexport {\n ReportGenerator,\n ReportSanitizer,\n ReportTransformer,\n CloudClient,\n collectCIContext,\n} from \"./report\";\nexport { SopsMergeDriver } from \"./merge/driver\";\nexport type { MergeResult, MergeKey, MergeKeyStatus } from \"./merge/driver\";\nexport { ServiceIdentityManager, PartialRotationError } from \"./service-identity/manager\";\nexport { resolveIdentitySecrets } from \"./artifact/resolve\";\nexport type { ResolvedSecrets } from \"./artifact/resolve\";\nexport { ArtifactPacker } from \"./artifact/packer\";\nexport type {\n PackedArtifact,\n PackConfig,\n PackResult,\n ArtifactEnvelope,\n SignatureAlgorithm,\n} from \"./artifact/types\";\nexport {\n buildSigningPayload,\n generateSigningKeyPair,\n signEd25519,\n signKms,\n verifySignature,\n detectAlgorithm,\n} from \"./artifact/signer\";\nexport type { KmsProvider, KmsWrapResult, KmsProviderType } from \"./kms\";\nexport { VALID_KMS_PROVIDERS } from \"./kms\";\n", "/** Supported file extensions for encrypted SOPS files managed by Clef. */\nexport const CLEF_SUPPORTED_EXTENSIONS = [\".enc.yaml\", \".enc.json\"] as const;\n\n// \u2500\u2500 Subprocess Runner (dependency injection for sops & git) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Result returned by a subprocess invocation. */\nexport interface SubprocessResult {\n stdout: string;\n stderr: string;\n exitCode: number;\n}\n\n/**\n * Abstraction over subprocess execution used throughout the core library.\n * Inject a real implementation (`NodeSubprocessRunner`) in production and a\n * mock via `jest.fn()` in unit tests \u2014 no real subprocess calls in tests.\n */\nexport interface SubprocessRunner {\n run(command: string, args: string[], options?: SubprocessOptions): Promise<SubprocessResult>;\n}\n\n/** Options forwarded to the subprocess. */\nexport interface SubprocessOptions {\n /** Working directory for the child process. */\n cwd?: string;\n /** Data to pipe to stdin. */\n stdin?: string;\n /** Additional environment variables for the child process. */\n env?: Record<string, string>;\n}\n\n// \u2500\u2500 Manifest \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Cloud integration configuration stored in the manifest. */\nexport interface ClefCloudConfig {\n integrationId: string;\n}\n\n/** Parsed and validated contents of a `clef.yaml` manifest file. */\nexport interface ClefManifest {\n version: number;\n environments: ClefEnvironment[];\n namespaces: ClefNamespace[];\n sops: SopsConfig;\n file_pattern: string;\n service_identities?: ServiceIdentityDefinition[];\n cloud?: ClefCloudConfig;\n}\n\n/** Per-environment SOPS backend override. */\nexport interface EnvironmentSopsOverride {\n backend: \"age\" | \"awskms\" | \"gcpkms\" | \"azurekv\" | \"pgp\";\n aws_kms_arn?: string;\n gcp_kms_resource_id?: string;\n azure_kv_url?: string;\n pgp_fingerprint?: string;\n}\n\n/** A single deployment environment declared in the manifest. */\nexport interface ClefEnvironment {\n name: string;\n description: string;\n /** When `true`, write operations require explicit confirmation. */\n protected?: boolean;\n /** Per-environment SOPS backend override. Falls back to global `sops` config when absent. */\n sops?: EnvironmentSopsOverride;\n /** Per-environment age recipient overrides. When set, these recipients are used instead of global. */\n recipients?: (string | { key: string; label?: string })[];\n}\n\n/**\n * Resolve the effective backend configuration for an environment.\n * Returns the per-env override if present, otherwise falls back to the global `sops` config.\n */\nexport function resolveBackendConfig(\n manifest: ClefManifest,\n environment: string,\n): EnvironmentSopsOverride {\n const env = manifest.environments.find((e) => e.name === environment);\n if (env?.sops) return env.sops;\n return {\n backend: manifest.sops.default_backend,\n aws_kms_arn: manifest.sops.aws_kms_arn,\n gcp_kms_resource_id: manifest.sops.gcp_kms_resource_id,\n azure_kv_url: manifest.sops.azure_kv_url,\n pgp_fingerprint: manifest.sops.pgp_fingerprint,\n };\n}\n\n/**\n * Resolve per-environment recipients if defined.\n * Returns the environment's `recipients` array if non-empty, otherwise `undefined`\n * (caller should fall back to global recipients).\n */\nexport function resolveRecipientsForEnvironment(\n manifest: ClefManifest,\n environment: string,\n): (string | { key: string; label?: string })[] | undefined {\n const env = manifest.environments.find((e) => e.name === environment);\n if (env?.recipients && env.recipients.length > 0) return env.recipients;\n return undefined;\n}\n\n/** A secrets namespace declared in the manifest. */\nexport interface ClefNamespace {\n name: string;\n description: string;\n /** Optional path to a YAML schema file for this namespace. */\n schema?: string;\n /** Optional list of owner identifiers for this namespace. */\n owners?: string[];\n}\n\n/** SOPS encryption backend configuration from the manifest. */\nexport interface SopsConfig {\n default_backend: \"age\" | \"awskms\" | \"gcpkms\" | \"azurekv\" | \"pgp\";\n aws_kms_arn?: string;\n gcp_kms_resource_id?: string;\n azure_kv_url?: string;\n pgp_fingerprint?: string;\n}\n\n/**\n * Per-developer local config stored in `.clef/config.yaml` (gitignored).\n * Holds settings that must not be committed, such as the age private key path.\n */\nexport interface ClefLocalConfig {\n /** Path to the age private key file for this developer. */\n age_key_file?: string;\n /**\n * Where the age private key was stored during init.\n * - \"keychain\" \u2014 OS keychain (macOS Keychain / Linux libsecret / Windows Credential Manager)\n * - \"file\" \u2014 filesystem at age_key_file path\n *\n * Used to provide targeted guidance when the key cannot be resolved.\n */\n age_key_storage?: \"keychain\" | \"file\";\n /** Label identifying this repo's age key in the OS keychain or filesystem. */\n age_keychain_label?: string;\n}\n\n// \u2500\u2500 Matrix \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** A single cell in the namespace \u00D7 environment matrix. */\nexport interface MatrixCell {\n namespace: string;\n environment: string;\n /** Absolute path to the encrypted SOPS file for this cell. */\n filePath: string;\n /** Whether the encrypted file exists on disk. */\n exists: boolean;\n}\n\n/** An issue detected within a single matrix cell. */\nexport interface MatrixIssue {\n type: \"missing_keys\" | \"schema_warning\" | \"sops_error\";\n message: string;\n /** The affected key name, if applicable. */\n key?: string;\n}\n\n/** Decrypted status summary for one matrix cell. */\nexport interface MatrixStatus {\n cell: MatrixCell;\n /** Number of keys in the decrypted file. */\n keyCount: number;\n /** Number of keys currently marked as pending placeholders. */\n pendingCount: number;\n /** Timestamp from SOPS metadata, or `null` if unavailable. */\n lastModified: Date | null;\n issues: MatrixIssue[];\n}\n\n// \u2500\u2500 Schema \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** A namespace schema loaded from a YAML schema file. */\nexport interface NamespaceSchema {\n keys: Record<string, SchemaKey>;\n}\n\n/** Definition for a single key in a namespace schema. */\nexport interface SchemaKey {\n type: \"string\" | \"integer\" | \"boolean\";\n required: boolean;\n /** Regex pattern the value must match (strings only). */\n pattern?: string;\n default?: unknown;\n description?: string;\n /** Maximum numeric value (integers only). */\n max?: number;\n}\n\n/** A hard validation error produced by `SchemaValidator.validate`. */\nexport interface ValidationError {\n key: string;\n message: string;\n rule: \"required\" | \"type\" | \"pattern\";\n}\n\n/** A soft validation warning produced by `SchemaValidator.validate`. */\nexport interface ValidationWarning {\n key: string;\n message: string;\n rule: \"undeclared\" | \"max_exceeded\";\n}\n\n/** Result of validating a set of decrypted values against a namespace schema. */\nexport interface ValidationResult {\n /** `true` when there are no errors (warnings are allowed). */\n valid: boolean;\n errors: ValidationError[];\n warnings: ValidationWarning[];\n}\n\n// \u2500\u2500 Diff \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Status of a single key when diffing two environments. */\nexport type DiffStatus = \"changed\" | \"identical\" | \"missing_a\" | \"missing_b\";\n\n/** One row in a diff result representing a single key comparison. */\nexport interface DiffRow {\n key: string;\n /** Value from environment A, or `null` if the key is absent. */\n valueA: string | null;\n /** Value from environment B, or `null` if the key is absent. */\n valueB: string | null;\n status: DiffStatus;\n}\n\n/** The full diff result for a namespace across two environments. */\nexport interface DiffResult {\n namespace: string;\n envA: string;\n envB: string;\n rows: DiffRow[];\n}\n\n// \u2500\u2500 Lint \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Severity level of a lint issue. */\nexport type LintSeverity = \"error\" | \"warning\" | \"info\";\n\n/** Category of a lint issue. */\nexport type LintCategory = \"matrix\" | \"schema\" | \"sops\" | \"service-identity\";\n\n/** A single issue reported by `LintRunner`. */\nexport interface LintIssue {\n severity: LintSeverity;\n category: LintCategory;\n /** Path to the affected encrypted file. */\n file: string;\n /** The affected key name, if applicable. */\n key?: string;\n message: string;\n /** CLI command that can auto-fix this issue, if one exists. */\n fixCommand?: string;\n}\n\n/** Aggregate result from a full lint run. */\nexport interface LintResult {\n issues: LintIssue[];\n /** Total number of matrix files checked (including missing ones). */\n fileCount: number;\n /** Total number of keys marked as pending placeholders across all files. */\n pendingCount: number;\n}\n\n// \u2500\u2500 Git \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** A single git commit. */\nexport interface GitCommit {\n hash: string;\n author: string;\n date: Date;\n message: string;\n}\n\n/** Parsed output of `git status --porcelain`. */\nexport interface GitStatus {\n /** Files with staged (index) changes. */\n staged: string[];\n /** Files with unstaged (work-tree) changes. */\n unstaged: string[];\n untracked: string[];\n}\n\n// \u2500\u2500 SOPS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** The in-memory result of decrypting a SOPS-encrypted file. Plaintext never touches disk. */\nexport interface DecryptedFile {\n /** Flat key/value map of all decrypted secrets. */\n values: Record<string, string>;\n metadata: SopsMetadata;\n}\n\n/** SOPS metadata extracted from an encrypted file without decrypting its values. */\nexport interface SopsMetadata {\n backend: \"age\" | \"awskms\" | \"gcpkms\" | \"azurekv\" | \"pgp\";\n /** List of recipient identifiers (age public keys, KMS ARNs, Azure KV URLs, PGP fingerprints). */\n recipients: string[];\n lastModified: Date;\n}\n\n/**\n * Backend-agnostic interface for all encryption/decryption operations.\n *\n * `SopsClient` is the canonical implementation. Consumers should depend on this\n * interface rather than the concrete class so the encryption backend can be\n * replaced without touching call sites.\n */\nexport interface EncryptionBackend {\n /** Decrypt a file and return its values and metadata. */\n decrypt(filePath: string): Promise<DecryptedFile>;\n /** Encrypt a key/value map and write it to a file. */\n encrypt(\n filePath: string,\n values: Record<string, string>,\n manifest: ClefManifest,\n environment?: string,\n ): Promise<void>;\n /** Rotate encryption by adding a new recipient key. */\n reEncrypt(filePath: string, newKey: string): Promise<void>;\n /** Add an age recipient to an encrypted file (rotate + add-age). */\n addRecipient(filePath: string, key: string): Promise<void>;\n /** Remove an age recipient from an encrypted file (rotate + rm-age). */\n removeRecipient(filePath: string, key: string): Promise<void>;\n /** Check whether a file has valid encryption metadata. */\n validateEncryption(filePath: string): Promise<boolean>;\n /** Extract encryption metadata without decrypting. */\n getMetadata(filePath: string): Promise<SopsMetadata>;\n}\n\n// \u2500\u2500 Consumption \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Options for `ConsumptionClient.prepareEnvironment`. */\nexport interface ExecOptions {\n /** Inject only these keys (if set, all other keys are excluded). */\n only?: string[];\n /** Prepend this string to every injected environment variable name. */\n prefix?: string;\n /** When `true`, skip keys that already exist in the base environment. */\n noOverride?: boolean;\n}\n\n/** Options for `ConsumptionClient.formatExport`. */\nexport interface ExportOptions {\n format: \"env\";\n /** When `true`, omit the `export` keyword from each line. */\n noExport?: boolean;\n}\n\n// \u2500\u2500 Errors \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/**\n * Base error class for all Clef errors.\n * Carries an optional `fix` hint string describing how to resolve the issue.\n */\nexport class ClefError extends Error {\n constructor(\n message: string,\n public readonly fix?: string,\n ) {\n super(message);\n this.name = \"ClefError\";\n }\n}\n\n/** Thrown when `clef.yaml` fails parsing or schema validation. */\nexport class ManifestValidationError extends ClefError {\n constructor(\n message: string,\n public readonly field?: string,\n ) {\n super(message, field ? `Check the '${field}' field in clef.yaml` : undefined);\n this.name = \"ManifestValidationError\";\n }\n}\n\n/** Thrown when SOPS decryption fails (bad key, corrupt file, etc.). */\nexport class SopsDecryptionError extends ClefError {\n constructor(\n message: string,\n public readonly filePath?: string,\n ) {\n super(\n message,\n filePath\n ? `Ensure you have the correct key configured to decrypt '${filePath}'`\n : \"Ensure your SOPS key is configured correctly\",\n );\n this.name = \"SopsDecryptionError\";\n }\n}\n\n/** Thrown when SOPS encryption or re-encryption fails. */\nexport class SopsEncryptionError extends ClefError {\n constructor(\n message: string,\n public readonly filePath?: string,\n ) {\n super(\n message,\n filePath\n ? `Check your SOPS configuration and key access for '${filePath}'`\n : \"Check your SOPS configuration\",\n );\n this.name = \"SopsEncryptionError\";\n }\n}\n\n/** Thrown when no decryption key is found in the environment. */\nexport class SopsKeyNotFoundError extends ClefError {\n constructor(message: string) {\n super(message, \"Ensure your age key file exists and CLEF_AGE_KEY_FILE is set correctly\");\n this.name = \"SopsKeyNotFoundError\";\n }\n}\n\n/** Thrown when a git subprocess fails. */\nexport class GitOperationError extends ClefError {\n constructor(message: string, fix?: string) {\n super(message, fix ?? \"Ensure you are inside a git repository\");\n this.name = \"GitOperationError\";\n }\n}\n\n/** Thrown when a namespace schema file cannot be read or parsed. */\nexport class SchemaLoadError extends ClefError {\n constructor(\n message: string,\n public readonly filePath?: string,\n ) {\n super(\n message,\n filePath ? `Check the schema file at '${filePath}'` : \"Check your schema file syntax\",\n );\n this.name = \"SchemaLoadError\";\n }\n}\n\n// \u2500\u2500 Dependency errors \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Thrown when the `sops` binary is not installed. */\nexport class SopsMissingError extends ClefError {\n constructor(public readonly installHint: string) {\n super(\n \"sops is not installed.\",\n `Install it with: ${installHint}\\nThen run clef doctor to verify your setup.`,\n );\n this.name = \"SopsMissingError\";\n }\n}\n\n/** Thrown when the installed `sops` version is older than the minimum required. */\nexport class SopsVersionError extends ClefError {\n constructor(\n public readonly installed: string,\n public readonly required: string,\n public readonly installHint: string,\n ) {\n super(\n `sops v${installed} is installed but Clef requires v${required} or later.`,\n `Upgrade with: ${installHint}\\nThen run clef doctor to verify your setup.`,\n );\n this.name = \"SopsVersionError\";\n }\n}\n\n// \u2500\u2500 KMS Envelope Encryption \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport type KmsProviderType = \"aws\" | \"gcp\" | \"azure\";\n\nexport interface KmsConfig {\n provider: KmsProviderType;\n keyId: string;\n region?: string;\n}\n\n// \u2500\u2500 Service Identity \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Per-environment config for a service identity: either age-only or KMS envelope. */\nexport interface ServiceIdentityEnvironmentConfig {\n /** Age public key (age-only path). Mutually exclusive with `kms`. */\n recipient?: string;\n /** KMS envelope encryption config. Mutually exclusive with `recipient`. */\n kms?: KmsConfig;\n /** Public key for artifact signature verification (base64-encoded DER SPKI). */\n verifyKey?: string;\n}\n\n/** Type guard: returns true when the environment config uses KMS envelope encryption. */\nexport function isKmsEnvelope(\n cfg: ServiceIdentityEnvironmentConfig,\n): cfg is ServiceIdentityEnvironmentConfig & { kms: KmsConfig } {\n return cfg.kms !== undefined;\n}\n\n/** A machine-oriented identity with scoped namespace access and per-environment age keys. */\nexport interface ServiceIdentityDefinition {\n name: string;\n description: string;\n namespaces: string[];\n environments: Record<string, ServiceIdentityEnvironmentConfig>;\n}\n\n/** A drift issue detected in a service identity configuration. */\nexport interface ServiceIdentityDriftIssue {\n identity: string;\n environment?: string;\n namespace?: string;\n type:\n | \"missing_environment\"\n | \"scope_mismatch\"\n | \"recipient_not_registered\"\n | \"orphaned_recipient\"\n | \"namespace_not_found\";\n message: string;\n fixCommand?: string;\n}\n\n// \u2500\u2500 Cross-repo drift detection \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** A single drift issue: a key present in some environments but missing from others. */\nexport interface DriftIssue {\n namespace: string;\n key: string;\n /** Environment names where the key exists. */\n presentIn: string[];\n /** Environment names where the key is missing. */\n missingFrom: string[];\n message: string;\n}\n\n/** Result of comparing key sets across two local Clef repos without decryption. */\nexport interface DriftResult {\n issues: DriftIssue[];\n namespacesCompared: number;\n namespacesClean: number;\n localEnvironments: string[];\n remoteEnvironments: string[];\n}\n\n// \u2500\u2500 Dependency check types \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Version check result for a single external dependency. */\nexport interface DependencyVersion {\n /** Installed version string, e.g. `\"3.9.1\"`. */\n installed: string;\n /** Minimum required version string. */\n required: string;\n /** `true` when `installed >= required`. */\n satisfied: boolean;\n /** Platform-appropriate install/upgrade command hint. */\n installHint: string;\n /** How the binary was resolved: env override, bundled package, or system PATH. */\n source?: \"env\" | \"bundled\" | \"system\";\n /** Resolved path to the binary. */\n resolvedPath?: string;\n}\n\n/** Combined dependency check result for all required external tools. */\nexport interface DependencyStatus {\n /** `null` if `sops` is not installed or version could not be parsed. */\n sops: DependencyVersion | null;\n /** `null` if `git` is not installed or version could not be parsed. */\n git: DependencyVersion | null;\n}\n\n// \u2500\u2500 Report \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Schema version for {@link ClefReport}. Increment when the shape changes. */\nexport const CLEF_REPORT_SCHEMA_VERSION = 1;\n\n/** Repository identity fields included at the top of every report. */\nexport interface ReportRepoIdentity {\n repoOrigin: string;\n commitSha: string;\n branch: string;\n commitTimestamp: string;\n reportGeneratedAt: string;\n clefVersion: string;\n sopsVersion: string | null;\n}\n\n/** Manifest structure summary included in a report. */\nexport interface ReportManifestStructure {\n manifestVersion: number;\n filePattern: string;\n environments: { name: string; protected: boolean }[];\n namespaces: { name: string; hasSchema: boolean; owners: string[] }[];\n defaultBackend: string;\n}\n\n/** SOPS metadata for a single matrix cell. */\nexport interface ReportCellMetadata {\n backend: string;\n recipients: string[];\n lastModified: string | null;\n}\n\n/** A single cell in the matrix as represented in a report. */\nexport interface ReportMatrixCell {\n namespace: string;\n environment: string;\n filePath: string;\n exists: boolean;\n keyCount: number;\n pendingCount: number;\n metadata: ReportCellMetadata | null;\n}\n\n/** A sanitized policy issue \u2014 key names are never present. */\nexport interface ReportPolicyIssue {\n severity: LintSeverity;\n category: string;\n file?: string;\n namespace?: string;\n environment?: string;\n message: string;\n count?: number;\n driftCount?: number;\n sourceEnvironment?: string;\n targetEnvironment?: string;\n}\n\n/** Aggregated counts of policy issues by severity. */\nexport interface ReportIssueCounts {\n error: number;\n warning: number;\n info: number;\n}\n\n/** Policy section of a report: aggregated counts and sanitized issues. */\nexport interface ReportPolicy {\n issueCount: ReportIssueCounts;\n issues: ReportPolicyIssue[];\n}\n\n/** Summary of a single recipient across all matrix cells. */\nexport interface ReportRecipientSummary {\n type: string;\n environments: string[];\n fileCount: number;\n}\n\n/** Top-level structure for a `clef report` output. */\nexport interface ClefReport {\n schemaVersion: number;\n repoIdentity: ReportRepoIdentity;\n manifest: ReportManifestStructure;\n matrix: ReportMatrixCell[];\n policy: ReportPolicy;\n recipients: Record<string, ReportRecipientSummary>;\n}\n\n// \u2500\u2500 Cloud API types \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Health status for a single matrix cell in a cloud report. */\nexport type CloudCellHealthStatus = \"healthy\" | \"warning\" | \"critical\" | \"unknown\";\n\n/** A single cell summary sent to the Cloud API. */\nexport interface CloudReportCell {\n namespace: string;\n environment: string;\n healthStatus: CloudCellHealthStatus;\n description: string;\n}\n\n/** Summary section of a cloud API report. */\nexport interface CloudReportSummary {\n filesScanned: number;\n namespaces: string[];\n environments: string[];\n cells: CloudReportCell[];\n violations: number;\n passed: boolean;\n}\n\n/** Drift entry for a single namespace in a cloud report. */\nexport interface CloudReportDrift {\n namespace: string;\n isDrifted: boolean;\n driftCount: number;\n}\n\n/** A single policy result in a cloud report. */\nexport interface CloudPolicyResult {\n ruleId: string;\n ruleName: string;\n passed: boolean;\n severity: string;\n message: string;\n scope?: { namespace?: string; environment?: string };\n}\n\n/** CI context attached to cloud reports when collectCIContext is enabled. */\nexport interface CloudCIContext {\n provider: string;\n pipelineUrl?: string;\n trigger?: string;\n}\n\n/** The report payload sent to the Cloud API. */\nexport interface CloudApiReport {\n commitSha: string;\n branch: string;\n commitTimestamp: number;\n cliVersion: string;\n summary: CloudReportSummary;\n drift: CloudReportDrift[];\n policyResults: CloudPolicyResult[];\n ciContext?: CloudCIContext;\n}\n\n/** Batch payload for backfill submissions (max 500, oldest\u2192newest). */\nexport interface CloudBatchPayload {\n reports: CloudApiReport[];\n}\n\n/** Response from GET /api/v1/integrations/:integrationId. */\nexport interface CloudIntegrationResponse {\n lastCommitSha: string | null;\n config: {\n collectCIContext: boolean;\n };\n}\n\n/** Response from POST /api/v1/reports. */\nexport interface CloudReportResponse {\n id: string;\n commitSha: string;\n}\n\n/** Response from POST /api/v1/reports/batch. */\nexport interface CloudBatchResponse {\n accepted: number;\n reportIds: string[];\n}\n\n/** Thrown when a Clef Pro API request fails. */\nexport class CloudApiError extends ClefError {\n constructor(\n message: string,\n public readonly statusCode: number,\n fix?: string,\n ) {\n super(message, fix);\n this.name = \"CloudApiError\";\n }\n}\n", "/**\n * TIER 1 MODULE \u2014 Security and correctness critical.\n *\n * This module requires exhaustive test coverage. Before\n * adding or modifying code here:\n * 1. Add tests for the happy path\n * 2. Add tests for all documented error paths\n * 3. Add at least one boundary/edge case test\n *\n * Coverage threshold: 95% lines/functions, 90% branches.\n * See docs/contributing/testing.md for the rationale.\n */\nimport * as fs from \"fs\";\nimport * as YAML from \"yaml\";\nimport {\n ClefManifest,\n ClefCloudConfig,\n ClefEnvironment,\n ManifestValidationError,\n ServiceIdentityDefinition,\n ServiceIdentityEnvironmentConfig,\n} from \"../types\";\nimport { validateAgePublicKey } from \"../recipients/validator\";\n\n/**\n * Canonical filename for the Clef manifest.\n * All code that references this filename must import this constant.\n */\nexport const CLEF_MANIFEST_FILENAME = \"clef.yaml\";\n\nconst VALID_BACKENDS = [\"age\", \"awskms\", \"gcpkms\", \"azurekv\", \"pgp\"] as const;\nconst VALID_TOP_LEVEL_KEYS = [\n \"version\",\n \"environments\",\n \"namespaces\",\n \"sops\",\n \"file_pattern\",\n \"service_identities\",\n \"cloud\",\n];\n/** Shared pattern for environment and namespace names. */\nconst ENV_NAME_PATTERN = /^[a-z][a-z0-9_-]*$/;\nconst FILE_PATTERN_REQUIRED_TOKENS = [\"{namespace}\", \"{environment}\"];\n\n/**\n * Parses and validates `clef.yaml` manifest files.\n *\n * @example\n * ```ts\n * const parser = new ManifestParser();\n * const manifest = parser.parse(\"/path/to/clef.yaml\");\n * ```\n */\nexport class ManifestParser {\n /**\n * Read and validate a `clef.yaml` file from disk.\n *\n * @param filePath - Absolute or relative path to the manifest file.\n * @returns Validated {@link ClefManifest}.\n * @throws {@link ManifestValidationError} If the file cannot be read, contains invalid YAML,\n * or fails schema validation.\n */\n parse(filePath: string): ClefManifest {\n let raw: string;\n try {\n raw = fs.readFileSync(filePath, \"utf-8\");\n } catch {\n throw new ManifestValidationError(\n `Could not read manifest file at '${filePath}'. Run 'clef init' to create one.`,\n );\n }\n\n let parsed: unknown;\n try {\n parsed = YAML.parse(raw);\n } catch {\n throw new ManifestValidationError(\n \"Manifest file contains invalid YAML. Check for syntax errors in clef.yaml.\",\n );\n }\n\n return this.validate(parsed);\n }\n\n /**\n * Validate an already-parsed object against the manifest schema.\n *\n * @param input - Raw value returned by `YAML.parse`.\n * @returns Validated {@link ClefManifest}.\n * @throws {@link ManifestValidationError} On any schema violation.\n */\n validate(input: unknown): ClefManifest {\n if (input === null || input === undefined || typeof input !== \"object\") {\n throw new ManifestValidationError(\n \"Manifest must be a YAML object, not null or a scalar value.\",\n \"root\",\n );\n }\n\n const obj = input as Record<string, unknown>;\n\n // Check for unknown top-level keys\n for (const key of Object.keys(obj)) {\n if (!VALID_TOP_LEVEL_KEYS.includes(key)) {\n throw new ManifestValidationError(\n `Unknown top-level key '${key}' in manifest. Valid keys are: ${VALID_TOP_LEVEL_KEYS.join(\", \")}.`,\n key,\n );\n }\n }\n\n // version\n if (obj.version === undefined) {\n throw new ManifestValidationError(\"Missing required field 'version'.\", \"version\");\n }\n if (typeof obj.version !== \"number\" || obj.version !== 1) {\n throw new ManifestValidationError(\n \"Field 'version' must be 1. Only version 1 is currently supported.\",\n \"version\",\n );\n }\n\n // environments\n if (!obj.environments) {\n throw new ManifestValidationError(\n \"Missing required field 'environments'. Define at least one environment.\",\n \"environments\",\n );\n }\n if (!Array.isArray(obj.environments) || obj.environments.length === 0) {\n throw new ManifestValidationError(\n \"Field 'environments' must be a non-empty array.\",\n \"environments\",\n );\n }\n const environments: ClefEnvironment[] = obj.environments.map((env: unknown, i: number) => {\n if (typeof env !== \"object\" || env === null) {\n throw new ManifestValidationError(\n `Environment at index ${i} must be an object with 'name' and 'description'.`,\n \"environments\",\n );\n }\n const envObj = env as Record<string, unknown>;\n if (!envObj.name || typeof envObj.name !== \"string\") {\n throw new ManifestValidationError(\n `Environment at index ${i} is missing a 'name' string.`,\n \"environments\",\n );\n }\n if (!ENV_NAME_PATTERN.test(envObj.name)) {\n throw new ManifestValidationError(\n `Environment name '${envObj.name}' is invalid. Names must start with a lowercase letter and contain only lowercase letters, digits, hyphens, and underscores.`,\n \"environments\",\n );\n }\n if (!envObj.description || typeof envObj.description !== \"string\") {\n throw new ManifestValidationError(\n `Environment '${envObj.name}' is missing a 'description' string.`,\n \"environments\",\n );\n }\n\n const result: ClefEnvironment = {\n name: envObj.name,\n description: envObj.description,\n ...(typeof envObj.protected === \"boolean\" ? { protected: envObj.protected } : {}),\n };\n\n // Parse optional per-environment sops override\n if (envObj.sops !== undefined) {\n if (typeof envObj.sops !== \"object\" || envObj.sops === null) {\n throw new ManifestValidationError(\n `Environment '${envObj.name}' has an invalid 'sops' field. It must be an object.`,\n \"environments\",\n );\n }\n const sopsOverride = envObj.sops as Record<string, unknown>;\n if (!sopsOverride.backend || typeof sopsOverride.backend !== \"string\") {\n throw new ManifestValidationError(\n `Environment '${envObj.name}' sops override is missing 'backend'. Must be one of: ${VALID_BACKENDS.join(\", \")}.`,\n \"environments\",\n );\n }\n if (!(VALID_BACKENDS as readonly string[]).includes(sopsOverride.backend)) {\n throw new ManifestValidationError(\n `Environment '${envObj.name}' has invalid sops backend '${sopsOverride.backend}'. Must be one of: ${VALID_BACKENDS.join(\", \")}.`,\n \"environments\",\n );\n }\n const backend = sopsOverride.backend as (typeof VALID_BACKENDS)[number];\n\n // Validate required fields per backend\n if (backend === \"awskms\" && typeof sopsOverride.aws_kms_arn !== \"string\") {\n throw new ManifestValidationError(\n `Environment '${envObj.name}' uses 'awskms' backend but is missing 'aws_kms_arn'.`,\n \"environments\",\n );\n }\n if (backend === \"gcpkms\" && typeof sopsOverride.gcp_kms_resource_id !== \"string\") {\n throw new ManifestValidationError(\n `Environment '${envObj.name}' uses 'gcpkms' backend but is missing 'gcp_kms_resource_id'.`,\n \"environments\",\n );\n }\n if (backend === \"azurekv\" && typeof sopsOverride.azure_kv_url !== \"string\") {\n throw new ManifestValidationError(\n `Environment '${envObj.name}' uses 'azurekv' backend but is missing 'azure_kv_url'.`,\n \"environments\",\n );\n }\n if (backend === \"pgp\" && typeof sopsOverride.pgp_fingerprint !== \"string\") {\n throw new ManifestValidationError(\n `Environment '${envObj.name}' uses 'pgp' backend but is missing 'pgp_fingerprint'.`,\n \"environments\",\n );\n }\n\n result.sops = {\n backend,\n ...(typeof sopsOverride.aws_kms_arn === \"string\"\n ? { aws_kms_arn: sopsOverride.aws_kms_arn }\n : {}),\n ...(typeof sopsOverride.gcp_kms_resource_id === \"string\"\n ? { gcp_kms_resource_id: sopsOverride.gcp_kms_resource_id }\n : {}),\n ...(typeof sopsOverride.azure_kv_url === \"string\"\n ? { azure_kv_url: sopsOverride.azure_kv_url }\n : {}),\n ...(typeof sopsOverride.pgp_fingerprint === \"string\"\n ? { pgp_fingerprint: sopsOverride.pgp_fingerprint }\n : {}),\n };\n }\n\n // Parse optional per-environment recipients\n if (envObj.recipients !== undefined) {\n if (!Array.isArray(envObj.recipients)) {\n throw new ManifestValidationError(\n `Environment '${envObj.name}' has an invalid 'recipients' field. It must be an array.`,\n \"environments\",\n );\n }\n const parsedRecipients: (string | { key: string; label?: string })[] = [];\n for (let ri = 0; ri < envObj.recipients.length; ri++) {\n const entry = envObj.recipients[ri];\n if (typeof entry === \"string\") {\n const validation = validateAgePublicKey(entry);\n if (!validation.valid) {\n throw new ManifestValidationError(\n `Environment '${envObj.name}' recipient at index ${ri}: ${validation.error}`,\n \"environments\",\n );\n }\n parsedRecipients.push(validation.key!);\n } else if (typeof entry === \"object\" && entry !== null) {\n const entryObj = entry as Record<string, unknown>;\n if (typeof entryObj.key !== \"string\") {\n throw new ManifestValidationError(\n `Environment '${envObj.name}' recipient at index ${ri} must have a 'key' string.`,\n \"environments\",\n );\n }\n const validation = validateAgePublicKey(entryObj.key);\n if (!validation.valid) {\n throw new ManifestValidationError(\n `Environment '${envObj.name}' recipient at index ${ri}: ${validation.error}`,\n \"environments\",\n );\n }\n const recipientObj: { key: string; label?: string } = { key: validation.key! };\n if (typeof entryObj.label === \"string\") {\n recipientObj.label = entryObj.label;\n }\n parsedRecipients.push(recipientObj);\n } else {\n throw new ManifestValidationError(\n `Environment '${envObj.name}' recipient at index ${ri} must be a string or object.`,\n \"environments\",\n );\n }\n }\n if (parsedRecipients.length > 0) {\n result.recipients = parsedRecipients;\n }\n }\n\n return result;\n });\n\n // Check for duplicate environment names\n const envNames = new Set<string>();\n for (const env of environments) {\n if (envNames.has(env.name)) {\n throw new ManifestValidationError(\n `Duplicate environment name '${env.name}'. Each environment must have a unique name.`,\n \"environments\",\n );\n }\n envNames.add(env.name);\n }\n\n // namespaces\n // Design decision: all namespaces are encrypted. There is no `encrypted: false`\n // option on namespace definitions. This is intentional \u2014 see docs/guide/concepts.md\n // \"Design decision: all namespaces are encrypted\" for the full rationale.\n if (!obj.namespaces) {\n throw new ManifestValidationError(\n \"Missing required field 'namespaces'. Define at least one namespace.\",\n \"namespaces\",\n );\n }\n if (!Array.isArray(obj.namespaces) || obj.namespaces.length === 0) {\n throw new ManifestValidationError(\n \"Field 'namespaces' must be a non-empty array.\",\n \"namespaces\",\n );\n }\n const namespaces = obj.namespaces.map((ns: unknown, i: number) => {\n if (typeof ns !== \"object\" || ns === null) {\n throw new ManifestValidationError(\n `Namespace at index ${i} must be an object with 'name' and 'description'.`,\n \"namespaces\",\n );\n }\n const nsObj = ns as Record<string, unknown>;\n if (!nsObj.name || typeof nsObj.name !== \"string\") {\n throw new ManifestValidationError(\n `Namespace at index ${i} is missing a 'name' string.`,\n \"namespaces\",\n );\n }\n if (!ENV_NAME_PATTERN.test(nsObj.name)) {\n throw new ManifestValidationError(\n `Namespace name '${nsObj.name}' is invalid. Names must start with a lowercase letter and contain only lowercase letters, digits, hyphens, and underscores.`,\n \"namespaces\",\n );\n }\n if (!nsObj.description || typeof nsObj.description !== \"string\") {\n throw new ManifestValidationError(\n `Namespace '${nsObj.name}' is missing a 'description' string.`,\n \"namespaces\",\n );\n }\n return {\n name: nsObj.name,\n description: nsObj.description,\n ...(typeof nsObj.schema === \"string\" ? { schema: nsObj.schema } : {}),\n ...(Array.isArray(nsObj.owners) ? { owners: nsObj.owners as string[] } : {}),\n };\n });\n\n // Check for duplicate namespace names\n const nsNames = new Set<string>();\n for (const ns of namespaces) {\n if (nsNames.has(ns.name)) {\n throw new ManifestValidationError(\n `Duplicate namespace name '${ns.name}'. Each namespace must have a unique name.`,\n \"namespaces\",\n );\n }\n nsNames.add(ns.name);\n }\n\n // sops\n if (!obj.sops) {\n throw new ManifestValidationError(\n \"Missing required field 'sops'. Configure at least 'default_backend'.\",\n \"sops\",\n );\n }\n if (typeof obj.sops !== \"object\" || obj.sops === null) {\n throw new ManifestValidationError(\"Field 'sops' must be an object.\", \"sops\");\n }\n const sopsObj = obj.sops as Record<string, unknown>;\n if (!sopsObj.default_backend || typeof sopsObj.default_backend !== \"string\") {\n throw new ManifestValidationError(\n \"Field 'sops.default_backend' is required and must be one of: age, awskms, gcpkms, azurekv, pgp.\",\n \"sops.default_backend\",\n );\n }\n if (!(VALID_BACKENDS as readonly string[]).includes(sopsObj.default_backend)) {\n throw new ManifestValidationError(\n `Invalid sops.default_backend '${sopsObj.default_backend}'. Must be one of: ${VALID_BACKENDS.join(\", \")}.`,\n \"sops.default_backend\",\n );\n }\n\n const sopsConfig = {\n default_backend: sopsObj.default_backend as (typeof VALID_BACKENDS)[number],\n ...(typeof sopsObj.aws_kms_arn === \"string\" ? { aws_kms_arn: sopsObj.aws_kms_arn } : {}),\n ...(typeof sopsObj.gcp_kms_resource_id === \"string\"\n ? { gcp_kms_resource_id: sopsObj.gcp_kms_resource_id }\n : {}),\n ...(typeof sopsObj.azure_kv_url === \"string\" ? { azure_kv_url: sopsObj.azure_kv_url } : {}),\n ...(typeof sopsObj.pgp_fingerprint === \"string\"\n ? { pgp_fingerprint: sopsObj.pgp_fingerprint }\n : {}),\n };\n\n // Post-processing: validate per-env recipients are only used with age backend\n for (const env of environments) {\n if (env.recipients && env.recipients.length > 0) {\n const effectiveBackend = env.sops?.backend ?? sopsConfig.default_backend;\n if (effectiveBackend !== \"age\") {\n throw new ManifestValidationError(\n `Environment '${env.name}' has per-environment recipients but uses '${effectiveBackend}' backend. Per-environment recipients are only supported with the 'age' backend.`,\n \"environments\",\n );\n }\n }\n }\n\n // file_pattern\n if (!obj.file_pattern || typeof obj.file_pattern !== \"string\") {\n throw new ManifestValidationError(\n \"Missing required field 'file_pattern'. Example: '{namespace}/{environment}.enc.yaml'.\",\n \"file_pattern\",\n );\n }\n for (const token of FILE_PATTERN_REQUIRED_TOKENS) {\n if (!obj.file_pattern.includes(token)) {\n throw new ManifestValidationError(\n `file_pattern must contain '${token}'. Got: '${obj.file_pattern}'.`,\n \"file_pattern\",\n );\n }\n }\n\n // service_identities (optional)\n let serviceIdentities: ServiceIdentityDefinition[] | undefined;\n if (obj.service_identities !== undefined) {\n if (!Array.isArray(obj.service_identities)) {\n throw new ManifestValidationError(\n \"Field 'service_identities' must be an array.\",\n \"service_identities\",\n );\n }\n serviceIdentities = obj.service_identities.map((si: unknown, i: number) => {\n if (typeof si !== \"object\" || si === null) {\n throw new ManifestValidationError(\n `Service identity at index ${i} must be an object.`,\n \"service_identities\",\n );\n }\n const siObj = si as Record<string, unknown>;\n\n if (!siObj.name || typeof siObj.name !== \"string\") {\n throw new ManifestValidationError(\n `Service identity at index ${i} is missing a 'name' string.`,\n \"service_identities\",\n );\n }\n const siName = siObj.name;\n\n if (siObj.description != null && typeof siObj.description !== \"string\") {\n throw new ManifestValidationError(\n `Service identity '${siName}' has a non-string 'description'.`,\n \"service_identities\",\n );\n }\n\n // namespaces\n if (!Array.isArray(siObj.namespaces) || siObj.namespaces.length === 0) {\n throw new ManifestValidationError(\n `Service identity '${siName}' must have a non-empty 'namespaces' array.`,\n \"service_identities\",\n );\n }\n for (const ns of siObj.namespaces) {\n if (typeof ns !== \"string\") {\n throw new ManifestValidationError(\n `Service identity '${siName}' has a non-string entry in 'namespaces'.`,\n \"service_identities\",\n );\n }\n if (!nsNames.has(ns)) {\n throw new ManifestValidationError(\n `Service identity '${siName}' references unknown namespace '${ns}'.`,\n \"service_identities\",\n );\n }\n }\n\n // environments\n if (\n !siObj.environments ||\n typeof siObj.environments !== \"object\" ||\n Array.isArray(siObj.environments)\n ) {\n throw new ManifestValidationError(\n `Service identity '${siName}' must have an 'environments' object.`,\n \"service_identities\",\n );\n }\n const siEnvs = siObj.environments as Record<string, unknown>;\n const parsedEnvs: Record<string, ServiceIdentityEnvironmentConfig> = {};\n\n // Validate that all declared environments are covered\n for (const env of environments) {\n if (!(env.name in siEnvs)) {\n throw new ManifestValidationError(\n `Service identity '${siName}' is missing environment '${env.name}'. Service identities must cover all declared environments.`,\n \"service_identities\",\n );\n }\n }\n\n for (const [envName, envVal] of Object.entries(siEnvs)) {\n if (!envNames.has(envName)) {\n throw new ManifestValidationError(\n `Service identity '${siName}' references unknown environment '${envName}'.`,\n \"service_identities\",\n );\n }\n if (typeof envVal !== \"object\" || envVal === null) {\n throw new ManifestValidationError(\n `Service identity '${siName}' environment '${envName}' must be an object with 'recipient' or 'kms'.`,\n \"service_identities\",\n );\n }\n const envObj = envVal as Record<string, unknown>;\n const hasRecipient = envObj.recipient !== undefined;\n const hasKms = envObj.kms !== undefined;\n\n if (hasRecipient && hasKms) {\n throw new ManifestValidationError(\n `Service identity '${siName}' environment '${envName}': 'recipient' and 'kms' are mutually exclusive.`,\n \"service_identities\",\n );\n }\n if (!hasRecipient && !hasKms) {\n throw new ManifestValidationError(\n `Service identity '${siName}' environment '${envName}' must have either 'recipient' or 'kms'.`,\n \"service_identities\",\n );\n }\n\n if (hasRecipient) {\n if (typeof envObj.recipient !== \"string\") {\n throw new ManifestValidationError(\n `Service identity '${siName}' environment '${envName}': 'recipient' must be a string.`,\n \"service_identities\",\n );\n }\n const recipientValidation = validateAgePublicKey(envObj.recipient);\n if (!recipientValidation.valid) {\n throw new ManifestValidationError(\n `Service identity '${siName}' environment '${envName}': ${recipientValidation.error}`,\n \"service_identities\",\n );\n }\n parsedEnvs[envName] = { recipient: recipientValidation.key! };\n } else {\n const kmsObj = envObj.kms as Record<string, unknown>;\n if (typeof kmsObj !== \"object\" || kmsObj === null) {\n throw new ManifestValidationError(\n `Service identity '${siName}' environment '${envName}': 'kms' must be an object.`,\n \"service_identities\",\n );\n }\n const validProviders = [\"aws\", \"gcp\", \"azure\"];\n if (!kmsObj.provider || !validProviders.includes(kmsObj.provider as string)) {\n throw new ManifestValidationError(\n `Service identity '${siName}' environment '${envName}': kms.provider must be one of: ${validProviders.join(\", \")}.`,\n \"service_identities\",\n );\n }\n if (!kmsObj.keyId || typeof kmsObj.keyId !== \"string\") {\n throw new ManifestValidationError(\n `Service identity '${siName}' environment '${envName}': kms.keyId must be a non-empty string.`,\n \"service_identities\",\n );\n }\n parsedEnvs[envName] = {\n kms: {\n provider: kmsObj.provider as \"aws\" | \"gcp\" | \"azure\",\n keyId: kmsObj.keyId,\n region: typeof kmsObj.region === \"string\" ? kmsObj.region : undefined,\n },\n };\n }\n }\n\n return {\n name: siName,\n description: (siObj.description as string) ?? \"\",\n namespaces: siObj.namespaces as string[],\n environments: parsedEnvs,\n };\n });\n\n // Check for duplicate identity names\n const siNames = new Set<string>();\n for (const si of serviceIdentities) {\n if (siNames.has(si.name)) {\n throw new ManifestValidationError(\n `Duplicate service identity name '${si.name}'.`,\n \"service_identities\",\n );\n }\n siNames.add(si.name);\n }\n }\n\n // cloud (optional)\n let cloud: ClefCloudConfig | undefined;\n if (obj.cloud !== undefined) {\n if (typeof obj.cloud !== \"object\" || obj.cloud === null || Array.isArray(obj.cloud)) {\n throw new ManifestValidationError(\"Field 'cloud' must be an object.\", \"cloud\");\n }\n const cloudObj = obj.cloud as Record<string, unknown>;\n if (typeof cloudObj.integrationId !== \"string\" || cloudObj.integrationId.length === 0) {\n throw new ManifestValidationError(\n \"Field 'cloud.integrationId' is required and must be a non-empty string.\",\n \"cloud\",\n );\n }\n cloud = { integrationId: cloudObj.integrationId };\n }\n\n return {\n version: 1,\n environments,\n namespaces,\n sops: sopsConfig,\n file_pattern: obj.file_pattern,\n ...(serviceIdentities ? { service_identities: serviceIdentities } : {}),\n ...(cloud ? { cloud } : {}),\n };\n }\n\n /**\n * Watch a manifest file for changes and invoke a callback on each successful parse.\n *\n * @param filePath - Path to the manifest file to watch.\n * @param onChange - Called with the newly parsed manifest on each valid change.\n * @returns Unsubscribe function \u2014 call it to stop watching.\n */\n watch(filePath: string, onChange: (manifest: ClefManifest) => void): () => void {\n const watcher = fs.watch(filePath, () => {\n try {\n const manifest = this.parse(filePath);\n onChange(manifest);\n } catch {\n // Ignore parse errors during watch \u2014 file may be mid-save\n }\n });\n\n return () => {\n watcher.close();\n };\n }\n}\n", "export interface AgeKeyValidation {\n valid: boolean;\n key?: string;\n error?: string;\n}\n\nconst BECH32_CHARSET = \"qpzry9x8gf2tvdw0s3jn54khce6mua7l\";\nconst AGE_PREFIX = \"age1\";\nconst MIN_LENGTH = 10;\n\n/**\n * Validate that a string is a well-formed age public key (bech32, `age1` prefix).\n *\n * @param input - The string to validate.\n * @returns `{ valid: true, key: trimmedKey }` or `{ valid: false, error: message }`.\n */\nexport function validateAgePublicKey(input: string): AgeKeyValidation {\n const trimmed = input.trim();\n\n if (!trimmed.startsWith(AGE_PREFIX)) {\n return {\n valid: false,\n error: `age public key must start with '${AGE_PREFIX}'. Got: '${trimmed.slice(0, 10)}...'`,\n };\n }\n\n if (trimmed.length < MIN_LENGTH) {\n return {\n valid: false,\n error: `age public key is too short. Expected at least ${MIN_LENGTH} characters, got ${trimmed.length}.`,\n };\n }\n\n const body = trimmed.slice(AGE_PREFIX.length);\n for (const ch of body) {\n if (!BECH32_CHARSET.includes(ch)) {\n return {\n valid: false,\n error: `Invalid character '${ch}' in age public key. Only bech32 characters are allowed after the 'age1' prefix.`,\n };\n }\n }\n\n return { valid: true, key: trimmed };\n}\n\n/**\n * Return a short display preview of an age public key: `age1\u2026last8chars`.\n *\n * @param key - Full age public key string.\n */\nexport function keyPreview(key: string): string {\n const last8 = key.slice(-8);\n return `age1\\u2026${last8}`;\n}\n", "import * as fs from \"fs\";\nimport * as path from \"path\";\nimport type { ClefManifest, SubprocessRunner } from \"../types\";\nimport { matchPatterns, isHighEntropy, shannonEntropy, redactValue, ScanMatch } from \"./patterns\";\nimport { loadIgnoreRules, shouldIgnoreFile, shouldIgnoreMatch } from \"./ignore\";\n\nexport type { ScanMatch } from \"./patterns\";\nexport type { ClefIgnoreRules } from \"./ignore\";\nexport { shannonEntropy, isHighEntropy, matchPatterns, redactValue } from \"./patterns\";\nexport { loadIgnoreRules, shouldIgnoreFile, shouldIgnoreMatch, parseIgnoreContent } from \"./ignore\";\n\nexport interface ScanResult {\n matches: ScanMatch[];\n filesScanned: number;\n filesSkipped: number;\n unencryptedMatrixFiles: string[];\n durationMs: number;\n}\n\nexport interface ScanOptions {\n stagedOnly?: boolean;\n paths?: string[];\n severity?: \"all\" | \"high\";\n}\n\nconst ALWAYS_SKIP_EXTENSIONS = [\".enc.yaml\", \".enc.json\"] as const;\nconst ALWAYS_SKIP_NAMES = [\n \".clef-meta.yaml\",\n \".sops.yaml\", // contains age public keys and KMS ARNs \u2014 configuration, not secrets\n] as const;\nconst ALWAYS_SKIP_DIRS = [\"node_modules\", \".git\"] as const;\nconst MAX_FILE_SIZE = 1024 * 1024; // 1 MB\n\n/**\n * Scans repository files for plaintext secrets using pattern matching and entropy detection.\n *\n * @example\n * ```ts\n * const scanner = new ScanRunner(runner);\n * const result = await scanner.scan(repoRoot, manifest, { stagedOnly: true });\n * ```\n */\nexport class ScanRunner {\n constructor(private readonly runner: SubprocessRunner) {}\n\n /**\n * Scan tracked (or staged) files for secret-like values and unencrypted matrix files.\n *\n * The scan respects `.clefignore` rules and inline `# clef-ignore` suppressions.\n *\n * @param repoRoot - Absolute path to the repository root.\n * @param manifest - Parsed manifest used to identify matrix file paths.\n * @param options - Optional scan filters.\n */\n async scan(\n repoRoot: string,\n manifest: ClefManifest,\n options: ScanOptions = {},\n ): Promise<ScanResult> {\n const startMs = Date.now();\n const ignoreRules = loadIgnoreRules(repoRoot);\n const matches: ScanMatch[] = [];\n const unencryptedMatrixFiles: string[] = [];\n let filesScanned = 0;\n let filesSkipped = 0;\n\n // \u2500\u2500 Check 1: unencrypted matrix files \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n for (const ns of manifest.namespaces) {\n for (const env of manifest.environments) {\n const relPath = manifest.file_pattern\n .replace(\"{namespace}\", ns.name)\n .replace(\"{environment}\", env.name);\n const absPath = path.join(repoRoot, relPath);\n if (fs.existsSync(absPath)) {\n const content = fs.readFileSync(absPath, \"utf-8\");\n if (!content.includes(\"sops:\") && !content.includes('\"sops\"')) {\n unencryptedMatrixFiles.push(relPath);\n }\n }\n }\n }\n\n // \u2500\u2500 Determine files to scan \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n let filesToScan: string[];\n if (options.stagedOnly) {\n filesToScan = await this.getStagedFiles(repoRoot);\n } else if (options.paths && options.paths.length > 0) {\n filesToScan = await this.getFilesInPaths(repoRoot, options.paths);\n } else {\n filesToScan = await this.getAllTrackedFiles(repoRoot);\n }\n\n // \u2500\u2500 Check 2: secret-looking values \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n for (const relFile of filesToScan) {\n const absFile = path.isAbsolute(relFile) ? relFile : path.join(repoRoot, relFile);\n const relPath = path.relative(repoRoot, absFile).replace(/\\\\/g, \"/\");\n\n if (this.shouldAlwaysSkip(relPath)) {\n filesSkipped++;\n continue;\n }\n\n if (shouldIgnoreFile(relPath, ignoreRules)) {\n filesSkipped++;\n continue;\n }\n\n if (!fs.existsSync(absFile)) {\n filesSkipped++;\n continue;\n }\n\n let stat: fs.Stats;\n try {\n stat = fs.statSync(absFile);\n } catch {\n filesSkipped++;\n continue;\n }\n\n if (stat.size > MAX_FILE_SIZE) {\n filesSkipped++;\n continue;\n }\n\n if (this.isBinary(absFile)) {\n filesSkipped++;\n continue;\n }\n\n filesScanned++;\n const content = fs.readFileSync(absFile, \"utf-8\");\n const lines = content.split(\"\\n\");\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const lineNum = i + 1;\n\n // Inline suppress: # clef-ignore on the same line\n if (line.includes(\"# clef-ignore\")) continue;\n\n // Pattern matching\n const patternHits = matchPatterns(line, lineNum, relPath);\n for (const m of patternHits) {\n if (!shouldIgnoreMatch(m, ignoreRules)) {\n matches.push(m);\n }\n }\n\n // Entropy detection (skip when severity === 'high')\n if (options.severity !== \"high\") {\n const entropyHit = this.detectEntropy(line, lineNum, relPath);\n if (entropyHit && !shouldIgnoreMatch(entropyHit, ignoreRules)) {\n matches.push(entropyHit);\n }\n }\n }\n }\n\n return {\n matches,\n filesScanned,\n filesSkipped,\n unencryptedMatrixFiles,\n durationMs: Date.now() - startMs,\n };\n }\n\n private shouldAlwaysSkip(relPath: string): boolean {\n for (const dir of ALWAYS_SKIP_DIRS) {\n if (relPath === dir || relPath.startsWith(dir + \"/\")) return true;\n }\n for (const ext of ALWAYS_SKIP_EXTENSIONS) {\n if (relPath.endsWith(ext)) return true;\n }\n for (const name of ALWAYS_SKIP_NAMES) {\n if (relPath.endsWith(name)) return true;\n }\n return false;\n }\n\n private isBinary(filePath: string): boolean {\n try {\n const fd = fs.openSync(filePath, \"r\");\n const buf = Buffer.alloc(512);\n const bytesRead = fs.readSync(fd, buf, 0, 512, 0);\n fs.closeSync(fd);\n for (let i = 0; i < bytesRead; i++) {\n if (buf[i] === 0) return true;\n }\n return false;\n } catch {\n return false;\n }\n }\n\n private detectEntropy(line: string, lineNum: number, filePath: string): ScanMatch | null {\n // Look for values appearing after = or : (assignment positions)\n const valuePattern = /(?:=|:\\s*)[\"']?([A-Za-z0-9+/=_-]{20,})[\"']?/;\n const match = valuePattern.exec(line);\n if (!match) return null;\n\n const value = match[1];\n const entropy = shannonEntropy(value);\n\n if (!isHighEntropy(value)) return null;\n\n // Extract variable name for the preview\n const varMatch = /(\\w+)\\s*(?:=|:)/.exec(line);\n const varName = varMatch ? varMatch[1] : \"\";\n const preview = varName\n ? `${varName}=\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022`\n : redactValue(value);\n\n return {\n file: filePath,\n line: lineNum,\n column: match.index + 1,\n matchType: \"entropy\",\n entropy,\n preview,\n };\n }\n\n private async getStagedFiles(repoRoot: string): Promise<string[]> {\n const result = await this.runner.run(\n \"git\",\n [\"diff\", \"--cached\", \"--name-only\", \"--diff-filter=ACM\"],\n { cwd: repoRoot },\n );\n if (result.exitCode !== 0 || !result.stdout.trim()) return [];\n return result.stdout.trim().split(\"\\n\");\n }\n\n private async getFilesInPaths(repoRoot: string, paths: string[]): Promise<string[]> {\n const files: string[] = [];\n for (const p of paths) {\n const absPath = path.isAbsolute(p) ? p : path.join(repoRoot, p);\n if (!fs.existsSync(absPath)) continue;\n const stat = fs.statSync(absPath);\n if (stat.isDirectory()) {\n files.push(...this.walkDir(absPath, repoRoot));\n } else {\n files.push(path.relative(repoRoot, absPath).replace(/\\\\/g, \"/\"));\n }\n }\n return files;\n }\n\n private async getAllTrackedFiles(repoRoot: string): Promise<string[]> {\n // Use git ls-files to respect .gitignore automatically\n const result = await this.runner.run(\"git\", [\"ls-files\"], { cwd: repoRoot });\n if (result.exitCode !== 0) {\n return this.walkDir(repoRoot, repoRoot);\n }\n return result.stdout.trim() ? result.stdout.trim().split(\"\\n\") : [];\n }\n\n private walkDir(dir: string, repoRoot: string): string[] {\n const files: string[] = [];\n let entries: fs.Dirent[];\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true });\n } catch {\n return files;\n }\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n const relPath = path.relative(repoRoot, fullPath).replace(/\\\\/g, \"/\");\n if (entry.isDirectory()) {\n if (!(ALWAYS_SKIP_DIRS as readonly string[]).includes(entry.name)) {\n files.push(...this.walkDir(fullPath, repoRoot));\n }\n } else {\n files.push(relPath);\n }\n }\n return files;\n }\n}\n", "/**\n * TIER 1 MODULE \u2014 Security and correctness critical.\n *\n * This module requires exhaustive test coverage. Before\n * adding or modifying code here:\n * 1. Add tests for the happy path\n * 2. Add tests for all documented error paths\n * 3. Add at least one boundary/edge case test\n *\n * Coverage threshold: 95% lines/functions, 90% branches.\n * See docs/contributing/testing.md for the rationale.\n */\nexport interface ScanMatch {\n file: string;\n line: number;\n column: number;\n matchType: \"pattern\" | \"entropy\";\n patternName?: string;\n entropy?: number;\n preview: string;\n}\n\ninterface PatternDef {\n name: string;\n regex: RegExp;\n}\n\nconst PATTERNS: PatternDef[] = [\n { name: \"AWS access key\", regex: /AKIA[0-9A-Z]{16}/ },\n { name: \"Stripe live key\", regex: /sk_live_[0-9a-zA-Z]{24,}/ },\n { name: \"Stripe test key\", regex: /sk_test_[0-9a-zA-Z]{24,}/ },\n { name: \"GitHub personal access token\", regex: /ghp_[0-9a-zA-Z]{36}/ },\n { name: \"GitHub OAuth token\", regex: /gho_[0-9a-zA-Z]{36}/ },\n { name: \"GitHub Actions token\", regex: /ghs_[0-9a-zA-Z]{36}/ },\n { name: \"Slack token\", regex: /xox[baprs]-[0-9a-zA-Z-]{10,}/ },\n {\n name: \"Private key header\",\n regex: /-----BEGIN (?:RSA |EC |DSA |OPENSSH )?PRIVATE KEY-----/,\n },\n {\n name: \"Generic API key\",\n regex: /(?:API_KEY|SECRET_KEY|ACCESS_TOKEN|AUTH_TOKEN)\\s*=\\s*\\S{8,}/,\n },\n { name: \"Database URL\", regex: /(?:postgres|mysql|mongodb|redis):\\/\\/[^:]+:[^@]+@/ },\n];\n\n/**\n * Calculate Shannon entropy (bits per character) of a string.\n */\nexport function shannonEntropy(str: string): number {\n if (str.length === 0) return 0;\n const freq = new Map<string, number>();\n for (const c of str) {\n freq.set(c, (freq.get(c) ?? 0) + 1);\n }\n let entropy = 0;\n for (const count of freq.values()) {\n const p = count / str.length;\n entropy -= p * Math.log2(p);\n }\n return entropy;\n}\n\n/**\n * Returns true if a string has sufficiently high entropy to be considered a potential secret.\n * Threshold: > 4.5 bits/char, minimum 20 characters.\n */\nexport function isHighEntropy(value: string, threshold = 4.5, minLength = 20): boolean {\n return value.length >= minLength && shannonEntropy(value) > threshold;\n}\n\n/**\n * Redact a matched secret value \u2014 show first 4 characters, mask the rest.\n * Never exposes more than 4 characters of any secret.\n */\nexport function redactValue(value: string): string {\n if (value.length <= 4) return \"\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\";\n return value.slice(0, 4) + \"\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\\u2022\";\n}\n\n/**\n * Match a line against all known secret patterns.\n * Returns one ScanMatch per matched pattern.\n */\nexport function matchPatterns(line: string, lineNumber: number, filePath: string): ScanMatch[] {\n const matches: ScanMatch[] = [];\n for (const { name, regex } of PATTERNS) {\n const match = regex.exec(line);\n if (match) {\n matches.push({\n file: filePath,\n line: lineNumber,\n column: match.index + 1,\n matchType: \"pattern\",\n patternName: name,\n preview: redactValue(match[0]),\n });\n }\n }\n return matches;\n}\n", "import * as fs from \"fs\";\nimport * as path from \"path\";\nimport type { ScanMatch } from \"./patterns\";\n\nexport interface ClefIgnoreRules {\n files: string[];\n patterns: string[];\n paths: string[];\n}\n\n/**\n * Load .clefignore rules from the repo root.\n * Returns empty rules if the file does not exist.\n */\nexport function loadIgnoreRules(repoRoot: string): ClefIgnoreRules {\n const ignorePath = path.join(repoRoot, \".clefignore\");\n try {\n const content = fs.readFileSync(ignorePath, \"utf-8\");\n return parseIgnoreContent(content);\n } catch {\n return { files: [], patterns: [], paths: [] };\n }\n}\n\n/**\n * Parse raw `.clefignore` content into structured rules.\n * Lines starting with `ignore-pattern:` suppress named patterns; lines ending with `/`\n * suppress entire directory paths; all other lines are treated as file glob patterns.\n *\n * @param content - Raw `.clefignore` file content.\n */\nexport function parseIgnoreContent(content: string): ClefIgnoreRules {\n const files: string[] = [];\n const patterns: string[] = [];\n const paths: string[] = [];\n\n for (const rawLine of content.split(\"\\n\")) {\n const line = rawLine.trim();\n if (!line || line.startsWith(\"#\")) continue;\n\n if (line.startsWith(\"ignore-pattern:\")) {\n const patternName = line.slice(\"ignore-pattern:\".length).trim();\n if (patternName) patterns.push(patternName);\n } else if (line.endsWith(\"/\")) {\n paths.push(line.slice(0, -1));\n } else {\n files.push(line);\n }\n }\n\n return { files, patterns, paths };\n}\n\n/**\n * Returns true if a file path should be ignored per .clefignore rules.\n */\nexport function shouldIgnoreFile(filePath: string, rules: ClefIgnoreRules): boolean {\n const normalized = filePath.replace(/\\\\/g, \"/\");\n\n for (const p of rules.paths) {\n const dir = p.replace(/\\\\/g, \"/\");\n if (normalized === dir || normalized.startsWith(dir + \"/\")) return true;\n }\n\n for (const pattern of rules.files) {\n if (matchesGlob(normalized, pattern)) return true;\n }\n\n return false;\n}\n\n/**\n * Returns true if a scan match should be suppressed per .clefignore rules.\n */\nexport function shouldIgnoreMatch(match: ScanMatch, rules: ClefIgnoreRules): boolean {\n if (match.matchType === \"pattern\" && match.patternName) {\n return rules.patterns.includes(match.patternName);\n }\n return false;\n}\n\nfunction matchesGlob(filePath: string, pattern: string): boolean {\n // Convert glob to regex: support *, **, and ? wildcards.\n // Step 1: stash ** segments, Step 2: escape all regex metacharacters,\n // Step 3: restore wildcards as their regex equivalents.\n const DOUBLE_STAR = \"\\x00DS\\x00\";\n const SINGLE_STAR = \"\\x00SS\\x00\";\n const QUESTION = \"\\x00QM\\x00\";\n\n const escaped = pattern\n .replace(/\\*\\*/g, DOUBLE_STAR)\n .replace(/\\*/g, SINGLE_STAR)\n .replace(/\\?/g, QUESTION)\n .replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\")\n .replace(DOUBLE_STAR, \".*\")\n .replace(SINGLE_STAR, \"[^/]*\")\n .replace(QUESTION, \"[^/]\");\n\n const regex = new RegExp(\"^\" + escaped + \"$\");\n // Also match if the pattern matches a prefix directory\n const prefixRegex = new RegExp(\"^\" + escaped + \"/\");\n return regex.test(filePath) || prefixRegex.test(filePath);\n}\n", "import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as YAML from \"yaml\";\nimport { ClefManifest, MatrixCell, MatrixIssue, MatrixStatus } from \"../types\";\nimport { EncryptionBackend } from \"../types\";\nimport { getPendingKeys } from \"../pending/metadata\";\nimport { readSopsKeyNames } from \"../sops/keys\";\n\n/**\n * Resolves and manages the namespace \u00D7 environment matrix of encrypted files.\n *\n * @example\n * ```ts\n * const manager = new MatrixManager();\n * const cells = manager.resolveMatrix(manifest, repoRoot);\n * ```\n */\nexport class MatrixManager {\n /**\n * Build the full grid of {@link MatrixCell} objects from the manifest.\n * Each cell reflects whether its encrypted file exists on disk.\n *\n * @param manifest - Parsed manifest.\n * @param repoRoot - Absolute path to the repository root.\n */\n resolveMatrix(manifest: ClefManifest, repoRoot: string): MatrixCell[] {\n const cells: MatrixCell[] = [];\n\n for (const ns of manifest.namespaces) {\n for (const env of manifest.environments) {\n const relativePath = manifest.file_pattern\n .replace(\"{namespace}\", ns.name)\n .replace(\"{environment}\", env.name);\n const filePath = path.join(repoRoot, relativePath);\n\n cells.push({\n namespace: ns.name,\n environment: env.name,\n filePath,\n exists: fs.existsSync(filePath),\n });\n }\n }\n\n return cells;\n }\n\n /**\n * Return only the cells whose encrypted files do not yet exist on disk.\n *\n * @param manifest - Parsed manifest.\n * @param repoRoot - Absolute path to the repository root.\n */\n detectMissingCells(manifest: ClefManifest, repoRoot: string): MatrixCell[] {\n return this.resolveMatrix(manifest, repoRoot).filter((cell) => !cell.exists);\n }\n\n /**\n * Create an empty encrypted SOPS file for a missing matrix cell.\n *\n * @param cell - The cell to scaffold (must not already exist).\n * @param sopsClient - SOPS client used to write the initial encrypted file.\n * @param manifest - Parsed manifest used to determine the encryption backend.\n */\n async scaffoldCell(\n cell: MatrixCell,\n sopsClient: EncryptionBackend,\n manifest: ClefManifest,\n ): Promise<void> {\n const dir = path.dirname(cell.filePath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n\n await sopsClient.encrypt(cell.filePath, {}, manifest, cell.environment);\n }\n\n /**\n * Decrypt each cell and return key counts, pending counts, and cross-environment issues.\n *\n * @param manifest - Parsed manifest.\n * @param repoRoot - Absolute path to the repository root.\n * @param sopsClient - SOPS client used to decrypt each cell.\n */\n async getMatrixStatus(\n manifest: ClefManifest,\n repoRoot: string,\n _sopsClient: EncryptionBackend,\n ): Promise<MatrixStatus[]> {\n const cells = this.resolveMatrix(manifest, repoRoot);\n const statuses: MatrixStatus[] = [];\n\n // First pass: read key names from plaintext YAML (no decryption)\n const cellKeys = new Map<string, string[]>();\n for (const cell of cells) {\n if (cell.exists) {\n cellKeys.set(cell.filePath, this.readKeyNames(cell.filePath));\n }\n }\n\n for (const cell of cells) {\n if (!cell.exists) {\n statuses.push({\n cell,\n keyCount: 0,\n pendingCount: 0,\n lastModified: null,\n issues: [\n {\n type: \"missing_keys\",\n message: `File '${cell.filePath}' does not exist. Run 'clef init' to scaffold missing files.`,\n },\n ],\n });\n continue;\n }\n\n // Read pending count from metadata (plaintext, no decryption needed)\n let pendingCount = 0;\n try {\n const pending = await getPendingKeys(cell.filePath);\n pendingCount = pending.length;\n } catch {\n // Metadata file missing or unreadable \u2014 0 pending\n }\n\n const keys = cellKeys.get(cell.filePath) ?? [];\n const keyCount = keys.length;\n const lastModified = this.readLastModified(cell.filePath);\n const issues: MatrixIssue[] = [];\n\n // Cross-environment key drift (using plaintext key names, no decrypt)\n const siblingCells = cells.filter(\n (c) => c.namespace === cell.namespace && c.environment !== cell.environment && c.exists,\n );\n for (const sibling of siblingCells) {\n const siblingKeys = cellKeys.get(sibling.filePath) ?? [];\n const missingKeys = siblingKeys.filter((k) => !keys.includes(k));\n for (const mk of missingKeys) {\n issues.push({\n type: \"missing_keys\",\n message: `Key '${mk}' exists in ${sibling.environment} but is missing here.`,\n key: mk,\n });\n }\n }\n\n statuses.push({ cell, keyCount, pendingCount, lastModified, issues });\n }\n\n return statuses;\n }\n\n /**\n * Read top-level key names from a SOPS file without decryption.\n * SOPS stores key names in plaintext \u2014 only values are encrypted.\n */\n private readKeyNames(filePath: string): string[] {\n return readSopsKeyNames(filePath) ?? [];\n }\n\n /**\n * Read the lastModified timestamp from SOPS metadata without decryption.\n */\n private readLastModified(filePath: string): Date | null {\n try {\n const raw = fs.readFileSync(filePath, \"utf-8\");\n const parsed = YAML.parse(raw) as Record<string, unknown>;\n const sops = parsed?.sops as Record<string, unknown> | undefined;\n if (sops?.lastmodified) return new Date(String(sops.lastmodified));\n return null;\n } catch {\n return null;\n }\n }\n\n /**\n * Check whether an environment has the `protected` flag set in the manifest.\n *\n * @param manifest - Parsed manifest.\n * @param environment - Environment name to check.\n */\n isProtectedEnvironment(manifest: ClefManifest, environment: string): boolean {\n const env = manifest.environments.find((e) => e.name === environment);\n return env?.protected === true;\n }\n}\n", "/**\n * TIER 1 MODULE \u2014 Security and correctness critical.\n *\n * This module requires exhaustive test coverage. Before\n * adding or modifying code here:\n * 1. Add tests for the happy path\n * 2. Add tests for all documented error paths\n * 3. Add at least one boundary/edge case test\n *\n * Coverage threshold: 95% lines/functions, 90% branches.\n * See docs/contributing/testing.md for the rationale.\n */\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as crypto from \"crypto\";\nimport * as YAML from \"yaml\";\n\ninterface PendingKey {\n key: string;\n since: Date;\n setBy: string;\n}\n\ninterface PendingMetadata {\n version: 1;\n pending: PendingKey[];\n}\n\n/**\n * Derive the `.clef-meta.yaml` path from an `.enc.yaml` path.\n * Example: `database/dev.enc.yaml` \u2192 `database/dev.clef-meta.yaml`\n */\nfunction metadataPath(encryptedFilePath: string): string {\n const dir = path.dirname(encryptedFilePath);\n const base = path.basename(encryptedFilePath).replace(/\\.enc\\.(yaml|json)$/, \"\");\n return path.join(dir, `${base}.clef-meta.yaml`);\n}\n\nconst HEADER_COMMENT = \"# Managed by Clef. Do not edit manually.\\n\";\n\n/** Load pending-key metadata for an encrypted file. Returns empty metadata if the file is missing. */\nasync function loadMetadata(filePath: string): Promise<PendingMetadata> {\n const metaPath = metadataPath(filePath);\n try {\n if (!fs.existsSync(metaPath)) {\n return { version: 1, pending: [] };\n }\n const content = fs.readFileSync(metaPath, \"utf-8\");\n const parsed = YAML.parse(content);\n if (!parsed || !Array.isArray(parsed.pending)) {\n return { version: 1, pending: [] };\n }\n return {\n version: 1,\n pending: parsed.pending.map((p: { key: string; since: string; setBy: string }) => ({\n key: p.key,\n since: new Date(p.since),\n setBy: p.setBy,\n })),\n };\n } catch {\n return { version: 1, pending: [] };\n }\n}\n\n/** Write pending-key metadata to disk. Creates parent directories if needed. */\nasync function saveMetadata(filePath: string, metadata: PendingMetadata): Promise<void> {\n const metaPath = metadataPath(filePath);\n const dir = path.dirname(metaPath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n const data = {\n version: metadata.version,\n pending: metadata.pending.map((p) => ({\n key: p.key,\n since: p.since.toISOString(),\n setBy: p.setBy,\n })),\n };\n fs.writeFileSync(metaPath, HEADER_COMMENT + YAML.stringify(data), \"utf-8\");\n}\n\n/**\n * Mark one or more keys as pending (placeholder value) for an encrypted file.\n * If a key is already pending, its timestamp and `setBy` are updated.\n *\n * @param filePath - Path to the encrypted file.\n * @param keys - Key names to mark as pending.\n * @param setBy - Identifier of the actor setting these keys (e.g. a username or CI job).\n */\nasync function markPending(filePath: string, keys: string[], setBy: string): Promise<void> {\n const metadata = await loadMetadata(filePath);\n const now = new Date();\n for (const key of keys) {\n const existing = metadata.pending.findIndex((p) => p.key === key);\n if (existing >= 0) {\n // Upsert: update timestamp and setBy on re-randomization\n metadata.pending[existing] = { key, since: now, setBy };\n } else {\n metadata.pending.push({ key, since: now, setBy });\n }\n }\n await saveMetadata(filePath, metadata);\n}\n\n/** Remove keys from the pending list after they have received real values. */\nasync function markResolved(filePath: string, keys: string[]): Promise<void> {\n const metadata = await loadMetadata(filePath);\n metadata.pending = metadata.pending.filter((p) => !keys.includes(p.key));\n await saveMetadata(filePath, metadata);\n}\n\n/** Return the list of key names that are still pending for the given encrypted file. */\nasync function getPendingKeys(filePath: string): Promise<string[]> {\n const metadata = await loadMetadata(filePath);\n return metadata.pending.map((p) => p.key);\n}\n\n/** Check whether a single key is currently pending for the given encrypted file. */\nasync function isPending(filePath: string, key: string): Promise<boolean> {\n const metadata = await loadMetadata(filePath);\n return metadata.pending.some((p) => p.key === key);\n}\n\n/** Generate a cryptographically random 64-character hex string for use as a placeholder value. */\nfunction generateRandomValue(): string {\n return crypto.randomBytes(32).toString(\"hex\");\n}\n\n/**\n * Same as {@link markPending} but retries once after `retryDelayMs` on transient failure.\n *\n * @param filePath - Path to the encrypted file.\n * @param keys - Key names to mark as pending.\n * @param setBy - Identifier of the actor setting these keys.\n * @param retryDelayMs - Delay in milliseconds before the single retry (default: 200).\n */\nasync function markPendingWithRetry(\n filePath: string,\n keys: string[],\n setBy: string,\n retryDelayMs = 200,\n): Promise<void> {\n try {\n await markPending(filePath, keys, setBy);\n } catch {\n // One retry after short delay for transient failures\n await new Promise((r) => setTimeout(r, retryDelayMs));\n await markPending(filePath, keys, setBy);\n }\n}\n\nexport {\n PendingKey,\n PendingMetadata,\n metadataPath,\n loadMetadata,\n saveMetadata,\n markPending,\n markPendingWithRetry,\n markResolved,\n getPendingKeys,\n isPending,\n generateRandomValue,\n};\n", "import * as fs from \"fs\";\nimport * as YAML from \"yaml\";\n\n/**\n * Read top-level key names from a SOPS-encrypted YAML file without decryption.\n * SOPS stores key names in plaintext \u2014 only values are encrypted.\n * Filters out the `sops` metadata key.\n *\n * @returns Array of key names, or `null` if the file cannot be read or parsed.\n */\nexport function readSopsKeyNames(filePath: string): string[] | null {\n try {\n const raw = fs.readFileSync(filePath, \"utf-8\");\n const parsed = YAML.parse(raw);\n if (parsed === null || parsed === undefined || typeof parsed !== \"object\") return null;\n return Object.keys(parsed as Record<string, unknown>).filter((k) => k !== \"sops\");\n } catch {\n return null;\n }\n}\n", "import * as fs from \"fs\";\nimport * as YAML from \"yaml\";\nimport {\n NamespaceSchema,\n SchemaLoadError,\n ValidationError,\n ValidationResult,\n ValidationWarning,\n} from \"../types\";\n\n/**\n * Loads namespace schemas and validates decrypted key/value maps against them.\n *\n * @example\n * ```ts\n * const validator = new SchemaValidator();\n * const schema = validator.loadSchema(\"schemas/app.yaml\");\n * const result = validator.validate(decrypted.values, schema);\n * ```\n */\nexport class SchemaValidator {\n /**\n * Read and parse a YAML schema file from disk.\n *\n * @param filePath - Path to the schema YAML file.\n * @returns Parsed {@link NamespaceSchema}.\n * @throws {@link SchemaLoadError} If the file cannot be read or contains invalid YAML.\n */\n loadSchema(filePath: string): NamespaceSchema {\n let raw: string;\n try {\n raw = fs.readFileSync(filePath, \"utf-8\");\n } catch {\n throw new SchemaLoadError(`Could not read schema file at '${filePath}'.`, filePath);\n }\n\n let parsed: unknown;\n try {\n parsed = YAML.parse(raw);\n } catch {\n throw new SchemaLoadError(`Schema file '${filePath}' contains invalid YAML.`, filePath);\n }\n\n if (!parsed || typeof parsed !== \"object\") {\n throw new SchemaLoadError(\n `Schema file '${filePath}' must be a YAML object with a 'keys' map.`,\n filePath,\n );\n }\n\n const obj = parsed as Record<string, unknown>;\n if (!obj.keys || typeof obj.keys !== \"object\") {\n throw new SchemaLoadError(\n `Schema file '${filePath}' is missing the required 'keys' map.`,\n filePath,\n );\n }\n\n const keys: NamespaceSchema[\"keys\"] = {};\n const keysObj = obj.keys as Record<string, unknown>;\n\n for (const [keyName, keyDef] of Object.entries(keysObj)) {\n if (!keyDef || typeof keyDef !== \"object\") {\n throw new SchemaLoadError(\n `Schema key '${keyName}' must be an object with at least 'type' and 'required'.`,\n filePath,\n );\n }\n\n const def = keyDef as Record<string, unknown>;\n const type = def.type as string;\n if (![\"string\", \"integer\", \"boolean\"].includes(type)) {\n throw new SchemaLoadError(\n `Schema key '${keyName}' has invalid type '${type}'. Must be 'string', 'integer', or 'boolean'.`,\n filePath,\n );\n }\n\n keys[keyName] = {\n type: type as \"string\" | \"integer\" | \"boolean\",\n required: def.required === true,\n ...(typeof def.pattern === \"string\" ? { pattern: def.pattern } : {}),\n ...(def.default !== undefined ? { default: def.default } : {}),\n ...(typeof def.description === \"string\" ? { description: def.description } : {}),\n ...(typeof def.max === \"number\" ? { max: def.max } : {}),\n };\n }\n\n return { keys };\n }\n\n /**\n * Validate a set of decrypted values against a loaded namespace schema.\n *\n * @param values - Flat key/value map from a decrypted SOPS file.\n * @param schema - Schema loaded via {@link loadSchema}.\n * @returns {@link ValidationResult} with `valid: false` when any errors are present.\n */\n validate(values: Record<string, string>, schema: NamespaceSchema): ValidationResult {\n const errors: ValidationError[] = [];\n const warnings: ValidationWarning[] = [];\n\n // Check required keys and type/pattern validation\n for (const [keyName, keyDef] of Object.entries(schema.keys)) {\n const value = values[keyName];\n\n if (value === undefined || value === null) {\n if (keyDef.required) {\n errors.push({\n key: keyName,\n message: `Required key '${keyName}' is missing.`,\n rule: \"required\",\n });\n }\n continue;\n }\n\n // Type validation\n switch (keyDef.type) {\n case \"integer\": {\n const num = Number(value);\n if (!Number.isInteger(num) || value.trim() === \"\") {\n errors.push({\n key: keyName,\n message: `Key '${keyName}' must be an integer, got '${value}'.`,\n rule: \"type\",\n });\n } else if (keyDef.max !== undefined && num > keyDef.max) {\n warnings.push({\n key: keyName,\n message: `Key '${keyName}' value ${num} exceeds maximum ${keyDef.max}.`,\n rule: \"max_exceeded\",\n });\n }\n break;\n }\n case \"boolean\": {\n const lower = value.toLowerCase();\n if (![\"true\", \"false\"].includes(lower)) {\n errors.push({\n key: keyName,\n message: `Key '${keyName}' must be a boolean ('true' or 'false'), got '${value}'.`,\n rule: \"type\",\n });\n }\n break;\n }\n case \"string\":\n // Strings are always valid type-wise\n break;\n }\n\n // Pattern validation (only for strings)\n if (keyDef.pattern && keyDef.type === \"string\") {\n const regex = new RegExp(keyDef.pattern);\n if (!regex.test(value)) {\n errors.push({\n key: keyName,\n message: `Key '${keyName}' value does not match required pattern '${keyDef.pattern}'.`,\n rule: \"pattern\",\n });\n }\n }\n }\n\n // Check for undeclared keys\n for (const keyName of Object.keys(values)) {\n if (!(keyName in schema.keys)) {\n warnings.push({\n key: keyName,\n message: `Key '${keyName}' is not declared in the schema.`,\n rule: \"undeclared\",\n });\n }\n }\n\n return {\n valid: errors.length === 0,\n errors,\n warnings,\n };\n }\n}\n", "/**\n * TIER 1 MODULE \u2014 Security and correctness critical.\n *\n * This module requires exhaustive test coverage. Before\n * adding or modifying code here:\n * 1. Add tests for the happy path\n * 2. Add tests for all documented error paths\n * 3. Add at least one boundary/edge case test\n *\n * Coverage threshold: 95% lines/functions, 90% branches.\n * See docs/contributing/testing.md for the rationale.\n */\nimport * as path from \"path\";\nimport { ClefManifest, DiffResult, DiffRow, DiffStatus } from \"../types\";\nimport { EncryptionBackend } from \"../types\";\n\n/**\n * Compares decrypted values between two environments or two arbitrary key/value maps.\n *\n * @example\n * ```ts\n * const engine = new DiffEngine();\n * const result = await engine.diffFiles(\"app\", \"staging\", \"production\", manifest, sopsClient, repoRoot);\n * ```\n */\nexport class DiffEngine {\n /**\n * Compare two in-memory value maps and produce a sorted diff result.\n *\n * Rows are sorted with missing and changed keys first, identical keys last.\n *\n * @param valuesA - Decrypted values from environment A.\n * @param valuesB - Decrypted values from environment B.\n * @param envA - Name of environment A.\n * @param envB - Name of environment B.\n * @param namespace - Namespace label included in the result (optional).\n */\n diff(\n valuesA: Record<string, string>,\n valuesB: Record<string, string>,\n envA: string,\n envB: string,\n namespace: string = \"\",\n ): DiffResult {\n const allKeys = new Set([...Object.keys(valuesA), ...Object.keys(valuesB)]);\n const rows: DiffRow[] = [];\n\n for (const key of allKeys) {\n const inA = key in valuesA;\n const inB = key in valuesB;\n\n let status: DiffStatus;\n if (inA && inB) {\n status = valuesA[key] === valuesB[key] ? \"identical\" : \"changed\";\n } else if (inA && !inB) {\n status = \"missing_b\";\n } else {\n status = \"missing_a\";\n }\n\n rows.push({\n key,\n valueA: inA ? valuesA[key] : null,\n valueB: inB ? valuesB[key] : null,\n status,\n });\n }\n\n // Sort: missing and changed first, then identical\n rows.sort((a, b) => {\n const order: Record<DiffStatus, number> = {\n missing_a: 0,\n missing_b: 0,\n changed: 1,\n identical: 2,\n };\n return order[a.status] - order[b.status];\n });\n\n return { namespace, envA, envB, rows };\n }\n\n /**\n * Decrypt two matrix cells and diff their values.\n *\n * @param namespace - Namespace containing both cells.\n * @param envA - Name of environment A.\n * @param envB - Name of environment B.\n * @param manifest - Parsed manifest used to resolve file paths.\n * @param sopsClient - SOPS client used to decrypt both files.\n * @param repoRoot - Absolute path to the repository root.\n * @throws {@link SopsDecryptionError} If either file cannot be decrypted.\n */\n async diffFiles(\n namespace: string,\n envA: string,\n envB: string,\n manifest: ClefManifest,\n sopsClient: EncryptionBackend,\n repoRoot: string,\n ): Promise<DiffResult> {\n const fileA = path.join(\n repoRoot,\n manifest.file_pattern.replace(\"{namespace}\", namespace).replace(\"{environment}\", envA),\n );\n const fileB = path.join(\n repoRoot,\n manifest.file_pattern.replace(\"{namespace}\", namespace).replace(\"{environment}\", envB),\n );\n\n const [decryptedA, decryptedB] = await Promise.all([\n sopsClient.decrypt(fileA),\n sopsClient.decrypt(fileB),\n ]);\n\n return this.diff(decryptedA.values, decryptedB.values, envA, envB, namespace);\n }\n}\n", "import * as path from \"path\";\nimport { ClefManifest, MatrixCell } from \"../types\";\nimport { EncryptionBackend } from \"../types\";\n\n/**\n * Performs bulk set, delete, and copy operations across multiple environments.\n *\n * @example\n * ```ts\n * const bulk = new BulkOps();\n * await bulk.setAcrossEnvironments(\"app\", \"DATABASE_URL\", { staging: \"...\", production: \"...\" }, manifest, sopsClient, repoRoot);\n * ```\n */\nexport class BulkOps {\n /**\n * Set a key to different values in multiple environments at once.\n *\n * @param namespace - Target namespace.\n * @param key - Secret key name to set.\n * @param values - Map of `{ environment: value }` pairs.\n * @param manifest - Parsed manifest.\n * @param sopsClient - SOPS client used to decrypt and re-encrypt each file.\n * @param repoRoot - Absolute path to the repository root.\n * @throws `Error` with details if any environment fails.\n */\n async setAcrossEnvironments(\n namespace: string,\n key: string,\n values: Record<string, string>,\n manifest: ClefManifest,\n sopsClient: EncryptionBackend,\n repoRoot: string,\n ): Promise<void> {\n const errors: Array<{ environment: string; error: Error }> = [];\n\n for (const env of manifest.environments) {\n if (!(env.name in values)) {\n continue;\n }\n\n const filePath = path.join(\n repoRoot,\n manifest.file_pattern.replace(\"{namespace}\", namespace).replace(\"{environment}\", env.name),\n );\n\n try {\n const decrypted = await sopsClient.decrypt(filePath);\n decrypted.values[key] = values[env.name];\n await sopsClient.encrypt(filePath, decrypted.values, manifest, env.name);\n } catch (err) {\n errors.push({ environment: env.name, error: err as Error });\n }\n }\n\n if (errors.length > 0) {\n const details = errors.map((e) => ` - ${e.environment}: ${e.error.message}`).join(\"\\n\");\n throw new Error(\n `Failed to set key '${key}' in ${errors.length} environment(s):\\n${details}\\n` +\n `Successfully updated ${Object.keys(values).length - errors.length} environment(s).`,\n );\n }\n }\n\n /**\n * Delete a key from every environment in a namespace.\n *\n * @param namespace - Target namespace.\n * @param key - Secret key name to delete.\n * @param manifest - Parsed manifest.\n * @param sopsClient - SOPS client.\n * @param repoRoot - Absolute path to the repository root.\n * @throws `Error` with details if any environment fails.\n */\n async deleteAcrossEnvironments(\n namespace: string,\n key: string,\n manifest: ClefManifest,\n sopsClient: EncryptionBackend,\n repoRoot: string,\n ): Promise<void> {\n const errors: Array<{ environment: string; error: Error }> = [];\n\n for (const env of manifest.environments) {\n const filePath = path.join(\n repoRoot,\n manifest.file_pattern.replace(\"{namespace}\", namespace).replace(\"{environment}\", env.name),\n );\n\n try {\n const decrypted = await sopsClient.decrypt(filePath);\n if (key in decrypted.values) {\n delete decrypted.values[key];\n await sopsClient.encrypt(filePath, decrypted.values, manifest, env.name);\n }\n } catch (err) {\n errors.push({ environment: env.name, error: err as Error });\n }\n }\n\n if (errors.length > 0) {\n const details = errors.map((e) => ` - ${e.environment}: ${e.error.message}`).join(\"\\n\");\n throw new Error(\n `Failed to delete key '${key}' in ${errors.length} environment(s):\\n${details}`,\n );\n }\n }\n\n /**\n * Copy a single key's value from one matrix cell to another.\n *\n * @param key - Secret key name to copy.\n * @param fromCell - Source matrix cell.\n * @param toCell - Destination matrix cell.\n * @param sopsClient - SOPS client.\n * @param manifest - Parsed manifest.\n * @throws `Error` if the key does not exist in the source cell.\n */\n async copyValue(\n key: string,\n fromCell: MatrixCell,\n toCell: MatrixCell,\n sopsClient: EncryptionBackend,\n manifest: ClefManifest,\n ): Promise<void> {\n const source = await sopsClient.decrypt(fromCell.filePath);\n\n if (!(key in source.values)) {\n throw new Error(\n `Key '${key}' does not exist in ${fromCell.namespace}/${fromCell.environment}.`,\n );\n }\n\n const dest = await sopsClient.decrypt(toCell.filePath);\n dest.values[key] = source.values[key];\n await sopsClient.encrypt(toCell.filePath, dest.values, manifest, toCell.environment);\n }\n}\n", "import * as fs from \"fs\";\nimport * as path from \"path\";\nimport { GitCommit, GitOperationError, GitStatus, SubprocessRunner } from \"../types\";\n\nconst PRE_COMMIT_HOOK = `#!/bin/sh\n# Clef pre-commit hook \u2014 blocks commits of files missing SOPS encryption metadata\n# and scans staged files for plaintext secrets.\n# Installed by: clef hooks install\n\nSTAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM)\nEXIT_CODE=0\n\nfor FILE in $STAGED_FILES; do\n case \"$FILE\" in\n *.enc.yaml|*.enc.json)\n if ! grep -q '\"sops\":' \"$FILE\" && ! grep -q 'sops:' \"$FILE\"; then\n echo \"ERROR: $FILE appears to be missing SOPS metadata.\"\n echo \" This file may contain unencrypted secrets.\"\n echo \" Encrypt it with 'sops encrypt -i $FILE' before committing.\"\n EXIT_CODE=1\n fi\n ;;\n esac\ndone\n\nif [ $EXIT_CODE -eq 0 ]; then\n # Scan staged files for plaintext secrets\n if command -v clef >/dev/null 2>&1; then\n clef scan --staged\n SCAN_EXIT=$?\n if [ $SCAN_EXIT -ne 0 ]; then\n echo \"\"\n echo \"clef scan found potential secrets in staged files.\"\n echo \"Review the findings above before committing.\"\n echo \"To bypass (use with caution): git commit --no-verify\"\n EXIT_CODE=1\n fi\n fi\nfi\n\nexit $EXIT_CODE\n`;\n\n/**\n * Wraps git operations: staging, committing, log, diff, status, and hook installation.\n *\n * @example\n * ```ts\n * const git = new GitIntegration(runner);\n * await git.stageFiles([\"secrets/app/production.enc.yaml\"], repoRoot);\n * const hash = await git.commit(\"chore(secrets): rotate production keys\", repoRoot);\n * ```\n */\nexport class GitIntegration {\n constructor(private readonly runner: SubprocessRunner) {}\n\n /**\n * Stage one or more file paths with `git add`.\n *\n * @param filePaths - Paths to stage (relative or absolute).\n * @param repoRoot - Working directory for the git command.\n * @throws {@link GitOperationError} On failure.\n */\n async stageFiles(filePaths: string[], repoRoot: string): Promise<void> {\n if (filePaths.length === 0) return;\n\n const result = await this.runner.run(\"git\", [\"add\", ...filePaths], { cwd: repoRoot });\n\n if (result.exitCode !== 0) {\n throw new GitOperationError(\n `Failed to stage files: ${result.stderr.trim()}`,\n \"Check that the files exist and you are inside a git repository.\",\n );\n }\n }\n\n /**\n * Create a commit with the given message.\n *\n * @param message - Commit message.\n * @param repoRoot - Working directory for the git command.\n * @returns The short commit hash, or an empty string if parsing fails.\n * @throws {@link GitOperationError} On failure.\n */\n async commit(message: string, repoRoot: string): Promise<string> {\n const result = await this.runner.run(\"git\", [\"commit\", \"-m\", message], { cwd: repoRoot });\n\n if (result.exitCode !== 0) {\n throw new GitOperationError(\n `Failed to commit: ${result.stderr.trim()}`,\n \"Ensure there are staged changes and your git user is configured.\",\n );\n }\n\n // Extract commit hash from output\n const hashMatch = result.stdout.match(/\\[[\\w/-]+ ([a-f0-9]+)\\]/);\n return hashMatch ? hashMatch[1] : \"\";\n }\n\n /**\n * Retrieve recent commits for a specific file.\n *\n * @param filePath - Path to the file (relative to `repoRoot`).\n * @param repoRoot - Working directory for the git command.\n * @param limit - Maximum number of commits to return (default: 20).\n * @throws {@link GitOperationError} On failure.\n */\n async getLog(filePath: string, repoRoot: string, limit: number = 20): Promise<GitCommit[]> {\n const result = await this.runner.run(\n \"git\",\n [\"log\", `--max-count=${limit}`, \"--format=%H|%an|%aI|%s\", \"--\", filePath],\n { cwd: repoRoot },\n );\n\n if (result.exitCode !== 0) {\n throw new GitOperationError(\n `Failed to get git log for '${filePath}': ${result.stderr.trim()}`,\n );\n }\n\n if (!result.stdout.trim()) return [];\n\n return result.stdout\n .trim()\n .split(\"\\n\")\n .map((line) => {\n const [hash, author, dateStr, ...messageParts] = line.split(\"|\");\n return {\n hash,\n author,\n date: new Date(dateStr),\n message: messageParts.join(\"|\"),\n };\n });\n }\n\n /**\n * Get the staged diff (`git diff --cached`).\n *\n * @param repoRoot - Working directory for the git command.\n * @returns Raw diff output as a string.\n * @throws {@link GitOperationError} On failure.\n */\n async getDiff(repoRoot: string): Promise<string> {\n const result = await this.runner.run(\"git\", [\"diff\", \"--cached\"], { cwd: repoRoot });\n\n if (result.exitCode !== 0) {\n throw new GitOperationError(`Failed to get git diff: ${result.stderr.trim()}`);\n }\n\n return result.stdout;\n }\n\n /**\n * Parse `git status --porcelain` into staged, unstaged, and untracked lists.\n *\n * @param repoRoot - Working directory for the git command.\n * @throws {@link GitOperationError} On failure.\n */\n async getStatus(repoRoot: string): Promise<GitStatus> {\n const result = await this.runner.run(\"git\", [\"status\", \"--porcelain\"], { cwd: repoRoot });\n\n if (result.exitCode !== 0) {\n throw new GitOperationError(`Failed to get git status: ${result.stderr.trim()}`);\n }\n\n const staged: string[] = [];\n const unstaged: string[] = [];\n const untracked: string[] = [];\n\n if (!result.stdout.trim()) {\n return { staged, unstaged, untracked };\n }\n\n for (const line of result.stdout.trim().split(\"\\n\")) {\n const indexStatus = line[0];\n const workTreeStatus = line[1];\n const filePath = line.substring(3);\n\n if (indexStatus === \"?\") {\n untracked.push(filePath);\n } else {\n if (indexStatus !== \" \" && indexStatus !== \"?\") {\n staged.push(filePath);\n }\n if (workTreeStatus !== \" \" && workTreeStatus !== \"?\") {\n unstaged.push(filePath);\n }\n }\n }\n\n return { staged, unstaged, untracked };\n }\n\n /**\n * Configure the SOPS-aware git merge driver so that encrypted files\n * are merged at the plaintext level instead of producing ciphertext conflicts.\n *\n * Sets two things:\n * 1. `.gitattributes` \u2014 tells git which files use the custom driver.\n * 2. `.git/config [merge \"sops\"]` \u2014 tells git what command to run.\n *\n * Both operations are idempotent \u2014 safe to call repeatedly.\n *\n * @param repoRoot - Absolute path to the repository root.\n * @throws {@link GitOperationError} On failure.\n */\n async installMergeDriver(repoRoot: string): Promise<void> {\n // 1. Configure git merge driver in local config\n const configResult = await this.runner.run(\n \"git\",\n [\"config\", \"merge.sops.name\", \"SOPS-aware merge driver\"],\n { cwd: repoRoot },\n );\n if (configResult.exitCode !== 0) {\n throw new GitOperationError(\n `Failed to configure merge driver name: ${configResult.stderr.trim()}`,\n \"Ensure you are inside a git repository.\",\n );\n }\n\n const driverResult = await this.runner.run(\n \"git\",\n [\"config\", \"merge.sops.driver\", \"clef merge-driver %O %A %B\"],\n { cwd: repoRoot },\n );\n if (driverResult.exitCode !== 0) {\n throw new GitOperationError(\n `Failed to configure merge driver command: ${driverResult.stderr.trim()}`,\n \"Ensure you are inside a git repository.\",\n );\n }\n\n // 2. Ensure .gitattributes contains the rule\n await this.ensureGitattributes(repoRoot);\n }\n\n /**\n * Check whether the SOPS merge driver is configured in both\n * `.git/config` and `.gitattributes`.\n *\n * @param repoRoot - Absolute path to the repository root.\n * @returns An object indicating which parts are configured.\n */\n async checkMergeDriver(\n repoRoot: string,\n ): Promise<{ gitConfig: boolean; gitattributes: boolean }> {\n // Check git config\n const configResult = await this.runner.run(\"git\", [\"config\", \"--get\", \"merge.sops.driver\"], {\n cwd: repoRoot,\n });\n const gitConfig = configResult.exitCode === 0 && configResult.stdout.trim().length > 0;\n\n // Check .gitattributes\n const attrFilePath = path.join(repoRoot, \".gitattributes\");\n const attrContent = fs.existsSync(attrFilePath) ? fs.readFileSync(attrFilePath, \"utf-8\") : \"\";\n const gitattributes = attrContent.includes(\"merge=sops\");\n\n return { gitConfig, gitattributes };\n }\n\n private async ensureGitattributes(repoRoot: string): Promise<void> {\n const attrPath = path.join(repoRoot, \".gitattributes\");\n const mergeRule = \"*.enc.yaml merge=sops\\n*.enc.json merge=sops\";\n\n // Read existing content\n const existing = fs.existsSync(attrPath) ? fs.readFileSync(attrPath, \"utf-8\") : \"\";\n\n if (existing.includes(\"merge=sops\")) {\n return; // Already configured\n }\n\n const newContent = existing.trimEnd()\n ? `${existing.trimEnd()}\\n\\n# Clef: SOPS-aware merge driver for encrypted files\\n${mergeRule}\\n`\n : `# Clef: SOPS-aware merge driver for encrypted files\\n${mergeRule}\\n`;\n\n const writeResult = await this.runner.run(\"tee\", [attrPath], {\n stdin: newContent,\n cwd: repoRoot,\n });\n\n if (writeResult.exitCode !== 0) {\n throw new GitOperationError(`Failed to write .gitattributes: ${writeResult.stderr.trim()}`);\n }\n }\n\n /**\n * Write and chmod the Clef pre-commit hook into `.git/hooks/pre-commit`.\n * The hook blocks commits of unencrypted matrix files and scans staged files for secrets.\n *\n * @param repoRoot - Absolute path to the repository root.\n * @throws {@link GitOperationError} On failure.\n */\n async installPreCommitHook(repoRoot: string): Promise<void> {\n const hookPath = path.join(repoRoot, \".git\", \"hooks\", \"pre-commit\");\n\n // Write the hook using the subprocess runner to avoid direct fs writes in the integration\n const result = await this.runner.run(\"tee\", [hookPath], {\n stdin: PRE_COMMIT_HOOK,\n cwd: repoRoot,\n });\n\n if (result.exitCode !== 0) {\n throw new GitOperationError(\n `Failed to install pre-commit hook: ${result.stderr.trim()}`,\n \"Ensure .git/hooks/ directory exists.\",\n );\n }\n\n // Make it executable\n const chmodResult = await this.runner.run(\"chmod\", [\"+x\", hookPath], { cwd: repoRoot });\n\n if (chmodResult.exitCode !== 0) {\n throw new GitOperationError(\n `Failed to make pre-commit hook executable: ${chmodResult.stderr.trim()}`,\n );\n }\n }\n}\n", "/**\n * TIER 1 MODULE \u2014 Security and correctness critical.\n *\n * This module requires exhaustive test coverage. Before\n * adding or modifying code here:\n * 1. Add tests for the happy path\n * 2. Add tests for all documented error paths\n * 3. Add at least one boundary/edge case test\n *\n * Coverage threshold: 95% lines/functions, 90% branches.\n * See docs/contributing/testing.md for the rationale.\n */\nimport * as fs from \"fs\";\nimport * as net from \"net\";\nimport { randomBytes } from \"crypto\";\nimport * as YAML from \"yaml\";\nimport {\n ClefManifest,\n DecryptedFile,\n EncryptionBackend,\n SopsDecryptionError,\n SopsEncryptionError,\n SopsKeyNotFoundError,\n SopsMetadata,\n SubprocessRunner,\n resolveBackendConfig,\n} from \"../types\";\nimport { assertSops } from \"../dependencies/checker\";\nimport { deriveAgePublicKey } from \"../age/keygen\";\nimport { resolveSopsPath } from \"./resolver\";\n\nfunction formatFromPath(filePath: string): \"yaml\" | \"json\" {\n return filePath.endsWith(\".json\") ? \"json\" : \"yaml\";\n}\n\n/**\n * On Windows, /dev/stdin does not exist. Create a named pipe that sops can open\n * as its input file, feed the content through it, and return the pipe path.\n * The returned cleanup function closes the server once sops is done reading.\n *\n * Go's os.Open / CreateFile can open \\\\.\\pipe\\... paths directly, so sops\n * reads from the pipe exactly as it would from a regular file.\n */\nfunction openWindowsInputPipe(content: string): Promise<{ inputArg: string; cleanup: () => void }> {\n const pipeName = `\\\\\\\\.\\\\pipe\\\\clef-sops-${randomBytes(8).toString(\"hex\")}`;\n\n return new Promise((resolve, reject) => {\n const server = net.createServer((socket) => {\n // On Windows, socket.end() does not reliably signal EOF to named pipe\n // clients because libuv's uv_shutdown is a no-op for pipes. Write the\n // content and then force-destroy the socket so the pipe handle is closed,\n // which the Go client (sops) sees as ERROR_BROKEN_PIPE \u2192 io.EOF.\n socket.write(content, () => {\n socket.destroy();\n });\n });\n server.maxConnections = 1;\n server.on(\"error\", reject);\n server.listen(pipeName, () => {\n resolve({\n inputArg: pipeName,\n cleanup: () => server.close(),\n });\n });\n });\n}\n\n/**\n * Wraps the `sops` binary for encryption, decryption, re-encryption, and metadata extraction.\n * All decrypt/encrypt operations are piped via stdin/stdout \u2014 plaintext never touches disk.\n *\n * @example\n * ```ts\n * const client = new SopsClient(runner, \"/home/user/.age/key.txt\");\n * const decrypted = await client.decrypt(\"secrets/production.enc.yaml\");\n * ```\n */\nexport class SopsClient implements EncryptionBackend {\n private readonly sopsCommand: string;\n\n /**\n * @param runner - Subprocess runner used to invoke the `sops` binary.\n * @param ageKeyFile - Optional path to an age private key file. Passed as\n * `SOPS_AGE_KEY_FILE` to the subprocess environment.\n * @param ageKey - Optional inline age private key. Passed as `SOPS_AGE_KEY`\n * to the subprocess environment.\n * @param sopsPath - Optional explicit path to the sops binary. When omitted,\n * resolved automatically via {@link resolveSopsPath}.\n */\n constructor(\n private readonly runner: SubprocessRunner,\n private readonly ageKeyFile?: string,\n private readonly ageKey?: string,\n sopsPath?: string,\n ) {\n this.sopsCommand = sopsPath ?? resolveSopsPath().path;\n }\n\n private buildSopsEnv(): Record<string, string> | undefined {\n const env: Record<string, string> = {};\n if (this.ageKey) {\n env.SOPS_AGE_KEY = this.ageKey;\n }\n if (this.ageKeyFile) {\n env.SOPS_AGE_KEY_FILE = this.ageKeyFile;\n }\n return Object.keys(env).length > 0 ? env : undefined;\n }\n\n /**\n * Decrypt a SOPS-encrypted file and return its values and metadata.\n *\n * @param filePath - Path to the `.enc.yaml` or `.enc.json` file.\n * @returns {@link DecryptedFile} with plaintext values in memory only.\n * @throws {@link SopsKeyNotFoundError} If no matching decryption key is available.\n * @throws {@link SopsDecryptionError} On any other decryption failure.\n */\n async decrypt(filePath: string): Promise<DecryptedFile> {\n await assertSops(this.runner, this.sopsCommand);\n const fmt = formatFromPath(filePath);\n const env = this.buildSopsEnv();\n const result = await this.runner.run(\n this.sopsCommand,\n [\"decrypt\", \"--output-type\", fmt, filePath],\n {\n ...(env ? { env } : {}),\n },\n );\n\n if (result.exitCode !== 0) {\n const errorType = await this.classifyDecryptError(filePath);\n if (errorType === \"key-not-found\") {\n throw new SopsKeyNotFoundError(\n `No decryption key found for '${filePath}'. ${result.stderr.trim()}`,\n );\n }\n throw new SopsDecryptionError(\n `Failed to decrypt '${filePath}': ${result.stderr.trim()}`,\n filePath,\n );\n }\n\n let parsed: Record<string, unknown>;\n try {\n parsed = YAML.parse(result.stdout) ?? {};\n } catch {\n throw new SopsDecryptionError(\n `Decrypted content of '${filePath}' is not valid YAML.`,\n filePath,\n );\n }\n\n const values: Record<string, string> = {};\n for (const [key, value] of Object.entries(parsed)) {\n values[key] = String(value);\n }\n\n const metadata = await this.getMetadata(filePath);\n\n return { values, metadata };\n }\n\n /**\n * Encrypt a key/value map and write it to an encrypted SOPS file.\n *\n * @param filePath - Destination path for the encrypted file.\n * @param values - Flat key/value map to encrypt.\n * @param manifest - Manifest used to determine the encryption backend and key configuration.\n * @param environment - Optional environment name. When provided, per-env backend overrides\n * are resolved from the manifest. When omitted, the global `sops.default_backend` is used.\n * @throws {@link SopsEncryptionError} On encryption or write failure.\n */\n async encrypt(\n filePath: string,\n values: Record<string, string>,\n manifest: ClefManifest,\n environment?: string,\n ): Promise<void> {\n await assertSops(this.runner, this.sopsCommand);\n const fmt = formatFromPath(filePath);\n const content = fmt === \"json\" ? JSON.stringify(values, null, 2) : YAML.stringify(values);\n const args = this.buildEncryptArgs(filePath, manifest, environment);\n const env = this.buildSopsEnv();\n\n // sops requires an explicit input path \u2014 it does not read from stdin implicitly.\n // On Unix we pass /dev/stdin (a special file backed by the process's stdin pipe).\n // On Windows /dev/stdin does not exist, so we create a named pipe, feed content\n // through it, and pass the pipe path as the input file instead.\n let inputArg: string;\n let pipeCleanup: (() => void) | undefined;\n\n if (process.platform === \"win32\") {\n const pipe = await openWindowsInputPipe(content);\n inputArg = pipe.inputArg;\n pipeCleanup = pipe.cleanup;\n } else {\n inputArg = \"/dev/stdin\";\n }\n\n let result;\n try {\n result = await this.runner.run(\n this.sopsCommand,\n [\n \"encrypt\",\n ...args,\n \"--input-type\",\n fmt,\n \"--output-type\",\n fmt,\n \"--filename-override\",\n filePath,\n inputArg,\n ],\n {\n // stdin is still piped on Unix (/dev/stdin reads from it);\n // on Windows the named pipe server feeds content directly.\n ...(process.platform !== \"win32\" ? { stdin: content } : {}),\n ...(env ? { env } : {}),\n },\n );\n } finally {\n pipeCleanup?.();\n }\n\n if (result.exitCode !== 0) {\n throw new SopsEncryptionError(\n `Failed to encrypt '${filePath}': ${result.stderr.trim()}`,\n filePath,\n );\n }\n\n // Write the encrypted output to the file (using fs directly \u2014 tee is not available on Windows)\n try {\n fs.writeFileSync(filePath, result.stdout);\n } catch {\n throw new SopsEncryptionError(`Failed to write encrypted data to '${filePath}'.`, filePath);\n }\n }\n\n /**\n * Rotate encryption by adding a new age recipient key to an existing SOPS file.\n *\n * @param filePath - Path to the encrypted file to re-encrypt.\n * @param newKey - New age public key to add as a recipient.\n * @throws {@link SopsEncryptionError} On failure.\n */\n async reEncrypt(filePath: string, newKey: string): Promise<void> {\n await this.addRecipient(filePath, newKey);\n }\n\n /**\n * Add an age recipient to an existing SOPS file.\n *\n * @param filePath - Path to the encrypted file.\n * @param key - age public key to add as a recipient.\n * @throws {@link SopsEncryptionError} On failure.\n */\n async addRecipient(filePath: string, key: string): Promise<void> {\n await assertSops(this.runner, this.sopsCommand);\n const env = this.buildSopsEnv();\n const result = await this.runner.run(\n this.sopsCommand,\n [\"rotate\", \"-i\", \"--add-age\", key, filePath],\n {\n ...(env ? { env } : {}),\n },\n );\n\n if (result.exitCode !== 0) {\n throw new SopsEncryptionError(\n `Failed to add recipient to '${filePath}': ${result.stderr.trim()}`,\n filePath,\n );\n }\n }\n\n /**\n * Remove an age recipient from an existing SOPS file.\n *\n * @param filePath - Path to the encrypted file.\n * @param key - age public key to remove.\n * @throws {@link SopsEncryptionError} On failure.\n */\n async removeRecipient(filePath: string, key: string): Promise<void> {\n await assertSops(this.runner, this.sopsCommand);\n const env = this.buildSopsEnv();\n const result = await this.runner.run(\n this.sopsCommand,\n [\"rotate\", \"-i\", \"--rm-age\", key, filePath],\n {\n ...(env ? { env } : {}),\n },\n );\n\n if (result.exitCode !== 0) {\n throw new SopsEncryptionError(\n `Failed to remove recipient from '${filePath}': ${result.stderr.trim()}`,\n filePath,\n );\n }\n }\n\n /**\n * Check whether a file contains valid SOPS encryption metadata.\n *\n * @param filePath - Path to the file to check.\n * @returns `true` if valid SOPS metadata is present; `false` otherwise. Never throws.\n */\n async validateEncryption(filePath: string): Promise<boolean> {\n await assertSops(this.runner, this.sopsCommand);\n try {\n await this.getMetadata(filePath);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Extract SOPS metadata (backend, recipients, last-modified timestamp) from an encrypted file\n * without decrypting its values.\n *\n * @param filePath - Path to the encrypted file.\n * @returns {@link SopsMetadata} parsed from the file's `sops:` block.\n * @throws {@link SopsDecryptionError} If the file cannot be read or parsed.\n */\n async getMetadata(filePath: string): Promise<SopsMetadata> {\n await assertSops(this.runner, this.sopsCommand);\n const env = this.buildSopsEnv();\n const result = await this.runner.run(this.sopsCommand, [\"filestatus\", filePath], {\n ...(env ? { env } : {}),\n });\n\n // filestatus returns JSON with encrypted status; if it fails, try parsing the file directly\n if (result.exitCode !== 0) {\n // Fall back to reading SOPS metadata from the encrypted file\n return this.parseMetadataFromFile(filePath);\n }\n\n return this.parseMetadataFromFile(filePath);\n }\n\n /**\n * Determine whether a decrypt failure is caused by a missing/mismatched key (vs. some other\n * SOPS error) without relying on stderr message text.\n *\n * For age backends: reads the file's recipient list and checks whether any of the configured\n * private keys derive to a matching public key. For non-age backends (pgp, kms) we cannot\n * perform an equivalent check, so those always return \"other\".\n */\n private async classifyDecryptError(filePath: string): Promise<\"key-not-found\" | \"other\"> {\n let metadata: SopsMetadata;\n try {\n metadata = this.parseMetadataFromFile(filePath);\n } catch {\n return \"other\";\n }\n\n if (metadata.backend !== \"age\") return \"other\";\n\n // No age key configured at all\n if (!this.ageKey && !this.ageKeyFile) return \"key-not-found\";\n\n // Obtain the private key material from the constructor params\n let keyContent: string;\n try {\n keyContent = this.ageKey ?? fs.readFileSync(this.ageKeyFile!, \"utf-8\");\n } catch {\n return \"key-not-found\";\n }\n\n // Key files may contain multiple AGE-SECRET-KEY-1... lines (plus comments/blank lines)\n const privateKeys = keyContent\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter((line) => line.startsWith(\"AGE-SECRET-KEY-\"));\n\n if (privateKeys.length === 0) return \"key-not-found\";\n\n try {\n const publicKeys = await Promise.all(privateKeys.map((k) => deriveAgePublicKey(k)));\n const recipients = new Set(metadata.recipients);\n return publicKeys.some((pk) => recipients.has(pk)) ? \"other\" : \"key-not-found\";\n } catch {\n return \"other\";\n }\n }\n\n private parseMetadataFromFile(filePath: string): SopsMetadata {\n let content: string;\n try {\n content = fs.readFileSync(filePath, \"utf-8\");\n } catch {\n throw new SopsDecryptionError(\n `Could not read file '${filePath}' to extract SOPS metadata.`,\n filePath,\n );\n }\n\n let parsed: Record<string, unknown>;\n try {\n parsed = YAML.parse(content);\n } catch {\n throw new SopsDecryptionError(\n `File '${filePath}' is not valid YAML. Cannot extract SOPS metadata.`,\n filePath,\n );\n }\n\n const sops = parsed?.sops as Record<string, unknown> | undefined;\n if (!sops) {\n throw new SopsDecryptionError(\n `File '${filePath}' does not contain SOPS metadata. It may not be encrypted.`,\n filePath,\n );\n }\n\n const backend = this.detectBackend(sops);\n const recipients = this.extractRecipients(sops, backend);\n const lastModified = sops.lastmodified ? new Date(sops.lastmodified as string) : new Date();\n\n return { backend, recipients, lastModified };\n }\n\n private detectBackend(\n sops: Record<string, unknown>,\n ): \"age\" | \"awskms\" | \"gcpkms\" | \"azurekv\" | \"pgp\" {\n if (sops.age && Array.isArray(sops.age) && (sops.age as unknown[]).length > 0) return \"age\";\n if (sops.kms && Array.isArray(sops.kms) && (sops.kms as unknown[]).length > 0) return \"awskms\";\n if (sops.gcp_kms && Array.isArray(sops.gcp_kms) && (sops.gcp_kms as unknown[]).length > 0)\n return \"gcpkms\";\n if (sops.azure_kv && Array.isArray(sops.azure_kv) && (sops.azure_kv as unknown[]).length > 0)\n return \"azurekv\";\n if (sops.pgp && Array.isArray(sops.pgp) && (sops.pgp as unknown[]).length > 0) return \"pgp\";\n return \"age\"; // Interpretation: default to age when metadata is ambiguous\n }\n\n private extractRecipients(\n sops: Record<string, unknown>,\n backend: \"age\" | \"awskms\" | \"gcpkms\" | \"azurekv\" | \"pgp\",\n ): string[] {\n switch (backend) {\n case \"age\": {\n const entries = sops.age as Array<Record<string, unknown>> | undefined;\n return entries?.map((e) => String(e.recipient ?? \"\")) ?? [];\n }\n case \"awskms\": {\n const entries = sops.kms as Array<Record<string, unknown>> | undefined;\n return entries?.map((e) => String(e.arn ?? \"\")) ?? [];\n }\n case \"gcpkms\": {\n const entries = sops.gcp_kms as Array<Record<string, unknown>> | undefined;\n return entries?.map((e) => String(e.resource_id ?? \"\")) ?? [];\n }\n case \"azurekv\": {\n const entries = sops.azure_kv as Array<Record<string, unknown>> | undefined;\n return (\n entries?.map((e) => {\n const vaultUrl = String(e.vaultUrl ?? e.vault_url ?? \"\");\n const name = String(e.name ?? e.key ?? \"\");\n // Return the composite Key Vault key identifier\n return vaultUrl && name ? `${vaultUrl}/keys/${name}` : vaultUrl || name;\n }) ?? []\n );\n }\n case \"pgp\": {\n const entries = sops.pgp as Array<Record<string, unknown>> | undefined;\n return entries?.map((e) => String(e.fp ?? \"\")) ?? [];\n }\n }\n }\n\n private buildEncryptArgs(\n filePath: string,\n manifest: ClefManifest,\n environment?: string,\n ): string[] {\n const args: string[] = [];\n\n const config = environment\n ? resolveBackendConfig(manifest, environment)\n : {\n backend: manifest.sops.default_backend,\n aws_kms_arn: manifest.sops.aws_kms_arn,\n gcp_kms_resource_id: manifest.sops.gcp_kms_resource_id,\n azure_kv_url: manifest.sops.azure_kv_url,\n pgp_fingerprint: manifest.sops.pgp_fingerprint,\n };\n\n switch (config.backend) {\n case \"age\":\n // Key injection is handled via buildSopsEnv() \u2014 no extra args needed here\n break;\n case \"awskms\":\n if (config.aws_kms_arn) {\n args.push(\"--kms\", config.aws_kms_arn);\n }\n break;\n case \"gcpkms\":\n if (config.gcp_kms_resource_id) {\n args.push(\"--gcp-kms\", config.gcp_kms_resource_id);\n }\n break;\n case \"azurekv\":\n if (config.azure_kv_url) {\n args.push(\"--azure-kv\", config.azure_kv_url);\n }\n break;\n case \"pgp\":\n if (config.pgp_fingerprint) {\n args.push(\"--pgp\", config.pgp_fingerprint);\n }\n break;\n }\n\n return args;\n }\n}\n", "/**\n * Resolves the path to the `sops` binary using a three-tier resolution chain:\n *\n * 1. `CLEF_SOPS_PATH` environment variable (explicit user override)\n * 2. Bundled platform-specific package (`@clef-sh/sops-{os}-{arch}`)\n * 3. System PATH fallback (bare `\"sops\"` command name)\n *\n * The result is cached after the first call \u2014 subsequent calls return the\n * same resolution without re-probing the filesystem.\n */\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport { tryBundled } from \"./bundled\";\n\nfunction validateSopsPath(candidate: string): void {\n if (!path.isAbsolute(candidate)) {\n throw new Error(`CLEF_SOPS_PATH must be an absolute path, got '${candidate}'.`);\n }\n const segments = candidate.split(/[/\\\\]/);\n if (segments.includes(\"..\")) {\n throw new Error(\n `CLEF_SOPS_PATH contains '..' path segments ('${candidate}'). ` +\n \"Use an absolute path without directory traversal.\",\n );\n }\n}\n\nexport type SopsSource = \"env\" | \"bundled\" | \"system\";\n\nexport interface SopsResolution {\n /** Absolute path to the sops binary, or \"sops\" for system PATH fallback. */\n path: string;\n /** How the binary was located. */\n source: SopsSource;\n}\n\nlet cached: SopsResolution | undefined;\n\n/**\n * Resolve the sops binary path.\n *\n * Resolution order:\n * 1. `CLEF_SOPS_PATH` env var \u2014 explicit override, used as-is\n * 2. Bundled `@clef-sh/sops-{platform}-{arch}` package\n * 3. System PATH fallback \u2014 returns bare `\"sops\"`\n *\n * The result is cached module-wide. Call {@link resetSopsResolution} in tests\n * to clear the cache.\n */\nexport function resolveSopsPath(): SopsResolution {\n if (cached) return cached;\n\n // 1. Explicit environment override\n const envPath = process.env.CLEF_SOPS_PATH?.trim();\n if (envPath) {\n validateSopsPath(envPath);\n if (!fs.existsSync(envPath)) {\n throw new Error(`CLEF_SOPS_PATH points to '${envPath}' but the file does not exist.`);\n }\n cached = { path: envPath, source: \"env\" };\n return cached;\n }\n\n // 2. Bundled platform package\n const bundledPath = tryBundled();\n if (bundledPath) {\n cached = { path: bundledPath, source: \"bundled\" };\n return cached;\n }\n\n // 3. System PATH fallback\n cached = { path: \"sops\", source: \"system\" };\n return cached;\n}\n\n/**\n * Clear the cached resolution. Only intended for use in tests.\n */\nexport function resetSopsResolution(): void {\n cached = undefined;\n}\n", "/**\n * Locates the bundled sops binary from the platform-specific npm package.\n * Extracted into its own module for testability \u2014 the resolver imports this\n * so tests can mock it without overriding require.resolve.\n */\nimport * as fs from \"fs\";\nimport * as path from \"path\";\n\n/**\n * Try to locate the bundled sops binary from the platform-specific npm package.\n * Returns the resolved path or null if the package is not installed.\n */\nexport function tryBundled(): string | null {\n const platform = process.platform;\n const arch = process.arch;\n\n // Map Node.js arch names to our package names\n const archName = arch === \"x64\" ? \"x64\" : arch === \"arm64\" ? \"arm64\" : null;\n if (!archName) return null;\n\n // Map Node.js platform names to our package names\n const platformName =\n platform === \"darwin\"\n ? \"darwin\"\n : platform === \"linux\"\n ? \"linux\"\n : platform === \"win32\"\n ? \"win32\"\n : null;\n if (!platformName) return null;\n\n const packageName = `@clef-sh/sops-${platformName}-${archName}`;\n const binName = platform === \"win32\" ? \"sops.exe\" : \"sops\";\n\n try {\n // Use createRequire to resolve the platform package.\n const packageMain = require.resolve(`${packageName}/package.json`);\n const packageDir = path.dirname(packageMain);\n const binPath = path.join(packageDir, \"bin\", binName);\n return fs.existsSync(binPath) ? binPath : null;\n } catch {\n return null;\n }\n}\n", "import {\n DependencyStatus,\n DependencyVersion,\n SopsMissingError,\n SopsVersionError,\n SubprocessRunner,\n} from \"../types\";\nimport { resolveSopsPath } from \"../sops/resolver\";\n\n// Minimum versions \u2014 update .github/workflows/ci.yml when these change\nexport const REQUIREMENTS = {\n sops: \"3.8.0\",\n git: \"2.28.0\",\n} as const;\n\n/**\n * Parse a version string like \"3.8.1\" into [major, minor, patch].\n * Returns null if the string is not a valid semver-like version.\n */\nfunction parseSemver(version: string): [number, number, number] | null {\n const match = version.match(/^(\\d+)\\.(\\d+)\\.(\\d+)/);\n if (!match) return null;\n return [parseInt(match[1], 10), parseInt(match[2], 10), parseInt(match[3], 10)];\n}\n\n/**\n * Returns true if `installed` >= `required` using semver comparison.\n */\nfunction semverSatisfied(installed: string, required: string): boolean {\n const a = parseSemver(installed);\n const b = parseSemver(required);\n if (!a || !b) return false;\n\n if (a[0] !== b[0]) return a[0] > b[0];\n if (a[1] !== b[1]) return a[1] > b[1];\n return a[2] >= b[2];\n}\n\n/**\n * Extract version from sops output.\n * Format: \"sops 3.8.1 (latest)\" or \"sops 3.9.4\"\n */\nfunction parseSopsVersion(stdout: string): string | null {\n const match = stdout.match(/sops\\s+(\\d+\\.\\d+\\.\\d+)/);\n return match ? match[1] : null;\n}\n\n/**\n * Extract version from git output.\n * Format: \"git version 2.43.0\" or \"git version 2.50.1 (Apple Git-155)\"\n */\nfunction parseGitVersion(stdout: string): string | null {\n const match = stdout.match(/git version\\s+(\\d+\\.\\d+\\.\\d+)/);\n return match ? match[1] : null;\n}\n\n/**\n * Get the platform-appropriate install hint for a binary.\n */\nfunction getInstallHint(name: \"sops\" | \"git\"): string {\n const platform = process.platform;\n\n switch (name) {\n case \"sops\":\n if (platform === \"darwin\") return \"brew install sops\";\n return \"see https://github.com/getsops/sops/releases\";\n case \"git\":\n if (platform === \"darwin\") return \"brew install git\";\n if (platform === \"linux\") return \"apt install git\";\n return \"see https://git-scm.com/downloads\";\n }\n}\n\n/**\n * Check a single dependency. Returns null if the binary is not found.\n * Never throws.\n */\nexport async function checkDependency(\n name: \"sops\" | \"git\",\n runner: SubprocessRunner,\n commandOverride?: string,\n): Promise<DependencyVersion | null> {\n try {\n // For sops, use the resolver to find the binary path (unless overridden)\n const resolution = name === \"sops\" && !commandOverride ? resolveSopsPath() : undefined;\n const command = commandOverride ?? (resolution ? resolution.path : name);\n\n const result = await runner.run(command, [\"--version\"]);\n\n if (result.exitCode !== 0) {\n return null;\n }\n\n const output = result.stdout.trim() || result.stderr.trim();\n let installed: string | null = null;\n\n switch (name) {\n case \"sops\":\n installed = parseSopsVersion(output);\n break;\n case \"git\":\n installed = parseGitVersion(output);\n break;\n }\n\n if (!installed) {\n return null;\n }\n\n const required = REQUIREMENTS[name];\n return {\n installed,\n required,\n satisfied: semverSatisfied(installed, required),\n installHint: getInstallHint(name),\n source: resolution?.source,\n resolvedPath: resolution?.path,\n };\n } catch {\n return null;\n }\n}\n\n/**\n * Check sops and git dependencies in parallel.\n */\nexport async function checkAll(runner: SubprocessRunner): Promise<DependencyStatus> {\n const [sops, git] = await Promise.all([\n checkDependency(\"sops\", runner),\n checkDependency(\"git\", runner),\n ]);\n\n return { sops, git };\n}\n\n/**\n * Assert that sops is installed and meets the minimum version.\n * Throws SopsMissingError or SopsVersionError.\n */\nexport async function assertSops(runner: SubprocessRunner, command?: string): Promise<void> {\n const dep = await checkDependency(\"sops\", runner, command);\n\n if (!dep) {\n throw new SopsMissingError(getInstallHint(\"sops\"));\n }\n\n if (!dep.satisfied) {\n throw new SopsVersionError(dep.installed, dep.required, getInstallHint(\"sops\"));\n }\n}\n\n// Exported for testing\nexport { parseSopsVersion, parseGitVersion, semverSatisfied };\n", "/**\n * age key generation using the age-encryption npm package.\n * Dynamic import() is required: age-encryption is ESM-only; this package compiles to CJS.\n */\n\nexport interface AgeIdentity {\n /** AGE-SECRET-KEY-1... armored private key string */\n privateKey: string;\n /** age1... bech32 public key string */\n publicKey: string;\n}\n\n/**\n * Generate a new age key pair using the `age-encryption` npm package.\n *\n * @returns Private key (`AGE-SECRET-KEY-1...` format) and derived public key (`age1...` bech32 format).\n */\nexport async function generateAgeIdentity(): Promise<AgeIdentity> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- dynamic ESM import of CJS-incompatible package\n const { generateIdentity, identityToRecipient } = await import(\"age-encryption\" as any);\n const privateKey = (await generateIdentity()) as string;\n const publicKey = (await identityToRecipient(privateKey)) as string;\n return { privateKey, publicKey };\n}\n\n/**\n * Derive the age public key (`age1...`) from an existing private key (`AGE-SECRET-KEY-1...`).\n */\nexport async function deriveAgePublicKey(privateKey: string): Promise<string> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- dynamic ESM import of CJS-incompatible package\n const { identityToRecipient } = await import(\"age-encryption\" as any);\n return (await identityToRecipient(privateKey)) as string;\n}\n\n/**\n * Format an age private key and public key into the standard key file format.\n * The output includes a `created` timestamp comment and is ready to write to disk.\n *\n * @param privateKey - `AGE-SECRET-KEY-1...` armored private key string.\n * @param publicKey - `age1...` bech32 public key string.\n */\nexport function formatAgeKeyFile(privateKey: string, publicKey: string): string {\n const now = new Date().toISOString();\n return `# created: ${now}\\n# public key: ${publicKey}\\n${privateKey}\\n`;\n}\n", "import * as path from \"path\";\nimport {\n ClefManifest,\n LintIssue,\n LintResult,\n resolveRecipientsForEnvironment,\n ServiceIdentityDefinition,\n} from \"../types\";\nimport { MatrixManager } from \"../matrix/manager\";\nimport { SchemaValidator } from \"../schema/validator\";\nimport { EncryptionBackend } from \"../types\";\nimport { getPendingKeys } from \"../pending/metadata\";\n\n/**\n * Runs matrix completeness, schema validation, SOPS integrity, and key-drift checks.\n *\n * @example\n * ```ts\n * const runner = new LintRunner(matrixManager, schemaValidator, sopsClient);\n * const result = await runner.run(manifest, repoRoot);\n * ```\n */\nexport class LintRunner {\n constructor(\n private readonly matrixManager: MatrixManager,\n private readonly schemaValidator: SchemaValidator,\n private readonly sopsClient: EncryptionBackend,\n ) {}\n\n /**\n * Lint the entire matrix: check missing files, schema errors, SOPS integrity,\n * single-recipient warnings, and cross-environment key drift.\n *\n * @param manifest - Parsed manifest.\n * @param repoRoot - Absolute path to the repository root.\n */\n async run(manifest: ClefManifest, repoRoot: string): Promise<LintResult> {\n const issues: LintIssue[] = [];\n const cells = this.matrixManager.resolveMatrix(manifest, repoRoot);\n let fileCount = 0;\n let pendingCount = 0;\n\n // Category 1: Matrix completeness\n const missingCells = cells.filter((c) => !c.exists);\n for (const cell of missingCells) {\n issues.push({\n severity: \"error\",\n category: \"matrix\",\n file: cell.filePath,\n message: `Missing encrypted file for ${cell.namespace}/${cell.environment}.`,\n fixCommand: `clef init`,\n });\n }\n\n const existingCells = cells.filter((c) => c.exists);\n fileCount = existingCells.length;\n\n // Build a map of keys per namespace to detect cross-env drift\n const namespaceKeys: Record<string, Record<string, Set<string>>> = {};\n\n for (const cell of existingCells) {\n // Category 3: SOPS integrity\n try {\n const isValid = await this.sopsClient.validateEncryption(cell.filePath);\n if (!isValid) {\n issues.push({\n severity: \"error\",\n category: \"sops\",\n file: cell.filePath,\n message: `File is missing valid SOPS encryption metadata.`,\n fixCommand: `sops encrypt -i ${cell.filePath}`,\n });\n continue;\n }\n } catch {\n issues.push({\n severity: \"error\",\n category: \"sops\",\n file: cell.filePath,\n message: `Could not validate SOPS metadata. The file may be corrupted.`,\n });\n continue;\n }\n\n // Decrypt for schema and key-drift checks\n try {\n const decrypted = await this.sopsClient.decrypt(cell.filePath);\n const keys = Object.keys(decrypted.values);\n\n // Track keys per namespace/environment\n if (!namespaceKeys[cell.namespace]) {\n namespaceKeys[cell.namespace] = {};\n }\n namespaceKeys[cell.namespace][cell.environment] = new Set(keys);\n\n // Check SOPS metadata for single-recipient warning\n if (decrypted.metadata.recipients.length <= 1) {\n issues.push({\n severity: \"info\",\n category: \"sops\",\n file: cell.filePath,\n message: `File is encrypted with only ${decrypted.metadata.recipients.length} recipient(s). Consider adding a backup key.`,\n });\n }\n\n // Per-environment recipient drift check\n const envRecipients = resolveRecipientsForEnvironment(manifest, cell.environment);\n if (envRecipients) {\n const expectedKeys = new Set(\n envRecipients.map((r) => (typeof r === \"string\" ? r : r.key)),\n );\n const actualKeys = new Set(decrypted.metadata.recipients);\n for (const expected of expectedKeys) {\n if (!actualKeys.has(expected)) {\n issues.push({\n severity: \"warning\",\n category: \"sops\",\n file: cell.filePath,\n message: `Expected recipient '${expected.slice(0, 4)}\u2026${expected.slice(-8)}' is missing from encrypted file.`,\n fixCommand: `clef recipients add ${expected} -e ${cell.environment}`,\n });\n }\n }\n for (const actual of actualKeys) {\n if (!expectedKeys.has(actual)) {\n issues.push({\n severity: \"warning\",\n category: \"sops\",\n file: cell.filePath,\n message: `Unexpected recipient '${actual.slice(0, 4)}\u2026${actual.slice(-8)}' found in encrypted file.`,\n fixCommand: `clef recipients remove ${actual} -e ${cell.environment}`,\n });\n }\n }\n }\n\n // Category 2: Schema validation\n const ns = manifest.namespaces.find((n) => n.name === cell.namespace);\n if (ns?.schema) {\n const schemaPath = path.join(repoRoot, ns.schema);\n try {\n const schema = this.schemaValidator.loadSchema(schemaPath);\n const result = this.schemaValidator.validate(decrypted.values, schema);\n\n for (const err of result.errors) {\n issues.push({\n severity: \"error\",\n category: \"schema\",\n file: cell.filePath,\n key: err.key,\n message: err.message,\n fixCommand: `clef set ${cell.namespace}/${cell.environment} ${err.key} <value>`,\n });\n }\n\n for (const warn of result.warnings) {\n issues.push({\n severity: \"warning\",\n category: \"schema\",\n file: cell.filePath,\n key: warn.key,\n message: warn.message,\n });\n }\n } catch {\n issues.push({\n severity: \"warning\",\n category: \"schema\",\n file: cell.filePath,\n message: `Could not load schema '${ns.schema}' for validation.`,\n });\n }\n } else {\n // No schema \u2014 flag keys with no schema as info\n for (const key of keys) {\n issues.push({\n severity: \"info\",\n category: \"schema\",\n file: cell.filePath,\n key,\n message: `Key '${key}' has no schema definition. Consider adding a schema for namespace '${cell.namespace}'.`,\n });\n }\n }\n\n // Check for pending keys\n try {\n const pendingKeys = await getPendingKeys(cell.filePath);\n pendingCount += pendingKeys.length;\n for (const pendingKey of pendingKeys) {\n issues.push({\n severity: \"warning\",\n category: \"schema\",\n file: cell.filePath,\n key: pendingKey,\n message: `Value is a random placeholder \\u2014 replace with the real secret.`,\n fixCommand: `clef set ${cell.namespace}/${cell.environment} ${pendingKey}`,\n });\n }\n } catch {\n // Metadata unreadable \u2014 skip pending check\n }\n } catch {\n issues.push({\n severity: \"error\",\n category: \"sops\",\n file: cell.filePath,\n message: `Failed to decrypt file. Ensure you have the correct decryption key.`,\n });\n }\n }\n\n // Detect cross-environment key drift\n for (const [nsName, envKeys] of Object.entries(namespaceKeys)) {\n const allKeys = new Set<string>();\n for (const keys of Object.values(envKeys)) {\n for (const k of keys) allKeys.add(k);\n }\n\n for (const [envName, keys] of Object.entries(envKeys)) {\n for (const key of allKeys) {\n if (!keys.has(key)) {\n const presentIn = Object.entries(envKeys)\n .filter(([, ks]) => ks.has(key))\n .map(([e]) => e);\n const cell = existingCells.find(\n (c) => c.namespace === nsName && c.environment === envName,\n );\n if (cell) {\n issues.push({\n severity: \"warning\",\n category: \"matrix\",\n file: cell.filePath,\n key,\n message: `Key '${key}' is missing in ${envName} but present in ${presentIn.join(\", \")}.`,\n fixCommand: `clef set ${nsName}/${envName} ${key} <value>`,\n });\n }\n }\n }\n }\n }\n\n // Service identity drift checks\n if (manifest.service_identities && manifest.service_identities.length > 0) {\n const siIssues = await this.lintServiceIdentities(\n manifest.service_identities,\n manifest,\n repoRoot,\n existingCells,\n );\n issues.push(...siIssues);\n }\n\n return { issues, fileCount: fileCount + missingCells.length, pendingCount };\n }\n\n /**\n * Lint service identity configurations for drift issues.\n */\n private async lintServiceIdentities(\n identities: ServiceIdentityDefinition[],\n manifest: ClefManifest,\n repoRoot: string,\n existingCells: { namespace: string; environment: string; filePath: string }[],\n ): Promise<LintIssue[]> {\n const issues: LintIssue[] = [];\n const declaredEnvNames = new Set(manifest.environments.map((e) => e.name));\n const declaredNsNames = new Set(manifest.namespaces.map((ns) => ns.name));\n\n for (const si of identities) {\n // Namespace references\n for (const ns of si.namespaces) {\n if (!declaredNsNames.has(ns)) {\n issues.push({\n severity: \"error\",\n category: \"service-identity\",\n file: \"clef.yaml\",\n message: `Service identity '${si.name}' references non-existent namespace '${ns}'.`,\n });\n }\n }\n\n // Environment coverage\n for (const envName of declaredEnvNames) {\n if (!(envName in si.environments)) {\n issues.push({\n severity: \"error\",\n category: \"service-identity\",\n file: \"clef.yaml\",\n message: `Service identity '${si.name}' is missing environment '${envName}'. Manually add an age key pair for this environment in clef.yaml.`,\n });\n }\n }\n\n // Recipient registration on scoped files\n // (KMS-backed environments skip recipient checks)\n for (const cell of existingCells) {\n const envConfig = si.environments[cell.environment];\n if (!envConfig) continue;\n if (!envConfig.recipient) continue;\n\n if (si.namespaces.includes(cell.namespace)) {\n try {\n const metadata = await this.sopsClient.getMetadata(cell.filePath);\n if (!metadata.recipients.includes(envConfig.recipient)) {\n issues.push({\n severity: \"warning\",\n category: \"service-identity\",\n file: cell.filePath,\n message: `Service identity '${si.name}' recipient is not registered in ${cell.namespace}/${cell.environment}.`,\n fixCommand: `clef service create ${si.name} --namespaces ${si.namespaces.join(\",\")}`,\n });\n }\n } catch {\n // Cannot read metadata \u2014 skip\n }\n } else {\n try {\n const metadata = await this.sopsClient.getMetadata(cell.filePath);\n if (metadata.recipients.includes(envConfig.recipient)) {\n issues.push({\n severity: \"warning\",\n category: \"service-identity\",\n file: cell.filePath,\n message: `Service identity '${si.name}' recipient found in ${cell.namespace}/${cell.environment} but namespace is not in scope.`,\n fixCommand: `clef recipients remove ${envConfig.recipient} -e ${cell.environment}`,\n });\n }\n } catch {\n // Cannot read metadata \u2014 skip\n }\n }\n }\n }\n\n return issues;\n }\n\n /**\n * Auto-fix safe issues (scaffold missing matrix files), then re-run lint.\n *\n * @param manifest - Parsed manifest.\n * @param repoRoot - Absolute path to the repository root.\n */\n async fix(manifest: ClefManifest, repoRoot: string): Promise<LintResult> {\n // Auto-fix safe issues: scaffold missing files\n const missingCells = this.matrixManager.detectMissingCells(manifest, repoRoot);\n\n for (const cell of missingCells) {\n await this.matrixManager.scaffoldCell(cell, this.sopsClient, manifest);\n }\n\n // Re-run lint after fixes\n return this.run(manifest, repoRoot);\n }\n}\n", "import { DecryptedFile, ExecOptions, ExportOptions } from \"../types\";\n\n/**\n * Prepares decrypted secrets for consumption via environment injection or shell export.\n *\n * @example\n * ```ts\n * const client = new ConsumptionClient();\n * const env = client.prepareEnvironment(decrypted, process.env, { prefix: \"APP_\" });\n * ```\n */\nexport class ConsumptionClient {\n /**\n * Merges decrypted values into a base environment, respecting --only, --prefix, and --no-override.\n * Returns a new environment record suitable for child_process.spawn.\n */\n prepareEnvironment(\n decryptedFile: DecryptedFile,\n baseEnv: Record<string, string | undefined>,\n options: ExecOptions = {},\n ): Record<string, string> {\n const result: Record<string, string> = {};\n\n // Copy base environment\n for (const [k, v] of Object.entries(baseEnv)) {\n if (v !== undefined) {\n result[k] = v;\n }\n }\n\n let entries = Object.entries(decryptedFile.values);\n\n // --only: filter to specified keys\n if (options.only && options.only.length > 0) {\n const allowed = new Set(options.only);\n entries = entries.filter(([key]) => allowed.has(key));\n }\n\n // Inject values with optional prefix\n for (const [key, value] of entries) {\n const envKey = options.prefix ? `${options.prefix}${key}` : key;\n\n // --no-override: skip keys that already exist in the base environment\n if (options.noOverride && envKey in result) {\n continue;\n }\n\n result[envKey] = value;\n }\n\n return result;\n }\n\n /**\n * Formats decrypted values for stdout output.\n * Values are single-quoted; embedded single quotes are escaped as '\\''.\n */\n formatExport(\n decryptedFile: DecryptedFile,\n format: ExportOptions[\"format\"],\n noExport: boolean,\n ): string {\n if (format !== \"env\") {\n throw new Error(\n `Unsupported export format '${format}'. Only 'env' is supported.\\n` +\n \"Clef does not support formats that encourage writing plaintext secrets to disk.\\n\" +\n \"Use 'clef exec' to inject secrets directly into a process, or 'clef export --format env' to print shell export statements to stdout.\",\n );\n }\n\n const lines: string[] = [];\n const prefix = noExport ? \"\" : \"export \";\n\n for (const [key, value] of Object.entries(decryptedFile.values)) {\n // Single-quote the value; escape embedded single quotes as '\\''\n const escaped = value.replace(/'/g, \"'\\\\''\");\n lines.push(`${prefix}${key}='${escaped}'`);\n }\n\n return lines.join(\"\\n\") + \"\\n\";\n }\n}\n", "import * as path from \"path\";\nimport { ClefManifest } from \"../types\";\nimport { EncryptionBackend } from \"../types\";\nimport { parse, ImportFormat } from \"./parsers\";\nexport type { ImportFormat, ParsedImport } from \"./parsers\";\n\nexport interface ImportOptions {\n format?: ImportFormat;\n prefix?: string;\n keys?: string[];\n overwrite?: boolean;\n dryRun?: boolean;\n stdin?: boolean;\n}\n\nexport interface ImportResult {\n imported: string[];\n skipped: string[];\n failed: Array<{ key: string; error: string }>;\n warnings: string[];\n dryRun: boolean;\n}\n\n/**\n * Imports secrets from `.env`, JSON, or YAML files into encrypted matrix cells.\n *\n * @example\n * ```ts\n * const runner = new ImportRunner(sopsClient);\n * const result = await runner.import(\"app/staging\", null, envContent, manifest, repoRoot, { format: \"dotenv\" });\n * ```\n */\nexport class ImportRunner {\n constructor(private readonly sopsClient: EncryptionBackend) {}\n\n /**\n * Parse a source file and import its key/value pairs into a target `namespace/environment` cell.\n *\n * @param target - Target cell in `namespace/environment` format.\n * @param sourcePath - Source file path used for format detection (pass `null` when reading from stdin).\n * @param content - Raw file content to import.\n * @param manifest - Parsed manifest.\n * @param repoRoot - Absolute path to the repository root.\n * @param options - Import options (format, prefix, key filter, overwrite, dry-run).\n */\n async import(\n target: string,\n sourcePath: string | null,\n content: string,\n manifest: ClefManifest,\n repoRoot: string,\n options: ImportOptions,\n ): Promise<ImportResult> {\n const [ns, env] = target.split(\"/\");\n const filePath = path.join(\n repoRoot,\n manifest.file_pattern.replace(\"{namespace}\", ns).replace(\"{environment}\", env),\n );\n\n // Parse content\n const parsed = parse(content, options.format ?? \"auto\", sourcePath ?? \"\");\n\n // Build candidate key/value pairs\n let candidates = Object.entries(parsed.pairs);\n\n // Apply prefix filter\n if (options.prefix) {\n const prefix = options.prefix;\n candidates = candidates.filter(([key]) => key.startsWith(prefix));\n }\n\n // Apply keys filter\n if (options.keys && options.keys.length > 0) {\n const keySet = new Set(options.keys);\n candidates = candidates.filter(([key]) => keySet.has(key));\n }\n\n const imported: string[] = [];\n const skipped: string[] = [];\n const failed: Array<{ key: string; error: string }> = [];\n const warnings = [...parsed.warnings];\n\n if (options.dryRun) {\n // Dry run: check existing keys but never call encrypt\n let existingKeys: Set<string>;\n try {\n const decrypted = await this.sopsClient.decrypt(filePath);\n existingKeys = new Set(Object.keys(decrypted.values));\n } catch {\n // File may not exist or be inaccessible \u2014 treat as empty\n existingKeys = new Set<string>();\n }\n\n for (const [key] of candidates) {\n if (existingKeys.has(key) && !options.overwrite) {\n skipped.push(key);\n } else {\n imported.push(key);\n }\n }\n\n return { imported, skipped, failed, warnings, dryRun: true };\n }\n\n // Real import\n const decrypted = await this.sopsClient.decrypt(filePath);\n let currentValues: Record<string, string> = { ...decrypted.values };\n const existingKeys = new Set(Object.keys(decrypted.values));\n\n for (const [key, value] of candidates) {\n if (existingKeys.has(key) && !options.overwrite) {\n skipped.push(key);\n continue;\n }\n\n try {\n const newValues = { ...currentValues, [key]: value };\n await this.sopsClient.encrypt(filePath, newValues, manifest, env);\n currentValues = newValues;\n imported.push(key);\n } catch (err) {\n const message = err instanceof Error ? err.message : \"Encryption failed\";\n failed.push({ key, error: message });\n // Do NOT update currentValues, do NOT rollback previous encrypts. Continue with rest.\n }\n }\n\n return { imported, skipped, failed, warnings, dryRun: false };\n }\n}\n", "import * as path from \"path\";\nimport * as YAML from \"yaml\";\n\nexport type ImportFormat = \"dotenv\" | \"json\" | \"yaml\" | \"auto\";\n\nexport interface ParsedImport {\n pairs: Record<string, string>;\n format: Exclude<ImportFormat, \"auto\">;\n skipped: string[];\n warnings: string[];\n}\n\n/**\n * Auto-detect the format of a file from its extension, basename, and content heuristics.\n *\n * @param filePath - File path used for extension and basename detection.\n * @param content - Raw file content used as a fallback heuristic.\n * @returns Detected format (`\"dotenv\"`, `\"json\"`, or `\"yaml\"`).\n */\nexport function detectFormat(filePath: string, content: string): Exclude<ImportFormat, \"auto\"> {\n const base = path.basename(filePath);\n const ext = path.extname(filePath).toLowerCase();\n\n // basename is \".env\" or starts with \".env.\"\n if (base === \".env\" || base.startsWith(\".env.\")) {\n return \"dotenv\";\n }\n\n // ends with \".env\"\n if (base.endsWith(\".env\")) {\n return \"dotenv\";\n }\n\n // extension-based\n if (ext === \".json\") return \"json\";\n if (ext === \".yaml\" || ext === \".yml\") return \"yaml\";\n\n // content heuristics\n const trimmed = content.trimStart();\n if (trimmed.startsWith(\"{\")) {\n return \"json\";\n }\n\n // try JSON.parse \u2014 if it's a non-array object, it's JSON\n try {\n const parsed = JSON.parse(content);\n if (parsed !== null && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n return \"json\";\n }\n } catch {\n // not JSON\n }\n\n // try YAML.parse \u2014 if it's a non-array object, it's YAML\n try {\n const parsed = YAML.parse(content);\n if (parsed !== null && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n return \"yaml\";\n }\n } catch {\n // not YAML\n }\n\n // fallback\n return \"dotenv\";\n}\n\n/**\n * Parse dotenv-formatted content into flat key/value pairs.\n * Supports `export KEY=VALUE`, inline comments, and both single- and double-quoted values.\n */\nexport function parseDotenv(content: string): ParsedImport {\n const pairs: Record<string, string> = {};\n const skipped: string[] = [];\n const warnings: string[] = [];\n\n const lines = content.split(\"\\n\");\n for (const rawLine of lines) {\n let line = rawLine.trim();\n\n // Skip blank lines and comments\n if (!line || line.startsWith(\"#\")) {\n continue;\n }\n\n // Strip \"export \" prefix\n if (line.startsWith(\"export \")) {\n line = line.slice(7);\n }\n\n // Must have KEY=VALUE format\n const eqIdx = line.indexOf(\"=\");\n if (eqIdx === -1) {\n continue;\n }\n\n const key = line.slice(0, eqIdx).trim();\n if (!key) {\n continue;\n }\n\n let value = line.slice(eqIdx + 1);\n\n // Strip inline comments: everything after \" #\" (space-hash)\n const inlineCommentIdx = value.indexOf(\" #\");\n if (inlineCommentIdx !== -1) {\n value = value.slice(0, inlineCommentIdx);\n }\n\n // Strip matching outer quotes (\" or ')\n if (\n (value.startsWith('\"') && value.endsWith('\"')) ||\n (value.startsWith(\"'\") && value.endsWith(\"'\"))\n ) {\n value = value.slice(1, -1);\n }\n\n pairs[key] = value;\n }\n\n return { pairs, format: \"dotenv\", skipped, warnings };\n}\n\n/**\n * Parse a JSON object into flat string key/value pairs.\n * Non-string values (numbers, booleans, nulls, arrays, objects) are skipped with warnings.\n *\n * @throws `Error` If the content is not valid JSON or the root is not an object.\n */\nexport function parseJson(content: string): ParsedImport {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let parsed: any;\n try {\n parsed = JSON.parse(content);\n } catch (err) {\n throw new Error(`Invalid JSON: ${(err as Error).message}`);\n }\n\n if (Array.isArray(parsed)) {\n throw new Error(\n \"JSON root must be an object, not an array. Clef keys are flat key/value pairs.\",\n );\n }\n\n if (parsed === null || typeof parsed !== \"object\") {\n throw new Error(\"JSON root must be an object. Clef keys are flat key/value pairs.\");\n }\n\n const pairs: Record<string, string> = {};\n const skipped: string[] = [];\n const warnings: string[] = [];\n\n for (const [key, value] of Object.entries(parsed as Record<string, unknown>)) {\n if (typeof value === \"string\") {\n pairs[key] = value;\n } else if (value === null) {\n skipped.push(key);\n warnings.push(`${key}: skipped \u2014 value is null, not string`);\n } else if (Array.isArray(value)) {\n skipped.push(key);\n warnings.push(`${key}: skipped \u2014 value is array, not string`);\n } else if (typeof value === \"object\") {\n skipped.push(key);\n warnings.push(`${key}: skipped \u2014 value is nested object, not string`);\n } else {\n // number, boolean\n skipped.push(key);\n warnings.push(`${key}: skipped \u2014 value is ${typeof value}, not string`);\n }\n }\n\n return { pairs, format: \"json\", skipped, warnings };\n}\n\n/**\n * Parse a YAML mapping into flat string key/value pairs.\n * Non-string values are skipped with warnings.\n *\n * @throws `Error` If the content is not valid YAML or the root is not a mapping.\n */\nexport function parseYaml(content: string): ParsedImport {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let parsed: any;\n try {\n parsed = YAML.parse(content);\n } catch (err) {\n throw new Error(`Invalid YAML: ${(err as Error).message}`);\n }\n\n if (Array.isArray(parsed)) {\n throw new Error(\n \"YAML root must be a mapping, not a sequence. Clef keys are flat key/value pairs.\",\n );\n }\n\n if (parsed === null || typeof parsed !== \"object\") {\n throw new Error(\"YAML root must be a mapping. Clef keys are flat key/value pairs.\");\n }\n\n const pairs: Record<string, string> = {};\n const skipped: string[] = [];\n const warnings: string[] = [];\n\n for (const [key, value] of Object.entries(parsed as Record<string, unknown>)) {\n if (typeof value === \"string\") {\n pairs[key] = value;\n } else if (value === null) {\n skipped.push(key);\n warnings.push(`${key}: skipped \u2014 value is null, not string`);\n } else if (Array.isArray(value)) {\n skipped.push(key);\n warnings.push(`${key}: skipped \u2014 value is array, not string`);\n } else if (typeof value === \"object\") {\n skipped.push(key);\n warnings.push(`${key}: skipped \u2014 value is nested object, not string`);\n } else {\n // number, boolean\n skipped.push(key);\n warnings.push(`${key}: skipped \u2014 value is ${typeof value}, not string`);\n }\n }\n\n return { pairs, format: \"yaml\", skipped, warnings };\n}\n\n/**\n * Parse content in the given format (or auto-detect) and return flat key/value pairs.\n *\n * @param content - Raw file content to parse.\n * @param format - Explicit format, or `\"auto\"` to detect from `filePath` and content.\n * @param filePath - File path used for format detection when `format` is `\"auto\"`.\n */\nexport function parse(content: string, format: ImportFormat, filePath?: string): ParsedImport {\n const resolved: Exclude<ImportFormat, \"auto\"> =\n format === \"auto\" ? detectFormat(filePath ?? \"\", content) : format;\n\n switch (resolved) {\n case \"dotenv\":\n return parseDotenv(content);\n case \"json\":\n return parseJson(content);\n case \"yaml\":\n return parseYaml(content);\n }\n}\n", "import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as YAML from \"yaml\";\nimport { ClefManifest, EncryptionBackend } from \"../types\";\nimport { MatrixManager } from \"../matrix/manager\";\nimport { validateAgePublicKey, keyPreview } from \"./validator\";\nimport { CLEF_MANIFEST_FILENAME } from \"../manifest/parser\";\n\nexport interface Recipient {\n key: string;\n preview: string;\n label?: string;\n}\n\nexport interface RecipientsResult {\n added?: Recipient;\n removed?: Recipient;\n recipients: Recipient[];\n reEncryptedFiles: string[];\n failedFiles: string[];\n warnings: string[];\n}\n\ninterface RawRecipientEntry {\n key: string;\n label?: string;\n}\n\nfunction parseRecipientEntry(entry: unknown): RawRecipientEntry {\n if (typeof entry === \"string\") {\n return { key: entry };\n }\n if (typeof entry === \"object\" && entry !== null) {\n const obj = entry as Record<string, unknown>;\n return {\n key: String(obj.key ?? \"\"),\n ...(typeof obj.label === \"string\" ? { label: obj.label } : {}),\n };\n }\n return { key: \"\" };\n}\n\nfunction toRecipient(entry: RawRecipientEntry): Recipient {\n return {\n key: entry.key,\n preview: keyPreview(entry.key),\n ...(entry.label ? { label: entry.label } : {}),\n };\n}\n\nfunction readManifestYaml(repoRoot: string): Record<string, unknown> {\n const manifestPath = path.join(repoRoot, CLEF_MANIFEST_FILENAME);\n const raw = fs.readFileSync(manifestPath, \"utf-8\");\n return YAML.parse(raw) as Record<string, unknown>;\n}\n\nfunction writeManifestYaml(repoRoot: string, doc: Record<string, unknown>): void {\n const manifestPath = path.join(repoRoot, CLEF_MANIFEST_FILENAME);\n fs.writeFileSync(manifestPath, YAML.stringify(doc), \"utf-8\");\n}\n\nfunction getRecipientsArray(doc: Record<string, unknown>): unknown[] {\n const sops = doc.sops as Record<string, unknown> | undefined;\n if (!sops) return [];\n const age = sops.age as Record<string, unknown> | undefined;\n if (!age) return [];\n const recipients = age.recipients;\n if (!Array.isArray(recipients)) return [];\n return recipients;\n}\n\nfunction ensureRecipientsArray(doc: Record<string, unknown>): unknown[] {\n if (!doc.sops || typeof doc.sops !== \"object\") {\n doc.sops = {};\n }\n const sops = doc.sops as Record<string, unknown>;\n if (!sops.age || typeof sops.age !== \"object\") {\n sops.age = {};\n }\n const age = sops.age as Record<string, unknown>;\n if (!Array.isArray(age.recipients)) {\n age.recipients = [];\n }\n return age.recipients as unknown[];\n}\n\nfunction getEnvironmentRecipientsArray(doc: Record<string, unknown>, envName: string): unknown[] {\n const environments = doc.environments as Record<string, unknown>[] | undefined;\n if (!Array.isArray(environments)) return [];\n const env = environments.find((e) => (e as Record<string, unknown>).name === envName) as\n | Record<string, unknown>\n | undefined;\n if (!env) return [];\n const recipients = env.recipients;\n if (!Array.isArray(recipients)) return [];\n return recipients;\n}\n\nfunction ensureEnvironmentRecipientsArray(\n doc: Record<string, unknown>,\n envName: string,\n): unknown[] {\n const environments = doc.environments as Record<string, unknown>[] | undefined;\n if (!Array.isArray(environments)) {\n throw new Error(`No environments array in manifest.`);\n }\n const env = environments.find((e) => (e as Record<string, unknown>).name === envName) as\n | Record<string, unknown>\n | undefined;\n if (!env) {\n throw new Error(`Environment '${envName}' not found in manifest.`);\n }\n if (!Array.isArray(env.recipients)) {\n env.recipients = [];\n }\n return env.recipients as unknown[];\n}\n\n/**\n * Manages age recipient keys in the manifest and re-encrypts matrix files on add/remove.\n * All add/remove operations are transactional \u2014 a failure triggers a full rollback.\n *\n * @example\n * ```ts\n * const manager = new RecipientManager(runner, matrixManager);\n * const result = await manager.add(\"age1...\", \"Alice\", manifest, repoRoot);\n * ```\n */\nexport class RecipientManager {\n constructor(\n private readonly encryption: EncryptionBackend,\n private readonly matrixManager: MatrixManager,\n ) {}\n\n /**\n * List all age recipients declared in the manifest.\n *\n * @param manifest - Parsed manifest.\n * @param repoRoot - Absolute path to the repository root.\n * @param environment - Optional environment name to list per-env recipients.\n */\n async list(manifest: ClefManifest, repoRoot: string, environment?: string): Promise<Recipient[]> {\n if (environment) {\n const env = manifest.environments.find((e) => e.name === environment);\n if (!env) {\n throw new Error(`Environment '${environment}' not found in manifest.`);\n }\n }\n const doc = readManifestYaml(repoRoot);\n const entries = environment\n ? getEnvironmentRecipientsArray(doc, environment)\n : getRecipientsArray(doc);\n return entries.map((entry) => toRecipient(parseRecipientEntry(entry)));\n }\n\n /**\n * Add a new age recipient and re-encrypt all existing matrix files.\n * Rolls back the manifest and any already-re-encrypted files on failure.\n *\n * @param key - age public key to add (`age1...`).\n * @param label - Optional human-readable label for the recipient.\n * @param manifest - Parsed manifest.\n * @param repoRoot - Absolute path to the repository root.\n * @param environment - Optional environment name to scope the operation.\n * @throws `Error` If the key is invalid or already present.\n */\n async add(\n key: string,\n label: string | undefined,\n manifest: ClefManifest,\n repoRoot: string,\n environment?: string,\n ): Promise<RecipientsResult> {\n const validation = validateAgePublicKey(key);\n if (!validation.valid) {\n throw new Error(validation.error);\n }\n const normalizedKey = validation.key!;\n\n if (environment) {\n const env = manifest.environments.find((e) => e.name === environment);\n if (!env) {\n throw new Error(`Environment '${environment}' not found in manifest.`);\n }\n }\n\n // Read current manifest\n const doc = readManifestYaml(repoRoot);\n const currentEntries = environment\n ? getEnvironmentRecipientsArray(doc, environment)\n : getRecipientsArray(doc);\n const currentKeys = currentEntries.map((e) => parseRecipientEntry(e).key);\n\n if (currentKeys.includes(normalizedKey)) {\n throw new Error(`Recipient '${keyPreview(normalizedKey)}' is already present.`);\n }\n\n // Save backup of manifest for rollback\n const manifestPath = path.join(repoRoot, CLEF_MANIFEST_FILENAME);\n const manifestBackup = fs.readFileSync(manifestPath, \"utf-8\");\n\n // Add new recipient to manifest\n const recipients = environment\n ? ensureEnvironmentRecipientsArray(doc, environment)\n : ensureRecipientsArray(doc);\n if (label) {\n recipients.push({ key: normalizedKey, label });\n } else {\n recipients.push(normalizedKey);\n }\n writeManifestYaml(repoRoot, doc);\n\n // Re-encrypt matching files\n const allCells = this.matrixManager.resolveMatrix(manifest, repoRoot).filter((c) => c.exists);\n const cells = environment ? allCells.filter((c) => c.environment === environment) : allCells;\n const reEncryptedFiles: string[] = [];\n const failedFiles: string[] = [];\n const fileBackups = new Map<string, string>();\n\n for (const cell of cells) {\n try {\n // Save file backup before re-encryption\n fileBackups.set(cell.filePath, fs.readFileSync(cell.filePath, \"utf-8\"));\n\n await this.encryption.addRecipient(cell.filePath, normalizedKey);\n\n reEncryptedFiles.push(cell.filePath);\n } catch {\n failedFiles.push(cell.filePath);\n\n // Rollback: restore manifest\n fs.writeFileSync(manifestPath, manifestBackup, \"utf-8\");\n\n // Rollback: restore previously re-encrypted files\n for (const reEncryptedFile of reEncryptedFiles) {\n const backup = fileBackups.get(reEncryptedFile);\n if (backup) {\n fs.writeFileSync(reEncryptedFile, backup, \"utf-8\");\n }\n }\n\n // Re-read the restored manifest for the result\n const restoredDoc = readManifestYaml(repoRoot);\n const restoredEntries = environment\n ? getEnvironmentRecipientsArray(restoredDoc, environment)\n : getRecipientsArray(restoredDoc);\n const restoredRecipients = restoredEntries.map((e) => toRecipient(parseRecipientEntry(e)));\n\n return {\n added: toRecipient({ key: normalizedKey, label }),\n recipients: restoredRecipients,\n reEncryptedFiles: [],\n failedFiles,\n warnings: [\"Rollback completed: manifest and re-encrypted files have been restored.\"],\n };\n }\n }\n\n // Build final recipient list\n const updatedDoc = readManifestYaml(repoRoot);\n const updatedEntries = environment\n ? getEnvironmentRecipientsArray(updatedDoc, environment)\n : getRecipientsArray(updatedDoc);\n const finalRecipients = updatedEntries.map((e) => toRecipient(parseRecipientEntry(e)));\n\n return {\n added: toRecipient({ key: normalizedKey, label }),\n recipients: finalRecipients,\n reEncryptedFiles,\n failedFiles,\n warnings: [],\n };\n }\n\n /**\n * Remove an age recipient and re-encrypt all existing matrix files.\n * Rolls back on failure. Note: re-encryption removes _future_ access only;\n * rotate secret values to fully revoke access.\n *\n * @param key - age public key to remove.\n * @param manifest - Parsed manifest.\n * @param repoRoot - Absolute path to the repository root.\n * @param environment - Optional environment name to scope the operation.\n * @throws `Error` If the key is not in the manifest.\n */\n async remove(\n key: string,\n manifest: ClefManifest,\n repoRoot: string,\n environment?: string,\n ): Promise<RecipientsResult> {\n const trimmedKey = key.trim();\n\n if (environment) {\n const env = manifest.environments.find((e) => e.name === environment);\n if (!env) {\n throw new Error(`Environment '${environment}' not found in manifest.`);\n }\n }\n\n // Read current manifest\n const doc = readManifestYaml(repoRoot);\n const currentEntries = environment\n ? getEnvironmentRecipientsArray(doc, environment)\n : getRecipientsArray(doc);\n const parsed = currentEntries.map((e) => parseRecipientEntry(e));\n const matchIndex = parsed.findIndex((p) => p.key === trimmedKey);\n\n if (matchIndex === -1) {\n throw new Error(`Recipient '${keyPreview(trimmedKey)}' is not in the manifest.`);\n }\n\n const removedEntry = parsed[matchIndex];\n\n // Save backup of manifest for rollback\n const manifestPath = path.join(repoRoot, CLEF_MANIFEST_FILENAME);\n const manifestBackup = fs.readFileSync(manifestPath, \"utf-8\");\n\n // Remove recipient from manifest\n const recipients = environment\n ? ensureEnvironmentRecipientsArray(doc, environment)\n : ensureRecipientsArray(doc);\n recipients.splice(matchIndex, 1);\n writeManifestYaml(repoRoot, doc);\n\n // Re-encrypt matching files\n const allCells = this.matrixManager.resolveMatrix(manifest, repoRoot).filter((c) => c.exists);\n const cells = environment ? allCells.filter((c) => c.environment === environment) : allCells;\n const reEncryptedFiles: string[] = [];\n const failedFiles: string[] = [];\n const fileBackups = new Map<string, string>();\n\n for (const cell of cells) {\n try {\n // Save file backup before re-encryption\n fileBackups.set(cell.filePath, fs.readFileSync(cell.filePath, \"utf-8\"));\n\n await this.encryption.removeRecipient(cell.filePath, trimmedKey);\n\n reEncryptedFiles.push(cell.filePath);\n } catch {\n failedFiles.push(cell.filePath);\n\n // Rollback: restore manifest\n fs.writeFileSync(manifestPath, manifestBackup, \"utf-8\");\n\n // Rollback: restore previously re-encrypted files\n for (const reEncryptedFile of reEncryptedFiles) {\n const backup = fileBackups.get(reEncryptedFile);\n if (backup) {\n fs.writeFileSync(reEncryptedFile, backup, \"utf-8\");\n }\n }\n\n // Re-read the restored manifest for the result\n const restoredDoc = readManifestYaml(repoRoot);\n const restoredEntries = environment\n ? getEnvironmentRecipientsArray(restoredDoc, environment)\n : getRecipientsArray(restoredDoc);\n const restoredRecipients = restoredEntries.map((e) => toRecipient(parseRecipientEntry(e)));\n\n return {\n removed: toRecipient(removedEntry),\n recipients: restoredRecipients,\n reEncryptedFiles: [],\n failedFiles,\n warnings: [\n \"Rollback completed: manifest and re-encrypted files have been restored.\",\n \"Re-encryption removes future access, not past access. Rotate secret values to complete revocation.\",\n ],\n };\n }\n }\n\n // Build final recipient list\n const updatedDoc = readManifestYaml(repoRoot);\n const updatedEntries = environment\n ? getEnvironmentRecipientsArray(updatedDoc, environment)\n : getRecipientsArray(updatedDoc);\n const finalRecipients = updatedEntries.map((e) => toRecipient(parseRecipientEntry(e)));\n\n return {\n removed: toRecipient(removedEntry),\n recipients: finalRecipients,\n reEncryptedFiles,\n failedFiles,\n warnings: [\n \"Re-encryption removes future access, not past access. Rotate secret values to complete revocation.\",\n ],\n };\n }\n}\n", "import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as YAML from \"yaml\";\n\nexport const REQUESTS_FILENAME = \".clef-requests.yaml\";\n\nconst HEADER_COMMENT =\n \"# Pending recipient access requests. Approve with: clef recipients approve <label>\\n\";\n\nexport interface RecipientRequest {\n key: string;\n label: string;\n requestedAt: Date;\n environment?: string;\n}\n\ninterface RawRequest {\n key: string;\n label: string;\n requested_at: string;\n environment?: string;\n}\n\nexport function requestsFilePath(repoRoot: string): string {\n return path.join(repoRoot, REQUESTS_FILENAME);\n}\n\n/** Load all pending requests. Returns empty array if file is missing or malformed. */\nexport function loadRequests(repoRoot: string): RecipientRequest[] {\n const filePath = requestsFilePath(repoRoot);\n try {\n if (!fs.existsSync(filePath)) return [];\n const content = fs.readFileSync(filePath, \"utf-8\");\n const parsed = YAML.parse(content);\n if (!parsed || !Array.isArray(parsed.requests)) return [];\n return parsed.requests.map((r: RawRequest) => ({\n key: r.key,\n label: r.label,\n requestedAt: new Date(r.requested_at),\n environment: r.environment,\n }));\n } catch {\n return [];\n }\n}\n\n/** Save requests to disk. Deletes the file if no requests remain. */\nexport function saveRequests(repoRoot: string, requests: RecipientRequest[]): void {\n const filePath = requestsFilePath(repoRoot);\n if (requests.length === 0) {\n try {\n fs.unlinkSync(filePath);\n } catch {\n // File may not exist\n }\n return;\n }\n const data = {\n requests: requests.map((r) => {\n const raw: RawRequest = {\n key: r.key,\n label: r.label,\n requested_at: r.requestedAt.toISOString(),\n };\n if (r.environment) raw.environment = r.environment;\n return raw;\n }),\n };\n fs.writeFileSync(filePath, HEADER_COMMENT + YAML.stringify(data), \"utf-8\");\n}\n\n/**\n * Add or update a request. If a request with the same key already exists,\n * update its label, timestamp, and environment. Returns the upserted request.\n */\nexport function upsertRequest(\n repoRoot: string,\n key: string,\n label: string,\n environment?: string,\n): RecipientRequest {\n const requests = loadRequests(repoRoot);\n const now = new Date();\n const request: RecipientRequest = { key, label, requestedAt: now, environment };\n\n const existingIndex = requests.findIndex((r) => r.key === key);\n if (existingIndex >= 0) {\n requests[existingIndex] = request;\n } else {\n requests.push(request);\n }\n\n saveRequests(repoRoot, requests);\n return request;\n}\n\n/**\n * Remove a request by matching against label (case-insensitive) or key (exact).\n * Returns the removed request, or null if not found.\n */\nexport function removeRequest(repoRoot: string, identifier: string): RecipientRequest | null {\n const requests = loadRequests(repoRoot);\n const match = findInList(requests, identifier);\n if (!match) return null;\n\n const filtered = requests.filter((r) => r.key !== match.key);\n saveRequests(repoRoot, filtered);\n return match;\n}\n\n/**\n * Find a request by label (case-insensitive) or key (exact match).\n * Returns null if not found.\n */\nexport function findRequest(repoRoot: string, identifier: string): RecipientRequest | null {\n const requests = loadRequests(repoRoot);\n return findInList(requests, identifier);\n}\n\nfunction findInList(requests: RecipientRequest[], identifier: string): RecipientRequest | null {\n const lower = identifier.toLowerCase();\n // Match by label (case-insensitive)\n const byLabel = requests.find((r) => r.label.toLowerCase() === lower);\n if (byLabel) return byLabel;\n // Match by key (exact)\n const byKey = requests.find((r) => r.key === identifier);\n return byKey ?? null;\n}\n", "import * as path from \"path\";\nimport { ManifestParser, CLEF_MANIFEST_FILENAME } from \"../manifest/parser\";\nimport { MatrixManager } from \"../matrix/manager\";\nimport { readSopsKeyNames } from \"../sops/keys\";\nimport { DriftIssue, DriftResult } from \"../types\";\n\n/**\n * Compares key sets across two local Clef repositories without decryption.\n *\n * SOPS files store key names in plaintext \u2014 only values are encrypted.\n * This means drift detection works without the `sops` binary or any\n * decryption keys. The detector reads `.enc.yaml` files as plain YAML,\n * strips the `sops` metadata key, and compares the remaining top-level\n * keys across all environments from both repos within each shared namespace.\n */\nexport class DriftDetector {\n private parser = new ManifestParser();\n private matrix = new MatrixManager();\n\n /**\n * Compare key sets between two Clef repos.\n *\n * @param localRoot - Path to the first (local) Clef repository.\n * @param remoteRoot - Path to the second (remote/other) Clef repository.\n * @param namespaceFilter - Optional list of namespace names to scope comparison.\n * @returns Drift result with any issues found.\n */\n detect(localRoot: string, remoteRoot: string, namespaceFilter?: string[]): DriftResult {\n const localManifest = this.parser.parse(path.join(localRoot, CLEF_MANIFEST_FILENAME));\n const remoteManifest = this.parser.parse(path.join(remoteRoot, CLEF_MANIFEST_FILENAME));\n\n const localCells = this.matrix.resolveMatrix(localManifest, localRoot);\n const remoteCells = this.matrix.resolveMatrix(remoteManifest, remoteRoot);\n\n const localEnvNames = localManifest.environments.map((e) => e.name);\n const remoteEnvNames = remoteManifest.environments.map((e) => e.name);\n\n // Find shared namespaces\n const localNsNames = new Set(localManifest.namespaces.map((n) => n.name));\n const remoteNsNames = new Set(remoteManifest.namespaces.map((n) => n.name));\n let sharedNamespaces = [...localNsNames].filter((n) => remoteNsNames.has(n));\n\n if (namespaceFilter && namespaceFilter.length > 0) {\n const filterSet = new Set(namespaceFilter);\n sharedNamespaces = sharedNamespaces.filter((n) => filterSet.has(n));\n }\n\n const issues: DriftIssue[] = [];\n let namespacesClean = 0;\n\n // Compute shared environments so drift detection only compares environments\n // present in both repos. Without this, an environment that exists in only\n // one repo would cause false-positive \"missing key\" reports.\n const remoteEnvSet = new Set(remoteEnvNames);\n const sharedEnvSet = new Set(localEnvNames.filter((e) => remoteEnvSet.has(e)));\n\n for (const ns of sharedNamespaces) {\n const localKeyEnvs = this.collectKeyEnvs(localCells, ns, sharedEnvSet);\n const remoteKeyEnvs = this.collectKeyEnvs(remoteCells, ns, sharedEnvSet);\n\n let nsClean = true;\n\n const reportDrift = (\n sourceMap: Map<string, Set<string>>,\n targetMap: Map<string, Set<string>>,\n direction: string,\n ) => {\n for (const [key, sourceEnvs] of sourceMap) {\n const targetEnvs = targetMap.get(key);\n const missingFrom = [...sourceEnvs].filter((e) => !targetEnvs?.has(e)).sort();\n if (missingFrom.length > 0) {\n nsClean = false;\n issues.push({\n namespace: ns,\n key,\n presentIn: [...sourceEnvs].sort(),\n missingFrom,\n message: `Key '${key}' in namespace '${ns}' exists in ${direction} [${[...sourceEnvs].sort().join(\", \")}] but is missing from [${missingFrom.join(\", \")}]`,\n });\n }\n }\n };\n\n reportDrift(remoteKeyEnvs, localKeyEnvs, \"remote\");\n reportDrift(localKeyEnvs, remoteKeyEnvs, \"local\");\n\n if (nsClean) namespacesClean++;\n }\n\n return {\n issues,\n namespacesCompared: sharedNamespaces.length,\n namespacesClean,\n localEnvironments: localEnvNames,\n remoteEnvironments: remoteEnvNames,\n };\n }\n\n private collectKeyEnvs(\n cells: { namespace: string; environment: string; filePath: string; exists: boolean }[],\n ns: string,\n sharedEnvSet: Set<string>,\n ): Map<string, Set<string>> {\n const keyEnvs = new Map<string, Set<string>>();\n for (const cell of cells) {\n if (cell.namespace !== ns || !sharedEnvSet.has(cell.environment)) continue;\n const keys = readSopsKeyNames(cell.filePath);\n if (keys === null) continue;\n for (const key of keys) {\n if (!keyEnvs.has(key)) keyEnvs.set(key, new Set());\n keyEnvs.get(key)!.add(cell.environment);\n }\n }\n return keyEnvs;\n }\n}\n", "import * as path from \"path\";\nimport {\n ClefManifest,\n ClefReport,\n CLEF_REPORT_SCHEMA_VERSION,\n EncryptionBackend,\n MatrixCell,\n ReportCellMetadata,\n ReportManifestStructure,\n ReportMatrixCell,\n ReportPolicy,\n ReportRecipientSummary,\n ReportRepoIdentity,\n SubprocessRunner,\n} from \"../types\";\nimport { ManifestParser } from \"../manifest/parser\";\nimport { MatrixManager } from \"../matrix/manager\";\nimport { SchemaValidator } from \"../schema/validator\";\nimport { LintRunner } from \"../lint/runner\";\nimport { getPendingKeys } from \"../pending/metadata\";\nimport { checkDependency } from \"../dependencies/checker\";\nimport { ReportSanitizer } from \"./sanitizer\";\nimport { readSopsKeyNames } from \"../sops/keys\";\n\n/**\n * Orchestrates all data-gathering for a `clef report` invocation.\n * Matrix key counts are read from SOPS YAML directly (no decryption).\n * Policy issues are gathered via LintRunner then sanitized.\n */\nexport class ReportGenerator {\n constructor(\n private readonly runner: SubprocessRunner,\n private readonly sopsClient: EncryptionBackend,\n private readonly matrixManager: MatrixManager,\n private readonly schemaValidator: SchemaValidator,\n ) {}\n\n /**\n * Generate a full {@link ClefReport} for the given repository root.\n * Each section gathers data independently \u2014 partial failures return empty\n * values rather than aborting the entire report.\n *\n * @param repoRoot - Absolute path to the repository root.\n * @param clefVersion - The running CLI version string.\n * @param options - Optional namespace/environment filters.\n */\n async generate(\n repoRoot: string,\n clefVersion: string,\n options?: { namespaceFilter?: string[]; environmentFilter?: string[] },\n ): Promise<ClefReport> {\n let manifest: ClefManifest | null = null;\n try {\n const parser = new ManifestParser();\n manifest = parser.parse(path.join(repoRoot, \"clef.yaml\"));\n } catch {\n // Manifest parse failure \u2014 return minimal report\n const emptyManifest: ReportManifestStructure = {\n manifestVersion: 0,\n filePattern: \"\",\n environments: [],\n namespaces: [],\n defaultBackend: \"\",\n };\n return {\n schemaVersion: CLEF_REPORT_SCHEMA_VERSION,\n repoIdentity: await this.buildRepoIdentity(repoRoot, clefVersion),\n manifest: emptyManifest,\n matrix: [],\n policy: { issueCount: { error: 0, warning: 0, info: 0 }, issues: [] },\n recipients: {},\n };\n }\n\n const [repoIdentity, matrixCells, policy] = await Promise.all([\n this.buildRepoIdentity(repoRoot, clefVersion),\n this.buildMatrixCells(manifest, repoRoot, options),\n this.buildPolicy(manifest, repoRoot),\n ]);\n\n return {\n schemaVersion: CLEF_REPORT_SCHEMA_VERSION,\n repoIdentity,\n manifest: this.buildManifestStructure(manifest),\n matrix: matrixCells,\n policy,\n recipients: this.buildRecipients(matrixCells),\n };\n }\n\n private async buildRepoIdentity(\n repoRoot: string,\n clefVersion: string,\n ): Promise<ReportRepoIdentity> {\n let repoOrigin = \"\";\n let commitSha = \"\";\n let branch = \"\";\n let commitTimestamp = \"\";\n let sopsVersion: string | null = null;\n\n try {\n const r = await this.runner.run(\"git\", [\"remote\", \"get-url\", \"origin\"], { cwd: repoRoot });\n if (r.exitCode === 0) repoOrigin = this.normalizeRepoOrigin(r.stdout.trim());\n } catch {\n /* ignore */\n }\n\n try {\n const r = await this.runner.run(\"git\", [\"rev-parse\", \"HEAD\"], { cwd: repoRoot });\n if (r.exitCode === 0) commitSha = r.stdout.trim();\n } catch {\n /* ignore */\n }\n\n try {\n const r = await this.runner.run(\"git\", [\"branch\", \"--show-current\"], { cwd: repoRoot });\n if (r.exitCode === 0) branch = r.stdout.trim();\n } catch {\n /* ignore */\n }\n\n try {\n const r = await this.runner.run(\"git\", [\"log\", \"-1\", \"--format=%cI\"], { cwd: repoRoot });\n if (r.exitCode === 0) commitTimestamp = r.stdout.trim();\n } catch {\n /* ignore */\n }\n\n try {\n const dep = await checkDependency(\"sops\", this.runner);\n sopsVersion = dep?.installed ?? null;\n } catch {\n /* ignore */\n }\n\n return {\n repoOrigin,\n commitSha,\n branch,\n commitTimestamp,\n reportGeneratedAt: new Date().toISOString(),\n clefVersion,\n sopsVersion,\n };\n }\n\n private normalizeRepoOrigin(rawUrl: string): string {\n const sshMatch = rawUrl.match(/^git@([^:]+):(.+?)(?:\\.git)?$/);\n if (sshMatch) return `${sshMatch[1]}/${sshMatch[2]}`;\n const httpsMatch = rawUrl.match(/^https?:\\/\\/([^/]+)\\/(.+?)(?:\\.git)?$/);\n if (httpsMatch) return `${httpsMatch[1]}/${httpsMatch[2]}`;\n return rawUrl.replace(/\\.git$/, \"\");\n }\n\n private buildManifestStructure(manifest: ClefManifest): ReportManifestStructure {\n return {\n manifestVersion: manifest.version,\n filePattern: manifest.file_pattern,\n environments: manifest.environments.map((e) => ({\n name: e.name,\n protected: e.protected ?? false,\n })),\n namespaces: manifest.namespaces.map((ns) => ({\n name: ns.name,\n hasSchema: !!ns.schema,\n owners: ns.owners ?? [],\n })),\n defaultBackend: manifest.sops.default_backend,\n };\n }\n\n private async buildMatrixCells(\n manifest: ClefManifest,\n repoRoot: string,\n options?: { namespaceFilter?: string[]; environmentFilter?: string[] },\n ): Promise<ReportMatrixCell[]> {\n const allCells = this.matrixManager.resolveMatrix(manifest, repoRoot);\n const cells = allCells.filter((cell) => {\n const nsOk =\n !options?.namespaceFilter?.length || options.namespaceFilter.includes(cell.namespace);\n const envOk =\n !options?.environmentFilter?.length || options.environmentFilter.includes(cell.environment);\n return nsOk && envOk;\n });\n\n const result: ReportMatrixCell[] = [];\n\n for (const cell of cells) {\n result.push(await this.buildCell(cell));\n }\n\n return result;\n }\n\n private async buildCell(cell: MatrixCell): Promise<ReportMatrixCell> {\n if (!cell.exists) {\n return {\n namespace: cell.namespace,\n environment: cell.environment,\n filePath: cell.filePath,\n exists: false,\n keyCount: 0,\n pendingCount: 0,\n metadata: null,\n };\n }\n\n const keyCount = this.readKeyCount(cell.filePath);\n\n let pendingCount = 0;\n try {\n const pending = await getPendingKeys(cell.filePath);\n pendingCount = pending.length;\n } catch {\n /* ignore */\n }\n\n let metadata: ReportCellMetadata | null = null;\n try {\n const sopsMetadata = await this.sopsClient.getMetadata(cell.filePath);\n metadata = {\n backend: sopsMetadata.backend,\n recipients: sopsMetadata.recipients,\n lastModified: sopsMetadata.lastModified?.toISOString() ?? null,\n };\n } catch {\n /* ignore */\n }\n\n return {\n namespace: cell.namespace,\n environment: cell.environment,\n filePath: cell.filePath,\n exists: true,\n keyCount,\n pendingCount,\n metadata,\n };\n }\n\n private readKeyCount(filePath: string): number {\n return readSopsKeyNames(filePath)?.length ?? 0;\n }\n\n private async buildPolicy(manifest: ClefManifest, repoRoot: string): Promise<ReportPolicy> {\n try {\n const lintRunner = new LintRunner(this.matrixManager, this.schemaValidator, this.sopsClient);\n const lintResult = await lintRunner.run(manifest, repoRoot);\n return new ReportSanitizer().sanitize(lintResult.issues);\n } catch {\n return { issueCount: { error: 0, warning: 0, info: 0 }, issues: [] };\n }\n }\n\n private buildRecipients(cells: ReportMatrixCell[]): Record<string, ReportRecipientSummary> {\n const recipientMap = new Map<\n string,\n { type: string; environments: Set<string>; fileCount: number }\n >();\n\n for (const cell of cells) {\n if (!cell.metadata) continue;\n for (const recipient of cell.metadata.recipients) {\n const type = this.inferRecipientType(recipient);\n const existing = recipientMap.get(recipient);\n if (existing) {\n existing.environments.add(cell.environment);\n existing.fileCount++;\n } else {\n recipientMap.set(recipient, {\n type,\n environments: new Set([cell.environment]),\n fileCount: 1,\n });\n }\n }\n }\n\n const result: Record<string, ReportRecipientSummary> = {};\n for (const [recipient, data] of recipientMap.entries()) {\n result[recipient] = {\n type: data.type,\n environments: Array.from(data.environments),\n fileCount: data.fileCount,\n };\n }\n return result;\n }\n\n private inferRecipientType(recipient: string): string {\n if (recipient.startsWith(\"age1\")) return \"age\";\n if (recipient.startsWith(\"arn:aws:kms:\")) return \"awskms\";\n if (recipient.includes(\"projects/\") && recipient.includes(\"cryptoKeys/\")) return \"gcpkms\";\n return \"pgp\";\n }\n}\n", "import { LintIssue, ReportIssueCounts, ReportPolicy, ReportPolicyIssue } from \"../types\";\n\n/**\n * Transforms raw `LintIssue[]` from LintRunner into `ReportPolicy` with all\n * key names stripped and similar issues aggregated into counts.\n *\n * This is the trust boundary for Clef Pro: nothing emitted by this class\n * should contain a secret key name.\n */\nexport class ReportSanitizer {\n sanitize(lintIssues: LintIssue[]): ReportPolicy {\n const output: ReportPolicyIssue[] = [];\n\n // \u2500\u2500 Schema issues with a key field \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n const schemaWithKey = lintIssues.filter((i) => i.category === \"schema\" && i.key !== undefined);\n\n // Schema errors \u2192 group by file: \"N keys fail schema validation\"\n const schemaErrors = schemaWithKey.filter((i) => i.severity === \"error\");\n this.groupByFile(schemaErrors).forEach((issues, file) => {\n const n = issues.length;\n output.push({\n severity: \"error\",\n category: \"schema\",\n file,\n count: n,\n message: `${n} key${n !== 1 ? \"s\" : \"\"} fail schema validation`,\n });\n });\n\n // Schema warnings that are pending placeholders \u2192 group by file, reclassify to info/matrix\n const pendingWarnings = schemaWithKey.filter(\n (i) => i.severity === \"warning\" && i.message.includes(\"placeholder\"),\n );\n this.groupByFile(pendingWarnings).forEach((issues, file) => {\n const n = issues.length;\n output.push({\n severity: \"info\",\n category: \"matrix\",\n file,\n count: n,\n message: `${n} pending key${n !== 1 ? \"s\" : \"\"} awaiting values`,\n });\n });\n\n // Schema warnings that are NOT pending \u2192 group by file: \"N keys have schema warnings\"\n const schemaWarnings = schemaWithKey.filter(\n (i) => i.severity === \"warning\" && !i.message.includes(\"placeholder\"),\n );\n this.groupByFile(schemaWarnings).forEach((issues, file) => {\n const n = issues.length;\n output.push({\n severity: \"warning\",\n category: \"schema\",\n file,\n count: n,\n message: n === 1 ? \"1 key has schema warnings\" : `${n} keys have schema warnings`,\n });\n });\n\n // Schema info with key \u2192 DROP entirely (per-key noise that leaks key names)\n\n // \u2500\u2500 Schema issues without a key field \u2014 pass through \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n for (const issue of lintIssues.filter((i) => i.category === \"schema\" && i.key === undefined)) {\n output.push({\n severity: issue.severity,\n category: issue.category,\n file: issue.file,\n message: issue.message,\n });\n }\n\n // \u2500\u2500 Matrix issues \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n const matrixIssues = lintIssues.filter((i) => i.category === \"matrix\");\n\n // Matrix with key = cross-env drift \u2192 group by (namespace, targetEnv, sourceEnvs)\n const driftIssues = matrixIssues.filter((i) => i.key !== undefined);\n const driftGroups = new Map<\n string,\n { namespace: string; targetEnv: string; sourceEnvs: string; count: number }\n >();\n for (const issue of driftIssues) {\n // Use indexOf/lastIndexOf instead of a regex with unbounded quantifiers to\n // avoid ReDoS on uncontrolled `issue.message` input.\n const prefix = \"is missing in \";\n const middle = \" but present in \";\n const pi = issue.message.indexOf(prefix);\n if (pi === -1) continue;\n const afterPrefix = issue.message.indexOf(middle, pi + prefix.length);\n if (afterPrefix === -1) continue;\n const targetEnv = issue.message.slice(pi + prefix.length, afterPrefix);\n if (!targetEnv || /\\s/.test(targetEnv)) continue;\n const rest = issue.message.slice(afterPrefix + middle.length);\n if (!rest.endsWith(\".\")) continue;\n const sourceEnvs = rest.slice(0, -1);\n const namespace = this.extractNamespace(issue.file);\n const groupKey = `${namespace}|${targetEnv}|${sourceEnvs}`;\n const existing = driftGroups.get(groupKey);\n if (existing) {\n existing.count++;\n } else {\n driftGroups.set(groupKey, { namespace, targetEnv, sourceEnvs, count: 1 });\n }\n }\n for (const group of driftGroups.values()) {\n const n = group.count;\n output.push({\n severity: \"warning\",\n category: \"drift\",\n namespace: group.namespace,\n environment: group.targetEnv,\n sourceEnvironment: group.sourceEnvs,\n driftCount: n,\n message: `${n} key${n !== 1 ? \"s\" : \"\"} in [${group.sourceEnvs}] missing from ${group.targetEnv}`,\n });\n }\n\n // Matrix without key (missing file) \u2192 pass through\n for (const issue of matrixIssues.filter((i) => i.key === undefined)) {\n output.push({\n severity: issue.severity,\n category: issue.category,\n file: issue.file,\n message: issue.message,\n });\n }\n\n // \u2500\u2500 SOPS issues \u2014 pass through \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n for (const issue of lintIssues.filter((i) => i.category === \"sops\")) {\n output.push({\n severity: issue.severity,\n category: issue.category,\n file: issue.file,\n message: issue.message,\n });\n }\n\n // \u2500\u2500 Service-identity issues \u2014 pass through \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n for (const issue of lintIssues.filter((i) => i.category === \"service-identity\")) {\n output.push({\n severity: issue.severity,\n category: issue.category,\n file: issue.file,\n message: issue.message,\n });\n }\n\n const issueCount: ReportIssueCounts = {\n error: output.filter((i) => i.severity === \"error\").length,\n warning: output.filter((i) => i.severity === \"warning\").length,\n info: output.filter((i) => i.severity === \"info\").length,\n };\n\n return { issueCount, issues: output };\n }\n\n private groupByFile(issues: LintIssue[]): Map<string, LintIssue[]> {\n const map = new Map<string, LintIssue[]>();\n for (const issue of issues) {\n const arr = map.get(issue.file) ?? [];\n arr.push(issue);\n map.set(issue.file, arr);\n }\n return map;\n }\n\n private extractNamespace(filePath: string): string {\n const normalized = filePath.replace(/\\\\/g, \"/\");\n const parts = normalized.split(\"/\");\n return parts.length >= 2 ? (parts[parts.length - 2] ?? \"\") : (parts[0] ?? \"\");\n }\n}\n", "import {\n ClefReport,\n CloudApiReport,\n CloudCellHealthStatus,\n CloudPolicyResult,\n CloudReportCell,\n CloudReportDrift,\n CloudReportSummary,\n ReportMatrixCell,\n ReportPolicyIssue,\n} from \"../types\";\n\n/**\n * Transforms a local {@link ClefReport} into the {@link CloudApiReport} payload\n * expected by the Clef Pro API. Mapping is deterministic and side-effect-free.\n */\nexport class ReportTransformer {\n transform(report: ClefReport): CloudApiReport {\n const summary = this.buildSummary(report);\n const drift = this.buildDrift(report);\n const policyResults = this.buildPolicyResults(report.policy.issues);\n\n return {\n commitSha: report.repoIdentity.commitSha,\n branch: report.repoIdentity.branch,\n commitTimestamp: new Date(report.repoIdentity.commitTimestamp).getTime(),\n cliVersion: report.repoIdentity.clefVersion,\n summary,\n drift,\n policyResults,\n };\n }\n\n private buildSummary(report: ClefReport): CloudReportSummary {\n const namespaces = [...new Set(report.matrix.map((c) => c.namespace))];\n const environments = [...new Set(report.matrix.map((c) => c.environment))];\n const cells = report.matrix.map((cell) => this.buildCell(cell, report.policy.issues));\n const violations = report.policy.issues.filter((i) => i.severity === \"error\").length;\n\n return {\n filesScanned: report.matrix.length,\n namespaces,\n environments,\n cells,\n violations,\n passed: violations === 0,\n };\n }\n\n private buildCell(cell: ReportMatrixCell, issues: ReportPolicyIssue[]): CloudReportCell {\n const healthStatus = this.computeHealthStatus(cell, issues);\n const description = this.describeCell(cell, healthStatus);\n\n return {\n namespace: cell.namespace,\n environment: cell.environment,\n healthStatus,\n description,\n };\n }\n\n private computeHealthStatus(\n cell: ReportMatrixCell,\n issues: ReportPolicyIssue[],\n ): CloudCellHealthStatus {\n if (!cell.exists) return \"unknown\";\n\n const cellIssues = issues.filter(\n (i) =>\n (i.namespace === cell.namespace && i.environment === cell.environment) ||\n (i.file !== undefined &&\n i.file.includes(cell.namespace) &&\n i.file.includes(cell.environment)),\n );\n\n if (cellIssues.some((i) => i.severity === \"error\")) return \"critical\";\n if (cellIssues.some((i) => i.severity === \"warning\") || cell.pendingCount > 0) return \"warning\";\n return \"healthy\";\n }\n\n private describeCell(cell: ReportMatrixCell, status: CloudCellHealthStatus): string {\n switch (status) {\n case \"unknown\":\n return \"File does not exist\";\n case \"critical\":\n return \"Has error-severity policy issues\";\n case \"warning\":\n return cell.pendingCount > 0\n ? `${cell.pendingCount} pending key(s) awaiting values`\n : \"Has warning-severity policy issues\";\n case \"healthy\":\n return `${cell.keyCount} key(s), no issues`;\n }\n }\n\n private buildDrift(report: ClefReport): CloudReportDrift[] {\n const namespaces = [...new Set(report.matrix.map((c) => c.namespace))];\n const driftIssues = report.policy.issues.filter((i) => i.category === \"drift\");\n\n return namespaces.map((namespace) => {\n const nsIssues = driftIssues.filter((i) => i.namespace === namespace);\n const totalDrift = nsIssues.reduce((sum, i) => sum + (i.driftCount ?? 1), 0);\n return {\n namespace,\n isDrifted: totalDrift > 0,\n driftCount: totalDrift,\n };\n });\n }\n\n private buildPolicyResults(issues: ReportPolicyIssue[]): CloudPolicyResult[] {\n return issues.map((issue) => ({\n ruleId: `${issue.category}/${issue.severity}`,\n ruleName: issue.category,\n passed: issue.severity !== \"error\",\n severity: issue.severity,\n message: issue.message,\n ...(issue.namespace || issue.environment\n ? {\n scope: {\n ...(issue.namespace ? { namespace: issue.namespace } : {}),\n ...(issue.environment ? { environment: issue.environment } : {}),\n },\n }\n : {}),\n }));\n }\n}\n", "import {\n CloudApiError,\n CloudApiReport,\n CloudBatchPayload,\n CloudBatchResponse,\n CloudIntegrationResponse,\n CloudReportResponse,\n} from \"../types\";\n\nconst DEFAULT_RETRY_DELAY_MS = 1000;\n\n/**\n * HTTP client for the Clef Pro API.\n * Uses native `fetch()` (Node 18+). Retries once on 5xx or network errors.\n */\nexport class CloudClient {\n private readonly retryDelayMs: number;\n\n constructor(options?: { retryDelayMs?: number }) {\n this.retryDelayMs = options?.retryDelayMs ?? DEFAULT_RETRY_DELAY_MS;\n }\n async fetchIntegration(\n apiUrl: string,\n apiKey: string,\n integrationId: string,\n ): Promise<CloudIntegrationResponse> {\n const url = `${apiUrl}/api/v1/integrations/${encodeURIComponent(integrationId)}`;\n return this.request<CloudIntegrationResponse>(\"GET\", url, apiKey);\n }\n\n async submitReport(\n apiUrl: string,\n apiKey: string,\n report: CloudApiReport,\n ): Promise<CloudReportResponse> {\n const url = `${apiUrl}/api/v1/reports`;\n return this.request<CloudReportResponse>(\"POST\", url, apiKey, report);\n }\n\n async submitBatchReports(\n apiUrl: string,\n apiKey: string,\n batch: CloudBatchPayload,\n ): Promise<CloudBatchResponse> {\n const url = `${apiUrl}/api/v1/reports/batch`;\n return this.request<CloudBatchResponse>(\"POST\", url, apiKey, batch);\n }\n\n private async request<T>(\n method: string,\n url: string,\n apiKey: string,\n body?: unknown,\n ): Promise<T> {\n const headers: Record<string, string> = {\n Authorization: `Bearer ${apiKey}`,\n \"Content-Type\": \"application/json\",\n };\n\n const init: RequestInit = {\n method,\n headers,\n ...(body !== undefined ? { body: JSON.stringify(body) } : {}),\n };\n\n let response: Response;\n try {\n response = await fetch(url, init);\n } catch {\n // Network error \u2014 retry once\n await this.delay(this.retryDelayMs);\n try {\n response = await fetch(url, init);\n } catch (retryErr) {\n throw new CloudApiError(\n `Network error contacting Clef Pro: ${(retryErr as Error).message}`,\n 0,\n \"Check your network connection and CLEF_API_URL.\",\n );\n }\n }\n\n if (response.ok) {\n return (await response.json()) as T;\n }\n\n // 5xx \u2014 retry once\n if (response.status >= 500 && response.status < 600) {\n await this.delay(this.retryDelayMs);\n const retryResponse = await fetch(url, init);\n if (retryResponse.ok) {\n return (await retryResponse.json()) as T;\n }\n throw this.buildError(retryResponse);\n }\n\n // 4xx \u2014 do not retry\n throw this.buildError(response);\n }\n\n private buildError(response: Response): CloudApiError {\n const hint =\n response.status === 401 || response.status === 403\n ? \"Check your API token (--api-token or CLEF_API_TOKEN).\"\n : response.status === 404\n ? \"Check your cloud.integrationId in clef.yaml.\"\n : undefined;\n\n return new CloudApiError(\n `Clef Pro API returned ${response.status} ${response.statusText}`,\n response.status,\n hint,\n );\n }\n\n private delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n", "import { CloudCIContext } from \"../types\";\n\n/**\n * Detects the current CI provider from environment variables and returns\n * a {@link CloudCIContext} with provider, pipeline URL, and trigger info.\n *\n * Returns `undefined` when not running in a CI environment.\n */\nexport function collectCIContext(): CloudCIContext | undefined {\n const env = process.env;\n\n if (env.GITHUB_ACTIONS) {\n const serverUrl = env.GITHUB_SERVER_URL ?? \"https://github.com\";\n const repo = env.GITHUB_REPOSITORY ?? \"\";\n const runId = env.GITHUB_RUN_ID ?? \"\";\n const pipelineUrl = repo && runId ? `${serverUrl}/${repo}/actions/runs/${runId}` : undefined;\n return {\n provider: \"github-actions\",\n pipelineUrl,\n trigger: env.GITHUB_EVENT_NAME,\n };\n }\n\n if (env.GITLAB_CI) {\n return {\n provider: \"gitlab-ci\",\n pipelineUrl: env.CI_PIPELINE_URL,\n trigger: env.CI_PIPELINE_SOURCE,\n };\n }\n\n if (env.CIRCLECI) {\n return {\n provider: \"circleci\",\n pipelineUrl: env.CIRCLE_BUILD_URL,\n };\n }\n\n if (env.CI) {\n return {\n provider: \"unknown\",\n };\n }\n\n return undefined;\n}\n", "import { EncryptionBackend } from \"../types\";\n\n/** Status of a single key in a three-way merge. */\nexport type MergeKeyStatus = \"unchanged\" | \"ours\" | \"theirs\" | \"both_added\" | \"conflict\";\n\n/** One key's resolution in the three-way merge. */\nexport interface MergeKey {\n key: string;\n status: MergeKeyStatus;\n /** Resolved value when status is not \"conflict\". `null` for deletions or unresolvable conflicts. */\n value: string | null;\n /** Base value (common ancestor). `null` if the key did not exist in base. */\n baseValue: string | null;\n /** Value from ours. `null` if the key was deleted or absent in ours. */\n oursValue: string | null;\n /** Value from theirs. `null` if the key was deleted or absent in theirs. */\n theirsValue: string | null;\n}\n\n/** Result of a three-way merge. */\nexport interface MergeResult {\n /** `true` when all keys merged cleanly with no conflicts. */\n clean: boolean;\n /** The merged key/value map. Only complete when `clean` is `true`. */\n merged: Record<string, string>;\n /** Per-key resolution details. */\n keys: MergeKey[];\n /** Keys that could not be auto-resolved. Empty when `clean` is `true`. */\n conflicts: MergeKey[];\n}\n\n/**\n * Three-way merge driver for SOPS-encrypted files.\n *\n * Decrypts the base (common ancestor), ours (current branch), and theirs (incoming branch)\n * versions of a file, performs a three-way merge on the plaintext key/value maps, and\n * returns the merged result for re-encryption.\n *\n * @example\n * ```ts\n * const driver = new SopsMergeDriver(sopsClient);\n * const result = await driver.mergeFiles(basePath, oursPath, theirsPath);\n * if (result.clean) {\n * await sopsClient.encrypt(oursPath, result.merged, manifest, environment);\n * }\n * ```\n */\nexport class SopsMergeDriver {\n constructor(private readonly sopsClient: EncryptionBackend) {}\n\n /**\n * Perform a three-way merge on three in-memory key/value maps.\n *\n * Algorithm: For each key across all three maps, compare ours and theirs against base.\n * - If only one side changed relative to base, take that side's value.\n * - If both sides made the same change, take either (they agree).\n * - If both sides made different changes to the same key, it's a conflict.\n * - If a key was added on both sides with the same value, accept it.\n * - If a key was added on both sides with different values, it's a conflict.\n */\n merge(\n base: Record<string, string>,\n ours: Record<string, string>,\n theirs: Record<string, string>,\n ): MergeResult {\n const allKeys = new Set([...Object.keys(base), ...Object.keys(ours), ...Object.keys(theirs)]);\n\n const merged: Record<string, string> = {};\n const keys: MergeKey[] = [];\n const conflicts: MergeKey[] = [];\n\n for (const key of allKeys) {\n const inBase = key in base;\n const inOurs = key in ours;\n const inTheirs = key in theirs;\n const baseVal = inBase ? base[key] : null;\n const oursVal = inOurs ? ours[key] : null;\n const theirsVal = inTheirs ? theirs[key] : null;\n\n const oursChanged = oursVal !== baseVal;\n const theirsChanged = theirsVal !== baseVal;\n\n let status: MergeKeyStatus;\n let value: string | null;\n\n if (!oursChanged && !theirsChanged) {\n // Neither side changed this key relative to base\n status = \"unchanged\";\n value = baseVal;\n } else if (oursChanged && !theirsChanged) {\n // Only ours changed (including additions and deletions)\n status = \"ours\";\n value = oursVal;\n } else if (!oursChanged && theirsChanged) {\n // Only theirs changed (including additions and deletions)\n status = \"theirs\";\n value = theirsVal;\n } else if (oursVal === theirsVal) {\n // Both changed to the same value (or both deleted)\n status = !inBase && inOurs && inTheirs ? \"both_added\" : \"ours\";\n value = oursVal;\n } else {\n // Both changed to different values \u2014 conflict\n status = \"conflict\";\n value = null;\n }\n\n const mergeKey: MergeKey = {\n key,\n status,\n value,\n baseValue: baseVal,\n oursValue: oursVal,\n theirsValue: theirsVal,\n };\n keys.push(mergeKey);\n\n if (status === \"conflict\") {\n conflicts.push(mergeKey);\n } else if (value !== null) {\n merged[key] = value;\n }\n // value === null && status !== \"conflict\" means the key was deleted \u2014 omit from merged\n }\n\n // Sort keys alphabetically for stable output\n keys.sort((a, b) => a.key.localeCompare(b.key));\n conflicts.sort((a, b) => a.key.localeCompare(b.key));\n\n return { clean: conflicts.length === 0, merged, keys, conflicts };\n }\n\n /**\n * Decrypt three file versions and perform a three-way merge.\n *\n * @param basePath - Path to the common ancestor file (git %O).\n * @param oursPath - Path to the current branch file (git %A).\n * @param theirsPath - Path to the incoming branch file (git %B).\n * @returns The merge result. When `clean` is `true`, `merged` contains the resolved values.\n */\n async mergeFiles(basePath: string, oursPath: string, theirsPath: string): Promise<MergeResult> {\n const [baseDecrypted, oursDecrypted, theirsDecrypted] = await Promise.all([\n this.sopsClient.decrypt(basePath),\n this.sopsClient.decrypt(oursPath),\n this.sopsClient.decrypt(theirsPath),\n ]);\n\n return this.merge(baseDecrypted.values, oursDecrypted.values, theirsDecrypted.values);\n }\n}\n", "import * as fs from \"fs\";\nimport * as os from \"os\";\nimport * as path from \"path\";\nimport * as YAML from \"yaml\";\nimport {\n ClefManifest,\n EncryptionBackend,\n KmsConfig,\n ServiceIdentityDefinition,\n ServiceIdentityDriftIssue,\n ServiceIdentityEnvironmentConfig,\n isKmsEnvelope,\n} from \"../types\";\nimport { generateAgeIdentity } from \"../age/keygen\";\nimport { MatrixManager } from \"../matrix/manager\";\nimport { CLEF_MANIFEST_FILENAME } from \"../manifest/parser\";\n\n/**\n * Thrown when key rotation partially completes before a failure.\n * Contains the private keys for environments that were successfully rotated.\n */\nexport class PartialRotationError extends Error {\n constructor(\n message: string,\n public readonly rotatedKeys: Record<string, string>,\n ) {\n super(message);\n this.name = \"PartialRotationError\";\n }\n}\n\n/**\n * Manages service identities: creation, listing, key rotation, and drift validation.\n *\n * @example\n * ```ts\n * const manager = new ServiceIdentityManager(sopsClient, matrixManager);\n * const result = await manager.create(\"api-gw\", [\"api\"], \"API gateway\", manifest, repoRoot);\n * ```\n */\nexport class ServiceIdentityManager {\n constructor(\n private readonly encryption: EncryptionBackend,\n private readonly matrixManager: MatrixManager,\n ) {}\n\n /**\n * Create a new service identity with per-environment age key pairs or KMS envelope config.\n * For age-only: generates keys, updates the manifest, and registers public keys as SOPS recipients.\n * For KMS: stores KMS config in manifest, no age keys generated.\n *\n * @param kmsEnvConfigs - Optional per-environment KMS config. When provided, those envs use\n * KMS envelope encryption instead of generating age keys.\n * @returns The created identity definition and the per-environment private keys (empty for KMS envs).\n */\n async create(\n name: string,\n namespaces: string[],\n description: string,\n manifest: ClefManifest,\n repoRoot: string,\n kmsEnvConfigs?: Record<string, KmsConfig>,\n ): Promise<{\n identity: ServiceIdentityDefinition;\n privateKeys: Record<string, string>;\n }> {\n // Validate name uniqueness\n if (manifest.service_identities?.some((si) => si.name === name)) {\n throw new Error(`Service identity '${name}' already exists.`);\n }\n\n // Validate namespace references\n const validNamespaces = new Set(manifest.namespaces.map((ns) => ns.name));\n for (const ns of namespaces) {\n if (!validNamespaces.has(ns)) {\n throw new Error(`Namespace '${ns}' not found in manifest.`);\n }\n }\n\n // Generate per-environment config\n const environments: Record<string, ServiceIdentityEnvironmentConfig> = {};\n const privateKeys: Record<string, string> = {};\n\n for (const env of manifest.environments) {\n const kmsConfig = kmsEnvConfigs?.[env.name];\n if (kmsConfig) {\n // KMS envelope path \u2014 no age keys generated\n environments[env.name] = { kms: kmsConfig };\n } else {\n // Age-only path\n const identity = await generateAgeIdentity();\n environments[env.name] = { recipient: identity.publicKey };\n privateKeys[env.name] = identity.privateKey;\n }\n }\n\n const definition: ServiceIdentityDefinition = {\n name,\n description,\n namespaces,\n environments,\n };\n\n // Register public keys as SOPS recipients on scoped files BEFORE writing\n // the manifest, so a registration failure doesn't leave orphaned state.\n // (Only for age-only environments \u2014 KMS envs have no recipient to register.)\n await this.registerRecipients(definition, manifest, repoRoot);\n\n // Update manifest on disk\n const manifestPath = path.join(repoRoot, CLEF_MANIFEST_FILENAME);\n const raw = fs.readFileSync(manifestPath, \"utf-8\");\n const doc = YAML.parse(raw) as Record<string, unknown>;\n\n if (!Array.isArray(doc.service_identities)) {\n doc.service_identities = [];\n }\n (doc.service_identities as unknown[]).push({\n name,\n description,\n namespaces,\n environments,\n });\n const tmpCreate = path.join(os.tmpdir(), `clef-manifest-${process.pid}-${Date.now()}.tmp`);\n try {\n fs.writeFileSync(tmpCreate, YAML.stringify(doc), \"utf-8\");\n fs.renameSync(tmpCreate, manifestPath);\n } finally {\n try {\n fs.unlinkSync(tmpCreate);\n } catch {\n // Already renamed or never written \u2014 ignore\n }\n }\n\n return { identity: definition, privateKeys };\n }\n\n /**\n * List all service identities from the manifest.\n */\n list(manifest: ClefManifest): ServiceIdentityDefinition[] {\n return manifest.service_identities ?? [];\n }\n\n /**\n * Get a single service identity by name.\n */\n get(manifest: ClefManifest, name: string): ServiceIdentityDefinition | undefined {\n return manifest.service_identities?.find((si) => si.name === name);\n }\n\n /**\n * Delete a service identity: remove its recipients from scoped SOPS files\n * and remove it from the manifest.\n */\n async delete(name: string, manifest: ClefManifest, repoRoot: string): Promise<void> {\n const identity = this.get(manifest, name);\n if (!identity) {\n throw new Error(`Service identity '${name}' not found.`);\n }\n\n // Remove age recipients from scoped files\n const cells = this.matrixManager.resolveMatrix(manifest, repoRoot).filter((c) => c.exists);\n for (const cell of cells) {\n if (!identity.namespaces.includes(cell.namespace)) continue;\n const envConfig = identity.environments[cell.environment];\n if (!envConfig?.recipient) continue;\n if (isKmsEnvelope(envConfig)) continue;\n\n try {\n await this.encryption.removeRecipient(cell.filePath, envConfig.recipient);\n } catch {\n // May not be a current recipient\n }\n }\n\n // Remove from manifest on disk\n const manifestPath = path.join(repoRoot, CLEF_MANIFEST_FILENAME);\n const raw = fs.readFileSync(manifestPath, \"utf-8\");\n const doc = YAML.parse(raw) as Record<string, unknown>;\n const identities = doc.service_identities as Record<string, unknown>[];\n if (Array.isArray(identities)) {\n doc.service_identities = identities.filter(\n (si) => (si as Record<string, unknown>).name !== name,\n );\n }\n const tmp = path.join(os.tmpdir(), `clef-manifest-${process.pid}-${Date.now()}.tmp`);\n try {\n fs.writeFileSync(tmp, YAML.stringify(doc), \"utf-8\");\n fs.renameSync(tmp, manifestPath);\n } finally {\n try {\n fs.unlinkSync(tmp);\n } catch {\n // Already renamed or never written \u2014 ignore\n }\n }\n }\n\n /**\n * Update environment backends on an existing service identity.\n * Switches age \u2192 KMS (removes old recipient) or updates KMS config.\n * Returns new private keys for any environments switched from KMS \u2192 age.\n */\n async updateEnvironments(\n name: string,\n kmsEnvConfigs: Record<string, KmsConfig>,\n manifest: ClefManifest,\n repoRoot: string,\n ): Promise<{ privateKeys: Record<string, string> }> {\n const identity = this.get(manifest, name);\n if (!identity) {\n throw new Error(`Service identity '${name}' not found.`);\n }\n\n const manifestPath = path.join(repoRoot, CLEF_MANIFEST_FILENAME);\n const raw = fs.readFileSync(manifestPath, \"utf-8\");\n const doc = YAML.parse(raw) as Record<string, unknown>;\n const identities = doc.service_identities as Record<string, unknown>[];\n const siDoc = identities.find((si) => (si as Record<string, unknown>).name === name) as Record<\n string,\n unknown\n >;\n const envs = siDoc.environments as Record<string, Record<string, unknown>>;\n\n const cells = this.matrixManager.resolveMatrix(manifest, repoRoot).filter((c) => c.exists);\n const privateKeys: Record<string, string> = {};\n\n for (const [envName, kmsConfig] of Object.entries(kmsEnvConfigs)) {\n const oldConfig = identity.environments[envName];\n if (!oldConfig) {\n throw new Error(`Environment '${envName}' not found on identity '${name}'.`);\n }\n\n // If switching from age \u2192 KMS, remove the old age recipient from scoped files\n if (oldConfig.recipient) {\n const scopedCells = cells.filter(\n (c) => identity.namespaces.includes(c.namespace) && c.environment === envName,\n );\n for (const cell of scopedCells) {\n try {\n await this.encryption.removeRecipient(cell.filePath, oldConfig.recipient);\n } catch {\n // May not be a current recipient\n }\n }\n }\n\n // Update manifest entry to KMS\n envs[envName] = { kms: kmsConfig };\n identity.environments[envName] = { kms: kmsConfig };\n }\n\n // Write updated manifest\n const tmp = path.join(os.tmpdir(), `clef-manifest-${process.pid}-${Date.now()}.tmp`);\n try {\n fs.writeFileSync(tmp, YAML.stringify(doc), \"utf-8\");\n fs.renameSync(tmp, manifestPath);\n } finally {\n try {\n fs.unlinkSync(tmp);\n } catch {\n // Already renamed or never written \u2014 ignore\n }\n }\n\n return { privateKeys };\n }\n\n /**\n * Register a service identity's public keys as SOPS recipients on scoped matrix files.\n */\n async registerRecipients(\n identity: ServiceIdentityDefinition,\n manifest: ClefManifest,\n repoRoot: string,\n ): Promise<void> {\n const cells = this.matrixManager.resolveMatrix(manifest, repoRoot).filter((c) => c.exists);\n\n for (const cell of cells) {\n if (!identity.namespaces.includes(cell.namespace)) continue;\n\n const envConfig = identity.environments[cell.environment];\n if (!envConfig) continue;\n\n // KMS-backed environments have no recipient to register\n if (isKmsEnvelope(envConfig)) continue;\n if (!envConfig.recipient) continue;\n\n try {\n await this.encryption.addRecipient(cell.filePath, envConfig.recipient);\n } catch (err) {\n // SOPS exits non-zero for duplicate recipients \u2014 safe to ignore.\n // Re-throw genuine I/O or corruption errors.\n const message = err instanceof Error ? err.message : String(err);\n if (!message.includes(\"already\")) {\n throw err;\n }\n }\n }\n }\n\n /**\n * Rotate the age key for a service identity (all envs or a specific env).\n * Returns the new private keys.\n */\n async rotateKey(\n name: string,\n manifest: ClefManifest,\n repoRoot: string,\n environment?: string,\n ): Promise<Record<string, string>> {\n const identity = this.get(manifest, name);\n if (!identity) {\n throw new Error(`Service identity '${name}' not found.`);\n }\n\n const manifestPath = path.join(repoRoot, CLEF_MANIFEST_FILENAME);\n const raw = fs.readFileSync(manifestPath, \"utf-8\");\n const doc = YAML.parse(raw) as Record<string, unknown>;\n const identities = doc.service_identities as Record<string, unknown>[];\n const siDoc = identities.find((si) => (si as Record<string, unknown>).name === name) as Record<\n string,\n unknown\n >;\n const envs = siDoc.environments as Record<string, Record<string, string>>;\n\n const newPrivateKeys: Record<string, string> = {};\n const envsToRotate = environment ? [environment] : Object.keys(identity.environments);\n\n const cells = this.matrixManager.resolveMatrix(manifest, repoRoot).filter((c) => c.exists);\n\n try {\n for (const envName of envsToRotate) {\n const envConfig = identity.environments[envName];\n if (!envConfig) {\n throw new Error(`Environment '${envName}' not found on identity '${name}'.`);\n }\n // KMS-backed environments don't have age keys to rotate\n if (isKmsEnvelope(envConfig)) continue;\n const oldRecipient = envConfig.recipient;\n if (!oldRecipient) {\n throw new Error(`Environment '${envName}' not found on identity '${name}'.`);\n }\n\n const newIdentity = await generateAgeIdentity();\n newPrivateKeys[envName] = newIdentity.privateKey;\n\n // Update manifest\n envs[envName] = { recipient: newIdentity.publicKey };\n\n // Swap recipients on scoped files\n const scopedCells = cells.filter(\n (c) => identity.namespaces.includes(c.namespace) && c.environment === envName,\n );\n for (const cell of scopedCells) {\n try {\n await this.encryption.removeRecipient(cell.filePath, oldRecipient);\n } catch {\n // May not be a current recipient\n }\n try {\n await this.encryption.addRecipient(cell.filePath, newIdentity.publicKey);\n } catch (addErr) {\n // Attempt rollback: re-add old recipient\n try {\n await this.encryption.addRecipient(cell.filePath, oldRecipient);\n } catch {\n throw new Error(\n `Failed to add new recipient to ${cell.namespace}/${cell.environment} and rollback also failed. ` +\n `File may be in an inconsistent state. ` +\n `Old key: ${oldRecipient.slice(0, 12)}..., New key: ${newIdentity.publicKey.slice(0, 12)}...`,\n );\n }\n throw addErr;\n }\n }\n }\n } catch (err) {\n if (Object.keys(newPrivateKeys).length > 0) {\n const partialErr = new PartialRotationError(\n `Rotation failed after rotating ${Object.keys(newPrivateKeys).join(\", \")}: ${(err as Error).message}`,\n newPrivateKeys,\n );\n throw partialErr;\n }\n throw err;\n }\n\n const tmpRotate = path.join(os.tmpdir(), `clef-manifest-${process.pid}-${Date.now()}.tmp`);\n try {\n fs.writeFileSync(tmpRotate, YAML.stringify(doc), \"utf-8\");\n fs.renameSync(tmpRotate, manifestPath);\n } finally {\n try {\n fs.unlinkSync(tmpRotate);\n } catch {\n // Already renamed or never written \u2014 ignore\n }\n }\n return newPrivateKeys;\n }\n\n /**\n * Validate service identities and return drift issues.\n */\n async validate(manifest: ClefManifest, repoRoot: string): Promise<ServiceIdentityDriftIssue[]> {\n const issues: ServiceIdentityDriftIssue[] = [];\n const identities = manifest.service_identities ?? [];\n\n if (identities.length === 0) return issues;\n\n const declaredEnvNames = new Set(manifest.environments.map((e) => e.name));\n const declaredNsNames = new Set(manifest.namespaces.map((ns) => ns.name));\n const cells = this.matrixManager.resolveMatrix(manifest, repoRoot).filter((c) => c.exists);\n\n for (const si of identities) {\n // Check namespace references\n for (const ns of si.namespaces) {\n if (!declaredNsNames.has(ns)) {\n issues.push({\n identity: si.name,\n namespace: ns,\n type: \"namespace_not_found\",\n message: `Service identity '${si.name}' references non-existent namespace '${ns}'.`,\n });\n }\n }\n\n // Check environment coverage\n for (const envName of declaredEnvNames) {\n if (!(envName in si.environments)) {\n issues.push({\n identity: si.name,\n environment: envName,\n type: \"missing_environment\",\n message: `Service identity '${si.name}' is missing environment '${envName}'. Manually add an age key pair for this environment in clef.yaml.`,\n });\n }\n }\n\n // Check recipient registration on scoped files\n // (KMS-backed environments skip recipient checks \u2014 no recipient to register)\n for (const cell of cells) {\n const envConfig = si.environments[cell.environment];\n if (!envConfig) continue;\n if (isKmsEnvelope(envConfig)) continue;\n if (!envConfig.recipient) continue;\n\n if (si.namespaces.includes(cell.namespace)) {\n // Should be registered\n try {\n const metadata = await this.encryption.getMetadata(cell.filePath);\n if (!metadata.recipients.includes(envConfig.recipient)) {\n issues.push({\n identity: si.name,\n environment: cell.environment,\n namespace: cell.namespace,\n type: \"recipient_not_registered\",\n message: `Service identity '${si.name}' recipient is not registered in ${cell.namespace}/${cell.environment}.`,\n fixCommand: `clef service create ${si.name} --namespaces ${si.namespaces.join(\",\")}`,\n });\n }\n } catch {\n // Cannot read metadata \u2014 skip\n }\n } else {\n // Should NOT be registered (scope mismatch)\n try {\n const metadata = await this.encryption.getMetadata(cell.filePath);\n if (metadata.recipients.includes(envConfig.recipient)) {\n issues.push({\n identity: si.name,\n environment: cell.environment,\n namespace: cell.namespace,\n type: \"scope_mismatch\",\n message: `Service identity '${si.name}' recipient found in ${cell.namespace}/${cell.environment} but namespace '${cell.namespace}' is not in scope.`,\n fixCommand: `clef recipients remove ${envConfig.recipient} -e ${cell.environment}`,\n });\n }\n } catch {\n // Cannot read metadata \u2014 skip\n }\n }\n }\n }\n\n return issues;\n }\n}\n", "import {\n ClefManifest,\n EncryptionBackend,\n ServiceIdentityDefinition,\n ServiceIdentityEnvironmentConfig,\n} from \"../types\";\nimport { MatrixManager } from \"../matrix/manager\";\n\n/** Resolved identity secrets: merged key/value map plus metadata. */\nexport interface ResolvedSecrets {\n /** Flat key/value map (namespace-prefixed if multi-namespace). */\n values: Record<string, string>;\n /** The matched service identity definition. */\n identity: ServiceIdentityDefinition;\n /** Age public key for the target environment (undefined for KMS identities). */\n recipient?: string;\n /** Full environment config (age-only or KMS). */\n envConfig: ServiceIdentityEnvironmentConfig;\n}\n\n/**\n * Decrypt and merge scoped SOPS files for a service identity + environment.\n *\n * Shared by `ArtifactPacker` (and any future consumers) to avoid duplicating\n * the decrypt-merge-collision-check logic.\n */\nexport async function resolveIdentitySecrets(\n identityName: string,\n environment: string,\n manifest: ClefManifest,\n repoRoot: string,\n encryption: EncryptionBackend,\n matrixManager: MatrixManager,\n): Promise<ResolvedSecrets> {\n const identity = manifest.service_identities?.find((si) => si.name === identityName);\n if (!identity) {\n throw new Error(`Service identity '${identityName}' not found in manifest.`);\n }\n\n const envConfig = identity.environments[environment];\n if (!envConfig) {\n throw new Error(\n `Environment '${environment}' not found on service identity '${identityName}'.`,\n );\n }\n\n const allValues: Record<string, string> = {};\n const cells = matrixManager\n .resolveMatrix(manifest, repoRoot)\n .filter(\n (c) => c.exists && identity.namespaces.includes(c.namespace) && c.environment === environment,\n );\n\n const isMultiNamespace = identity.namespaces.length > 1;\n const collisions: string[] = [];\n\n for (const cell of cells) {\n const decrypted = await encryption.decrypt(cell.filePath);\n for (const [key, value] of Object.entries(decrypted.values)) {\n const qualifiedKey = isMultiNamespace ? `${cell.namespace}__${key}` : key;\n if (qualifiedKey in allValues && allValues[qualifiedKey] !== value) {\n collisions.push(qualifiedKey);\n }\n allValues[qualifiedKey] = value;\n }\n }\n\n if (collisions.length > 0) {\n throw new Error(\n `Key collision detected in bundle: ${collisions.join(\", \")}. ` +\n \"Keys with the same name but different values exist across namespaces.\",\n );\n }\n\n return {\n values: allValues,\n identity,\n recipient: envConfig.recipient,\n envConfig,\n };\n}\n", "import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as crypto from \"crypto\";\nimport { ClefManifest, EncryptionBackend, isKmsEnvelope } from \"../types\";\nimport { KmsProvider } from \"../kms\";\nimport { MatrixManager } from \"../matrix/manager\";\nimport { PackConfig, PackResult, PackedArtifact } from \"./types\";\nimport { resolveIdentitySecrets } from \"./resolve\";\nimport { buildSigningPayload, signEd25519, signKms } from \"./signer\";\n\n/**\n * Packs an encrypted artifact for a service identity + environment.\n *\n * The artifact is a JSON envelope containing encrypted secrets (age for\n * age-only identities, AES-256-GCM for KMS envelope identities) that can\n * be fetched by the runtime agent via HTTP or local file.\n */\nexport class ArtifactPacker {\n constructor(\n private readonly encryption: EncryptionBackend,\n private readonly matrixManager: MatrixManager,\n private readonly kms?: KmsProvider,\n ) {}\n\n /**\n * Pack an artifact: decrypt scoped SOPS files, age-encrypt the merged\n * values to the service identity's recipient, and write a JSON envelope.\n */\n async pack(config: PackConfig, manifest: ClefManifest, repoRoot: string): Promise<PackResult> {\n if (config.signingKey && config.signingKmsKeyId) {\n throw new Error(\n \"Cannot specify both signingKey (Ed25519) and signingKmsKeyId (KMS). Choose one.\",\n );\n }\n\n const resolved = await resolveIdentitySecrets(\n config.identity,\n config.environment,\n manifest,\n repoRoot,\n this.encryption,\n this.matrixManager,\n );\n\n const plaintext = JSON.stringify(resolved.values);\n\n let ciphertext: string;\n let artifact: PackedArtifact;\n\n if (isKmsEnvelope(resolved.envConfig)) {\n // KMS envelope path \u2014 AES-256-GCM with KMS-wrapped DEK\n if (!this.kms) {\n throw new Error(\"KMS provider required for envelope encryption but none was provided.\");\n }\n\n const dek = crypto.randomBytes(32);\n const iv = crypto.randomBytes(12);\n\n try {\n const cipher = crypto.createCipheriv(\"aes-256-gcm\", dek, iv);\n const ciphertextBuf = Buffer.concat([\n cipher.update(Buffer.from(plaintext, \"utf-8\")),\n cipher.final(),\n ]);\n const authTag = cipher.getAuthTag();\n ciphertext = ciphertextBuf.toString(\"base64\");\n\n const kmsConfig = resolved.envConfig.kms;\n const wrapped = await this.kms.wrap(kmsConfig.keyId, dek);\n\n const revision = `${Date.now()}-${crypto.randomBytes(4).toString(\"hex\")}`;\n const ciphertextHash = crypto.createHash(\"sha256\").update(ciphertext).digest(\"hex\");\n\n artifact = {\n version: 1,\n identity: config.identity,\n environment: config.environment,\n packedAt: new Date().toISOString(),\n revision,\n ciphertextHash,\n ciphertext,\n keys: Object.keys(resolved.values),\n envelope: {\n provider: kmsConfig.provider,\n keyId: kmsConfig.keyId,\n wrappedKey: wrapped.wrappedKey.toString(\"base64\"),\n algorithm: wrapped.algorithm,\n iv: iv.toString(\"base64\"),\n authTag: authTag.toString(\"base64\"),\n },\n };\n } finally {\n dek.fill(0);\n }\n } else {\n // Age-only path (v1, unchanged)\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- dynamic ESM import of CJS-incompatible package\n const { Encrypter } = await import(\"age-encryption\" as any);\n const e = new Encrypter();\n e.addRecipient(resolved.recipient!);\n const encrypted = await e.encrypt(plaintext);\n ciphertext = Buffer.from(encrypted as Uint8Array).toString(\"base64\");\n } catch (err) {\n throw new Error(\n `Failed to age-encrypt artifact: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n\n const revision = `${Date.now()}-${crypto.randomBytes(4).toString(\"hex\")}`;\n const ciphertextHash = crypto.createHash(\"sha256\").update(ciphertext).digest(\"hex\");\n\n artifact = {\n version: 1,\n identity: config.identity,\n environment: config.environment,\n packedAt: new Date().toISOString(),\n revision,\n ciphertextHash,\n ciphertext,\n keys: Object.keys(resolved.values),\n };\n }\n\n const outputDir = path.dirname(config.outputPath);\n if (!fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, { recursive: true });\n }\n\n // Set expiresAt before signing \u2014 the signature covers this field\n if (config.ttl && config.ttl > 0) {\n artifact.expiresAt = new Date(Date.now() + config.ttl * 1000).toISOString();\n }\n\n // Sign the artifact if a signing key is provided\n if (config.signingKey) {\n const payload = buildSigningPayload(artifact);\n artifact.signature = signEd25519(payload, config.signingKey);\n artifact.signatureAlgorithm = \"Ed25519\";\n } else if (config.signingKmsKeyId) {\n if (!this.kms) {\n throw new Error(\"KMS provider required for KMS signing but none was provided.\");\n }\n const payload = buildSigningPayload(artifact);\n artifact.signature = await signKms(payload, this.kms, config.signingKmsKeyId);\n artifact.signatureAlgorithm = \"ECDSA_SHA256\";\n }\n\n const json = JSON.stringify(artifact, null, 2);\n const tmpOutput = `${config.outputPath}.tmp.${process.pid}`;\n fs.writeFileSync(tmpOutput, json, \"utf-8\");\n fs.renameSync(tmpOutput, config.outputPath);\n\n return {\n outputPath: config.outputPath,\n namespaceCount: resolved.identity.namespaces.length,\n keyCount: Object.keys(resolved.values).length,\n artifactSize: Buffer.byteLength(json, \"utf-8\"),\n revision: artifact.revision,\n };\n }\n}\n", "import * as crypto from \"crypto\";\nimport type { PackedArtifact, SignatureAlgorithm } from \"./types\";\nimport type { KmsProvider } from \"../kms\";\n\n/**\n * Build the canonical signing payload from an artifact.\n *\n * The payload is a deterministic newline-separated string of all\n * security-relevant fields. The signature covers everything the\n * runtime acts on \u2014 version, identity, environment, revision, timing,\n * integrity hash, key list, expiry, and envelope fields.\n *\n * `ciphertextHash` transitively covers the ciphertext content, so the\n * (potentially large) ciphertext itself is not included.\n *\n * Keys are sorted to ensure deterministic ordering regardless of\n * insertion order in the source object.\n */\nexport function buildSigningPayload(artifact: PackedArtifact): Buffer {\n const fields = [\n \"clef-sig-v2\",\n String(artifact.version),\n artifact.identity,\n artifact.environment,\n artifact.revision,\n artifact.packedAt,\n artifact.ciphertextHash,\n [...artifact.keys].sort().join(\",\"),\n artifact.expiresAt ?? \"\",\n artifact.envelope?.provider ?? \"\",\n artifact.envelope?.keyId ?? \"\",\n artifact.envelope?.wrappedKey ?? \"\",\n artifact.envelope?.algorithm ?? \"\",\n artifact.envelope?.iv ?? \"\",\n artifact.envelope?.authTag ?? \"\",\n ];\n return Buffer.from(fields.join(\"\\n\"), \"utf-8\");\n}\n\n/**\n * Generate an Ed25519 signing key pair.\n * Returns base64-encoded DER keys (SPKI for public, PKCS8 for private).\n */\nexport function generateSigningKeyPair(): { publicKey: string; privateKey: string } {\n const pair = crypto.generateKeyPairSync(\"ed25519\");\n return {\n publicKey: (pair.publicKey.export({ type: \"spki\", format: \"der\" }) as Buffer).toString(\n \"base64\",\n ),\n privateKey: (pair.privateKey.export({ type: \"pkcs8\", format: \"der\" }) as Buffer).toString(\n \"base64\",\n ),\n };\n}\n\n/**\n * Sign an artifact payload with an Ed25519 private key.\n *\n * @param payload - Canonical signing payload from {@link buildSigningPayload}\n * @param privateKeyBase64 - Base64-encoded DER PKCS8 private key\n * @returns Base64-encoded Ed25519 signature\n */\nexport function signEd25519(payload: Buffer, privateKeyBase64: string): string {\n const keyObj = crypto.createPrivateKey({\n key: Buffer.from(privateKeyBase64, \"base64\"),\n format: \"der\",\n type: \"pkcs8\",\n });\n const signature = crypto.sign(null, payload, keyObj);\n return signature.toString(\"base64\");\n}\n\n/**\n * Sign an artifact payload with a KMS asymmetric signing key (ECDSA_SHA_256).\n *\n * The KMS `sign` method receives a SHA-256 digest (not the raw payload),\n * matching AWS KMS `MessageType: \"DIGEST\"` semantics.\n *\n * @param payload - Canonical signing payload from {@link buildSigningPayload}\n * @param kms - KMS provider with `sign` method\n * @param signingKeyId - ARN or ID of the KMS asymmetric signing key\n * @returns Base64-encoded ECDSA signature\n */\nexport async function signKms(\n payload: Buffer,\n kms: KmsProvider,\n signingKeyId: string,\n): Promise<string> {\n if (!kms.sign) {\n throw new Error(\n \"KMS provider does not support signing. Ensure the provider implements the sign() method.\",\n );\n }\n const digest = crypto.createHash(\"sha256\").update(payload).digest();\n const signature = await kms.sign(signingKeyId, digest);\n return signature.toString(\"base64\");\n}\n\n/**\n * Verify a signature against a public key.\n *\n * The algorithm is derived from the key's type (Ed25519 or EC), not from\n * the artifact's claimed `signatureAlgorithm` field. This prevents an\n * attacker from downgrading the verification algorithm.\n *\n * @param payload - Canonical signing payload from {@link buildSigningPayload}\n * @param signatureBase64 - Base64-encoded signature to verify\n * @param publicKeyBase64 - Base64-encoded DER SPKI public key\n * @returns true if the signature is valid\n */\nexport function verifySignature(\n payload: Buffer,\n signatureBase64: string,\n publicKeyBase64: string,\n): boolean {\n const keyObj = crypto.createPublicKey({\n key: Buffer.from(publicKeyBase64, \"base64\"),\n format: \"der\",\n type: \"spki\",\n });\n const signature = Buffer.from(signatureBase64, \"base64\");\n\n const keyType = keyObj.asymmetricKeyType;\n if (keyType === \"ed25519\") {\n return crypto.verify(null, payload, keyObj, signature);\n }\n if (keyType === \"ec\") {\n return crypto.verify(\"sha256\", payload, keyObj, signature);\n }\n throw new Error(`Unsupported key type for signature verification: ${keyType}`);\n}\n\n/**\n * Detect the signature algorithm from a DER SPKI public key.\n *\n * @param publicKeyBase64 - Base64-encoded DER SPKI public key\n * @returns The corresponding SignatureAlgorithm\n */\nexport function detectAlgorithm(publicKeyBase64: string): SignatureAlgorithm {\n const keyObj = crypto.createPublicKey({\n key: Buffer.from(publicKeyBase64, \"base64\"),\n format: \"der\",\n type: \"spki\",\n });\n const keyType = keyObj.asymmetricKeyType;\n if (keyType === \"ed25519\") return \"Ed25519\";\n if (keyType === \"ec\") return \"ECDSA_SHA256\";\n throw new Error(`Unsupported key type: ${keyType}`);\n}\n", "export type KmsProviderType = \"aws\" | \"gcp\" | \"azure\";\n\nexport const VALID_KMS_PROVIDERS: readonly KmsProviderType[] = [\"aws\", \"gcp\", \"azure\"] as const;\n\nexport interface KmsWrapResult {\n wrappedKey: Buffer;\n algorithm: string;\n}\n\nexport interface KmsProvider {\n wrap(keyId: string, plaintext: Buffer): Promise<KmsWrapResult>;\n unwrap(keyId: string, wrappedKey: Buffer, algorithm: string): Promise<Buffer>;\n /** Sign a SHA-256 digest with an asymmetric KMS key (ECDSA_SHA_256). Optional. */\n sign?(keyId: string, digest: Buffer): Promise<Buffer>;\n}\n"],
5
+ "mappings": "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lB,cAAM,MAAM,MAAM,KAAK,EAAE;AACzB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,CAAC;AACxB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,CAAC;AACxB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,EAAE;AACzB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,EAAE;AACzB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,CAAC;AACxB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,CAAC;AACxB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,EAAE;AACzB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,EAAE;AACzB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,CAAC;AACxB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,CAAC;AACxB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,EAAE;AACzB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,EAAE;AACzB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,CAAC;AACxB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,CAAC;AACxB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,EAAE;AACzB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,EAAE;AACzB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,CAAC;AACxB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,CAAC;AACxB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,EAAE;AACzB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,EAAE;AACzB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,CAAC;AACxB,cAAM,MAAM,MAAM;AAClB,cAAM,MAAM,MAAM,KAAK,CAAC;AACxB,cAAM,MAAM,MAAM;AAClB,c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",
6
+ "names": ["exports", "module", "__defProp", "__getOwnPropDesc", "__getOwnPropNames", "__hasOwnProp", "__export", "__copyProps", "__toCommonJS", "randomBytes", "join", "randomBytes3", "sign", "verify", "randomBytes4", "parse", "fs", "path", "fs", "fs", "path", "YAML", "fs", "path", "crypto", "YAML", "fs", "YAML", "fs", "YAML", "path", "path", "fs", "path", "fs", "YAML", "fs", "path", "fs", "path", "path", "path", "path", "YAML", "parse", "parse", "existingKeys", "decrypted", "fs", "path", "YAML", "fs", "path", "YAML", "HEADER_COMMENT", "path", "path", "fs", "path", "YAML", "fs", "path", "crypto", "crypto"]
7
7
  }