@clef-sh/core 0.1.19 → 0.1.20-beta.142

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../node_modules/signal-exit/src/signals.ts", "../node_modules/signal-exit/src/index.ts", "../node_modules/write-file-atomic/lib/index.js", "../../../node_modules/graceful-fs/polyfills.js", "../../../node_modules/graceful-fs/legacy-streams.js", "../../../node_modules/graceful-fs/clone.js", "../../../node_modules/graceful-fs/graceful-fs.js", "../../../node_modules/retry/lib/retry_operation.js", "../../../node_modules/retry/lib/retry.js", "../../../node_modules/retry/index.js", "../../../node_modules/signal-exit/signals.js", "../../../node_modules/signal-exit/index.js", "../../../node_modules/proper-lockfile/lib/mtime-precision.js", "../../../node_modules/proper-lockfile/lib/lockfile.js", "../../../node_modules/proper-lockfile/lib/adapter.js", "../../../node_modules/proper-lockfile/index.js", "../src/types/index.ts", "../src/manifest/parser.ts", "../src/recipients/validator.ts", "../src/manifest/io.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/tx/transaction-manager.ts", "../src/tx/errors.ts", "../src/sops/client.ts", "../src/sops/resolver.ts", "../src/sops/bundled.ts", "../src/dependencies/checker.ts", "../src/age/keygen.ts", "../src/sops/hsm-arn.ts", "../src/hsm/bundled.ts", "../src/hsm/resolver.ts", "../src/hsm/keyservice.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/merge/metadata-driver.ts", "../src/service-identity/manager.ts", "../src/structure/manager.ts", "../src/artifact/resolve.ts", "../src/artifact/packer.ts", "../src/artifact/output.ts", "../src/artifact/signer.ts", "../src/artifact/guards.ts", "../src/pack/registry.ts", "../src/pack/backends/json-envelope.ts", "../src/kms/types.ts", "../src/migration/backend.ts", "../src/reset/manager.ts", "../src/sync/manager.ts", "../src/policy/parser.ts", "../src/policy/types.ts", "../src/policy/evaluator.ts", "../src/compliance/generator.ts", "../src/compliance/run.ts"],
3
+ "sources": ["../../../node_modules/write-file-atomic/node_modules/signal-exit/src/signals.ts", "../../../node_modules/write-file-atomic/node_modules/signal-exit/src/index.ts", "../../../node_modules/write-file-atomic/lib/index.js", "../../../node_modules/graceful-fs/polyfills.js", "../../../node_modules/graceful-fs/legacy-streams.js", "../../../node_modules/graceful-fs/clone.js", "../../../node_modules/graceful-fs/graceful-fs.js", "../../../node_modules/retry/lib/retry_operation.js", "../../../node_modules/retry/lib/retry.js", "../../../node_modules/retry/index.js", "../../../node_modules/signal-exit/signals.js", "../../../node_modules/signal-exit/index.js", "../../../node_modules/proper-lockfile/lib/mtime-precision.js", "../../../node_modules/proper-lockfile/lib/lockfile.js", "../../../node_modules/proper-lockfile/lib/adapter.js", "../../../node_modules/proper-lockfile/index.js", "../src/types/index.ts", "../src/manifest/parser.ts", "../src/recipients/validator.ts", "../src/manifest/io.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/tx/transaction-manager.ts", "../src/tx/errors.ts", "../src/sops/client.ts", "../src/sops/resolver.ts", "../src/sops/bundled.ts", "../src/dependencies/checker.ts", "../src/age/keygen.ts", "../src/sops/hsm-arn.ts", "../src/hsm/bundled.ts", "../src/hsm/resolver.ts", "../src/hsm/keyservice.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/merge/metadata-driver.ts", "../src/service-identity/manager.ts", "../src/structure/manager.ts", "../src/artifact/resolve.ts", "../src/artifact/packer.ts", "../src/artifact/output.ts", "../src/artifact/signer.ts", "../src/artifact/guards.ts", "../src/pack/registry.ts", "../src/pack/backends/json-envelope.ts", "../src/kms/types.ts", "../src/migration/backend.ts", "../src/reset/manager.ts", "../src/sync/manager.ts", "../src/policy/parser.ts", "../src/policy/types.ts", "../src/policy/evaluator.ts", "../src/compliance/generator.ts", "../src/compliance/run.ts"],
4
4
  "sourcesContent": ["/**\n * This is not the set of all possible signals.\n *\n * It IS, however, the set of all signals that trigger\n * an exit on either Linux or BSD systems. Linux is a\n * superset of the signal names supported on BSD, and\n * the unknown signals just fail to register, so we can\n * catch that easily enough.\n *\n * Windows signals are a different set, since there are\n * signals that terminate Windows processes, but don't\n * terminate (or don't even exist) on Posix systems.\n *\n * Don't bother with SIGKILL. It's uncatchable, which\n * means that we can't fire any callbacks anyway.\n *\n * If a user does happen to register a handler on a non-\n * fatal signal like SIGWINCH or something, and then\n * exit, it'll end up firing `process.emit('exit')`, so\n * the handler will be fired anyway.\n *\n * SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised\n * artificially, inherently leave the process in a\n * state from which it is not safe to try and enter JS\n * listeners.\n */\nexport const signals: NodeJS.Signals[] = []\nsignals.push('SIGHUP', 'SIGINT', 'SIGTERM')\n\nif (process.platform !== 'win32') {\n signals.push(\n 'SIGALRM',\n 'SIGABRT',\n 'SIGVTALRM',\n 'SIGXCPU',\n 'SIGXFSZ',\n 'SIGUSR2',\n 'SIGTRAP',\n 'SIGSYS',\n 'SIGQUIT',\n 'SIGIOT'\n // should detect profiler and enable/disable accordingly.\n // see #21\n // 'SIGPROF'\n )\n}\n\nif (process.platform === 'linux') {\n signals.push('SIGIO', 'SIGPOLL', 'SIGPWR', 'SIGSTKFLT')\n}\n", "// Note: since nyc uses this module to output coverage, any lines\n// that are in the direct sync flow of nyc's outputCoverage are\n// ignored, since we can never get coverage for them.\n// grab a reference to node's real process object right away\nimport { signals } from './signals.js'\nexport { signals }\n\n// just a loosened process type so we can do some evil things\ntype ProcessRE = NodeJS.Process & {\n reallyExit: (code?: number | undefined | null) => any\n emit: (ev: string, ...a: any[]) => any\n}\n\nconst processOk = (process: any): process is ProcessRE =>\n !!process &&\n typeof process === 'object' &&\n typeof process.removeListener === 'function' &&\n typeof process.emit === 'function' &&\n typeof process.reallyExit === 'function' &&\n typeof process.listeners === 'function' &&\n typeof process.kill === 'function' &&\n typeof process.pid === 'number' &&\n typeof process.on === 'function'\n\nconst kExitEmitter = Symbol.for('signal-exit emitter')\nconst global: typeof globalThis & { [kExitEmitter]?: Emitter } = globalThis\nconst ObjectDefineProperty = Object.defineProperty.bind(Object)\n\n/**\n * A function that takes an exit code and signal as arguments\n *\n * In the case of signal exits *only*, a return value of true\n * will indicate that the signal is being handled, and we should\n * not synthetically exit with the signal we received. Regardless\n * of the handler return value, the handler is unloaded when an\n * otherwise fatal signal is received, so you get exactly 1 shot\n * at it, unless you add another onExit handler at that point.\n *\n * In the case of numeric code exits, we may already have committed\n * to exiting the process, for example via a fatal exception or\n * unhandled promise rejection, so it is impossible to stop safely.\n */\nexport type Handler = (\n code: number | null | undefined,\n signal: NodeJS.Signals | null\n) => true | void\ntype ExitEvent = 'afterExit' | 'exit'\ntype Emitted = { [k in ExitEvent]: boolean }\ntype Listeners = { [k in ExitEvent]: Handler[] }\n\n// teeny special purpose ee\nclass Emitter {\n emitted: Emitted = {\n afterExit: false,\n exit: false,\n }\n\n listeners: Listeners = {\n afterExit: [],\n exit: [],\n }\n\n count: number = 0\n id: number = Math.random()\n\n constructor() {\n if (global[kExitEmitter]) {\n return global[kExitEmitter]\n }\n ObjectDefineProperty(global, kExitEmitter, {\n value: this,\n writable: false,\n enumerable: false,\n configurable: false,\n })\n }\n\n on(ev: ExitEvent, fn: Handler) {\n this.listeners[ev].push(fn)\n }\n\n removeListener(ev: ExitEvent, fn: Handler) {\n const list = this.listeners[ev]\n const i = list.indexOf(fn)\n /* c8 ignore start */\n if (i === -1) {\n return\n }\n /* c8 ignore stop */\n if (i === 0 && list.length === 1) {\n list.length = 0\n } else {\n list.splice(i, 1)\n }\n }\n\n emit(\n ev: ExitEvent,\n code: number | null | undefined,\n signal: NodeJS.Signals | null\n ): boolean {\n if (this.emitted[ev]) {\n return false\n }\n this.emitted[ev] = true\n let ret: boolean = false\n for (const fn of this.listeners[ev]) {\n ret = fn(code, signal) === true || ret\n }\n if (ev === 'exit') {\n ret = this.emit('afterExit', code, signal) || ret\n }\n return ret\n }\n}\n\nabstract class SignalExitBase {\n abstract onExit(cb: Handler, opts?: { alwaysLast?: boolean }): () => void\n abstract load(): void\n abstract unload(): void\n}\n\nconst signalExitWrap = <T extends SignalExitBase>(handler: T) => {\n return {\n onExit(cb: Handler, opts?: { alwaysLast?: boolean }) {\n return handler.onExit(cb, opts)\n },\n load() {\n return handler.load()\n },\n unload() {\n return handler.unload()\n },\n }\n}\n\nclass SignalExitFallback extends SignalExitBase {\n onExit() {\n return () => {}\n }\n load() {}\n unload() {}\n}\n\nclass SignalExit extends SignalExitBase {\n // \"SIGHUP\" throws an `ENOSYS` error on Windows,\n // so use a supported signal instead\n /* c8 ignore start */\n #hupSig = process.platform === 'win32' ? 'SIGINT' : 'SIGHUP'\n /* c8 ignore stop */\n #emitter = new Emitter()\n #process: ProcessRE\n #originalProcessEmit: ProcessRE['emit']\n #originalProcessReallyExit: ProcessRE['reallyExit']\n\n #sigListeners: { [k in NodeJS.Signals]?: () => void } = {}\n #loaded: boolean = false\n\n constructor(process: ProcessRE) {\n super()\n this.#process = process\n // { <signal>: <listener fn>, ... }\n this.#sigListeners = {}\n for (const sig of signals) {\n this.#sigListeners[sig] = () => {\n // If there are no other listeners, an exit is coming!\n // Simplest way: remove us and then re-send the signal.\n // We know that this will kill the process, so we can\n // safely emit now.\n const listeners = this.#process.listeners(sig)\n let { count } = this.#emitter\n // This is a workaround for the fact that signal-exit v3 and signal\n // exit v4 are not aware of each other, and each will attempt to let\n // the other handle it, so neither of them do. To correct this, we\n // detect if we're the only handler *except* for previous versions\n // of signal-exit, and increment by the count of listeners it has\n // created.\n /* c8 ignore start */\n const p = process as unknown as {\n __signal_exit_emitter__?: { count: number }\n }\n if (\n typeof p.__signal_exit_emitter__ === 'object' &&\n typeof p.__signal_exit_emitter__.count === 'number'\n ) {\n count += p.__signal_exit_emitter__.count\n }\n /* c8 ignore stop */\n if (listeners.length === count) {\n this.unload()\n const ret = this.#emitter.emit('exit', null, sig)\n /* c8 ignore start */\n const s = sig === 'SIGHUP' ? this.#hupSig : sig\n if (!ret) process.kill(process.pid, s)\n /* c8 ignore stop */\n }\n }\n }\n\n this.#originalProcessReallyExit = process.reallyExit\n this.#originalProcessEmit = process.emit\n }\n\n onExit(cb: Handler, opts?: { alwaysLast?: boolean }) {\n /* c8 ignore start */\n if (!processOk(this.#process)) {\n return () => {}\n }\n /* c8 ignore stop */\n\n if (this.#loaded === false) {\n this.load()\n }\n\n const ev = opts?.alwaysLast ? 'afterExit' : 'exit'\n this.#emitter.on(ev, cb)\n return () => {\n this.#emitter.removeListener(ev, cb)\n if (\n this.#emitter.listeners['exit'].length === 0 &&\n this.#emitter.listeners['afterExit'].length === 0\n ) {\n this.unload()\n }\n }\n }\n\n load() {\n if (this.#loaded) {\n return\n }\n this.#loaded = true\n\n // This is the number of onSignalExit's that are in play.\n // It's important so that we can count the correct number of\n // listeners on signals, and don't wait for the other one to\n // handle it instead of us.\n this.#emitter.count += 1\n\n for (const sig of signals) {\n try {\n const fn = this.#sigListeners[sig]\n if (fn) this.#process.on(sig, fn)\n } catch (_) {}\n }\n\n this.#process.emit = (ev: string, ...a: any[]) => {\n return this.#processEmit(ev, ...a)\n }\n this.#process.reallyExit = (code?: number | null | undefined) => {\n return this.#processReallyExit(code)\n }\n }\n\n unload() {\n if (!this.#loaded) {\n return\n }\n this.#loaded = false\n\n signals.forEach(sig => {\n const listener = this.#sigListeners[sig]\n /* c8 ignore start */\n if (!listener) {\n throw new Error('Listener not defined for signal: ' + sig)\n }\n /* c8 ignore stop */\n try {\n this.#process.removeListener(sig, listener)\n /* c8 ignore start */\n } catch (_) {}\n /* c8 ignore stop */\n })\n this.#process.emit = this.#originalProcessEmit\n this.#process.reallyExit = this.#originalProcessReallyExit\n this.#emitter.count -= 1\n }\n\n #processReallyExit(code?: number | null | undefined) {\n /* c8 ignore start */\n if (!processOk(this.#process)) {\n return 0\n }\n this.#process.exitCode = code || 0\n /* c8 ignore stop */\n\n this.#emitter.emit('exit', this.#process.exitCode, null)\n return this.#originalProcessReallyExit.call(\n this.#process,\n this.#process.exitCode\n )\n }\n\n #processEmit(ev: string, ...args: any[]): any {\n const og = this.#originalProcessEmit\n if (ev === 'exit' && processOk(this.#process)) {\n if (typeof args[0] === 'number') {\n this.#process.exitCode = args[0]\n /* c8 ignore start */\n }\n /* c8 ignore start */\n const ret = og.call(this.#process, ev, ...args)\n /* c8 ignore start */\n this.#emitter.emit('exit', this.#process.exitCode, null)\n /* c8 ignore stop */\n return ret\n } else {\n return og.call(this.#process, ev, ...args)\n }\n }\n}\n\nconst process = globalThis.process\n// wrap so that we call the method on the actual handler, without\n// exporting it directly.\nexport const {\n /**\n * Called when the process is exiting, whether via signal, explicit\n * exit, or running out of stuff to do.\n *\n * If the global process object is not suitable for instrumentation,\n * then this will be a no-op.\n *\n * Returns a function that may be used to unload signal-exit.\n */\n onExit,\n\n /**\n * Load the listeners. Likely you never need to call this, unless\n * doing a rather deep integration with signal-exit functionality.\n * Mostly exposed for the benefit of testing.\n *\n * @internal\n */\n load,\n\n /**\n * Unload the listeners. Likely you never need to call this, unless\n * doing a rather deep integration with signal-exit functionality.\n * Mostly exposed for the benefit of testing.\n *\n * @internal\n */\n unload,\n} = signalExitWrap(\n processOk(process) ? new SignalExit(process) : new SignalExitFallback()\n)\n", "'use strict'\nmodule.exports = writeFile\nmodule.exports.sync = writeFileSync\nmodule.exports._getTmpname = getTmpname // for testing\nmodule.exports._cleanupOnExit = cleanupOnExit\n\nconst fs = require('fs')\nconst crypto = require('node:crypto')\nconst { onExit } = require('signal-exit')\nconst path = require('path')\nconst { promisify } = require('util')\nconst activeFiles = {}\n\n// if we run inside of a worker_thread, `process.pid` is not unique\n/* istanbul ignore next */\nconst threadId = (function getId () {\n try {\n const workerThreads = require('worker_threads')\n\n /// if we are in main thread, this is set to `0`\n return workerThreads.threadId\n } catch (e) {\n // worker_threads are not available, fallback to 0\n return 0\n }\n})()\n\nlet invocations = 0\nfunction getTmpname (filename) {\n return filename + '.' +\n crypto.createHash('sha1')\n .update(__filename)\n .update(String(process.pid))\n .update(String(threadId))\n .update(String(++invocations))\n .digest()\n .readUInt32BE(0)\n}\n\nfunction cleanupOnExit (tmpfile) {\n return () => {\n try {\n fs.unlinkSync(typeof tmpfile === 'function' ? tmpfile() : tmpfile)\n } catch {\n // ignore errors\n }\n }\n}\n\nfunction serializeActiveFile (absoluteName) {\n return new Promise(resolve => {\n // make a queue if it doesn't already exist\n if (!activeFiles[absoluteName]) {\n activeFiles[absoluteName] = []\n }\n\n activeFiles[absoluteName].push(resolve) // add this job to the queue\n if (activeFiles[absoluteName].length === 1) {\n resolve()\n } // kick off the first one\n })\n}\n\n// https://github.com/isaacs/node-graceful-fs/blob/master/polyfills.js#L315-L342\nfunction isChownErrOk (err) {\n if (err.code === 'ENOSYS') {\n return true\n }\n\n const nonroot = !process.getuid || process.getuid() !== 0\n if (nonroot) {\n if (err.code === 'EINVAL' || err.code === 'EPERM') {\n return true\n }\n }\n\n return false\n}\n\nasync function writeFileAsync (filename, data, options = {}) {\n if (typeof options === 'string') {\n options = { encoding: options }\n }\n\n let fd\n let tmpfile\n /* istanbul ignore next -- The closure only gets called when onExit triggers */\n const removeOnExitHandler = onExit(cleanupOnExit(() => tmpfile))\n const absoluteName = path.resolve(filename)\n\n try {\n await serializeActiveFile(absoluteName)\n const truename = await promisify(fs.realpath)(filename).catch(() => filename)\n tmpfile = getTmpname(truename)\n\n if (!options.mode || !options.chown) {\n // Either mode or chown is not explicitly set\n // Default behavior is to copy it from original file\n const stats = await promisify(fs.stat)(truename).catch(() => {})\n if (stats) {\n if (options.mode == null) {\n options.mode = stats.mode\n }\n\n if (options.chown == null && process.getuid) {\n options.chown = { uid: stats.uid, gid: stats.gid }\n }\n }\n }\n\n fd = await promisify(fs.open)(tmpfile, 'w', options.mode)\n if (options.tmpfileCreated) {\n await options.tmpfileCreated(tmpfile)\n }\n if (ArrayBuffer.isView(data)) {\n await promisify(fs.write)(fd, data, 0, data.length, 0)\n } else if (data != null) {\n await promisify(fs.write)(fd, String(data), 0, String(options.encoding || 'utf8'))\n }\n\n if (options.fsync !== false) {\n await promisify(fs.fsync)(fd)\n }\n\n await promisify(fs.close)(fd)\n fd = null\n\n if (options.chown) {\n await promisify(fs.chown)(tmpfile, options.chown.uid, options.chown.gid).catch(err => {\n if (!isChownErrOk(err)) {\n throw err\n }\n })\n }\n\n if (options.mode) {\n await promisify(fs.chmod)(tmpfile, options.mode).catch(err => {\n if (!isChownErrOk(err)) {\n throw err\n }\n })\n }\n\n await promisify(fs.rename)(tmpfile, truename)\n } finally {\n if (fd) {\n await promisify(fs.close)(fd).catch(\n /* istanbul ignore next */\n () => {}\n )\n }\n removeOnExitHandler()\n await promisify(fs.unlink)(tmpfile).catch(() => {})\n activeFiles[absoluteName].shift() // remove the element added by serializeSameFile\n if (activeFiles[absoluteName].length > 0) {\n activeFiles[absoluteName][0]() // start next job if one is pending\n } else {\n delete activeFiles[absoluteName]\n }\n }\n}\n\nasync function writeFile (filename, data, options, callback) {\n if (options instanceof Function) {\n callback = options\n options = {}\n }\n\n const promise = writeFileAsync(filename, data, options)\n if (callback) {\n try {\n const result = await promise\n return callback(result)\n } catch (err) {\n return callback(err)\n }\n }\n\n return promise\n}\n\nfunction writeFileSync (filename, data, options) {\n if (typeof options === 'string') {\n options = { encoding: options }\n } else if (!options) {\n options = {}\n }\n try {\n filename = fs.realpathSync(filename)\n } catch (ex) {\n // it's ok, it'll happen on a not yet existing file\n }\n const tmpfile = getTmpname(filename)\n\n if (!options.mode || !options.chown) {\n // Either mode or chown is not explicitly set\n // Default behavior is to copy it from original file\n try {\n const stats = fs.statSync(filename)\n options = Object.assign({}, options)\n if (!options.mode) {\n options.mode = stats.mode\n }\n if (!options.chown && process.getuid) {\n options.chown = { uid: stats.uid, gid: stats.gid }\n }\n } catch (ex) {\n // ignore stat errors\n }\n }\n\n let fd\n const cleanup = cleanupOnExit(tmpfile)\n const removeOnExitHandler = onExit(cleanup)\n\n let threw = true\n try {\n fd = fs.openSync(tmpfile, 'w', options.mode || 0o666)\n if (options.tmpfileCreated) {\n options.tmpfileCreated(tmpfile)\n }\n if (ArrayBuffer.isView(data)) {\n fs.writeSync(fd, data, 0, data.length, 0)\n } else if (data != null) {\n fs.writeSync(fd, String(data), 0, String(options.encoding || 'utf8'))\n }\n if (options.fsync !== false) {\n fs.fsyncSync(fd)\n }\n\n fs.closeSync(fd)\n fd = null\n\n if (options.chown) {\n try {\n fs.chownSync(tmpfile, options.chown.uid, options.chown.gid)\n } catch (err) {\n if (!isChownErrOk(err)) {\n throw err\n }\n }\n }\n\n if (options.mode) {\n try {\n fs.chmodSync(tmpfile, options.mode)\n } catch (err) {\n if (!isChownErrOk(err)) {\n throw err\n }\n }\n }\n\n fs.renameSync(tmpfile, filename)\n threw = false\n } finally {\n if (fd) {\n try {\n fs.closeSync(fd)\n } catch (ex) {\n // ignore close errors at this stage, error may have closed fd already.\n }\n }\n removeOnExitHandler()\n if (threw) {\n cleanup()\n }\n }\n}\n", "var constants = require('constants')\n\nvar origCwd = process.cwd\nvar cwd = null\n\nvar platform = process.env.GRACEFUL_FS_PLATFORM || process.platform\n\nprocess.cwd = function() {\n if (!cwd)\n cwd = origCwd.call(process)\n return cwd\n}\ntry {\n process.cwd()\n} catch (er) {}\n\n// This check is needed until node.js 12 is required\nif (typeof process.chdir === 'function') {\n var chdir = process.chdir\n process.chdir = function (d) {\n cwd = null\n chdir.call(process, d)\n }\n if (Object.setPrototypeOf) Object.setPrototypeOf(process.chdir, chdir)\n}\n\nmodule.exports = patch\n\nfunction patch (fs) {\n // (re-)implement some things that are known busted or missing.\n\n // lchmod, broken prior to 0.6.2\n // back-port the fix here.\n if (constants.hasOwnProperty('O_SYMLINK') &&\n process.version.match(/^v0\\.6\\.[0-2]|^v0\\.5\\./)) {\n patchLchmod(fs)\n }\n\n // lutimes implementation, or no-op\n if (!fs.lutimes) {\n patchLutimes(fs)\n }\n\n // https://github.com/isaacs/node-graceful-fs/issues/4\n // Chown should not fail on einval or eperm if non-root.\n // It should not fail on enosys ever, as this just indicates\n // that a fs doesn't support the intended operation.\n\n fs.chown = chownFix(fs.chown)\n fs.fchown = chownFix(fs.fchown)\n fs.lchown = chownFix(fs.lchown)\n\n fs.chmod = chmodFix(fs.chmod)\n fs.fchmod = chmodFix(fs.fchmod)\n fs.lchmod = chmodFix(fs.lchmod)\n\n fs.chownSync = chownFixSync(fs.chownSync)\n fs.fchownSync = chownFixSync(fs.fchownSync)\n fs.lchownSync = chownFixSync(fs.lchownSync)\n\n fs.chmodSync = chmodFixSync(fs.chmodSync)\n fs.fchmodSync = chmodFixSync(fs.fchmodSync)\n fs.lchmodSync = chmodFixSync(fs.lchmodSync)\n\n fs.stat = statFix(fs.stat)\n fs.fstat = statFix(fs.fstat)\n fs.lstat = statFix(fs.lstat)\n\n fs.statSync = statFixSync(fs.statSync)\n fs.fstatSync = statFixSync(fs.fstatSync)\n fs.lstatSync = statFixSync(fs.lstatSync)\n\n // if lchmod/lchown do not exist, then make them no-ops\n if (fs.chmod && !fs.lchmod) {\n fs.lchmod = function (path, mode, cb) {\n if (cb) process.nextTick(cb)\n }\n fs.lchmodSync = function () {}\n }\n if (fs.chown && !fs.lchown) {\n fs.lchown = function (path, uid, gid, cb) {\n if (cb) process.nextTick(cb)\n }\n fs.lchownSync = function () {}\n }\n\n // on Windows, A/V software can lock the directory, causing this\n // to fail with an EACCES or EPERM if the directory contains newly\n // created files. Try again on failure, for up to 60 seconds.\n\n // Set the timeout this long because some Windows Anti-Virus, such as Parity\n // bit9, may lock files for up to a minute, causing npm package install\n // failures. Also, take care to yield the scheduler. Windows scheduling gives\n // CPU to a busy looping process, which can cause the program causing the lock\n // contention to be starved of CPU by node, so the contention doesn't resolve.\n if (platform === \"win32\") {\n fs.rename = typeof fs.rename !== 'function' ? fs.rename\n : (function (fs$rename) {\n function rename (from, to, cb) {\n var start = Date.now()\n var backoff = 0;\n fs$rename(from, to, function CB (er) {\n if (er\n && (er.code === \"EACCES\" || er.code === \"EPERM\" || er.code === \"EBUSY\")\n && Date.now() - start < 60000) {\n setTimeout(function() {\n fs.stat(to, function (stater, st) {\n if (stater && stater.code === \"ENOENT\")\n fs$rename(from, to, CB);\n else\n cb(er)\n })\n }, backoff)\n if (backoff < 100)\n backoff += 10;\n return;\n }\n if (cb) cb(er)\n })\n }\n if (Object.setPrototypeOf) Object.setPrototypeOf(rename, fs$rename)\n return rename\n })(fs.rename)\n }\n\n // if read() returns EAGAIN, then just try it again.\n fs.read = typeof fs.read !== 'function' ? fs.read\n : (function (fs$read) {\n function read (fd, buffer, offset, length, position, callback_) {\n var callback\n if (callback_ && typeof callback_ === 'function') {\n var eagCounter = 0\n callback = function (er, _, __) {\n if (er && er.code === 'EAGAIN' && eagCounter < 10) {\n eagCounter ++\n return fs$read.call(fs, fd, buffer, offset, length, position, callback)\n }\n callback_.apply(this, arguments)\n }\n }\n return fs$read.call(fs, fd, buffer, offset, length, position, callback)\n }\n\n // This ensures `util.promisify` works as it does for native `fs.read`.\n if (Object.setPrototypeOf) Object.setPrototypeOf(read, fs$read)\n return read\n })(fs.read)\n\n fs.readSync = typeof fs.readSync !== 'function' ? fs.readSync\n : (function (fs$readSync) { return function (fd, buffer, offset, length, position) {\n var eagCounter = 0\n while (true) {\n try {\n return fs$readSync.call(fs, fd, buffer, offset, length, position)\n } catch (er) {\n if (er.code === 'EAGAIN' && eagCounter < 10) {\n eagCounter ++\n continue\n }\n throw er\n }\n }\n }})(fs.readSync)\n\n function patchLchmod (fs) {\n fs.lchmod = function (path, mode, callback) {\n fs.open( path\n , constants.O_WRONLY | constants.O_SYMLINK\n , mode\n , function (err, fd) {\n if (err) {\n if (callback) callback(err)\n return\n }\n // prefer to return the chmod error, if one occurs,\n // but still try to close, and report closing errors if they occur.\n fs.fchmod(fd, mode, function (err) {\n fs.close(fd, function(err2) {\n if (callback) callback(err || err2)\n })\n })\n })\n }\n\n fs.lchmodSync = function (path, mode) {\n var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode)\n\n // prefer to return the chmod error, if one occurs,\n // but still try to close, and report closing errors if they occur.\n var threw = true\n var ret\n try {\n ret = fs.fchmodSync(fd, mode)\n threw = false\n } finally {\n if (threw) {\n try {\n fs.closeSync(fd)\n } catch (er) {}\n } else {\n fs.closeSync(fd)\n }\n }\n return ret\n }\n }\n\n function patchLutimes (fs) {\n if (constants.hasOwnProperty(\"O_SYMLINK\") && fs.futimes) {\n fs.lutimes = function (path, at, mt, cb) {\n fs.open(path, constants.O_SYMLINK, function (er, fd) {\n if (er) {\n if (cb) cb(er)\n return\n }\n fs.futimes(fd, at, mt, function (er) {\n fs.close(fd, function (er2) {\n if (cb) cb(er || er2)\n })\n })\n })\n }\n\n fs.lutimesSync = function (path, at, mt) {\n var fd = fs.openSync(path, constants.O_SYMLINK)\n var ret\n var threw = true\n try {\n ret = fs.futimesSync(fd, at, mt)\n threw = false\n } finally {\n if (threw) {\n try {\n fs.closeSync(fd)\n } catch (er) {}\n } else {\n fs.closeSync(fd)\n }\n }\n return ret\n }\n\n } else if (fs.futimes) {\n fs.lutimes = function (_a, _b, _c, cb) { if (cb) process.nextTick(cb) }\n fs.lutimesSync = function () {}\n }\n }\n\n function chmodFix (orig) {\n if (!orig) return orig\n return function (target, mode, cb) {\n return orig.call(fs, target, mode, function (er) {\n if (chownErOk(er)) er = null\n if (cb) cb.apply(this, arguments)\n })\n }\n }\n\n function chmodFixSync (orig) {\n if (!orig) return orig\n return function (target, mode) {\n try {\n return orig.call(fs, target, mode)\n } catch (er) {\n if (!chownErOk(er)) throw er\n }\n }\n }\n\n\n function chownFix (orig) {\n if (!orig) return orig\n return function (target, uid, gid, cb) {\n return orig.call(fs, target, uid, gid, function (er) {\n if (chownErOk(er)) er = null\n if (cb) cb.apply(this, arguments)\n })\n }\n }\n\n function chownFixSync (orig) {\n if (!orig) return orig\n return function (target, uid, gid) {\n try {\n return orig.call(fs, target, uid, gid)\n } catch (er) {\n if (!chownErOk(er)) throw er\n }\n }\n }\n\n function statFix (orig) {\n if (!orig) return orig\n // Older versions of Node erroneously returned signed integers for\n // uid + gid.\n return function (target, options, cb) {\n if (typeof options === 'function') {\n cb = options\n options = null\n }\n function callback (er, stats) {\n if (stats) {\n if (stats.uid < 0) stats.uid += 0x100000000\n if (stats.gid < 0) stats.gid += 0x100000000\n }\n if (cb) cb.apply(this, arguments)\n }\n return options ? orig.call(fs, target, options, callback)\n : orig.call(fs, target, callback)\n }\n }\n\n function statFixSync (orig) {\n if (!orig) return orig\n // Older versions of Node erroneously returned signed integers for\n // uid + gid.\n return function (target, options) {\n var stats = options ? orig.call(fs, target, options)\n : orig.call(fs, target)\n if (stats) {\n if (stats.uid < 0) stats.uid += 0x100000000\n if (stats.gid < 0) stats.gid += 0x100000000\n }\n return stats;\n }\n }\n\n // ENOSYS means that the fs doesn't support the op. Just ignore\n // that, because it doesn't matter.\n //\n // if there's no getuid, or if getuid() is something other\n // than 0, and the error is EINVAL or EPERM, then just ignore\n // it.\n //\n // This specific case is a silent failure in cp, install, tar,\n // and most other unix tools that manage permissions.\n //\n // When running as root, or if other types of errors are\n // encountered, then it's strict.\n function chownErOk (er) {\n if (!er)\n return true\n\n if (er.code === \"ENOSYS\")\n return true\n\n var nonroot = !process.getuid || process.getuid() !== 0\n if (nonroot) {\n if (er.code === \"EINVAL\" || er.code === \"EPERM\")\n return true\n }\n\n return false\n }\n}\n", "var Stream = require('stream').Stream\n\nmodule.exports = legacy\n\nfunction legacy (fs) {\n return {\n ReadStream: ReadStream,\n WriteStream: WriteStream\n }\n\n function ReadStream (path, options) {\n if (!(this instanceof ReadStream)) return new ReadStream(path, options);\n\n Stream.call(this);\n\n var self = this;\n\n this.path = path;\n this.fd = null;\n this.readable = true;\n this.paused = false;\n\n this.flags = 'r';\n this.mode = 438; /*=0666*/\n this.bufferSize = 64 * 1024;\n\n options = options || {};\n\n // Mixin options into this\n var keys = Object.keys(options);\n for (var index = 0, length = keys.length; index < length; index++) {\n var key = keys[index];\n this[key] = options[key];\n }\n\n if (this.encoding) this.setEncoding(this.encoding);\n\n if (this.start !== undefined) {\n if ('number' !== typeof this.start) {\n throw TypeError('start must be a Number');\n }\n if (this.end === undefined) {\n this.end = Infinity;\n } else if ('number' !== typeof this.end) {\n throw TypeError('end must be a Number');\n }\n\n if (this.start > this.end) {\n throw new Error('start must be <= end');\n }\n\n this.pos = this.start;\n }\n\n if (this.fd !== null) {\n process.nextTick(function() {\n self._read();\n });\n return;\n }\n\n fs.open(this.path, this.flags, this.mode, function (err, fd) {\n if (err) {\n self.emit('error', err);\n self.readable = false;\n return;\n }\n\n self.fd = fd;\n self.emit('open', fd);\n self._read();\n })\n }\n\n function WriteStream (path, options) {\n if (!(this instanceof WriteStream)) return new WriteStream(path, options);\n\n Stream.call(this);\n\n this.path = path;\n this.fd = null;\n this.writable = true;\n\n this.flags = 'w';\n this.encoding = 'binary';\n this.mode = 438; /*=0666*/\n this.bytesWritten = 0;\n\n options = options || {};\n\n // Mixin options into this\n var keys = Object.keys(options);\n for (var index = 0, length = keys.length; index < length; index++) {\n var key = keys[index];\n this[key] = options[key];\n }\n\n if (this.start !== undefined) {\n if ('number' !== typeof this.start) {\n throw TypeError('start must be a Number');\n }\n if (this.start < 0) {\n throw new Error('start must be >= zero');\n }\n\n this.pos = this.start;\n }\n\n this.busy = false;\n this._queue = [];\n\n if (this.fd === null) {\n this._open = fs.open;\n this._queue.push([this._open, this.path, this.flags, this.mode, undefined]);\n this.flush();\n }\n }\n}\n", "'use strict'\n\nmodule.exports = clone\n\nvar getPrototypeOf = Object.getPrototypeOf || function (obj) {\n return obj.__proto__\n}\n\nfunction clone (obj) {\n if (obj === null || typeof obj !== 'object')\n return obj\n\n if (obj instanceof Object)\n var copy = { __proto__: getPrototypeOf(obj) }\n else\n var copy = Object.create(null)\n\n Object.getOwnPropertyNames(obj).forEach(function (key) {\n Object.defineProperty(copy, key, Object.getOwnPropertyDescriptor(obj, key))\n })\n\n return copy\n}\n", "var fs = require('fs')\nvar polyfills = require('./polyfills.js')\nvar legacy = require('./legacy-streams.js')\nvar clone = require('./clone.js')\n\nvar util = require('util')\n\n/* istanbul ignore next - node 0.x polyfill */\nvar gracefulQueue\nvar previousSymbol\n\n/* istanbul ignore else - node 0.x polyfill */\nif (typeof Symbol === 'function' && typeof Symbol.for === 'function') {\n gracefulQueue = Symbol.for('graceful-fs.queue')\n // This is used in testing by future versions\n previousSymbol = Symbol.for('graceful-fs.previous')\n} else {\n gracefulQueue = '___graceful-fs.queue'\n previousSymbol = '___graceful-fs.previous'\n}\n\nfunction noop () {}\n\nfunction publishQueue(context, queue) {\n Object.defineProperty(context, gracefulQueue, {\n get: function() {\n return queue\n }\n })\n}\n\nvar debug = noop\nif (util.debuglog)\n debug = util.debuglog('gfs4')\nelse if (/\\bgfs4\\b/i.test(process.env.NODE_DEBUG || ''))\n debug = function() {\n var m = util.format.apply(util, arguments)\n m = 'GFS4: ' + m.split(/\\n/).join('\\nGFS4: ')\n console.error(m)\n }\n\n// Once time initialization\nif (!fs[gracefulQueue]) {\n // This queue can be shared by multiple loaded instances\n var queue = global[gracefulQueue] || []\n publishQueue(fs, queue)\n\n // Patch fs.close/closeSync to shared queue version, because we need\n // to retry() whenever a close happens *anywhere* in the program.\n // This is essential when multiple graceful-fs instances are\n // in play at the same time.\n fs.close = (function (fs$close) {\n function close (fd, cb) {\n return fs$close.call(fs, fd, function (err) {\n // This function uses the graceful-fs shared queue\n if (!err) {\n resetQueue()\n }\n\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n })\n }\n\n Object.defineProperty(close, previousSymbol, {\n value: fs$close\n })\n return close\n })(fs.close)\n\n fs.closeSync = (function (fs$closeSync) {\n function closeSync (fd) {\n // This function uses the graceful-fs shared queue\n fs$closeSync.apply(fs, arguments)\n resetQueue()\n }\n\n Object.defineProperty(closeSync, previousSymbol, {\n value: fs$closeSync\n })\n return closeSync\n })(fs.closeSync)\n\n if (/\\bgfs4\\b/i.test(process.env.NODE_DEBUG || '')) {\n process.on('exit', function() {\n debug(fs[gracefulQueue])\n require('assert').equal(fs[gracefulQueue].length, 0)\n })\n }\n}\n\nif (!global[gracefulQueue]) {\n publishQueue(global, fs[gracefulQueue]);\n}\n\nmodule.exports = patch(clone(fs))\nif (process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH && !fs.__patched) {\n module.exports = patch(fs)\n fs.__patched = true;\n}\n\nfunction patch (fs) {\n // Everything that references the open() function needs to be in here\n polyfills(fs)\n fs.gracefulify = patch\n\n fs.createReadStream = createReadStream\n fs.createWriteStream = createWriteStream\n var fs$readFile = fs.readFile\n fs.readFile = readFile\n function readFile (path, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$readFile(path, options, cb)\n\n function go$readFile (path, options, cb, startTime) {\n return fs$readFile(path, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$readFile, [path, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$writeFile = fs.writeFile\n fs.writeFile = writeFile\n function writeFile (path, data, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$writeFile(path, data, options, cb)\n\n function go$writeFile (path, data, options, cb, startTime) {\n return fs$writeFile(path, data, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$writeFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$appendFile = fs.appendFile\n if (fs$appendFile)\n fs.appendFile = appendFile\n function appendFile (path, data, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$appendFile(path, data, options, cb)\n\n function go$appendFile (path, data, options, cb, startTime) {\n return fs$appendFile(path, data, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$appendFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$copyFile = fs.copyFile\n if (fs$copyFile)\n fs.copyFile = copyFile\n function copyFile (src, dest, flags, cb) {\n if (typeof flags === 'function') {\n cb = flags\n flags = 0\n }\n return go$copyFile(src, dest, flags, cb)\n\n function go$copyFile (src, dest, flags, cb, startTime) {\n return fs$copyFile(src, dest, flags, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$copyFile, [src, dest, flags, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$readdir = fs.readdir\n fs.readdir = readdir\n var noReaddirOptionVersions = /^v[0-5]\\./\n function readdir (path, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n var go$readdir = noReaddirOptionVersions.test(process.version)\n ? function go$readdir (path, options, cb, startTime) {\n return fs$readdir(path, fs$readdirCallback(\n path, options, cb, startTime\n ))\n }\n : function go$readdir (path, options, cb, startTime) {\n return fs$readdir(path, options, fs$readdirCallback(\n path, options, cb, startTime\n ))\n }\n\n return go$readdir(path, options, cb)\n\n function fs$readdirCallback (path, options, cb, startTime) {\n return function (err, files) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([\n go$readdir,\n [path, options, cb],\n err,\n startTime || Date.now(),\n Date.now()\n ])\n else {\n if (files && files.sort)\n files.sort()\n\n if (typeof cb === 'function')\n cb.call(this, err, files)\n }\n }\n }\n }\n\n if (process.version.substr(0, 4) === 'v0.8') {\n var legStreams = legacy(fs)\n ReadStream = legStreams.ReadStream\n WriteStream = legStreams.WriteStream\n }\n\n var fs$ReadStream = fs.ReadStream\n if (fs$ReadStream) {\n ReadStream.prototype = Object.create(fs$ReadStream.prototype)\n ReadStream.prototype.open = ReadStream$open\n }\n\n var fs$WriteStream = fs.WriteStream\n if (fs$WriteStream) {\n WriteStream.prototype = Object.create(fs$WriteStream.prototype)\n WriteStream.prototype.open = WriteStream$open\n }\n\n Object.defineProperty(fs, 'ReadStream', {\n get: function () {\n return ReadStream\n },\n set: function (val) {\n ReadStream = val\n },\n enumerable: true,\n configurable: true\n })\n Object.defineProperty(fs, 'WriteStream', {\n get: function () {\n return WriteStream\n },\n set: function (val) {\n WriteStream = val\n },\n enumerable: true,\n configurable: true\n })\n\n // legacy names\n var FileReadStream = ReadStream\n Object.defineProperty(fs, 'FileReadStream', {\n get: function () {\n return FileReadStream\n },\n set: function (val) {\n FileReadStream = val\n },\n enumerable: true,\n configurable: true\n })\n var FileWriteStream = WriteStream\n Object.defineProperty(fs, 'FileWriteStream', {\n get: function () {\n return FileWriteStream\n },\n set: function (val) {\n FileWriteStream = val\n },\n enumerable: true,\n configurable: true\n })\n\n function ReadStream (path, options) {\n if (this instanceof ReadStream)\n return fs$ReadStream.apply(this, arguments), this\n else\n return ReadStream.apply(Object.create(ReadStream.prototype), arguments)\n }\n\n function ReadStream$open () {\n var that = this\n open(that.path, that.flags, that.mode, function (err, fd) {\n if (err) {\n if (that.autoClose)\n that.destroy()\n\n that.emit('error', err)\n } else {\n that.fd = fd\n that.emit('open', fd)\n that.read()\n }\n })\n }\n\n function WriteStream (path, options) {\n if (this instanceof WriteStream)\n return fs$WriteStream.apply(this, arguments), this\n else\n return WriteStream.apply(Object.create(WriteStream.prototype), arguments)\n }\n\n function WriteStream$open () {\n var that = this\n open(that.path, that.flags, that.mode, function (err, fd) {\n if (err) {\n that.destroy()\n that.emit('error', err)\n } else {\n that.fd = fd\n that.emit('open', fd)\n }\n })\n }\n\n function createReadStream (path, options) {\n return new fs.ReadStream(path, options)\n }\n\n function createWriteStream (path, options) {\n return new fs.WriteStream(path, options)\n }\n\n var fs$open = fs.open\n fs.open = open\n function open (path, flags, mode, cb) {\n if (typeof mode === 'function')\n cb = mode, mode = null\n\n return go$open(path, flags, mode, cb)\n\n function go$open (path, flags, mode, cb, startTime) {\n return fs$open(path, flags, mode, function (err, fd) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$open, [path, flags, mode, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n return fs\n}\n\nfunction enqueue (elem) {\n debug('ENQUEUE', elem[0].name, elem[1])\n fs[gracefulQueue].push(elem)\n retry()\n}\n\n// keep track of the timeout between retry() calls\nvar retryTimer\n\n// reset the startTime and lastTime to now\n// this resets the start of the 60 second overall timeout as well as the\n// delay between attempts so that we'll retry these jobs sooner\nfunction resetQueue () {\n var now = Date.now()\n for (var i = 0; i < fs[gracefulQueue].length; ++i) {\n // entries that are only a length of 2 are from an older version, don't\n // bother modifying those since they'll be retried anyway.\n if (fs[gracefulQueue][i].length > 2) {\n fs[gracefulQueue][i][3] = now // startTime\n fs[gracefulQueue][i][4] = now // lastTime\n }\n }\n // call retry to make sure we're actively processing the queue\n retry()\n}\n\nfunction retry () {\n // clear the timer and remove it to help prevent unintended concurrency\n clearTimeout(retryTimer)\n retryTimer = undefined\n\n if (fs[gracefulQueue].length === 0)\n return\n\n var elem = fs[gracefulQueue].shift()\n var fn = elem[0]\n var args = elem[1]\n // these items may be unset if they were added by an older graceful-fs\n var err = elem[2]\n var startTime = elem[3]\n var lastTime = elem[4]\n\n // if we don't have a startTime we have no way of knowing if we've waited\n // long enough, so go ahead and retry this item now\n if (startTime === undefined) {\n debug('RETRY', fn.name, args)\n fn.apply(null, args)\n } else if (Date.now() - startTime >= 60000) {\n // it's been more than 60 seconds total, bail now\n debug('TIMEOUT', fn.name, args)\n var cb = args.pop()\n if (typeof cb === 'function')\n cb.call(null, err)\n } else {\n // the amount of time between the last attempt and right now\n var sinceAttempt = Date.now() - lastTime\n // the amount of time between when we first tried, and when we last tried\n // rounded up to at least 1\n var sinceStart = Math.max(lastTime - startTime, 1)\n // backoff. wait longer than the total time we've been retrying, but only\n // up to a maximum of 100ms\n var desiredDelay = Math.min(sinceStart * 1.2, 100)\n // it's been long enough since the last retry, do it again\n if (sinceAttempt >= desiredDelay) {\n debug('RETRY', fn.name, args)\n fn.apply(null, args.concat([startTime]))\n } else {\n // if we can't do this job yet, push it to the end of the queue\n // and let the next iteration check again\n fs[gracefulQueue].push(elem)\n }\n }\n\n // schedule our next run if one isn't already scheduled\n if (retryTimer === undefined) {\n retryTimer = setTimeout(retry, 0)\n }\n}\n", "function RetryOperation(timeouts, options) {\n // Compatibility for the old (timeouts, retryForever) signature\n if (typeof options === 'boolean') {\n options = { forever: options };\n }\n\n this._originalTimeouts = JSON.parse(JSON.stringify(timeouts));\n this._timeouts = timeouts;\n this._options = options || {};\n this._maxRetryTime = options && options.maxRetryTime || Infinity;\n this._fn = null;\n this._errors = [];\n this._attempts = 1;\n this._operationTimeout = null;\n this._operationTimeoutCb = null;\n this._timeout = null;\n this._operationStart = null;\n\n if (this._options.forever) {\n this._cachedTimeouts = this._timeouts.slice(0);\n }\n}\nmodule.exports = RetryOperation;\n\nRetryOperation.prototype.reset = function() {\n this._attempts = 1;\n this._timeouts = this._originalTimeouts;\n}\n\nRetryOperation.prototype.stop = function() {\n if (this._timeout) {\n clearTimeout(this._timeout);\n }\n\n this._timeouts = [];\n this._cachedTimeouts = null;\n};\n\nRetryOperation.prototype.retry = function(err) {\n if (this._timeout) {\n clearTimeout(this._timeout);\n }\n\n if (!err) {\n return false;\n }\n var currentTime = new Date().getTime();\n if (err && currentTime - this._operationStart >= this._maxRetryTime) {\n this._errors.unshift(new Error('RetryOperation timeout occurred'));\n return false;\n }\n\n this._errors.push(err);\n\n var timeout = this._timeouts.shift();\n if (timeout === undefined) {\n if (this._cachedTimeouts) {\n // retry forever, only keep last error\n this._errors.splice(this._errors.length - 1, this._errors.length);\n this._timeouts = this._cachedTimeouts.slice(0);\n timeout = this._timeouts.shift();\n } else {\n return false;\n }\n }\n\n var self = this;\n var timer = setTimeout(function() {\n self._attempts++;\n\n if (self._operationTimeoutCb) {\n self._timeout = setTimeout(function() {\n self._operationTimeoutCb(self._attempts);\n }, self._operationTimeout);\n\n if (self._options.unref) {\n self._timeout.unref();\n }\n }\n\n self._fn(self._attempts);\n }, timeout);\n\n if (this._options.unref) {\n timer.unref();\n }\n\n return true;\n};\n\nRetryOperation.prototype.attempt = function(fn, timeoutOps) {\n this._fn = fn;\n\n if (timeoutOps) {\n if (timeoutOps.timeout) {\n this._operationTimeout = timeoutOps.timeout;\n }\n if (timeoutOps.cb) {\n this._operationTimeoutCb = timeoutOps.cb;\n }\n }\n\n var self = this;\n if (this._operationTimeoutCb) {\n this._timeout = setTimeout(function() {\n self._operationTimeoutCb();\n }, self._operationTimeout);\n }\n\n this._operationStart = new Date().getTime();\n\n this._fn(this._attempts);\n};\n\nRetryOperation.prototype.try = function(fn) {\n console.log('Using RetryOperation.try() is deprecated');\n this.attempt(fn);\n};\n\nRetryOperation.prototype.start = function(fn) {\n console.log('Using RetryOperation.start() is deprecated');\n this.attempt(fn);\n};\n\nRetryOperation.prototype.start = RetryOperation.prototype.try;\n\nRetryOperation.prototype.errors = function() {\n return this._errors;\n};\n\nRetryOperation.prototype.attempts = function() {\n return this._attempts;\n};\n\nRetryOperation.prototype.mainError = function() {\n if (this._errors.length === 0) {\n return null;\n }\n\n var counts = {};\n var mainError = null;\n var mainErrorCount = 0;\n\n for (var i = 0; i < this._errors.length; i++) {\n var error = this._errors[i];\n var message = error.message;\n var count = (counts[message] || 0) + 1;\n\n counts[message] = count;\n\n if (count >= mainErrorCount) {\n mainError = error;\n mainErrorCount = count;\n }\n }\n\n return mainError;\n};\n", "var RetryOperation = require('./retry_operation');\n\nexports.operation = function(options) {\n var timeouts = exports.timeouts(options);\n return new RetryOperation(timeouts, {\n forever: options && options.forever,\n unref: options && options.unref,\n maxRetryTime: options && options.maxRetryTime\n });\n};\n\nexports.timeouts = function(options) {\n if (options instanceof Array) {\n return [].concat(options);\n }\n\n var opts = {\n retries: 10,\n factor: 2,\n minTimeout: 1 * 1000,\n maxTimeout: Infinity,\n randomize: false\n };\n for (var key in options) {\n opts[key] = options[key];\n }\n\n if (opts.minTimeout > opts.maxTimeout) {\n throw new Error('minTimeout is greater than maxTimeout');\n }\n\n var timeouts = [];\n for (var i = 0; i < opts.retries; i++) {\n timeouts.push(this.createTimeout(i, opts));\n }\n\n if (options && options.forever && !timeouts.length) {\n timeouts.push(this.createTimeout(i, opts));\n }\n\n // sort the array numerically ascending\n timeouts.sort(function(a,b) {\n return a - b;\n });\n\n return timeouts;\n};\n\nexports.createTimeout = function(attempt, opts) {\n var random = (opts.randomize)\n ? (Math.random() + 1)\n : 1;\n\n var timeout = Math.round(random * opts.minTimeout * Math.pow(opts.factor, attempt));\n timeout = Math.min(timeout, opts.maxTimeout);\n\n return timeout;\n};\n\nexports.wrap = function(obj, options, methods) {\n if (options instanceof Array) {\n methods = options;\n options = null;\n }\n\n if (!methods) {\n methods = [];\n for (var key in obj) {\n if (typeof obj[key] === 'function') {\n methods.push(key);\n }\n }\n }\n\n for (var i = 0; i < methods.length; i++) {\n var method = methods[i];\n var original = obj[method];\n\n obj[method] = function retryWrapper(original) {\n var op = exports.operation(options);\n var args = Array.prototype.slice.call(arguments, 1);\n var callback = args.pop();\n\n args.push(function(err) {\n if (op.retry(err)) {\n return;\n }\n if (err) {\n arguments[0] = op.mainError();\n }\n callback.apply(this, arguments);\n });\n\n op.attempt(function() {\n original.apply(obj, args);\n });\n }.bind(obj, original);\n obj[method].options = options;\n }\n};\n", "module.exports = require('./lib/retry');", "// This is not the set of all possible signals.\n//\n// It IS, however, the set of all signals that trigger\n// an exit on either Linux or BSD systems. Linux is a\n// superset of the signal names supported on BSD, and\n// the unknown signals just fail to register, so we can\n// catch that easily enough.\n//\n// Don't bother with SIGKILL. It's uncatchable, which\n// means that we can't fire any callbacks anyway.\n//\n// If a user does happen to register a handler on a non-\n// fatal signal like SIGWINCH or something, and then\n// exit, it'll end up firing `process.emit('exit')`, so\n// the handler will be fired anyway.\n//\n// SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised\n// artificially, inherently leave the process in a\n// state from which it is not safe to try and enter JS\n// listeners.\nmodule.exports = [\n 'SIGABRT',\n 'SIGALRM',\n 'SIGHUP',\n 'SIGINT',\n 'SIGTERM'\n]\n\nif (process.platform !== 'win32') {\n module.exports.push(\n 'SIGVTALRM',\n 'SIGXCPU',\n 'SIGXFSZ',\n 'SIGUSR2',\n 'SIGTRAP',\n 'SIGSYS',\n 'SIGQUIT',\n 'SIGIOT'\n // should detect profiler and enable/disable accordingly.\n // see #21\n // 'SIGPROF'\n )\n}\n\nif (process.platform === 'linux') {\n module.exports.push(\n 'SIGIO',\n 'SIGPOLL',\n 'SIGPWR',\n 'SIGSTKFLT',\n 'SIGUNUSED'\n )\n}\n", "// Note: since nyc uses this module to output coverage, any lines\n// that are in the direct sync flow of nyc's outputCoverage are\n// ignored, since we can never get coverage for them.\n// grab a reference to node's real process object right away\nvar process = global.process\n\nconst processOk = function (process) {\n return process &&\n typeof process === 'object' &&\n typeof process.removeListener === 'function' &&\n typeof process.emit === 'function' &&\n typeof process.reallyExit === 'function' &&\n typeof process.listeners === 'function' &&\n typeof process.kill === 'function' &&\n typeof process.pid === 'number' &&\n typeof process.on === 'function'\n}\n\n// some kind of non-node environment, just no-op\n/* istanbul ignore if */\nif (!processOk(process)) {\n module.exports = function () {\n return function () {}\n }\n} else {\n var assert = require('assert')\n var signals = require('./signals.js')\n var isWin = /^win/i.test(process.platform)\n\n var EE = require('events')\n /* istanbul ignore if */\n if (typeof EE !== 'function') {\n EE = EE.EventEmitter\n }\n\n var emitter\n if (process.__signal_exit_emitter__) {\n emitter = process.__signal_exit_emitter__\n } else {\n emitter = process.__signal_exit_emitter__ = new EE()\n emitter.count = 0\n emitter.emitted = {}\n }\n\n // Because this emitter is a global, we have to check to see if a\n // previous version of this library failed to enable infinite listeners.\n // I know what you're about to say. But literally everything about\n // signal-exit is a compromise with evil. Get used to it.\n if (!emitter.infinite) {\n emitter.setMaxListeners(Infinity)\n emitter.infinite = true\n }\n\n module.exports = function (cb, opts) {\n /* istanbul ignore if */\n if (!processOk(global.process)) {\n return function () {}\n }\n assert.equal(typeof cb, 'function', 'a callback must be provided for exit handler')\n\n if (loaded === false) {\n load()\n }\n\n var ev = 'exit'\n if (opts && opts.alwaysLast) {\n ev = 'afterexit'\n }\n\n var remove = function () {\n emitter.removeListener(ev, cb)\n if (emitter.listeners('exit').length === 0 &&\n emitter.listeners('afterexit').length === 0) {\n unload()\n }\n }\n emitter.on(ev, cb)\n\n return remove\n }\n\n var unload = function unload () {\n if (!loaded || !processOk(global.process)) {\n return\n }\n loaded = false\n\n signals.forEach(function (sig) {\n try {\n process.removeListener(sig, sigListeners[sig])\n } catch (er) {}\n })\n process.emit = originalProcessEmit\n process.reallyExit = originalProcessReallyExit\n emitter.count -= 1\n }\n module.exports.unload = unload\n\n var emit = function emit (event, code, signal) {\n /* istanbul ignore if */\n if (emitter.emitted[event]) {\n return\n }\n emitter.emitted[event] = true\n emitter.emit(event, code, signal)\n }\n\n // { <signal>: <listener fn>, ... }\n var sigListeners = {}\n signals.forEach(function (sig) {\n sigListeners[sig] = function listener () {\n /* istanbul ignore if */\n if (!processOk(global.process)) {\n return\n }\n // If there are no other listeners, an exit is coming!\n // Simplest way: remove us and then re-send the signal.\n // We know that this will kill the process, so we can\n // safely emit now.\n var listeners = process.listeners(sig)\n if (listeners.length === emitter.count) {\n unload()\n emit('exit', null, sig)\n /* istanbul ignore next */\n emit('afterexit', null, sig)\n /* istanbul ignore next */\n if (isWin && sig === 'SIGHUP') {\n // \"SIGHUP\" throws an `ENOSYS` error on Windows,\n // so use a supported signal instead\n sig = 'SIGINT'\n }\n /* istanbul ignore next */\n process.kill(process.pid, sig)\n }\n }\n })\n\n module.exports.signals = function () {\n return signals\n }\n\n var loaded = false\n\n var load = function load () {\n if (loaded || !processOk(global.process)) {\n return\n }\n loaded = true\n\n // This is the number of onSignalExit's that are in play.\n // It's important so that we can count the correct number of\n // listeners on signals, and don't wait for the other one to\n // handle it instead of us.\n emitter.count += 1\n\n signals = signals.filter(function (sig) {\n try {\n process.on(sig, sigListeners[sig])\n return true\n } catch (er) {\n return false\n }\n })\n\n process.emit = processEmit\n process.reallyExit = processReallyExit\n }\n module.exports.load = load\n\n var originalProcessReallyExit = process.reallyExit\n var processReallyExit = function processReallyExit (code) {\n /* istanbul ignore if */\n if (!processOk(global.process)) {\n return\n }\n process.exitCode = code || /* istanbul ignore next */ 0\n emit('exit', process.exitCode, null)\n /* istanbul ignore next */\n emit('afterexit', process.exitCode, null)\n /* istanbul ignore next */\n originalProcessReallyExit.call(process, process.exitCode)\n }\n\n var originalProcessEmit = process.emit\n var processEmit = function processEmit (ev, arg) {\n if (ev === 'exit' && processOk(global.process)) {\n /* istanbul ignore else */\n if (arg !== undefined) {\n process.exitCode = arg\n }\n var ret = originalProcessEmit.apply(this, arguments)\n /* istanbul ignore next */\n emit('exit', process.exitCode, null)\n /* istanbul ignore next */\n emit('afterexit', process.exitCode, null)\n /* istanbul ignore next */\n return ret\n } else {\n return originalProcessEmit.apply(this, arguments)\n }\n }\n}\n", "'use strict';\n\nconst cacheSymbol = Symbol();\n\nfunction probe(file, fs, callback) {\n const cachedPrecision = fs[cacheSymbol];\n\n if (cachedPrecision) {\n return fs.stat(file, (err, stat) => {\n /* istanbul ignore if */\n if (err) {\n return callback(err);\n }\n\n callback(null, stat.mtime, cachedPrecision);\n });\n }\n\n // Set mtime by ceiling Date.now() to seconds + 5ms so that it's \"not on the second\"\n const mtime = new Date((Math.ceil(Date.now() / 1000) * 1000) + 5);\n\n fs.utimes(file, mtime, mtime, (err) => {\n /* istanbul ignore if */\n if (err) {\n return callback(err);\n }\n\n fs.stat(file, (err, stat) => {\n /* istanbul ignore if */\n if (err) {\n return callback(err);\n }\n\n const precision = stat.mtime.getTime() % 1000 === 0 ? 's' : 'ms';\n\n // Cache the precision in a non-enumerable way\n Object.defineProperty(fs, cacheSymbol, { value: precision });\n\n callback(null, stat.mtime, precision);\n });\n });\n}\n\nfunction getMtime(precision) {\n let now = Date.now();\n\n if (precision === 's') {\n now = Math.ceil(now / 1000) * 1000;\n }\n\n return new Date(now);\n}\n\nmodule.exports.probe = probe;\nmodule.exports.getMtime = getMtime;\n", "'use strict';\n\nconst path = require('path');\nconst fs = require('graceful-fs');\nconst retry = require('retry');\nconst onExit = require('signal-exit');\nconst mtimePrecision = require('./mtime-precision');\n\nconst locks = {};\n\nfunction getLockFile(file, options) {\n return options.lockfilePath || `${file}.lock`;\n}\n\nfunction resolveCanonicalPath(file, options, callback) {\n if (!options.realpath) {\n return callback(null, path.resolve(file));\n }\n\n // Use realpath to resolve symlinks\n // It also resolves relative paths\n options.fs.realpath(file, callback);\n}\n\nfunction acquireLock(file, options, callback) {\n const lockfilePath = getLockFile(file, options);\n\n // Use mkdir to create the lockfile (atomic operation)\n options.fs.mkdir(lockfilePath, (err) => {\n if (!err) {\n // At this point, we acquired the lock!\n // Probe the mtime precision\n return mtimePrecision.probe(lockfilePath, options.fs, (err, mtime, mtimePrecision) => {\n // If it failed, try to remove the lock..\n /* istanbul ignore if */\n if (err) {\n options.fs.rmdir(lockfilePath, () => {});\n\n return callback(err);\n }\n\n callback(null, mtime, mtimePrecision);\n });\n }\n\n // If error is not EEXIST then some other error occurred while locking\n if (err.code !== 'EEXIST') {\n return callback(err);\n }\n\n // Otherwise, check if lock is stale by analyzing the file mtime\n if (options.stale <= 0) {\n return callback(Object.assign(new Error('Lock file is already being held'), { code: 'ELOCKED', file }));\n }\n\n options.fs.stat(lockfilePath, (err, stat) => {\n if (err) {\n // Retry if the lockfile has been removed (meanwhile)\n // Skip stale check to avoid recursiveness\n if (err.code === 'ENOENT') {\n return acquireLock(file, { ...options, stale: 0 }, callback);\n }\n\n return callback(err);\n }\n\n if (!isLockStale(stat, options)) {\n return callback(Object.assign(new Error('Lock file is already being held'), { code: 'ELOCKED', file }));\n }\n\n // If it's stale, remove it and try again!\n // Skip stale check to avoid recursiveness\n removeLock(file, options, (err) => {\n if (err) {\n return callback(err);\n }\n\n acquireLock(file, { ...options, stale: 0 }, callback);\n });\n });\n });\n}\n\nfunction isLockStale(stat, options) {\n return stat.mtime.getTime() < Date.now() - options.stale;\n}\n\nfunction removeLock(file, options, callback) {\n // Remove lockfile, ignoring ENOENT errors\n options.fs.rmdir(getLockFile(file, options), (err) => {\n if (err && err.code !== 'ENOENT') {\n return callback(err);\n }\n\n callback();\n });\n}\n\nfunction updateLock(file, options) {\n const lock = locks[file];\n\n // Just for safety, should never happen\n /* istanbul ignore if */\n if (lock.updateTimeout) {\n return;\n }\n\n lock.updateDelay = lock.updateDelay || options.update;\n lock.updateTimeout = setTimeout(() => {\n lock.updateTimeout = null;\n\n // Stat the file to check if mtime is still ours\n // If it is, we can still recover from a system sleep or a busy event loop\n options.fs.stat(lock.lockfilePath, (err, stat) => {\n const isOverThreshold = lock.lastUpdate + options.stale < Date.now();\n\n // If it failed to update the lockfile, keep trying unless\n // the lockfile was deleted or we are over the threshold\n if (err) {\n if (err.code === 'ENOENT' || isOverThreshold) {\n return setLockAsCompromised(file, lock, Object.assign(err, { code: 'ECOMPROMISED' }));\n }\n\n lock.updateDelay = 1000;\n\n return updateLock(file, options);\n }\n\n const isMtimeOurs = lock.mtime.getTime() === stat.mtime.getTime();\n\n if (!isMtimeOurs) {\n return setLockAsCompromised(\n file,\n lock,\n Object.assign(\n new Error('Unable to update lock within the stale threshold'),\n { code: 'ECOMPROMISED' }\n ));\n }\n\n const mtime = mtimePrecision.getMtime(lock.mtimePrecision);\n\n options.fs.utimes(lock.lockfilePath, mtime, mtime, (err) => {\n const isOverThreshold = lock.lastUpdate + options.stale < Date.now();\n\n // Ignore if the lock was released\n if (lock.released) {\n return;\n }\n\n // If it failed to update the lockfile, keep trying unless\n // the lockfile was deleted or we are over the threshold\n if (err) {\n if (err.code === 'ENOENT' || isOverThreshold) {\n return setLockAsCompromised(file, lock, Object.assign(err, { code: 'ECOMPROMISED' }));\n }\n\n lock.updateDelay = 1000;\n\n return updateLock(file, options);\n }\n\n // All ok, keep updating..\n lock.mtime = mtime;\n lock.lastUpdate = Date.now();\n lock.updateDelay = null;\n updateLock(file, options);\n });\n });\n }, lock.updateDelay);\n\n // Unref the timer so that the nodejs process can exit freely\n // This is safe because all acquired locks will be automatically released\n // on process exit\n\n // We first check that `lock.updateTimeout.unref` exists because some users\n // may be using this module outside of NodeJS (e.g., in an electron app),\n // and in those cases `setTimeout` return an integer.\n /* istanbul ignore else */\n if (lock.updateTimeout.unref) {\n lock.updateTimeout.unref();\n }\n}\n\nfunction setLockAsCompromised(file, lock, err) {\n // Signal the lock has been released\n lock.released = true;\n\n // Cancel lock mtime update\n // Just for safety, at this point updateTimeout should be null\n /* istanbul ignore if */\n if (lock.updateTimeout) {\n clearTimeout(lock.updateTimeout);\n }\n\n if (locks[file] === lock) {\n delete locks[file];\n }\n\n lock.options.onCompromised(err);\n}\n\n// ----------------------------------------------------------\n\nfunction lock(file, options, callback) {\n /* istanbul ignore next */\n options = {\n stale: 10000,\n update: null,\n realpath: true,\n retries: 0,\n fs,\n onCompromised: (err) => { throw err; },\n ...options,\n };\n\n options.retries = options.retries || 0;\n options.retries = typeof options.retries === 'number' ? { retries: options.retries } : options.retries;\n options.stale = Math.max(options.stale || 0, 2000);\n options.update = options.update == null ? options.stale / 2 : options.update || 0;\n options.update = Math.max(Math.min(options.update, options.stale / 2), 1000);\n\n // Resolve to a canonical file path\n resolveCanonicalPath(file, options, (err, file) => {\n if (err) {\n return callback(err);\n }\n\n // Attempt to acquire the lock\n const operation = retry.operation(options.retries);\n\n operation.attempt(() => {\n acquireLock(file, options, (err, mtime, mtimePrecision) => {\n if (operation.retry(err)) {\n return;\n }\n\n if (err) {\n return callback(operation.mainError());\n }\n\n // We now own the lock\n const lock = locks[file] = {\n lockfilePath: getLockFile(file, options),\n mtime,\n mtimePrecision,\n options,\n lastUpdate: Date.now(),\n };\n\n // We must keep the lock fresh to avoid staleness\n updateLock(file, options);\n\n callback(null, (releasedCallback) => {\n if (lock.released) {\n return releasedCallback &&\n releasedCallback(Object.assign(new Error('Lock is already released'), { code: 'ERELEASED' }));\n }\n\n // Not necessary to use realpath twice when unlocking\n unlock(file, { ...options, realpath: false }, releasedCallback);\n });\n });\n });\n });\n}\n\nfunction unlock(file, options, callback) {\n options = {\n fs,\n realpath: true,\n ...options,\n };\n\n // Resolve to a canonical file path\n resolveCanonicalPath(file, options, (err, file) => {\n if (err) {\n return callback(err);\n }\n\n // Skip if the lock is not acquired\n const lock = locks[file];\n\n if (!lock) {\n return callback(Object.assign(new Error('Lock is not acquired/owned by you'), { code: 'ENOTACQUIRED' }));\n }\n\n lock.updateTimeout && clearTimeout(lock.updateTimeout); // Cancel lock mtime update\n lock.released = true; // Signal the lock has been released\n delete locks[file]; // Delete from locks\n\n removeLock(file, options, callback);\n });\n}\n\nfunction check(file, options, callback) {\n options = {\n stale: 10000,\n realpath: true,\n fs,\n ...options,\n };\n\n options.stale = Math.max(options.stale || 0, 2000);\n\n // Resolve to a canonical file path\n resolveCanonicalPath(file, options, (err, file) => {\n if (err) {\n return callback(err);\n }\n\n // Check if lockfile exists\n options.fs.stat(getLockFile(file, options), (err, stat) => {\n if (err) {\n // If does not exist, file is not locked. Otherwise, callback with error\n return err.code === 'ENOENT' ? callback(null, false) : callback(err);\n }\n\n // Otherwise, check if lock is stale by analyzing the file mtime\n return callback(null, !isLockStale(stat, options));\n });\n });\n}\n\nfunction getLocks() {\n return locks;\n}\n\n// Remove acquired locks on exit\n/* istanbul ignore next */\nonExit(() => {\n for (const file in locks) {\n const options = locks[file].options;\n\n try { options.fs.rmdirSync(getLockFile(file, options)); } catch (e) { /* Empty */ }\n }\n});\n\nmodule.exports.lock = lock;\nmodule.exports.unlock = unlock;\nmodule.exports.check = check;\nmodule.exports.getLocks = getLocks;\n", "'use strict';\n\nconst fs = require('graceful-fs');\n\nfunction createSyncFs(fs) {\n const methods = ['mkdir', 'realpath', 'stat', 'rmdir', 'utimes'];\n const newFs = { ...fs };\n\n methods.forEach((method) => {\n newFs[method] = (...args) => {\n const callback = args.pop();\n let ret;\n\n try {\n ret = fs[`${method}Sync`](...args);\n } catch (err) {\n return callback(err);\n }\n\n callback(null, ret);\n };\n });\n\n return newFs;\n}\n\n// ----------------------------------------------------------\n\nfunction toPromise(method) {\n return (...args) => new Promise((resolve, reject) => {\n args.push((err, result) => {\n if (err) {\n reject(err);\n } else {\n resolve(result);\n }\n });\n\n method(...args);\n });\n}\n\nfunction toSync(method) {\n return (...args) => {\n let err;\n let result;\n\n args.push((_err, _result) => {\n err = _err;\n result = _result;\n });\n\n method(...args);\n\n if (err) {\n throw err;\n }\n\n return result;\n };\n}\n\nfunction toSyncOptions(options) {\n // Shallow clone options because we are oging to mutate them\n options = { ...options };\n\n // Transform fs to use the sync methods instead\n options.fs = createSyncFs(options.fs || fs);\n\n // Retries are not allowed because it requires the flow to be sync\n if (\n (typeof options.retries === 'number' && options.retries > 0) ||\n (options.retries && typeof options.retries.retries === 'number' && options.retries.retries > 0)\n ) {\n throw Object.assign(new Error('Cannot use retries with the sync api'), { code: 'ESYNC' });\n }\n\n return options;\n}\n\nmodule.exports = {\n toPromise,\n toSync,\n toSyncOptions,\n};\n", "'use strict';\n\nconst lockfile = require('./lib/lockfile');\nconst { toPromise, toSync, toSyncOptions } = require('./lib/adapter');\n\nasync function lock(file, options) {\n const release = await toPromise(lockfile.lock)(file, options);\n\n return toPromise(release);\n}\n\nfunction lockSync(file, options) {\n const release = toSync(lockfile.lock)(file, toSyncOptions(options));\n\n return toSync(release);\n}\n\nfunction unlock(file, options) {\n return toPromise(lockfile.unlock)(file, options);\n}\n\nfunction unlockSync(file, options) {\n return toSync(lockfile.unlock)(file, toSyncOptions(options));\n}\n\nfunction check(file, options) {\n return toPromise(lockfile.check)(file, options);\n}\n\nfunction checkSync(file, options) {\n return toSync(lockfile.check)(file, toSyncOptions(options));\n}\n\nmodule.exports = lock;\nmodule.exports.lock = lock;\nmodule.exports.unlock = unlock;\nmodule.exports.lockSync = lockSync;\nmodule.exports.unlockSync = unlockSync;\nmodule.exports.check = check;\nmodule.exports.checkSync = checkSync;\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/** 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}\n\n/** Supported SOPS encryption backend identifiers. */\nexport type BackendType = \"age\" | \"awskms\" | \"gcpkms\" | \"azurekv\" | \"pgp\" | \"hsm\";\n\n/** Per-environment SOPS backend override. */\nexport interface EnvironmentSopsOverride {\n backend: BackendType;\n aws_kms_arn?: string;\n gcp_kms_resource_id?: string;\n azure_kv_url?: string;\n pgp_fingerprint?: string;\n /** PKCS#11 URI identifying the wrap keypair on the HSM (RFC 7512). Required when backend === \"hsm\". */\n pkcs11_uri?: 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 pkcs11_uri: manifest.sops.pkcs11_uri,\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: BackendType;\n age?: { recipients: (string | { key: string; label?: string })[] };\n aws_kms_arn?: string;\n gcp_kms_resource_id?: string;\n azure_kv_url?: string;\n pgp_fingerprint?: string;\n /** PKCS#11 URI identifying the wrap keypair on the HSM (RFC 7512). Required when default_backend === \"hsm\". */\n pkcs11_uri?: 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 * Path to a 0600 file containing the HSM user PIN. Used when the manifest\n * declares an `hsm` backend and neither `CLEF_PKCS11_PIN` nor\n * `CLEF_PKCS11_PIN_FILE` is set. Never commit a PIN itself \u2014 only its path.\n */\n pkcs11_pin_file?: string;\n /**\n * Optional override for the vendor PKCS#11 module path (e.g.\n * `/opt/homebrew/lib/softhsm/libsofthsm2.so`). Falls back to\n * `CLEF_PKCS11_MODULE` then to vendor-default discovery in the keyservice.\n */\n pkcs11_module?: string;\n}\n\n/** User-scoped Cloud credentials stored in ~/.clef/credentials.yaml. */\nexport interface ClefCloudCredentials {\n /** Bearer token for Cloud API authentication. */\n token: string;\n /** Cloud API endpoint override. Defaults to https://api.clef.sh. */\n endpoint?: 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\" | \"metadata\";\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: BackendType;\n /** List of recipient identifiers (age public keys, KMS ARNs, Azure KV URLs, PGP fingerprints). */\n recipients: string[];\n /**\n * Effective last-modified timestamp. When `lastModifiedPresent` is `false`\n * this falls back to the time the metadata was parsed \u2014 callers that care\n * about rotation policy should branch on `lastModifiedPresent`, not on the\n * date itself.\n */\n lastModified: Date;\n /**\n * Whether the file's `sops.lastmodified` field was actually populated.\n * `false` means `lastModified` is a synthetic fallback (now), not a real\n * encryption timestamp \u2014 compliance and rotation evaluators surface this\n * distinctly so files without metadata don't appear \"freshly rotated.\"\n *\n * Optional: callers that don't set this are assumed to have a real\n * timestamp (the current behavior of every consumer pre-dating this field).\n * `parseMetadataFromFile` always populates it.\n */\n lastModifiedPresent?: boolean;\n /** SOPS format version string from the file's `sops.version` field (e.g. `\"3.9.4\"`). */\n version?: string;\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 `.clef/policy.yaml` fails parsing or schema validation. */\nexport class PolicyValidationError extends ClefError {\n constructor(\n message: string,\n public readonly field?: string,\n ) {\n super(message, field ? `Check the '${field}' field in .clef/policy.yaml` : undefined);\n this.name = \"PolicyValidationError\";\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 /** When true, this identity is a runtime-only pack target \u2014 its keys are NOT\n * registered as SOPS recipients on encrypted files. */\n pack_only?: boolean;\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 | \"runtime_shared_recipient\";\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 Cloud 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 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\", \"hsm\"] as const;\n/**\n * Minimum PKCS#11 URI shape required at parse time. Loose by design \u2014 full\n * RFC 7512 grammar varies per HSM vendor, and clef-keyservice owns the\n * authoritative parse via miekg/pkcs11. We just guard against obvious typos\n * (wrong scheme, no attributes) so that misconfigured manifests fail at\n * `clef lint` instead of at first encrypt.\n */\nconst PKCS11_URI_PATTERN = /^pkcs11:[a-zA-Z][a-zA-Z0-9_-]*=[^;]+/;\nconst VALID_TOP_LEVEL_KEYS = [\n \"version\",\n \"environments\",\n \"namespaces\",\n \"sops\",\n \"file_pattern\",\n \"service_identities\",\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 if (backend === \"hsm\") {\n if (typeof sopsOverride.pkcs11_uri !== \"string\") {\n throw new ManifestValidationError(\n `Environment '${envObj.name}' uses 'hsm' backend but is missing 'pkcs11_uri'.`,\n \"environments\",\n );\n }\n if (!PKCS11_URI_PATTERN.test(sopsOverride.pkcs11_uri)) {\n throw new ManifestValidationError(\n `Environment '${envObj.name}' has an invalid 'pkcs11_uri' '${sopsOverride.pkcs11_uri}'. ` +\n \"Must start with 'pkcs11:' and contain at least one attribute (e.g. 'pkcs11:slot=0;label=clef-dek-wrapper').\",\n \"environments\",\n );\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 ...(typeof sopsOverride.pkcs11_uri === \"string\"\n ? { pkcs11_uri: sopsOverride.pkcs11_uri }\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: ${VALID_BACKENDS.join(\", \")}.`,\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 // Parse age.recipients if present\n const ageObj = sopsObj.age as Record<string, unknown> | undefined;\n const ageRecipients =\n ageObj && Array.isArray(ageObj.recipients) ? (ageObj.recipients as unknown[]) : undefined;\n const parsedAge = ageRecipients\n ? {\n age: {\n recipients: ageRecipients.map((r) => {\n if (typeof r === \"string\") return r;\n if (typeof r === \"object\" && r !== null) {\n const obj = r as Record<string, unknown>;\n return {\n key: String(obj.key ?? \"\"),\n ...(typeof obj.label === \"string\" ? { label: obj.label } : {}),\n };\n }\n return String(r);\n }),\n },\n }\n : {};\n\n // Optional global pkcs11_uri \u2014 required iff default_backend is hsm.\n if (sopsObj.pkcs11_uri !== undefined && typeof sopsObj.pkcs11_uri !== \"string\") {\n throw new ManifestValidationError(\n \"Field 'sops.pkcs11_uri' must be a string.\",\n \"sops.pkcs11_uri\",\n );\n }\n if (typeof sopsObj.pkcs11_uri === \"string\" && !PKCS11_URI_PATTERN.test(sopsObj.pkcs11_uri)) {\n throw new ManifestValidationError(\n `Field 'sops.pkcs11_uri' has invalid format '${sopsObj.pkcs11_uri}'. ` +\n \"Must start with 'pkcs11:' and contain at least one attribute (e.g. 'pkcs11:slot=0;label=clef-dek-wrapper').\",\n \"sops.pkcs11_uri\",\n );\n }\n if (sopsObj.default_backend === \"hsm\" && typeof sopsObj.pkcs11_uri !== \"string\") {\n throw new ManifestValidationError(\n \"Field 'sops.pkcs11_uri' is required when sops.default_backend is 'hsm'.\",\n \"sops.pkcs11_uri\",\n );\n }\n\n const sopsConfig = {\n default_backend: sopsObj.default_backend as (typeof VALID_BACKENDS)[number],\n ...parsedAge,\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 ...(typeof sopsObj.pkcs11_uri === \"string\" ? { pkcs11_uri: sopsObj.pkcs11_uri } : {}),\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 // Identity names appear as DNS subdomains in Cloud serve URLs\n // (e.g. api-gateway.serve.clef.sh) and as URL path segments, so\n // they must be valid DNS labels: lowercase alphanumeric + hyphens,\n // no leading/trailing hyphen, max 63 chars.\n if (!/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/.test(siName)) {\n throw new ManifestValidationError(\n `Service identity '${siName}' has an invalid name. ` +\n \"Names must be lowercase alphanumeric with hyphens, \" +\n \"must not start or end with a hyphen, and max 63 characters \" +\n \"(e.g. 'api-gateway', 'auth-service').\",\n \"service_identities\",\n );\n }\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 if (siObj.pack_only !== undefined && typeof siObj.pack_only !== \"boolean\") {\n throw new ManifestValidationError(\n `Service identity '${siName}' has a non-boolean 'pack_only' field.`,\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 // Note: we deliberately DO NOT enforce \"every declared env must be on\n // every SI\" at parse time. `clef env add` adds an env without\n // cascading to existing SIs \u2014 that gap is reported by `clef lint` /\n // ServiceIdentityManager.validate as a `missing_environment` issue,\n // and the user fills it explicitly with `clef service add-env`.\n // Failing the parse would prevent any clef command from running\n // against a manifest in the legitimate \"env added, SIs not yet\n // updated\" state.\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 ...(siObj.pack_only === true ? { pack_only: true } : {}),\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 return {\n version: 1,\n environments,\n namespaces,\n sops: sopsConfig,\n file_pattern: obj.file_pattern,\n ...(serviceIdentities ? { service_identities: serviceIdentities } : {}),\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 * as YAML from \"yaml\";\nimport writeFileAtomic from \"write-file-atomic\";\nimport { CLEF_MANIFEST_FILENAME } from \"./parser\";\n\nexport function readManifestYaml(repoRoot: string): Record<string, unknown> {\n const raw = fs.readFileSync(path.join(repoRoot, CLEF_MANIFEST_FILENAME), \"utf-8\");\n return YAML.parse(raw) as Record<string, unknown>;\n}\n\n/**\n * Write the manifest atomically via write-file-atomic.\n *\n * Uses temp-file-then-rename in the same directory as the manifest, so the\n * rename is atomic on POSIX (cross-filesystem renames degrade to copy+delete\n * and are not atomic). Another reader sees either the old contents or the new\n * contents \u2014 never a half-written file. If the process dies mid-write, the\n * temp file is cleaned up by write-file-atomic's signal-exit handler. Handles\n * Windows EPERM retries internally.\n */\nexport function writeManifestYaml(repoRoot: string, doc: Record<string, unknown>): void {\n const manifestPath = path.join(repoRoot, CLEF_MANIFEST_FILENAME);\n writeFileAtomic.sync(manifestPath, YAML.stringify(doc));\n}\n\n/**\n * Write a raw manifest string atomically. Used for rollback paths that need\n * to restore an exact byte-for-byte snapshot of the original file (avoiding\n * any YAML parse \u2192 stringify round-trip that could change formatting).\n */\nexport function writeManifestYamlRaw(repoRoot: string, contents: string): void {\n const manifestPath = path.join(repoRoot, CLEF_MANIFEST_FILENAME);\n writeFileAtomic.sync(manifestPath, contents);\n}\n", "import * as fs from \"fs\";\nimport * as path from \"path\";\nimport type { ClefManifest, SubprocessRunner } from \"../types\";\nimport {\n matchPatterns,\n isHighEntropy,\n shannonEntropy,\n redactValue,\n matchPublicPrefix,\n ScanMatch,\n} from \"./patterns\";\nimport { loadIgnoreRules, shouldIgnoreFile, shouldIgnoreMatch } from \"./ignore\";\n\nexport type { ScanMatch } from \"./patterns\";\nexport type { ClefIgnoreRules } from \"./ignore\";\nexport {\n shannonEntropy,\n isHighEntropy,\n matchPatterns,\n matchPublicPrefix,\n redactValue,\n} 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 * When `true` (default) the entropy detector skips values that match known\n * public-by-design credential shapes \u2014 reCAPTCHA site keys, Stripe\n * publishable keys, etc. Set to `false` (via `--no-public-allowlist`) to\n * report every high-entropy value regardless of shape. Pattern matches\n * are unaffected \u2014 a leaked AWS/Stripe secret key is still flagged.\n */\n publicAllowlist?: boolean;\n}\n\nconst ALWAYS_SKIP_EXTENSIONS = [\".enc.yaml\", \".enc.json\"] as const;\nconst ALWAYS_SKIP_NAMES = [\n \".clef-meta.yaml\",\n \"clef.yaml\", // manifest \u2014 contains public keys and config, 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 allowPublic = options.publicAllowlist !== false;\n const entropyHit = this.detectEntropy(line, lineNum, relPath, allowPublic);\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(\n line: string,\n lineNum: number,\n filePath: string,\n allowPublic: boolean,\n ): 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 if (allowPublic && matchPublicPrefix(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\ninterface PublicPrefixDef {\n name: string;\n regex: RegExp;\n}\n\n// Credential-shaped values that are public by design. These ship to the\n// browser in HTML/JS \u2014 flagging them as leaked secrets is a false positive.\n// Kept narrow on purpose: each entry must be unambiguous that it is client-\n// facing, not a backend secret.\nconst PUBLIC_PREFIX_PATTERNS: PublicPrefixDef[] = [\n // reCAPTCHA v2, v3, and Enterprise site keys are exactly 40 chars and\n // begin with 6L[c-f]. Site keys are designed to be embedded in HTML.\n // https://developers.google.com/recaptcha/docs/faq\n { name: \"reCAPTCHA site key\", regex: /^6L[c-f][0-9A-Za-z_-]{37}$/ },\n // Stripe publishable keys (client-side, distinct from sk_live_/sk_test_).\n { name: \"Stripe publishable key\", regex: /^pk_(?:live|test)_[0-9a-zA-Z]{24,}$/ },\n];\n\n/**\n * Returns a matching public-prefix definition if the value is a known\n * client-facing credential shape (reCAPTCHA site key, Stripe publishable\n * key, etc.). `null` when the value is not recognized as public.\n *\n * Used by the entropy detector to avoid false positives on strings that are\n * public by design. The check is intentionally conservative \u2014 patterns are\n * anchored (`^...$`) so partial matches do not qualify.\n */\nexport function matchPublicPrefix(value: string): { name: string } | null {\n for (const def of PUBLIC_PREFIX_PATTERNS) {\n if (def.regex.test(value)) return { name: def.name };\n }\n return null;\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 *\n * Schema of `.clef-meta.yaml` (co-located with each `.enc.yaml` cell):\n *\n * version: 1\n * pending: # placeholder values awaiting real secrets\n * - key: DATABASE_URL\n * since: \"2026-04-10T14:22:01.000Z\"\n * setBy: \"alice@example.com\"\n * rotations: # per-key rotation records (value changes only)\n * - key: STRIPE_KEY\n * last_rotated_at: \"2026-03-15T09:11:02.000Z\"\n * rotated_by: \"alice@example.com\"\n * rotation_count: 4\n *\n * A rotation record is created or updated only when a key's plaintext value\n * changes (clef set, clef rotate, clef import of a changed value, clef\n * delete). Re-encryption operations (clef recipients add, clef migrate-\n * backend) leave rotations untouched \u2014 re-encrypting the same plaintext is\n * not a value rotation.\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 RotationRecord {\n key: string;\n lastRotatedAt: Date;\n rotatedBy: string;\n rotationCount: number;\n}\n\n/**\n * Parsed contents of a `.clef-meta.yaml` sidecar.\n *\n * Both `pending` and `rotations` may be empty arrays \u2014 they represent two\n * independent per-key state sections. A fresh cell with no sidecar file\n * on disk is represented as `{ version: 1, pending: [], rotations: [] }`.\n */\ninterface CellMetadata {\n version: 1;\n pending: PendingKey[];\n rotations: RotationRecord[];\n}\n\n/** @deprecated Use {@link CellMetadata}. Retained for external import compatibility. */\ntype PendingMetadata = CellMetadata;\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\nfunction emptyMetadata(): CellMetadata {\n return { version: 1, pending: [], rotations: [] };\n}\n\n/** Load metadata for an encrypted file. Returns empty metadata if the file is missing or unreadable. */\nasync function loadMetadata(filePath: string): Promise<CellMetadata> {\n const metaPath = metadataPath(filePath);\n try {\n if (!fs.existsSync(metaPath)) return emptyMetadata();\n const content = fs.readFileSync(metaPath, \"utf-8\");\n const parsed = YAML.parse(content);\n if (!parsed || typeof parsed !== \"object\") return emptyMetadata();\n\n const pendingRaw: unknown[] = Array.isArray(parsed.pending) ? parsed.pending : [];\n const pending = pendingRaw\n .filter(\n (p): p is { key: string; since: string; setBy: string } =>\n !!p &&\n typeof p === \"object\" &&\n typeof (p as { key: unknown }).key === \"string\" &&\n typeof (p as { since: unknown }).since === \"string\" &&\n typeof (p as { setBy: unknown }).setBy === \"string\",\n )\n .map((p) => ({ key: p.key, since: new Date(p.since), setBy: p.setBy }));\n\n const rotationsRaw: unknown[] = Array.isArray(parsed.rotations) ? parsed.rotations : [];\n const rotations = rotationsRaw\n .filter(\n (\n r,\n ): r is {\n key: string;\n last_rotated_at: string;\n rotated_by: string;\n rotation_count: number;\n } =>\n !!r &&\n typeof r === \"object\" &&\n typeof (r as { key: unknown }).key === \"string\" &&\n typeof (r as { last_rotated_at: unknown }).last_rotated_at === \"string\" &&\n typeof (r as { rotated_by: unknown }).rotated_by === \"string\" &&\n typeof (r as { rotation_count: unknown }).rotation_count === \"number\",\n )\n .map((r) => ({\n key: r.key,\n lastRotatedAt: new Date(r.last_rotated_at),\n rotatedBy: r.rotated_by,\n rotationCount: r.rotation_count,\n }));\n\n return { version: 1, pending, rotations };\n } catch {\n return emptyMetadata();\n }\n}\n\n/** Write metadata to disk. Creates parent directories if needed. */\nasync function saveMetadata(filePath: string, metadata: CellMetadata): Promise<void> {\n const metaPath = metadataPath(filePath);\n const dir = path.dirname(metaPath);\n if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });\n\n // Always write both sections, even when empty. Consistent shape makes\n // the file simpler to read and parse; the git-diff cost of two empty\n // arrays is trivial.\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 rotations: metadata.rotations.map((r) => ({\n key: r.key,\n last_rotated_at: r.lastRotatedAt.toISOString(),\n rotated_by: r.rotatedBy,\n rotation_count: r.rotationCount,\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 */\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 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/**\n * Record a rotation for one or more keys. Creates a new record when the key\n * has never rotated before (rotation_count: 1), or upserts an existing record\n * by bumping rotation_count and updating last_rotated_at + rotated_by.\n *\n * Also removes the corresponding `pending` entry if present \u2014 a rotation is\n * the resolution of a pending placeholder, so the two states are mutually\n * exclusive.\n */\nasync function recordRotation(\n filePath: string,\n keys: string[],\n rotatedBy: string,\n now: Date = new Date(),\n): Promise<void> {\n const metadata = await loadMetadata(filePath);\n for (const key of keys) {\n const existing = metadata.rotations.findIndex((r) => r.key === key);\n if (existing >= 0) {\n metadata.rotations[existing] = {\n key,\n lastRotatedAt: now,\n rotatedBy,\n rotationCount: metadata.rotations[existing].rotationCount + 1,\n };\n } else {\n metadata.rotations.push({\n key,\n lastRotatedAt: now,\n rotatedBy,\n rotationCount: 1,\n });\n }\n }\n // Rotation resolves pending state \u2014 strip matching pending entries.\n metadata.pending = metadata.pending.filter((p) => !keys.includes(p.key));\n await saveMetadata(filePath, metadata);\n}\n\n/**\n * Remove rotation records for the given keys. Called when a key is deleted\n * from the cell via `clef delete` \u2014 leaving a stale record would mislead\n * policy evaluation.\n */\nasync function removeRotation(filePath: string, keys: string[]): Promise<void> {\n const metadata = await loadMetadata(filePath);\n metadata.rotations = metadata.rotations.filter((r) => !keys.includes(r.key));\n await saveMetadata(filePath, metadata);\n}\n\n/** Return the rotation records currently recorded for the given encrypted file. */\nasync function getRotations(filePath: string): Promise<RotationRecord[]> {\n const metadata = await loadMetadata(filePath);\n return metadata.rotations;\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 */\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 await new Promise((r) => setTimeout(r, retryDelayMs));\n await markPending(filePath, keys, setBy);\n }\n}\n\nexport {\n PendingKey,\n RotationRecord,\n CellMetadata,\n PendingMetadata,\n metadataPath,\n loadMetadata,\n saveMetadata,\n markPending,\n markPendingWithRetry,\n markResolved,\n getPendingKeys,\n isPending,\n recordRotation,\n removeRotation,\n getRotations,\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\";\nimport { TransactionManager } from \"../tx\";\n\n/**\n * Performs bulk set, delete, and copy operations across multiple environments.\n *\n * Each public method wraps its work in a single TransactionManager commit so\n * any cell-write failure rolls back ALL writes via `git reset --hard`. The\n * previous \"collect errors and continue\" behavior is gone \u2014 bulk ops are now\n * all-or-nothing.\n *\n * @example\n * ```ts\n * const tx = new TransactionManager(new GitIntegration(runner));\n * const bulk = new BulkOps(tx);\n * await bulk.setAcrossEnvironments(\"app\", \"DATABASE_URL\", { staging: \"...\", production: \"...\" }, manifest, sopsClient, repoRoot);\n * ```\n */\nexport class BulkOps {\n constructor(private readonly tx: TransactionManager) {}\n\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 Whatever the underlying encrypt throws \u2014 the transaction rolls back.\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 targets = manifest.environments\n .filter((env) => env.name in values)\n .map((env) => ({\n env: env.name,\n filePath: path.join(\n repoRoot,\n manifest.file_pattern\n .replace(\"{namespace}\", namespace)\n .replace(\"{environment}\", env.name),\n ),\n }));\n\n if (targets.length === 0) return;\n\n await this.tx.run(repoRoot, {\n description: `clef set: ${namespace}/${key} across ${targets.length} env(s)`,\n paths: targets.map((t) => path.relative(repoRoot, t.filePath)),\n mutate: async () => {\n for (const target of targets) {\n const decrypted = await sopsClient.decrypt(target.filePath);\n decrypted.values[key] = values[target.env];\n await sopsClient.encrypt(target.filePath, decrypted.values, manifest, target.env);\n }\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 */\n async deleteAcrossEnvironments(\n namespace: string,\n key: string,\n manifest: ClefManifest,\n sopsClient: EncryptionBackend,\n repoRoot: string,\n ): Promise<void> {\n const targets = manifest.environments.map((env) => ({\n env: env.name,\n filePath: path.join(\n repoRoot,\n manifest.file_pattern.replace(\"{namespace}\", namespace).replace(\"{environment}\", env.name),\n ),\n }));\n\n await this.tx.run(repoRoot, {\n description: `clef delete: ${namespace}/${key} from ${targets.length} env(s)`,\n paths: targets.map((t) => path.relative(repoRoot, t.filePath)),\n mutate: async () => {\n for (const target of targets) {\n const decrypted = await sopsClient.decrypt(target.filePath);\n if (key in decrypted.values) {\n delete decrypted.values[key];\n await sopsClient.encrypt(target.filePath, decrypted.values, manifest, target.env);\n }\n }\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 * @param repoRoot - Absolute path to the repository root.\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 repoRoot: string,\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 await this.tx.run(repoRoot, {\n description: `clef copy: ${key} from ${fromCell.namespace}/${fromCell.environment} to ${toCell.namespace}/${toCell.environment}`,\n paths: [path.relative(repoRoot, toCell.filePath)],\n mutate: async () => {\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 }\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\n# Skip during TransactionManager commits (policy scaffolding, migrations, etc.)\nif [ \"$CLEF_IN_TRANSACTION\" = \"1\" ]; then\n exit 0\nfi\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 * @param options - Optional commit options (env vars, no-verify).\n * @returns The full commit hash.\n * @throws {@link GitOperationError} On failure.\n */\n async commit(\n message: string,\n repoRoot: string,\n options?: { env?: Record<string, string>; noVerify?: boolean },\n ): Promise<string> {\n const args = [\"commit\", \"-m\", message];\n if (options?.noVerify) {\n args.push(\"--no-verify\");\n }\n const result = await this.runner.run(\"git\", args, {\n cwd: repoRoot,\n env: options?.env,\n });\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 // Get the full commit SHA via rev-parse for stable identification\n return this.getHead(repoRoot);\n }\n\n /**\n * Get the current HEAD commit SHA.\n *\n * @param repoRoot - Working directory for the git command.\n * @returns The full commit hash.\n * @throws {@link GitOperationError} On failure.\n */\n async getHead(repoRoot: string): Promise<string> {\n const result = await this.runner.run(\"git\", [\"rev-parse\", \"HEAD\"], { cwd: repoRoot });\n\n if (result.exitCode !== 0) {\n throw new GitOperationError(\n `Failed to read HEAD: ${result.stderr.trim()}`,\n \"Ensure there is at least one commit in the repository.\",\n );\n }\n\n return result.stdout.trim();\n }\n\n /**\n * Reset HEAD and the working tree to a specific commit (`git reset --hard`).\n * Used by the transaction manager to roll back failed mutations.\n *\n * WARNING: this discards uncommitted changes in the working tree. Callers\n * must verify the working tree state before calling.\n *\n * @param repoRoot - Working directory for the git command.\n * @param sha - Commit SHA to reset to.\n * @throws {@link GitOperationError} On failure.\n */\n async resetHard(repoRoot: string, sha: string): Promise<void> {\n const result = await this.runner.run(\"git\", [\"reset\", \"--hard\", sha], { cwd: repoRoot });\n\n if (result.exitCode !== 0) {\n throw new GitOperationError(\n `Failed to reset to ${sha}: ${result.stderr.trim()}`,\n \"The repository may be in an inconsistent state. Inspect with 'git status'.\",\n );\n }\n }\n\n /**\n * Remove untracked files matching the given paths (`git clean -fd <paths>`).\n * Scoped to the declared paths so unrelated untracked files are preserved.\n *\n * @param repoRoot - Working directory for the git command.\n * @param paths - Paths to clean (relative to repoRoot).\n * @throws {@link GitOperationError} On failure.\n */\n async cleanFiles(repoRoot: string, paths: string[]): Promise<void> {\n if (paths.length === 0) return;\n\n const result = await this.runner.run(\"git\", [\"clean\", \"-fd\", \"--\", ...paths], {\n cwd: repoRoot,\n });\n\n if (result.exitCode !== 0) {\n throw new GitOperationError(\n `Failed to clean files: ${result.stderr.trim()}`,\n \"Inspect with 'git status' and clean up manually.\",\n );\n }\n }\n\n /**\n * Check whether the working tree has uncommitted changes (staged or unstaged).\n *\n * @param repoRoot - Working directory for the git command.\n * @returns True if there are uncommitted changes.\n * @throws {@link GitOperationError} On failure.\n */\n async isDirty(repoRoot: string): Promise<boolean> {\n // git diff-index --quiet HEAD checks both staged and unstaged changes\n // against HEAD. Exit 0 = clean, exit 1 = dirty, anything else = error.\n const result = await this.runner.run(\"git\", [\"diff-index\", \"--quiet\", \"HEAD\", \"--\"], {\n cwd: repoRoot,\n });\n\n if (result.exitCode === 0) return false;\n if (result.exitCode === 1) return true;\n\n throw new GitOperationError(\n `Failed to check working tree status: ${result.stderr.trim()}`,\n \"Ensure you are inside a git repository with at least one commit.\",\n );\n }\n\n /**\n * Check whether the repository is in the middle of a multi-step git operation\n * (merge, rebase, cherry-pick, revert). Mutating during these operations is\n * dangerous because rollback via `git reset --hard` would corrupt them.\n *\n * @param repoRoot - Absolute path to the repository root.\n * @returns The kind of operation in progress, or null if none.\n */\n async isMidOperation(\n repoRoot: string,\n ): Promise<{ midOp: boolean; kind?: \"merge\" | \"rebase\" | \"cherry-pick\" | \"revert\" }> {\n const gitDir = path.join(repoRoot, \".git\");\n\n if (fs.existsSync(path.join(gitDir, \"MERGE_HEAD\"))) {\n return { midOp: true, kind: \"merge\" };\n }\n if (\n fs.existsSync(path.join(gitDir, \"rebase-merge\")) ||\n fs.existsSync(path.join(gitDir, \"rebase-apply\"))\n ) {\n return { midOp: true, kind: \"rebase\" };\n }\n if (fs.existsSync(path.join(gitDir, \"CHERRY_PICK_HEAD\"))) {\n return { midOp: true, kind: \"cherry-pick\" };\n }\n if (fs.existsSync(path.join(gitDir, \"REVERT_HEAD\"))) {\n return { midOp: true, kind: \"revert\" };\n }\n\n return { midOp: false };\n }\n\n /**\n * Check whether the directory is inside a git repository.\n *\n * @param repoRoot - Working directory for the git command.\n * @returns True if `git rev-parse --git-dir` succeeds.\n */\n async isRepo(repoRoot: string): Promise<boolean> {\n const result = await this.runner.run(\"git\", [\"rev-parse\", \"--git-dir\"], { cwd: repoRoot });\n return result.exitCode === 0;\n }\n\n /**\n * Check whether the user has configured a git author identity.\n * `git commit` will fail if either `user.name` or `user.email` is unset.\n *\n * @param repoRoot - Working directory for the git command.\n * @returns The configured name and email, or null if unset.\n */\n async getAuthorIdentity(repoRoot: string): Promise<{ name: string; email: string } | null> {\n const nameResult = await this.runner.run(\"git\", [\"config\", \"--get\", \"user.name\"], {\n cwd: repoRoot,\n });\n const emailResult = await this.runner.run(\"git\", [\"config\", \"--get\", \"user.email\"], {\n cwd: repoRoot,\n });\n\n const name = nameResult.exitCode === 0 ? nameResult.stdout.trim() : \"\";\n const email = emailResult.exitCode === 0 ? emailResult.stdout.trim() : \"\";\n\n if (!name || !email) return null;\n return { name, email };\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) {\n return { staged, unstaged, untracked };\n }\n\n // Porcelain v1 format: `XY filename`. The status code XY is exactly\n // 2 chars (X=index, Y=worktree); either may be a space when no change\n // applies on that side. The filename starts at column 3 (after XY +\n // separator space).\n //\n // Critical: do NOT call .trim() on the whole stdout \u2014 that strips the\n // leading space when X is empty, shifting the line by one and corrupting\n // both the status read and the filename parse. Split first, drop empty\n // lines (including the trailing one from the final newline), leave each\n // line's columns intact.\n for (const line of result.stdout.split(\"\\n\")) {\n if (line === \"\") continue;\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 // Register two separately-named drivers that both dispatch to the same\n // CLI entry point (`clef merge-driver`). The CLI branches by file\n // extension: `.enc.*` \u2192 SOPS decrypt/merge/re-encrypt; `.clef-meta.yaml`\n // \u2192 plaintext three-way merge. Two driver names rather than one\n // reused name keeps `.gitattributes` honest (no file claiming to use\n // a \"sops\" driver when it's really metadata merging).\n const drivers: Array<{ config: string; friendly: string }> = [\n { config: \"merge.sops\", friendly: \"SOPS-aware merge driver\" },\n { config: \"merge.clef-metadata\", friendly: \"Clef metadata merge driver\" },\n ];\n\n for (const driver of drivers) {\n const nameResult = await this.runner.run(\n \"git\",\n [\"config\", `${driver.config}.name`, driver.friendly],\n { cwd: repoRoot },\n );\n if (nameResult.exitCode !== 0) {\n throw new GitOperationError(\n `Failed to configure merge driver name: ${nameResult.stderr.trim()}`,\n \"Ensure you are inside a git repository.\",\n );\n }\n\n const driverResult = await this.runner.run(\n \"git\",\n [\"config\", `${driver.config}.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\n await this.ensureGitattributes(repoRoot);\n }\n\n /**\n * Check whether both Clef merge drivers are configured in `.git/config`\n * and `.gitattributes`. Reports separately on the SOPS driver\n * (`merge=sops` for `.enc.*`) and the metadata driver\n * (`merge=clef-metadata` for `.clef-meta.yaml`) so `clef doctor` can\n * prompt the user to run `clef hooks` when only the SOPS driver is\n * installed (older install, pre-metadata-merge).\n */\n async checkMergeDriver(repoRoot: string): Promise<{\n gitConfig: boolean;\n gitattributes: boolean;\n metadataGitConfig: boolean;\n metadataGitattributes: boolean;\n }> {\n const sopsConfig = await this.runner.run(\"git\", [\"config\", \"--get\", \"merge.sops.driver\"], {\n cwd: repoRoot,\n });\n const gitConfig = sopsConfig.exitCode === 0 && sopsConfig.stdout.trim().length > 0;\n\n const metaConfig = await this.runner.run(\n \"git\",\n [\"config\", \"--get\", \"merge.clef-metadata.driver\"],\n { cwd: repoRoot },\n );\n const metadataGitConfig = metaConfig.exitCode === 0 && metaConfig.stdout.trim().length > 0;\n\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 const metadataGitattributes = attrContent.includes(\"merge=clef-metadata\");\n\n return { gitConfig, gitattributes, metadataGitConfig, metadataGitattributes };\n }\n\n private async ensureGitattributes(repoRoot: string): Promise<void> {\n const attrPath = path.join(repoRoot, \".gitattributes\");\n const existing = fs.existsSync(attrPath) ? fs.readFileSync(attrPath, \"utf-8\") : \"\";\n\n // Append whichever rule blocks are missing; idempotent across runs\n // and survives users adding their own entries between our blocks.\n let newContent = existing;\n if (!existing.includes(\"merge=sops\")) {\n const block = `# Clef: SOPS-aware merge driver for encrypted files\\n*.enc.yaml merge=sops\\n*.enc.json merge=sops\\n`;\n newContent = newContent.trimEnd() ? `${newContent.trimEnd()}\\n\\n${block}` : block;\n }\n if (!newContent.includes(\"merge=clef-metadata\")) {\n const block = `# Clef: rotation-aware merge driver for metadata sidecars\\n*.clef-meta.yaml merge=clef-metadata\\n`;\n newContent = newContent.trimEnd() ? `${newContent.trimEnd()}\\n\\n${block}` : block;\n }\n\n if (newContent === existing) return; // already fully configured\n\n try {\n fs.writeFileSync(attrPath, newContent, \"utf-8\");\n } catch (err) {\n throw new GitOperationError(`Failed to write .gitattributes: ${(err as Error).message}`);\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 try {\n const hooksDir = path.dirname(hookPath);\n if (!fs.existsSync(hooksDir)) {\n fs.mkdirSync(hooksDir, { recursive: true });\n }\n fs.writeFileSync(hookPath, PRE_COMMIT_HOOK, { mode: 0o755 });\n } catch (err) {\n throw new GitOperationError(\n `Failed to install pre-commit hook: ${(err as Error).message}`,\n \"Ensure .git/hooks/ directory exists.\",\n );\n }\n }\n}\n", "import * as fs from \"fs\";\nimport * as path from \"path\";\nimport * as lockfile from \"proper-lockfile\";\nimport { GitIntegration } from \"../git/integration\";\nimport {\n TransactionLockError,\n TransactionPreflightError,\n TransactionRollbackError,\n} from \"./errors\";\n\n/**\n * Options for a single transactional mutation.\n */\nexport interface TransactionOptions {\n /** Human-readable commit message. Required. */\n description: string;\n /**\n * Paths the mutation will touch (relative to repoRoot).\n * Used for `git add` and to scope rollback's `git clean`.\n * Be precise \u2014 anything outside this list is not protected by the transaction.\n */\n paths: string[];\n /**\n * The work itself. Write files via `write-file-atomic` and update the\n * manifest via the existing helpers. May throw \u2014 that triggers rollback.\n */\n mutate: () => Promise<void>;\n /** Auto-commit on success. Default: true */\n commit?: boolean;\n /** Allow running with a dirty working tree. Default: false */\n allowDirty?: boolean;\n /** Skip the pre-commit hook (`git commit --no-verify`). Default: false */\n noVerify?: boolean;\n}\n\n/**\n * Result of a successful transaction.\n */\nexport interface TransactionResult {\n /** SHA of the commit created, or null if `commit: false` was passed */\n sha: string | null;\n /** Paths included in the commit */\n paths: string[];\n /** True if the working tree was already dirty when the transaction started */\n startedDirty: boolean;\n}\n\n/**\n * Default lock acquisition tuning. Balanced for an interactive CLI:\n * fast retries to feel responsive, low total latency on contention.\n */\nconst LOCK_OPTIONS: lockfile.LockOptions = {\n stale: 10_000,\n retries: { retries: 5, minTimeout: 100, maxTimeout: 1_000, randomize: true },\n};\n\nconst CLEF_DIR = \".clef\";\nconst LOCK_FILE = \".lock\";\nconst TRANSACTION_ENV_VAR = \"CLEF_IN_TRANSACTION\";\n\n/**\n * Wraps mutations to the matrix in a transactional commit:\n * 1. Acquire a single-writer lock on .clef/.lock\n * 2. Validate the working tree (clean, in a git repo, not mid-rebase, etc.)\n * 3. Run the mutation\n * 4. git add the declared paths and git commit\n * 5. On any failure between steps 3 and 4: git reset --hard to the\n * pre-mutation HEAD, git clean -fd the declared paths, rethrow.\n *\n * Each transaction creates exactly one git commit. Each commit can be\n * reverted with `git revert <sha>`.\n */\nexport class TransactionManager {\n constructor(private readonly git: GitIntegration) {}\n\n async run(repoRoot: string, opts: TransactionOptions): Promise<TransactionResult> {\n const shouldCommit = opts.commit !== false;\n const allowDirty = opts.allowDirty === true;\n\n // \u2500\u2500 Phase 0: ensure the .clef directory exists for the lock file \u2500\u2500\u2500\u2500\u2500\u2500\n const clefDir = path.join(repoRoot, CLEF_DIR);\n if (!fs.existsSync(clefDir)) {\n fs.mkdirSync(clefDir, { recursive: true });\n }\n // The lock file (and anything else clef puts under .clef/) must never\n // land in git. `clef init` writes this gitignore on first run; ensure it\n // exists on every transaction so older repos and repos scaffolded\n // outside `clef init` are also self-healing.\n const clefGitignore = path.join(clefDir, \".gitignore\");\n if (!fs.existsSync(clefGitignore)) {\n fs.writeFileSync(clefGitignore, \"*\\n\");\n }\n const lockPath = path.join(clefDir, LOCK_FILE);\n // proper-lockfile requires the file to exist before it can lock it.\n if (!fs.existsSync(lockPath)) {\n fs.writeFileSync(lockPath, \"\");\n }\n\n // \u2500\u2500 Phase 1: acquire lock \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 release: () => Promise<void>;\n try {\n release = await lockfile.lock(lockPath, LOCK_OPTIONS);\n } catch (err) {\n throw new TransactionLockError(\n null,\n `Could not acquire transaction lock at ${lockPath}: ${(err as Error).message}. ` +\n `Another clef process may be running against this repository.`,\n );\n }\n\n // Test seam: hold the lock for N ms before continuing. Used by the\n // integration test that proves concurrent writers get refused.\n const testDelay = Number(process.env.CLEF_TX_TEST_DELAY_MS);\n if (testDelay > 0) await new Promise((r) => setTimeout(r, testDelay));\n\n try {\n // \u2500\u2500 Phase 2: preflight \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 if (!(await this.git.isRepo(repoRoot))) {\n throw new TransactionPreflightError(\n \"not-a-repo\",\n `${repoRoot} is not a git repository.`,\n \"Run 'git init' (or 'clef init') first. Clef requires a git repository for safe mutations.\",\n );\n }\n\n const midOp = await this.git.isMidOperation(repoRoot);\n if (midOp.midOp) {\n throw new TransactionPreflightError(\n \"mid-operation\",\n `Repository is mid-${midOp.kind}. Refusing to mutate.`,\n `Finish the in-progress ${midOp.kind} first ('git ${midOp.kind} --continue' or '--abort'), then retry.`,\n );\n }\n\n // Author identity must be set or commit will fail. Detect early so the\n // user gets a useful error instead of a cryptic \"Please tell me who you are\".\n if (shouldCommit) {\n const identity = await this.git.getAuthorIdentity(repoRoot);\n if (!identity) {\n throw new TransactionPreflightError(\n \"no-author-identity\",\n \"git author identity is not configured.\",\n `Configure it with: git config user.name \"Your Name\" && git config user.email \"you@example.com\"`,\n );\n }\n }\n\n // HEAD must exist (the repo must have at least one commit) so we have\n // a target to reset to. Empty repos cannot be transacted against.\n let preMutationSha: string;\n try {\n preMutationSha = await this.git.getHead(repoRoot);\n } catch {\n throw new TransactionPreflightError(\n \"no-commits\",\n \"Repository has no commits yet \u2014 cannot transact safely.\",\n \"Make an initial commit first ('git commit --allow-empty -m initial'), then retry.\",\n );\n }\n\n const startedDirty = await this.git.isDirty(repoRoot);\n if (startedDirty && !allowDirty) {\n throw new TransactionPreflightError(\n \"dirty-tree\",\n \"Working tree has uncommitted changes. Refusing to mutate.\",\n \"Commit or stash your changes first, or pass --allow-dirty to proceed (rollback will be best-effort).\",\n );\n }\n\n // \u2500\u2500 Phase 3: mutate \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 try {\n await opts.mutate();\n } catch (mutateErr) {\n await this.rollback(repoRoot, preMutationSha, opts.paths, startedDirty, mutateErr as Error);\n // rollback() always throws \u2014 this is unreachable\n throw mutateErr;\n }\n\n // \u2500\u2500 Phase 4: commit \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 sha: string | null = null;\n if (shouldCommit) {\n try {\n await this.git.stageFiles(opts.paths, repoRoot);\n sha = await this.git.commit(opts.description, repoRoot, {\n env: { [TRANSACTION_ENV_VAR]: \"1\" },\n noVerify: opts.noVerify === true,\n });\n } catch (commitErr) {\n await this.rollback(\n repoRoot,\n preMutationSha,\n opts.paths,\n startedDirty,\n commitErr as Error,\n );\n throw commitErr;\n }\n }\n\n return { sha, paths: opts.paths, startedDirty };\n } finally {\n try {\n await release!();\n } catch {\n // Best-effort lock release. proper-lockfile cleans stale locks\n // automatically on next acquisition.\n }\n }\n }\n\n /**\n * Restore the working tree to the pre-mutation state.\n *\n * If the transaction started with a clean tree, we can `git reset --hard`\n * to the pre-mutation SHA without losing any work.\n *\n * If the transaction started dirty (allowDirty was set), we cannot safely\n * reset because that would discard the user's pre-existing uncommitted\n * changes. In that case, we throw a rollback error and tell the user to\n * inspect manually.\n */\n private async rollback(\n repoRoot: string,\n preMutationSha: string,\n paths: string[],\n startedDirty: boolean,\n originalError: Error,\n ): Promise<never> {\n if (startedDirty) {\n throw new TransactionRollbackError(\n originalError,\n false,\n `Mutation failed and rollback was refused because the working tree was already dirty. ` +\n `Inspect manually with 'git status'. Original error: ${originalError.message}`,\n );\n }\n\n try {\n await this.git.resetHard(repoRoot, preMutationSha);\n await this.git.cleanFiles(repoRoot, paths);\n } catch (rollbackErr) {\n throw new TransactionRollbackError(\n originalError,\n false,\n `Mutation failed AND rollback failed. The working tree may be in an inconsistent state. ` +\n `Inspect manually with 'git status'. ` +\n `Original error: ${originalError.message}. ` +\n `Rollback error: ${(rollbackErr as Error).message}`,\n );\n }\n\n throw new TransactionRollbackError(\n originalError,\n true,\n `Mutation failed; working tree restored to pre-mutation state. ` +\n `Original error: ${originalError.message}`,\n );\n }\n}\n", "/**\n * Thrown when the transaction lock is held by another process and could not\n * be acquired within the configured retry budget.\n */\nexport class TransactionLockError extends Error {\n constructor(\n public readonly holderPid: number | null,\n message: string,\n ) {\n super(message);\n this.name = \"TransactionLockError\";\n }\n}\n\n/**\n * Thrown when the preflight checks fail before any mutation is attempted.\n * No side effects have occurred at this point \u2014 the working tree is untouched.\n */\nexport class TransactionPreflightError extends Error {\n constructor(\n public readonly reason:\n | \"not-a-repo\"\n | \"dirty-tree\"\n | \"mid-operation\"\n | \"no-author-identity\"\n | \"no-commits\",\n message: string,\n public readonly hint?: string,\n ) {\n super(message);\n this.name = \"TransactionPreflightError\";\n }\n}\n\n/**\n * Thrown when a mutation failed AND the rollback either succeeded or failed.\n *\n * If `rollbackOk` is true, the working tree was restored to its pre-mutation\n * state and the user only needs to address the original error.\n *\n * If `rollbackOk` is false, the working tree is in an unknown state and the\n * user must inspect manually with `git status`.\n */\nexport class TransactionRollbackError extends Error {\n constructor(\n public readonly originalError: Error,\n public readonly rollbackOk: boolean,\n message: string,\n ) {\n super(message);\n this.name = \"TransactionRollbackError\";\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 writeFileAtomic from \"write-file-atomic\";\nimport * as YAML from \"yaml\";\nimport {\n BackendType,\n ClefManifest,\n DecryptedFile,\n EncryptionBackend,\n SopsDecryptionError,\n SopsEncryptionError,\n SopsKeyNotFoundError,\n SopsMetadata,\n SubprocessRunner,\n resolveBackendConfig,\n resolveRecipientsForEnvironment,\n} from \"../types\";\nimport { assertSops } from \"../dependencies/checker\";\nimport { deriveAgePublicKey } from \"../age/keygen\";\nimport { resolveSopsPath } from \"./resolver\";\nimport { isClefHsmArn, pkcs11UriToSyntheticArn, syntheticArnToPkcs11Uri } from \"./hsm-arn\";\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 private readonly keyserviceArgs: readonly 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 * @param keyserviceAddr - Optional address of an external SOPS KeyService\n * sidecar (e.g. `tcp://127.0.0.1:12345`). When set, every SOPS invocation\n * includes `--enable-local-keyservice=false --keyservice <addr>` so KMS\n * wrap/unwrap is routed to the sidecar (used for the HSM backend, where\n * the sidecar is `clef-keyservice` talking PKCS#11 to the HSM).\n *\n * The flags are inserted **after** the SOPS subcommand \u2014 placing them\n * before is silently ignored by SOPS (a footgun discovered the first\n * time we shipped this).\n */\n constructor(\n private readonly runner: SubprocessRunner,\n private readonly ageKeyFile?: string,\n private readonly ageKey?: string,\n sopsPath?: string,\n keyserviceAddr?: string,\n ) {\n this.sopsCommand = sopsPath ?? resolveSopsPath().path;\n this.keyserviceArgs = keyserviceAddr\n ? Object.freeze([\"--enable-local-keyservice=false\", \"--keyservice\", keyserviceAddr])\n : Object.freeze([]);\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\", ...this.keyserviceArgs, \"--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 // --config must precede the subcommand \u2014 it is a global sops flag.\n const configPath = process.platform === \"win32\" ? \"NUL\" : \"/dev/null\";\n result = await this.runner.run(\n this.sopsCommand,\n [\n \"--config\",\n configPath,\n \"encrypt\",\n ...this.keyserviceArgs,\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 // Atomic write: a torn file from Ctrl+C / OOM mid-write would be undecryptable.\n try {\n await writeFileAtomic(filePath, result.stdout);\n } catch (err) {\n throw new SopsEncryptionError(\n `Failed to write encrypted data to '${filePath}': ${(err as Error).message}`,\n filePath,\n );\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\", ...this.keyserviceArgs, \"-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\", ...this.keyserviceArgs, \"-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 lastModifiedRaw = typeof sops.lastmodified === \"string\" ? sops.lastmodified : undefined;\n const lastModified = lastModifiedRaw ? new Date(lastModifiedRaw) : new Date();\n const lastModifiedPresent = lastModifiedRaw !== undefined;\n const version = typeof sops.version === \"string\" ? sops.version : undefined;\n\n return { backend, recipients, lastModified, lastModifiedPresent, version };\n }\n\n private detectBackend(sops: Record<string, unknown>): BackendType {\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) {\n // HSM uses SOPS's KMS slot but stamps a Clef synthetic ARN. The\n // alias/clef-hsm/v* marker is how we distinguish from real AWS KMS.\n const kmsEntries = sops.kms as Array<Record<string, unknown>>;\n const firstArn = kmsEntries[0]?.arn;\n if (typeof firstArn === \"string\" && isClefHsmArn(firstArn)) {\n return \"hsm\";\n }\n return \"awskms\";\n }\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(sops: Record<string, unknown>, backend: BackendType): 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 \"hsm\": {\n // HSM entries live in the same `sops.kms[]` slot as AWS KMS but\n // carry a Clef synthetic ARN. Surface the decoded pkcs11 URI so\n // policy/lint/UI consumers see a meaningful identifier rather\n // than the opaque base64url payload.\n const entries = sops.kms as Array<Record<string, unknown>> | undefined;\n return (\n entries?.map((e) => {\n const raw = String(e.arn ?? \"\");\n return syntheticArnToPkcs11Uri(raw) ?? raw;\n }) ?? []\n );\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 pkcs11_uri: manifest.sops.pkcs11_uri,\n };\n\n switch (config.backend) {\n case \"age\": {\n const envRecipients = environment\n ? resolveRecipientsForEnvironment(manifest, environment)\n : undefined;\n const recipients = envRecipients ?? manifest.sops.age?.recipients ?? [];\n const keys = recipients.map((r) => (typeof r === \"string\" ? r : r.key));\n if (keys.length > 0) {\n args.push(\"--age\", keys.join(\",\"));\n }\n break;\n }\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 case \"hsm\":\n if (config.pkcs11_uri) {\n // SOPS validates --kms against an AWS ARN regex before the\n // keyservice is ever called, so we wrap the pkcs11 URI in a\n // Clef synthetic ARN. The keyservice decodes it on the wire\n // and forwards the URI to the PKCS#11 backend.\n args.push(\"--kms\", pkcs11UriToSyntheticArn(config.pkcs11_uri));\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", "/**\n * TIER 1 MODULE \u2014 Security and correctness critical.\n *\n * Wraps and unwraps PKCS#11 URIs as synthetic AWS KMS ARNs so they pass\n * through SOPS's `--kms` validation regex. Every encrypted file with\n * backend `hsm` stores its key identifier as a Clef-shaped ARN; the\n * clef-keyservice side decodes it back to a pkcs11 URI before handing\n * the DEK wrap/unwrap to the HSM.\n *\n * Contract v1 \u2014 frozen with the clef-keyservice team:\n *\n * arn:aws:kms:us-east-1:000000000000:alias/clef-hsm/v1/<BASE64URL(pkcs11-uri)>\n *\n * - Region / account are placeholders. SOPS never dials AWS because\n * `--enable-local-keyservice=false` routes every KMS op to the\n * keyservice sidecar.\n * - Payload is RFC 4648 \u00A75 base64url, no padding. Alphabet is\n * `[A-Za-z0-9_-]`, which is why the regex below ends with `+$`\n * over that exact class.\n * - Version marker lets us evolve the encoding if RFC 7512 extensions\n * push us to a different format \u2014 bump to `v2` on both sides.\n *\n * Coverage threshold: 95% lines/functions, 90% branches.\n */\n\n/** Canonical regex both sides (CLI + keyservice) validate against. */\nconst CLEF_HSM_ARN_RE = /^arn:aws[\\w-]*:kms:[^:]+:\\d+:alias\\/clef-hsm\\/(v\\d+)\\/([A-Za-z0-9_-]+)$/;\n\n/** Fixed ARN prefix emitted by the CLI. Region/account are placeholders. */\nconst ARN_PREFIX = \"arn:aws:kms:us-east-1:000000000000:alias/clef-hsm/v1/\";\n\n/** Wire-format version understood by this module. Keyservice rejects other v values with UNIMPLEMENTED. */\nconst SUPPORTED_VERSION = \"v1\";\n\n/**\n * Wrap a pkcs11 URI in a Clef HSM synthetic ARN.\n *\n * @param uri - A pkcs11 URI (e.g. `pkcs11:slot=0;label=clef-dek-wrapper`).\n * @returns An ARN that passes SOPS's `--kms` regex and carries the URI as payload.\n * @throws If `uri` does not start with `pkcs11:`.\n */\nexport function pkcs11UriToSyntheticArn(uri: string): string {\n if (!uri.startsWith(\"pkcs11:\")) {\n throw new Error(`Expected a pkcs11 URI starting with 'pkcs11:', got '${uri}'.`);\n }\n const payload = Buffer.from(uri, \"utf8\").toString(\"base64url\");\n const arn = ARN_PREFIX + payload;\n // Self-check: the ARN we just built must round-trip through our own regex.\n // Catches accidental breakage if ARN_PREFIX or the encoding ever drifts.\n if (!CLEF_HSM_ARN_RE.test(arn)) {\n throw new Error(`Synthesized ARN failed self-validation: '${arn}'.`);\n }\n return arn;\n}\n\n/**\n * Decode a Clef HSM synthetic ARN back to its pkcs11 URI.\n *\n * @param arn - A string that may or may not be a Clef HSM ARN.\n * @returns The pkcs11 URI if `arn` matches the contract; `null` otherwise.\n * Returning `null` (rather than throwing) lets callers branch cleanly\n * between \"this is a Clef HSM ARN\" and \"this is some other KMS ARN\".\n * Callers that require a valid decode should throw themselves.\n */\nexport function syntheticArnToPkcs11Uri(arn: string): string | null {\n const match = CLEF_HSM_ARN_RE.exec(arn);\n if (!match) return null;\n const [, version, payload] = match;\n if (version !== SUPPORTED_VERSION) return null;\n let decoded: string;\n try {\n decoded = Buffer.from(payload, \"base64url\").toString(\"utf8\");\n } catch {\n return null;\n }\n if (!decoded.startsWith(\"pkcs11:\")) return null;\n return decoded;\n}\n\n/**\n * Check whether a string is a Clef HSM synthetic ARN (regardless of\n * whether its payload decodes cleanly).\n *\n * Used by {@link SopsClient.detectBackend} to classify entries in\n * `sops.kms[]` as `hsm` rather than `awskms`.\n */\nexport function isClefHsmArn(arn: string): boolean {\n return CLEF_HSM_ARN_RE.test(arn);\n}\n", "/**\n * Locates the bundled `clef-keyservice` binary from the platform-specific\n * npm package. Mirrors `sops/bundled.ts` \u2014 extracted into its own module\n * for testability.\n */\nimport * as fs from \"fs\";\nimport * as path from \"path\";\n\n/**\n * Try to locate the bundled clef-keyservice binary from the platform-specific\n * npm package. Returns the resolved path or null if the package is not installed.\n *\n * Windows is intentionally unsupported: the keyservice's PKCS#11 dependency\n * (miekg/pkcs11) requires per-vendor DLL conventions that are out of scope\n * for v1. Returns null on win32; callers surface a clean error upstream.\n */\nexport function tryBundledKeyservice(): string | null {\n const platform = process.platform;\n const arch = process.arch;\n\n const archName = arch === \"x64\" ? \"x64\" : arch === \"arm64\" ? \"arm64\" : null;\n if (!archName) return null;\n\n // Windows not supported by the keyservice itself \u2014 see file header.\n const platformName = platform === \"darwin\" ? \"darwin\" : platform === \"linux\" ? \"linux\" : null;\n if (!platformName) return null;\n\n const packageName = `@clef-sh/keyservice-${platformName}-${archName}`;\n const binName = \"clef-keyservice\";\n\n try {\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", "/**\n * Resolves the path to the `clef-keyservice` binary using the same three-tier\n * resolution chain as `sops/resolver.ts`:\n *\n * 1. `CLEF_KEYSERVICE_PATH` environment variable (explicit user override)\n * 2. Bundled platform-specific package (`@clef-sh/keyservice-{os}-{arch}`)\n * 3. System PATH fallback (bare `\"clef-keyservice\"` command name)\n *\n * The result is cached after the first call.\n */\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport { tryBundledKeyservice } from \"./bundled\";\n\nfunction validateKeyservicePath(candidate: string): void {\n if (!path.isAbsolute(candidate)) {\n throw new Error(`CLEF_KEYSERVICE_PATH must be an absolute path, got '${candidate}'.`);\n }\n const segments = candidate.split(/[/\\\\]/);\n if (segments.includes(\"..\")) {\n throw new Error(\n `CLEF_KEYSERVICE_PATH contains '..' path segments ('${candidate}'). ` +\n \"Use an absolute path without directory traversal.\",\n );\n }\n}\n\nexport type KeyserviceSource = \"env\" | \"bundled\" | \"system\";\n\nexport interface KeyserviceResolution {\n /** Absolute path to the keyservice binary, or \"clef-keyservice\" for system PATH fallback. */\n path: string;\n /** How the binary was located. */\n source: KeyserviceSource;\n}\n\nlet cached: KeyserviceResolution | undefined;\n\n/**\n * Resolve the clef-keyservice binary path.\n *\n * Resolution order:\n * 1. `CLEF_KEYSERVICE_PATH` env var \u2014 explicit override\n * 2. Bundled `@clef-sh/keyservice-{platform}-{arch}` package\n * 3. System PATH fallback \u2014 returns bare `\"clef-keyservice\"`\n *\n * The result is cached module-wide. Call {@link resetKeyserviceResolution}\n * in tests to clear the cache.\n */\nexport function resolveKeyservicePath(): KeyserviceResolution {\n if (cached) return cached;\n\n const envPath = process.env.CLEF_KEYSERVICE_PATH?.trim();\n if (envPath) {\n validateKeyservicePath(envPath);\n if (!fs.existsSync(envPath)) {\n throw new Error(`CLEF_KEYSERVICE_PATH points to '${envPath}' but the file does not exist.`);\n }\n cached = { path: envPath, source: \"env\" };\n return cached;\n }\n\n const bundledPath = tryBundledKeyservice();\n if (bundledPath) {\n cached = { path: bundledPath, source: \"bundled\" };\n return cached;\n }\n\n cached = { path: \"clef-keyservice\", source: \"system\" };\n return cached;\n}\n\n/** Clear the cached resolution. Only intended for use in tests. */\nexport function resetKeyserviceResolution(): void {\n cached = undefined;\n}\n", "/**\n * Manages the `clef-keyservice` sidecar lifecycle: spawn, port discovery,\n * graceful shutdown. The keyservice is a localhost gRPC server that\n * implements the SOPS KeyService protocol and bridges DEK wrap/unwrap to\n * a hardware security module via PKCS#11.\n *\n * The CLI spawns one sidecar per SOPS-touching command and kills it\n * when done. The sidecar binds 127.0.0.1:0 (random port), prints\n * `PORT=<port>` to stdout once listening, and we forward that port\n * to SOPS via `--keyservice tcp://127.0.0.1:<port>`.\n *\n * Security notes:\n * - PIN is passed via env (`CLEF_PKCS11_PIN`) or env-file path\n * (`CLEF_PKCS11_PIN_FILE`). NEVER on argv \u2014 process command lines\n * are world-readable in `/proc/<pid>/cmdline` on Linux.\n * - Module path IS passed on argv (`--pkcs11-module`). It is not\n * sensitive; vendor module locations are well-known constants.\n */\nimport { spawn, type ChildProcess } from \"child_process\";\nimport * as readline from \"readline\";\n\nexport interface KeyserviceHandle {\n /** Address for SOPS `--keyservice` flag, e.g. `tcp://127.0.0.1:12345`. */\n addr: string;\n /** Gracefully stop the keyservice process. SIGTERM, then SIGKILL after 3s. */\n kill(): Promise<void>;\n}\n\nexport interface SpawnKeyserviceOptions {\n /** Absolute path to the clef-keyservice binary (from {@link resolveKeyservicePath}). */\n binaryPath: string;\n /** Path to the vendor PKCS#11 shared library (e.g. `/usr/lib/softhsm/libsofthsm2.so`). */\n modulePath: string;\n /**\n * HSM user PIN. Passed via `CLEF_PKCS11_PIN` env. Mutually exclusive\n * with {@link pinFile}. At least one must be provided.\n */\n pin?: string;\n /**\n * Path to a 0600 file containing the user PIN. Passed via\n * `CLEF_PKCS11_PIN_FILE` env. The keyservice reads the file itself.\n */\n pinFile?: string;\n /**\n * Extra environment variables to pass through. Vendor modules often\n * need their own config env (`SOFTHSM2_CONF`, `YUBIHSM_PKCS11_CONF`,\n * `ChrystokiConfigurationPath`). Forwarded verbatim.\n */\n extraEnv?: Record<string, string>;\n}\n\nconst PORT_REGEX = /^PORT=(\\d+)$/;\nconst STARTUP_TIMEOUT_MS = 5000;\nconst SHUTDOWN_TIMEOUT_MS = 3000;\n\n/**\n * Spawn a clef-keyservice sidecar and wait for it to report its port.\n *\n * @throws If neither `pin` nor `pinFile` is provided, if startup exceeds\n * {@link STARTUP_TIMEOUT_MS}, or if the child exits before reporting `PORT=`.\n */\nexport async function spawnKeyservice(options: SpawnKeyserviceOptions): Promise<KeyserviceHandle> {\n if (!options.pin && !options.pinFile) {\n throw new Error(\n \"Keyservice requires a PIN. Set CLEF_PKCS11_PIN, CLEF_PKCS11_PIN_FILE, \" +\n \"or .clef/config.yaml pkcs11_pin_file.\",\n );\n }\n\n const args = [\"--addr\", \"127.0.0.1:0\", \"--pkcs11-module\", options.modulePath];\n\n // Build env: parent env + extras + PIN. Spread order matters \u2014 PIN\n // wins so a stale extraEnv entry can't shadow it.\n const childEnv: NodeJS.ProcessEnv = {\n ...process.env,\n ...(options.extraEnv ?? {}),\n ...(options.pin ? { CLEF_PKCS11_PIN: options.pin } : {}),\n ...(options.pinFile ? { CLEF_PKCS11_PIN_FILE: options.pinFile } : {}),\n };\n\n const child = spawn(options.binaryPath, args, {\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n env: childEnv,\n });\n\n const port = await readPort(child);\n return {\n addr: `tcp://127.0.0.1:${port}`,\n kill: () => killGracefully(child),\n };\n}\n\nfunction readPort(child: ChildProcess): Promise<number> {\n return new Promise((resolve, reject) => {\n let settled = false;\n\n // The child should be spawned with stdio[1]=\"pipe\", so stdout is set.\n // Guard the assertion anyway so a misuse in tests fails clearly.\n if (!child.stdout) {\n reject(new Error(\"Keyservice child has no stdout pipe.\"));\n return;\n }\n const rl = readline.createInterface({ input: child.stdout });\n\n const settle = (): void => {\n clearTimeout(timer);\n rl.close();\n };\n\n const timer = setTimeout(() => {\n if (!settled) {\n settled = true;\n settle();\n child.kill(\"SIGKILL\");\n reject(\n new Error(\n `clef-keyservice did not report a port within ${STARTUP_TIMEOUT_MS}ms. ` +\n \"Check that the PKCS#11 module path is valid and the PIN is correct.\",\n ),\n );\n }\n }, STARTUP_TIMEOUT_MS);\n\n rl.on(\"line\", (line) => {\n const match = PORT_REGEX.exec(line);\n if (match && !settled) {\n settled = true;\n settle();\n resolve(parseInt(match[1], 10));\n }\n });\n\n child.on(\"error\", (err) => {\n if (!settled) {\n settled = true;\n settle();\n reject(new Error(`Failed to start clef-keyservice: ${err.message}`));\n }\n });\n\n child.on(\"exit\", (code) => {\n if (!settled) {\n settled = true;\n settle();\n reject(new Error(`clef-keyservice exited with code ${code} before reporting a port.`));\n }\n });\n });\n}\n\nfunction killGracefully(child: ChildProcess): Promise<void> {\n return new Promise((resolve) => {\n if (child.exitCode !== null) {\n resolve();\n return;\n }\n const timer = setTimeout(() => {\n child.kill(\"SIGKILL\");\n }, SHUTDOWN_TIMEOUT_MS);\n child.on(\"exit\", () => {\n clearTimeout(timer);\n resolve();\n });\n child.kill(\"SIGTERM\");\n });\n}\n", "import * as path from \"path\";\nimport {\n ClefManifest,\n LintIssue,\n LintResult,\n isKmsEnvelope,\n resolveRecipientsForEnvironment,\n ServiceIdentityDefinition,\n} from \"../types\";\nimport { MatrixManager } from \"../matrix/manager\";\nimport { SchemaValidator } from \"../schema/validator\";\nimport { EncryptionBackend } from \"../types\";\nimport { getPendingKeys, loadMetadata } from \"../pending/metadata\";\nimport { readSopsKeyNames } from \"../sops/keys\";\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 // .clef-meta.yaml consistency checks \u2014 no decrypt required. Catches:\n // 1. Orphan rotation records (record for a key not in the cipher).\n // 2. Dual-state entries (a key appears in both pending and rotations).\n const metadataIssues = await this.lintMetadataConsistency(existingCells);\n issues.push(...metadataIssues);\n\n return { issues, fileCount: fileCount + missingCells.length, pendingCount };\n }\n\n /**\n * Cross-reference `.clef-meta.yaml` against the cipher's plaintext key\n * names for each existing cell. Reports orphan rotation records and\n * dual-state (pending + rotation) inconsistencies. Uses\n * {@link readSopsKeyNames} (plaintext YAML parse) \u2014 no decryption.\n */\n private async lintMetadataConsistency(\n cells: { namespace: string; environment: string; filePath: string }[],\n ): Promise<LintIssue[]> {\n const issues: LintIssue[] = [];\n\n for (const cell of cells) {\n const keysInCipher = readSopsKeyNames(cell.filePath);\n if (keysInCipher === null) continue; // malformed file \u2014 sops lint category already flagged it\n const cipherKeys = new Set(keysInCipher);\n const metadata = await loadMetadata(cell.filePath);\n\n // 1. Orphan rotation records \u2014 record for a key not in the cipher.\n // Happens when a key was deleted manually (outside `clef delete`) or\n // renamed. Non-fatal; auto-cleaned by `clef delete` going forward.\n for (const record of metadata.rotations) {\n if (!cipherKeys.has(record.key)) {\n issues.push({\n severity: \"warning\",\n category: \"metadata\",\n file: cell.filePath,\n key: record.key,\n message: `Rotation record exists for key '${record.key}' but the key is not in this cell. Remove the orphan entry from .clef-meta.yaml or re-add the key via clef set.`,\n });\n }\n }\n\n // 2. Dual-state \u2014 key appears in both pending and rotations. Should\n // be impossible via clef code paths (recordRotation strips pending,\n // markPending doesn't touch rotations); if it happens, the metadata\n // file was hand-edited or a concurrent race corrupted it.\n const pendingKeys = new Set(metadata.pending.map((p) => p.key));\n for (const record of metadata.rotations) {\n if (pendingKeys.has(record.key)) {\n issues.push({\n severity: \"error\",\n category: \"metadata\",\n file: cell.filePath,\n key: record.key,\n message: `Key '${record.key}' appears in both 'pending' and 'rotations' sections of .clef-meta.yaml. One of them is stale \u2014 likely a manual edit or a failed transaction. Re-run clef set to reconcile.`,\n fixCommand: `clef set ${cell.namespace}/${cell.environment} ${record.key}`,\n });\n }\n }\n }\n\n return issues;\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:\n `Service identity '${si.name}' has no config for environment '${envName}'. ` +\n `Run: clef service add-env ${si.name} ${envName}`,\n });\n }\n }\n\n // Pack-only (runtime) SIs: skip recipient checks but warn about shared recipients.\n if (si.pack_only) {\n const ageRecipients = Object.values(si.environments)\n .filter((cfg) => !isKmsEnvelope(cfg) && cfg.recipient)\n .map((cfg) => cfg.recipient!);\n if (ageRecipients.length >= 2 && new Set(ageRecipients).size === 1) {\n issues.push({\n severity: \"warning\",\n category: \"service-identity\",\n file: \"clef.yaml\",\n message:\n `Runtime identity '${si.name}' uses a shared recipient across all environments. ` +\n \"A compromised key in any environment decrypts artifacts for all environments. \" +\n \"Consider per-environment keys for runtime workloads.\",\n });\n }\n continue;\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\";\nimport { TransactionManager } from \"../tx\";\nimport { recordRotation } from \"../pending/metadata\";\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 * Identity to record on rotations performed by this import (e.g. `\"Name\n * <email>\"`). When omitted, imported keys are still written to ciphertext\n * but no rotation record is created \u2014 appropriate for callers that have\n * their own bookkeeping.\n */\n rotatedBy?: string;\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 * Real (non-dry-run) imports run inside a single TransactionManager commit:\n * one encrypt of the merged value set, one commit, all-or-nothing rollback\n * via `git reset --hard`. The previous per-key encrypt-then-continue\n * behavior is gone \u2014 partial imports were a footgun and N file rewrites for\n * N keys was wasteful.\n *\n * @example\n * ```ts\n * const tx = new TransactionManager(new GitIntegration(runner));\n * const importer = new ImportRunner(sopsClient, tx);\n * const result = await importer.import(\"app/staging\", null, envContent, manifest, repoRoot, { format: \"dotenv\" });\n * ```\n */\nexport class ImportRunner {\n constructor(\n private readonly sopsClient: EncryptionBackend,\n private readonly tx: TransactionManager,\n ) {}\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 \u2014 merge all candidates into one in-memory dict, then write\n // the file once inside a transaction.\n const decrypted = await this.sopsClient.decrypt(filePath);\n const newValues: Record<string, string> = { ...decrypted.values };\n\n // Rotation tracking: only keys whose value actually changes count as\n // rotations. A re-import of the same value is not a rotation per the\n // design rule (\"rotation = plaintext value changed\").\n const rotatedKeys: string[] = [];\n\n for (const [key, value] of candidates) {\n const existed = key in decrypted.values;\n if (existed && !options.overwrite) {\n skipped.push(key);\n continue;\n }\n const valueChanged = !existed || decrypted.values[key] !== value;\n newValues[key] = value;\n imported.push(key);\n if (valueChanged) rotatedKeys.push(key);\n }\n\n if (imported.length === 0) {\n // Nothing to write \u2014 skip the transaction entirely.\n return { imported, skipped, failed, warnings, dryRun: false };\n }\n\n const relCellPath = path.relative(repoRoot, filePath);\n const relMetaPath = relCellPath.replace(/\\.enc\\.(yaml|json)$/, \".clef-meta.yaml\");\n\n await this.tx.run(repoRoot, {\n description: `clef import ${target}: ${imported.length} key(s)`,\n // Include the metadata path so rotation records created in the mutate\n // callback are staged and rolled back atomically with the ciphertext.\n paths: [relCellPath, relMetaPath],\n mutate: async () => {\n await this.sopsClient.encrypt(filePath, newValues, manifest, env);\n if (options.rotatedBy && rotatedKeys.length > 0) {\n await recordRotation(filePath, rotatedKeys, options.rotatedBy);\n }\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 path from \"path\";\nimport { ClefManifest, EncryptionBackend } from \"../types\";\nimport { MatrixManager } from \"../matrix/manager\";\nimport { validateAgePublicKey, keyPreview } from \"./validator\";\nimport { CLEF_MANIFEST_FILENAME } from \"../manifest/parser\";\nimport { readManifestYaml, writeManifestYaml } from \"../manifest/io\";\nimport { TransactionManager } from \"../tx\";\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 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\n * add/remove. Both `add` and `remove` run inside a single TransactionManager\n * commit \u2014 any failure rolls back ALL re-encrypted files plus the manifest\n * via `git reset --hard` rather than the previous in-method rollback dance.\n *\n * @example\n * ```ts\n * const tx = new TransactionManager(new GitIntegration(runner));\n * const manager = new RecipientManager(sopsClient, matrixManager, tx);\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 private readonly tx: TransactionManager,\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 // Preflight: refuse if the recipient is already present (no transaction needed yet).\n const initialDoc = readManifestYaml(repoRoot);\n const initialEntries = environment\n ? getEnvironmentRecipientsArray(initialDoc, environment)\n : getRecipientsArray(initialDoc);\n const initialKeys = initialEntries.map((e) => parseRecipientEntry(e).key);\n if (initialKeys.includes(normalizedKey)) {\n throw new Error(`Recipient '${keyPreview(normalizedKey)}' is already present.`);\n }\n\n // Compute affected cells (manifest + every existing matrix cell, scoped\n // to the chosen environment if any).\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\n await this.tx.run(repoRoot, {\n description: environment\n ? `clef recipients add ${keyPreview(normalizedKey)} -e ${environment}`\n : `clef recipients add ${keyPreview(normalizedKey)}`,\n paths: [...cells.map((c) => path.relative(repoRoot, c.filePath)), CLEF_MANIFEST_FILENAME],\n mutate: async () => {\n // Update manifest first so a re-encrypt failure rolls back via the\n // git reset, not via a manual write.\n const doc = readManifestYaml(repoRoot);\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 for (const cell of cells) {\n await this.encryption.addRecipient(cell.filePath, normalizedKey);\n reEncryptedFiles.push(cell.filePath);\n }\n },\n });\n\n // Re-read the manifest to build the final recipient list (includes the\n // new entry). Reading from disk also ensures we reflect the post-commit\n // state, not just our in-memory view.\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 // Preflight: locate the recipient and refuse early if it's not present.\n const initialDoc = readManifestYaml(repoRoot);\n const initialEntries = environment\n ? getEnvironmentRecipientsArray(initialDoc, environment)\n : getRecipientsArray(initialDoc);\n const parsed = initialEntries.map((e) => parseRecipientEntry(e));\n const matchIndex = parsed.findIndex((p) => p.key === trimmedKey);\n if (matchIndex === -1) {\n throw new Error(`Recipient '${keyPreview(trimmedKey)}' is not in the manifest.`);\n }\n const removedEntry = parsed[matchIndex];\n\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\n await this.tx.run(repoRoot, {\n description: environment\n ? `clef recipients remove ${keyPreview(trimmedKey)} -e ${environment}`\n : `clef recipients remove ${keyPreview(trimmedKey)}`,\n paths: [...cells.map((c) => path.relative(repoRoot, c.filePath)), CLEF_MANIFEST_FILENAME],\n mutate: async () => {\n const doc = readManifestYaml(repoRoot);\n const recipients = environment\n ? ensureEnvironmentRecipientsArray(doc, environment)\n : ensureRecipientsArray(doc);\n const idx = recipients\n .map((e) => parseRecipientEntry(e).key)\n .findIndex((k) => k === trimmedKey);\n recipients.splice(idx, 1);\n writeManifestYaml(repoRoot, doc);\n\n for (const cell of cells) {\n await this.encryption.removeRecipient(cell.filePath, trimmedKey);\n reEncryptedFiles.push(cell.filePath);\n }\n },\n });\n\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 Cloud: 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 Cloud 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 Cloud 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 Cloud: ${(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 Cloud 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", "/**\n * TIER 1 MODULE \u2014 Security and correctness critical.\n *\n * Three-way merge driver for `.clef-meta.yaml` sidecar files. Invoked by\n * git via the `merge=clef-metadata` attribute registered in\n * `.gitattributes`. Single entry point: {@link mergeMetadataContents}\n * (pure string \u2192 string), with a {@link mergeMetadataFiles} wrapper that\n * handles the filesystem I/O.\n *\n * Unlike the SOPS merge driver, this one auto-resolves every conflict \u2014\n * the data model (timestamps + counters) lets us pick the later value\n * without losing information. The SOPS driver cannot do this because\n * ciphertext values are not ordered.\n *\n * Merge rules (see docstrings on each helper for detail):\n *\n * rotations (per key)\n * both sides changed \u2192 later `last_rotated_at` wins, `rotated_by`\n * follows the winner, `rotation_count` = max + 1 to record the merge.\n * one side only \u2192 take it.\n *\n * pending (per key)\n * key resolved on one side (absent from that side's `pending`, present\n * in that side's `rotations`) \u2192 resolution wins; drop from pending.\n * both sides pending with different `since` \u2192 later `since` wins.\n * one side pending, other unchanged \u2192 keep pending.\n */\nimport * as fs from \"fs\";\nimport * as YAML from \"yaml\";\nimport type { PendingKey, RotationRecord, CellMetadata } from \"../pending/metadata\";\n\ninterface RawMetadata {\n version: 1;\n pending: PendingKey[];\n rotations: RotationRecord[];\n}\n\nconst HEADER_COMMENT = \"# Managed by Clef. Do not edit manually.\\n\";\n\n/**\n * Parse a `.clef-meta.yaml` content string into the normalized in-memory\n * shape. Returns empty sections on any parse failure \u2014 merging an empty\n * side against a non-empty side is the safe fallback, preserving the\n * non-empty side's records.\n */\nfunction parseMetadata(content: string): RawMetadata {\n try {\n const parsed = YAML.parse(content);\n if (!parsed || typeof parsed !== \"object\") return emptyMetadata();\n\n const pendingRaw: unknown[] = Array.isArray(parsed.pending) ? parsed.pending : [];\n const pending = pendingRaw\n .filter(\n (p): p is { key: string; since: string; setBy: string } =>\n !!p &&\n typeof p === \"object\" &&\n typeof (p as { key: unknown }).key === \"string\" &&\n typeof (p as { since: unknown }).since === \"string\" &&\n typeof (p as { setBy: unknown }).setBy === \"string\",\n )\n .map((p) => ({ key: p.key, since: new Date(p.since), setBy: p.setBy }));\n\n const rotationsRaw: unknown[] = Array.isArray(parsed.rotations) ? parsed.rotations : [];\n const rotations = rotationsRaw\n .filter(\n (\n r,\n ): r is {\n key: string;\n last_rotated_at: string;\n rotated_by: string;\n rotation_count: number;\n } =>\n !!r &&\n typeof r === \"object\" &&\n typeof (r as { key: unknown }).key === \"string\" &&\n typeof (r as { last_rotated_at: unknown }).last_rotated_at === \"string\" &&\n typeof (r as { rotated_by: unknown }).rotated_by === \"string\" &&\n typeof (r as { rotation_count: unknown }).rotation_count === \"number\",\n )\n .map((r) => ({\n key: r.key,\n lastRotatedAt: new Date(r.last_rotated_at),\n rotatedBy: r.rotated_by,\n rotationCount: r.rotation_count,\n }));\n\n return { version: 1, pending, rotations };\n } catch {\n return emptyMetadata();\n }\n}\n\nfunction emptyMetadata(): RawMetadata {\n return { version: 1, pending: [], rotations: [] };\n}\n\nfunction serializeMetadata(m: CellMetadata): string {\n const data = {\n version: m.version,\n pending: m.pending.map((p) => ({\n key: p.key,\n since: p.since.toISOString(),\n setBy: p.setBy,\n })),\n rotations: m.rotations.map((r) => ({\n key: r.key,\n last_rotated_at: r.lastRotatedAt.toISOString(),\n rotated_by: r.rotatedBy,\n rotation_count: r.rotationCount,\n })),\n };\n return HEADER_COMMENT + YAML.stringify(data);\n}\n\n/**\n * Merge the `rotations` arrays from ours and theirs. For each key:\n *\n * - Both sides \u2192 keep the record with the later `last_rotated_at`.\n * `rotated_by` follows the winning timestamp. `rotation_count`\n * becomes `max(ours.count, theirs.count) + 1`; the +1 records that\n * a merge happened, so the counter truthfully reflects the number of\n * distinct rotation events the key has ever had.\n * - One side only \u2192 take it verbatim.\n */\nfunction mergeRotations(ours: RotationRecord[], theirs: RotationRecord[]): RotationRecord[] {\n const byKey = new Map<string, RotationRecord>();\n\n const ourByKey = new Map(ours.map((r) => [r.key, r] as const));\n const theirByKey = new Map(theirs.map((r) => [r.key, r] as const));\n const allKeys = new Set([...ourByKey.keys(), ...theirByKey.keys()]);\n\n for (const key of allKeys) {\n const o = ourByKey.get(key);\n const t = theirByKey.get(key);\n\n if (o && t) {\n const oTime = o.lastRotatedAt.getTime();\n const tTime = t.lastRotatedAt.getTime();\n const winner = tTime > oTime ? t : o;\n byKey.set(key, {\n key,\n lastRotatedAt: winner.lastRotatedAt,\n rotatedBy: winner.rotatedBy,\n rotationCount: Math.max(o.rotationCount, t.rotationCount) + 1,\n });\n } else if (o) {\n byKey.set(key, o);\n } else if (t) {\n byKey.set(key, t);\n }\n }\n\n return Array.from(byKey.values());\n}\n\n/**\n * Merge the `pending` arrays. The state-machine wrinkle: a key pending\n * on one side but resolved on the other (present in that side's\n * `rotations` and absent from its `pending`) is deliberately resolved \u2014\n * dropping from the merged `pending` preserves the resolution.\n *\n * @param oursPending Our branch's pending entries.\n * @param theirsPending Their branch's pending entries.\n * @param mergedRotations The already-merged rotations (used to detect\n * resolutions on either side).\n * @param oursRotations Rotations on our side only (to identify\n * resolutions we did).\n * @param theirsRotations Rotations on their side only.\n */\nfunction mergePending(\n oursPending: PendingKey[],\n theirsPending: PendingKey[],\n oursRotations: RotationRecord[],\n theirsRotations: RotationRecord[],\n): PendingKey[] {\n const ourByKey = new Map(oursPending.map((p) => [p.key, p] as const));\n const theirByKey = new Map(theirsPending.map((p) => [p.key, p] as const));\n // A key is considered resolved if it appears in either side's rotations.\n // The resolution supersedes any lingering pending entry on the other\n // side \u2014 that entry is stale-by-merge-time and dropping it is correct.\n const rotatedKeys = new Set<string>([\n ...oursRotations.map((r) => r.key),\n ...theirsRotations.map((r) => r.key),\n ]);\n const allKeys = new Set([...ourByKey.keys(), ...theirByKey.keys()]);\n\n const out: PendingKey[] = [];\n for (const key of allKeys) {\n if (rotatedKeys.has(key)) continue; // resolved somewhere \u2192 drop pending\n\n const o = ourByKey.get(key);\n const t = theirByKey.get(key);\n\n if (o && t) {\n // Both sides still pending. Take the later `since` (and its setBy).\n const winner = t.since.getTime() > o.since.getTime() ? t : o;\n out.push({ key, since: winner.since, setBy: winner.setBy });\n } else if (o) {\n out.push(o);\n } else if (t) {\n out.push(t);\n }\n }\n\n return out;\n}\n\n/**\n * Merge two `.clef-meta.yaml` contents (as strings). Does not read the\n * base revision \u2014 the timestamp-ordered merge is associative without one,\n * which is the whole reason we can auto-resolve. The caller is\n * responsible for reading / writing from disk.\n *\n * Returns the merged YAML content with the standard Clef header comment.\n */\nexport function mergeMetadataContents(oursContent: string, theirsContent: string): string {\n const ours = parseMetadata(oursContent);\n const theirs = parseMetadata(theirsContent);\n\n const rotations = mergeRotations(ours.rotations, theirs.rotations);\n const pending = mergePending(ours.pending, theirs.pending, ours.rotations, theirs.rotations);\n\n return serializeMetadata({ version: 1, pending, rotations });\n}\n\n/**\n * Filesystem wrapper around {@link mergeMetadataContents}. Reads ours and\n * theirs, writes the merged result back to `oursPath` (the conventional\n * destination git passes as `%A`). Does not read `basePath` \u2014 see the\n * merge algorithm's docstring for why a base revision is not needed.\n */\nexport function mergeMetadataFiles(_basePath: string, oursPath: string, theirsPath: string): void {\n const oursContent = fs.existsSync(oursPath) ? fs.readFileSync(oursPath, \"utf-8\") : \"\";\n const theirsContent = fs.existsSync(theirsPath) ? fs.readFileSync(theirsPath, \"utf-8\") : \"\";\n const merged = mergeMetadataContents(oursContent, theirsContent);\n fs.writeFileSync(oursPath, merged, \"utf-8\");\n}\n", "import * as path from \"path\";\nimport {\n ClefManifest,\n EncryptionBackend,\n KmsConfig,\n MatrixCell,\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\";\nimport { readManifestYaml, writeManifestYaml } from \"../manifest/io\";\nimport { TransactionManager } from \"../tx\";\n\n/** Options for creating a new service identity. */\nexport interface CreateServiceIdentityOptions {\n /** Per-environment KMS config. Envs listed here use KMS instead of age. */\n kmsEnvConfigs?: Record<string, KmsConfig>;\n /** Generate one age key pair shared across all age-backed environments. */\n sharedRecipient?: boolean;\n /** Runtime-only identity: keys are NOT registered on SOPS files. */\n packOnly?: boolean;\n}\n\n/**\n * Manages service identities: creation, listing, key rotation, and drift validation.\n *\n * Mutating methods (create, delete, addNamespacesToScope, etc.) wrap their\n * work in a TransactionManager so a failure rolls back ALL of the cell-file\n * + manifest writes via `git reset --hard` rather than leaving the matrix in\n * a partial state.\n *\n * @example\n * ```ts\n * const tx = new TransactionManager(new GitIntegration(runner));\n * const manager = new ServiceIdentityManager(sopsClient, matrixManager, tx);\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 private readonly tx: TransactionManager,\n ) {}\n\n /**\n * Compute repo-relative paths for a set of cells plus the manifest. Used\n * to seed TransactionManager.run's `paths` argument.\n */\n private txPaths(repoRoot: string, cells: MatrixCell[]): string[] {\n return [...cells.map((c) => path.relative(repoRoot, c.filePath)), CLEF_MANIFEST_FILENAME];\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 * For pack-only (runtime) identities: keys are generated but NOT registered on SOPS files.\n */\n async create(\n name: string,\n namespaces: string[],\n description: string,\n manifest: ClefManifest,\n repoRoot: string,\n options?: CreateServiceIdentityOptions,\n ): Promise<{\n identity: ServiceIdentityDefinition;\n privateKeys: Record<string, string>;\n sharedRecipient: boolean;\n }> {\n const { kmsEnvConfigs, sharedRecipient, packOnly } = options ?? {};\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 (key generation is read-only \u2014 happens\n // outside the transaction so we can return private keys regardless of\n // git state).\n const environments: Record<string, ServiceIdentityEnvironmentConfig> = {};\n const privateKeys: Record<string, string> = {};\n\n // For shared-recipient mode, generate one key pair and reuse it across all\n // age-backed environments. Per-env keys are still stored in the manifest\n // (one recipient entry per env) so the underlying isolation model is intact\n // \u2014 the user has simply chosen to use the same private key for all of them.\n const sharedKey = sharedRecipient ? await generateAgeIdentity() : undefined;\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: use shared key if requested, otherwise generate fresh\n const ageIdentity = sharedKey ?? (await generateAgeIdentity());\n environments[env.name] = { recipient: ageIdentity.publicKey };\n privateKeys[env.name] = ageIdentity.privateKey;\n }\n }\n\n const definition: ServiceIdentityDefinition = {\n name,\n description,\n namespaces,\n environments,\n ...(packOnly ? { pack_only: true } : {}),\n };\n\n // Pack-only (runtime) identities don't touch SOPS files \u2014 only the manifest.\n const cells = packOnly\n ? []\n : this.matrixManager\n .resolveMatrix(manifest, repoRoot)\n .filter((c) => c.exists && namespaces.includes(c.namespace));\n\n await this.tx.run(repoRoot, {\n description: `clef service create ${name}`,\n paths: this.txPaths(repoRoot, cells),\n mutate: async () => {\n // Register public keys as SOPS recipients on scoped files BEFORE\n // writing the manifest. (KMS envs and pack-only SIs skip this.)\n await this.registerRecipients(definition, manifest, repoRoot);\n\n const doc = readManifestYaml(repoRoot);\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 ...(packOnly ? { pack_only: true } : {}),\n });\n writeManifestYaml(repoRoot, doc);\n },\n });\n\n return { identity: definition, privateKeys, sharedRecipient: sharedKey !== undefined };\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 const scopedCells = identity.pack_only\n ? []\n : this.matrixManager\n .resolveMatrix(manifest, repoRoot)\n .filter((c) => c.exists && identity.namespaces.includes(c.namespace));\n\n await this.tx.run(repoRoot, {\n description: `clef service delete ${name}`,\n paths: this.txPaths(repoRoot, scopedCells),\n mutate: async () => {\n for (const cell of scopedCells) {\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 const doc = readManifestYaml(repoRoot);\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 writeManifestYaml(repoRoot, doc);\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 // Validate every requested env exists on the identity before opening the\n // transaction \u2014 preflight failures should not commit anything.\n for (const envName of Object.keys(kmsEnvConfigs)) {\n if (!identity.environments[envName]) {\n throw new Error(`Environment '${envName}' not found on identity '${name}'.`);\n }\n }\n\n const targetEnvNames = new Set(Object.keys(kmsEnvConfigs));\n const cells = this.matrixManager\n .resolveMatrix(manifest, repoRoot)\n .filter(\n (c) =>\n c.exists &&\n identity.namespaces.includes(c.namespace) &&\n targetEnvNames.has(c.environment),\n );\n\n await this.tx.run(repoRoot, {\n description: `clef service update ${name}: switch ${[...targetEnvNames].join(\",\")} to KMS`,\n paths: this.txPaths(repoRoot, cells),\n mutate: async () => {\n const doc = readManifestYaml(repoRoot);\n const identities = doc.service_identities as Record<string, unknown>[];\n const siDoc = identities.find(\n (si) => (si as Record<string, unknown>).name === name,\n ) as Record<string, unknown>;\n const envs = siDoc.environments as Record<string, Record<string, unknown>>;\n\n for (const [envName, kmsConfig] of Object.entries(kmsEnvConfigs)) {\n const oldConfig = identity.environments[envName];\n // If switching age \u2192 KMS, strip the old recipient from scoped files\n // (pack-only SIs never had recipients registered, so skip)\n if (!identity.pack_only && oldConfig?.recipient && !isKmsEnvelope(oldConfig)) {\n const scopedCells = cells.filter((c) => c.environment === envName);\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 envs[envName] = { kms: kmsConfig };\n identity.environments[envName] = { kms: kmsConfig };\n }\n\n writeManifestYaml(repoRoot, doc);\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 * Pack-only (runtime) identities skip registration entirely.\n */\n async registerRecipients(\n identity: ServiceIdentityDefinition,\n manifest: ClefManifest,\n repoRoot: string,\n ): Promise<void> {\n if (identity.pack_only) return;\n\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 * Expand a service identity's namespace scope. Registers the SI's existing\n * per-env recipient on every matrix cell in the new namespace \u00D7 env\n * combinations. KMS-backed environments are skipped (no recipient to\n * register).\n *\n * Idempotent: namespaces already in scope are silently skipped. Refuses if\n * any requested namespace does not exist in the manifest.\n */\n async addNamespacesToScope(\n name: string,\n namespacesToAdd: string[],\n manifest: ClefManifest,\n repoRoot: string,\n ): Promise<{ added: string[]; affectedFiles: string[] }> {\n const identity = this.get(manifest, name);\n if (!identity) {\n throw new Error(`Service identity '${name}' not found.`);\n }\n\n // Validate every namespace exists in the manifest\n const manifestNamespaceNames = new Set(manifest.namespaces.map((n) => n.name));\n const unknown = namespacesToAdd.filter((n) => !manifestNamespaceNames.has(n));\n if (unknown.length > 0) {\n throw new Error(\n `Namespace(s) not found in manifest: ${unknown.join(\", \")}. ` +\n `Available: ${manifest.namespaces.map((n) => n.name).join(\", \")}`,\n );\n }\n\n // Filter out namespaces already in scope (idempotent no-op)\n const existingScope = new Set(identity.namespaces);\n const toAdd = namespacesToAdd.filter((n) => !existingScope.has(n));\n if (toAdd.length === 0) {\n return { added: [], affectedFiles: [] };\n }\n\n // Affected cells: every existing cell in (newly-scoped namespaces \u00D7 all envs)\n const cells = this.matrixManager\n .resolveMatrix(manifest, repoRoot)\n .filter((c) => c.exists && toAdd.includes(c.namespace));\n const affectedFiles: string[] = [];\n\n await this.tx.run(repoRoot, {\n description: `clef service update ${name}: add namespaces ${toAdd.join(\",\")}`,\n paths: this.txPaths(repoRoot, cells),\n mutate: async () => {\n if (!identity.pack_only) {\n for (const cell of cells) {\n const envConfig = identity.environments[cell.environment];\n if (!envConfig) continue;\n if (isKmsEnvelope(envConfig)) continue;\n if (!envConfig.recipient) continue;\n\n try {\n await this.encryption.addRecipient(cell.filePath, envConfig.recipient);\n affectedFiles.push(cell.filePath);\n } catch (err) {\n // SOPS may exit non-zero for duplicate recipients \u2014 safe to ignore\n const message = err instanceof Error ? err.message : String(err);\n if (!message.includes(\"already\")) {\n throw err;\n }\n }\n }\n }\n\n const doc = readManifestYaml(repoRoot);\n const identities = doc.service_identities as Record<string, unknown>[];\n const siDoc = identities.find(\n (si) => (si as Record<string, unknown>).name === name,\n ) as Record<string, unknown>;\n siDoc.namespaces = [...identity.namespaces, ...toAdd];\n writeManifestYaml(repoRoot, doc);\n },\n });\n\n return { added: toAdd, affectedFiles };\n }\n\n /**\n * Shrink a service identity's namespace scope. De-registers the SI's\n * per-env recipient from every matrix cell in the removed namespace \u00D7 env\n * combinations. KMS-backed environments are skipped (no recipient to remove).\n *\n * Refuses if removing would leave the SI with zero namespaces \u2014 point the\n * caller at `clef service delete` for that case. Refuses if any requested\n * namespace is not currently in the SI's scope.\n */\n async removeNamespacesFromScope(\n name: string,\n namespacesToRemove: string[],\n manifest: ClefManifest,\n repoRoot: string,\n ): Promise<{ removed: string[]; affectedFiles: string[] }> {\n const identity = this.get(manifest, name);\n if (!identity) {\n throw new Error(`Service identity '${name}' not found.`);\n }\n\n // Validate every namespace is currently in scope\n const currentScope = new Set(identity.namespaces);\n const notInScope = namespacesToRemove.filter((n) => !currentScope.has(n));\n if (notInScope.length > 0) {\n throw new Error(\n `Namespace(s) not in scope of '${name}': ${notInScope.join(\", \")}. ` +\n `Current scope: ${identity.namespaces.join(\", \")}`,\n );\n }\n\n // Refuse if it would leave zero namespaces\n const remaining = identity.namespaces.filter((n) => !namespacesToRemove.includes(n));\n if (remaining.length === 0) {\n throw new Error(\n `Cannot remove the last namespace from service identity '${name}'. ` +\n `Use \\`clef service delete ${name}\\` to delete the identity instead.`,\n );\n }\n\n // Affected cells: every existing cell in (removed namespaces \u00D7 all envs)\n const cells = this.matrixManager\n .resolveMatrix(manifest, repoRoot)\n .filter((c) => c.exists && namespacesToRemove.includes(c.namespace));\n const affectedFiles: string[] = [];\n\n await this.tx.run(repoRoot, {\n description: `clef service update ${name}: remove namespaces ${namespacesToRemove.join(\",\")}`,\n paths: this.txPaths(repoRoot, cells),\n mutate: async () => {\n if (!identity.pack_only) {\n for (const cell of cells) {\n const envConfig = identity.environments[cell.environment];\n if (!envConfig) continue;\n if (isKmsEnvelope(envConfig)) continue;\n if (!envConfig.recipient) continue;\n\n try {\n await this.encryption.removeRecipient(cell.filePath, envConfig.recipient);\n affectedFiles.push(cell.filePath);\n } catch {\n // May not be a current recipient \u2014 safe to skip\n }\n }\n }\n\n const doc = readManifestYaml(repoRoot);\n const identities = doc.service_identities as Record<string, unknown>[];\n const siDoc = identities.find(\n (si) => (si as Record<string, unknown>).name === name,\n ) as Record<string, unknown>;\n siDoc.namespaces = remaining;\n writeManifestYaml(repoRoot, doc);\n },\n });\n\n return { removed: namespacesToRemove, affectedFiles };\n }\n\n /**\n * Extend a service identity to cover an additional environment. Generates a\n * fresh age key for the new env (or uses the supplied KMS config), registers\n * the new recipient on every cell in the SI's scoped namespaces \u00D7 this env,\n * and adds the env entry to the SI's `environments{}` map in the manifest.\n *\n * Used as the explicit follow-up to `clef env add`. The env-add command\n * deliberately doesn't cascade to existing SIs \u2014 `clef lint` reports the\n * gap as a `missing_environment` issue and the user runs this method (via\n * `clef service add-env <si> <env>`) once per SI to fill it in,\n * choosing the backend deliberately at that moment.\n *\n * Refuses if the SI doesn't exist, the env doesn't exist in the manifest,\n * or the env is already configured on the SI.\n *\n * @returns The new private key (for age) or `undefined` (for KMS), keyed\n * by env name. The caller is responsible for storing it securely.\n */\n async addEnvironmentToScope(\n name: string,\n envName: string,\n manifest: ClefManifest,\n repoRoot: string,\n kmsConfig?: KmsConfig,\n ): Promise<{ privateKey: string | undefined }> {\n const identity = this.get(manifest, name);\n if (!identity) {\n throw new Error(`Service identity '${name}' not found.`);\n }\n if (!manifest.environments.some((e) => e.name === envName)) {\n throw new Error(\n `Environment '${envName}' not found in manifest. ` +\n `Available: ${manifest.environments.map((e) => e.name).join(\", \")}`,\n );\n }\n if (identity.environments[envName]) {\n throw new Error(\n `Service identity '${name}' already has a config for environment '${envName}'. ` +\n `Use 'clef service update --kms-env ${envName}=<provider>:<keyId>' to switch backends.`,\n );\n }\n\n // Generate the new env config outside the transaction so the caller gets\n // the private key back even if the git commit fails (the key is material\n // the user needs to install regardless).\n let envConfig: ServiceIdentityEnvironmentConfig;\n let privateKey: string | undefined;\n if (kmsConfig) {\n envConfig = { kms: kmsConfig };\n } else {\n const newIdentity = await generateAgeIdentity();\n envConfig = { recipient: newIdentity.publicKey };\n privateKey = newIdentity.privateKey;\n }\n\n // Affected cells: every existing cell in (SI's scoped namespaces \u00D7 this env)\n const cells = this.matrixManager\n .resolveMatrix(manifest, repoRoot)\n .filter(\n (c) => c.exists && identity.namespaces.includes(c.namespace) && c.environment === envName,\n );\n\n await this.tx.run(repoRoot, {\n description: `clef service add-env ${name} ${envName}`,\n paths: this.txPaths(repoRoot, cells),\n mutate: async () => {\n // For age envs, register the new recipient on every scoped cell.\n // KMS envs and pack-only SIs have no recipient on the cells.\n if (!identity.pack_only && !isKmsEnvelope(envConfig) && envConfig.recipient) {\n for (const cell of cells) {\n try {\n await this.encryption.addRecipient(cell.filePath, envConfig.recipient);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n if (!message.includes(\"already\")) {\n throw err;\n }\n }\n }\n }\n\n const doc = readManifestYaml(repoRoot);\n const identities = doc.service_identities as Record<string, unknown>[];\n const siDoc = identities.find(\n (si) => (si as Record<string, unknown>).name === name,\n ) as Record<string, unknown>;\n const envs = siDoc.environments as Record<string, unknown>;\n envs[envName] = envConfig;\n writeManifestYaml(repoRoot, doc);\n },\n });\n\n return { privateKey };\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 * The whole rotation runs inside a single transaction: any cell-write\n * failure rolls back ALL recipient swaps and the manifest update via\n * `git reset --hard` to the pre-rotation state. The previous in-method\n * `PartialRotationError` rollback dance is no longer needed.\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 envsToRotate = environment ? [environment] : Object.keys(identity.environments);\n\n // Validate envs exist on the identity before opening the transaction.\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 }\n\n // Pre-generate all new keys outside the transaction so the caller gets\n // them even if the git commit step itself fails (the keys are already\n // material that the user will need to install regardless).\n const newPrivateKeys: Record<string, string> = {};\n const newPublicKeys: Record<string, string> = {};\n for (const envName of envsToRotate) {\n const envConfig = identity.environments[envName];\n if (isKmsEnvelope(envConfig)) continue;\n if (!envConfig.recipient) continue;\n const newIdentity = await generateAgeIdentity();\n newPrivateKeys[envName] = newIdentity.privateKey;\n newPublicKeys[envName] = newIdentity.publicKey;\n }\n\n const targetEnvNames = new Set(Object.keys(newPublicKeys));\n if (targetEnvNames.size === 0) {\n // Nothing to rotate (all targeted envs are KMS-backed or have no recipient).\n return newPrivateKeys;\n }\n\n const cells = identity.pack_only\n ? []\n : this.matrixManager\n .resolveMatrix(manifest, repoRoot)\n .filter(\n (c) =>\n c.exists &&\n identity.namespaces.includes(c.namespace) &&\n targetEnvNames.has(c.environment),\n );\n\n await this.tx.run(repoRoot, {\n description: `clef service rotate ${name}${environment ? `:${environment}` : \"\"}`,\n paths: this.txPaths(repoRoot, cells),\n mutate: async () => {\n const doc = readManifestYaml(repoRoot);\n const identities = doc.service_identities as Record<string, unknown>[];\n const siDoc = identities.find(\n (si) => (si as Record<string, unknown>).name === name,\n ) as Record<string, unknown>;\n const envs = siDoc.environments as Record<string, Record<string, string>>;\n\n for (const envName of targetEnvNames) {\n const oldRecipient = identity.environments[envName].recipient!;\n const newPublicKey = newPublicKeys[envName];\n\n envs[envName] = { recipient: newPublicKey };\n\n if (!identity.pack_only) {\n const scopedCells = cells.filter((c) => c.environment === envName);\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 \u2014 safe to skip\n }\n // No try/catch around add: failure here triggers full transaction\n // rollback (git reset --hard), which is safer than the old manual\n // re-add dance.\n await this.encryption.addRecipient(cell.filePath, newPublicKey);\n }\n }\n }\n\n writeManifestYaml(repoRoot, doc);\n },\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}' has no config for environment '${envName}'.`,\n fixCommand: `clef service add-env ${si.name} ${envName}`,\n });\n }\n }\n\n // Pack-only (runtime) SIs: skip recipient checks (they are never\n // registered on SOPS files) but warn about shared recipients.\n if (si.pack_only) {\n const ageRecipients = Object.values(si.environments)\n .filter((cfg) => !isKmsEnvelope(cfg) && cfg.recipient)\n .map((cfg) => cfg.recipient!);\n if (ageRecipients.length >= 2 && new Set(ageRecipients).size === 1) {\n issues.push({\n identity: si.name,\n type: \"runtime_shared_recipient\",\n message:\n `Runtime identity '${si.name}' uses a shared recipient across all environments. ` +\n \"A compromised key in any environment decrypts artifacts for all environments. \" +\n \"Consider per-environment keys for runtime workloads.\",\n });\n }\n continue;\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 * as fs from \"fs\";\nimport * as path from \"path\";\nimport { ClefManifest, EncryptionBackend, MatrixCell } from \"../types\";\nimport { MatrixManager } from \"../matrix/manager\";\nimport { CLEF_MANIFEST_FILENAME } from \"../manifest/parser\";\nimport { readManifestYaml, writeManifestYaml } from \"../manifest/io\";\nimport { TransactionManager } from \"../tx\";\n\nexport interface NamespaceEditOptions {\n /** New name for the namespace. Renames cell files on disk and SI references. */\n rename?: string;\n /** Replace the namespace's description. Manifest-only update. */\n description?: string;\n /** Replace the namespace's schema path. Manifest-only update. */\n schema?: string;\n}\n\nexport interface EnvironmentEditOptions {\n /** New name for the environment. Renames cell files on disk and SI references. */\n rename?: string;\n /** Replace the environment's description. Manifest-only update. */\n description?: string;\n /** Mark the environment as protected. Manifest-only update. */\n protected?: boolean;\n}\n\nexport interface AddNamespaceOptions {\n /** Human-readable description for the new namespace. */\n description?: string;\n /** Optional schema file path for the new namespace. */\n schema?: string;\n}\n\nexport interface AddEnvironmentOptions {\n /** Human-readable description for the new environment. */\n description?: string;\n /** Mark the new environment as protected from the start. */\n protected?: boolean;\n}\n\n/**\n * Manages namespace and environment CRUD on the manifest. Covers add, remove,\n * and edit operations. Renames cascade through service identity references;\n * removes refuse if they would orphan an SI (force the user to clean up SIs\n * first) or break the manifest (last namespace, last environment, protected\n * environment).\n *\n * Every mutation runs inside TransactionManager so cell-file ops + the\n * manifest update + SI cascade updates land as one git commit, or roll back\n * via `git reset --hard` on failure.\n *\n * @example\n * ```ts\n * const tx = new TransactionManager(new GitIntegration(runner));\n * const structure = new StructureManager(matrixManager, sopsClient, tx);\n * await structure.addNamespace(\"billing\", {}, manifest, repoRoot);\n * ```\n */\nexport class StructureManager {\n constructor(\n private readonly matrixManager: MatrixManager,\n private readonly encryption: EncryptionBackend,\n private readonly tx: TransactionManager,\n ) {}\n\n // \u2500\u2500 add \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 * Add a new namespace to the manifest and scaffold an empty encrypted cell\n * for every existing environment. Refuses if the name already exists, the\n * identifier is invalid, or any of the target cell files are already on\n * disk.\n */\n async addNamespace(\n name: string,\n opts: AddNamespaceOptions,\n manifest: ClefManifest,\n repoRoot: string,\n ): Promise<void> {\n if (manifest.namespaces.some((n) => n.name === name)) {\n throw new Error(`Namespace '${name}' already exists.`);\n }\n this.assertValidIdentifier(\"namespace\", name);\n\n // Compute the cells we'll scaffold (one per existing env). Refuse if any\n // target file already exists on disk so we never clobber data.\n const newCellPaths = manifest.environments.map((env) => ({\n environment: env.name,\n filePath: path.join(\n repoRoot,\n manifest.file_pattern.replace(\"{namespace}\", name).replace(\"{environment}\", env.name),\n ),\n }));\n for (const cell of newCellPaths) {\n if (fs.existsSync(cell.filePath)) {\n throw new Error(\n `Cannot add namespace '${name}': file '${path.relative(repoRoot, cell.filePath)}' already exists.`,\n );\n }\n }\n\n // The manifest parser requires a non-empty description string. If the\n // caller didn't provide one, fall back to the namespace name itself \u2014\n // it's better than placeholder text and the user can edit it later.\n const description = opts.description?.trim() || name;\n\n // Build the in-memory manifest with the new namespace appended so the\n // scaffolding sees it. (Backend resolution doesn't depend on namespace,\n // but it's the principled thing to do.)\n const updatedManifest: ClefManifest = {\n ...manifest,\n namespaces: [\n ...manifest.namespaces,\n {\n name,\n description,\n ...(opts.schema ? { schema: opts.schema } : {}),\n },\n ],\n };\n\n await this.tx.run(repoRoot, {\n description: `clef namespace add ${name}`,\n paths: [\n ...newCellPaths.map((c) => path.relative(repoRoot, c.filePath)),\n CLEF_MANIFEST_FILENAME,\n ],\n mutate: async () => {\n for (const cell of newCellPaths) {\n await this.matrixManager.scaffoldCell(\n {\n namespace: name,\n environment: cell.environment,\n filePath: cell.filePath,\n exists: false,\n },\n this.encryption,\n updatedManifest,\n );\n }\n\n const doc = readManifestYaml(repoRoot);\n const namespaces = doc.namespaces as Array<Record<string, unknown>>;\n const entry: Record<string, unknown> = {\n name,\n description,\n };\n if (opts.schema) entry.schema = opts.schema;\n namespaces.push(entry);\n writeManifestYaml(repoRoot, doc);\n },\n });\n }\n\n /**\n * Add a new environment to the manifest and scaffold an empty encrypted\n * cell for every existing namespace. Refuses if the name already exists,\n * the identifier is invalid, or any of the target cell files are already\n * on disk.\n *\n * Does NOT cascade to service identities \u2014 existing SIs will not have a\n * config for the new env. Lint will surface that gap; users explicitly\n * close it via `clef service update --add-env` (Phase 1c).\n */\n async addEnvironment(\n name: string,\n opts: AddEnvironmentOptions,\n manifest: ClefManifest,\n repoRoot: string,\n ): Promise<void> {\n if (manifest.environments.some((e) => e.name === name)) {\n throw new Error(`Environment '${name}' already exists.`);\n }\n this.assertValidIdentifier(\"environment\", name);\n\n const newCellPaths = manifest.namespaces.map((ns) => ({\n namespace: ns.name,\n filePath: path.join(\n repoRoot,\n manifest.file_pattern.replace(\"{namespace}\", ns.name).replace(\"{environment}\", name),\n ),\n }));\n for (const cell of newCellPaths) {\n if (fs.existsSync(cell.filePath)) {\n throw new Error(\n `Cannot add environment '${name}': file '${path.relative(repoRoot, cell.filePath)}' already exists.`,\n );\n }\n }\n\n // The parser requires a non-empty description string. Fall back to the\n // env name if none provided \u2014 better than placeholder text, editable later.\n const description = opts.description?.trim() || name;\n\n const updatedManifest: ClefManifest = {\n ...manifest,\n environments: [\n ...manifest.environments,\n {\n name,\n description,\n ...(opts.protected ? { protected: true } : {}),\n },\n ],\n };\n\n await this.tx.run(repoRoot, {\n description: `clef env add ${name}`,\n paths: [\n ...newCellPaths.map((c) => path.relative(repoRoot, c.filePath)),\n CLEF_MANIFEST_FILENAME,\n ],\n mutate: async () => {\n for (const cell of newCellPaths) {\n await this.matrixManager.scaffoldCell(\n {\n namespace: cell.namespace,\n environment: name,\n filePath: cell.filePath,\n exists: false,\n },\n this.encryption,\n updatedManifest,\n );\n }\n\n const doc = readManifestYaml(repoRoot);\n const environments = doc.environments as Array<Record<string, unknown>>;\n const entry: Record<string, unknown> = {\n name,\n description,\n };\n if (opts.protected) entry.protected = true;\n environments.push(entry);\n writeManifestYaml(repoRoot, doc);\n },\n });\n }\n\n // \u2500\u2500 remove \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 * Remove a namespace from the manifest and delete every cell file under\n * it. Cascades through service identities by removing the namespace from\n * each SI's `namespaces[]` array. Refuses if removing it would leave any\n * SI with zero scope (the user must delete those SIs first or add other\n * namespaces to them) or if it would leave the manifest with zero\n * namespaces.\n */\n async removeNamespace(name: string, manifest: ClefManifest, repoRoot: string): Promise<void> {\n const ns = manifest.namespaces.find((n) => n.name === name);\n if (!ns) {\n throw new Error(\n `Namespace '${name}' not found. Available: ${manifest.namespaces.map((n) => n.name).join(\", \")}`,\n );\n }\n if (manifest.namespaces.length === 1) {\n throw new Error(\n `Cannot remove the last namespace from the manifest. The matrix needs at least one namespace.`,\n );\n }\n\n // Refuse if any SI would be left with zero scope. Force the user to\n // either delete the SI first or expand its scope to other namespaces.\n const orphanedSis = (manifest.service_identities ?? []).filter(\n (si) => si.namespaces.length === 1 && si.namespaces[0] === name,\n );\n if (orphanedSis.length > 0) {\n throw new Error(\n `Cannot remove namespace '${name}': it is the only scope of service identit${orphanedSis.length === 1 ? \"y\" : \"ies\"} ${orphanedSis.map((s) => `'${s.name}'`).join(\", \")}. ` +\n `Delete those service identit${orphanedSis.length === 1 ? \"y\" : \"ies\"} first, or add other namespaces to their scope.`,\n );\n }\n\n const cellsToDelete = this.matrixManager\n .resolveMatrix(manifest, repoRoot)\n .filter((c) => c.exists && c.namespace === name);\n\n await this.tx.run(repoRoot, {\n description: `clef namespace remove ${name}`,\n paths: this.deletePaths(repoRoot, cellsToDelete),\n mutate: async () => {\n for (const cell of cellsToDelete) {\n fs.unlinkSync(cell.filePath);\n this.unlinkMetaSibling(cell.filePath);\n }\n\n const doc = readManifestYaml(repoRoot);\n const namespaces = doc.namespaces as Array<Record<string, unknown>>;\n doc.namespaces = namespaces.filter((n) => (n as { name: string }).name !== name);\n\n // Cascade through service identities \u2014 drop the removed namespace\n // from every SI's namespaces[] array.\n const sis = doc.service_identities as Array<Record<string, unknown>> | undefined;\n if (Array.isArray(sis)) {\n for (const si of sis) {\n const siNs = si.namespaces as string[] | undefined;\n if (Array.isArray(siNs)) {\n si.namespaces = siNs.filter((n) => n !== name);\n }\n }\n }\n writeManifestYaml(repoRoot, doc);\n },\n });\n }\n\n /**\n * Remove an environment from the manifest and delete every cell file for\n * it across all namespaces. Cascades through service identities by\n * removing the env entry from each SI's `environments{}` map. Refuses on\n * protected environments (force the user to `clef env edit --unprotect`\n * first), if it would leave the manifest with zero environments, or if\n * the env doesn't exist.\n */\n async removeEnvironment(name: string, manifest: ClefManifest, repoRoot: string): Promise<void> {\n const env = manifest.environments.find((e) => e.name === name);\n if (!env) {\n throw new Error(\n `Environment '${name}' not found. Available: ${manifest.environments.map((e) => e.name).join(\", \")}`,\n );\n }\n if (env.protected) {\n throw new Error(\n `Environment '${name}' is protected. Cannot remove a protected environment. ` +\n `Run 'clef env edit ${name} --unprotect' first.`,\n );\n }\n if (manifest.environments.length === 1) {\n throw new Error(\n `Cannot remove the last environment from the manifest. The matrix needs at least one environment.`,\n );\n }\n\n const cellsToDelete = this.matrixManager\n .resolveMatrix(manifest, repoRoot)\n .filter((c) => c.exists && c.environment === name);\n\n await this.tx.run(repoRoot, {\n description: `clef env remove ${name}`,\n paths: this.deletePaths(repoRoot, cellsToDelete),\n mutate: async () => {\n for (const cell of cellsToDelete) {\n fs.unlinkSync(cell.filePath);\n this.unlinkMetaSibling(cell.filePath);\n }\n\n const doc = readManifestYaml(repoRoot);\n const environments = doc.environments as Array<Record<string, unknown>>;\n doc.environments = environments.filter((e) => (e as { name: string }).name !== name);\n\n // Cascade through service identities \u2014 drop the env entry from\n // every SI's environments{} map.\n const sis = doc.service_identities as Array<Record<string, unknown>> | undefined;\n if (Array.isArray(sis)) {\n for (const si of sis) {\n const envs = si.environments as Record<string, unknown> | undefined;\n if (envs && Object.prototype.hasOwnProperty.call(envs, name)) {\n delete envs[name];\n }\n }\n }\n writeManifestYaml(repoRoot, doc);\n },\n });\n }\n\n // \u2500\u2500 edit \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 * Edit a namespace's manifest entry, optionally renaming the namespace\n * (which also renames cell files on disk and updates every service\n * identity that references it).\n */\n async editNamespace(\n name: string,\n opts: NamespaceEditOptions,\n manifest: ClefManifest,\n repoRoot: string,\n ): Promise<void> {\n const ns = manifest.namespaces.find((n) => n.name === name);\n if (!ns) {\n throw new Error(\n `Namespace '${name}' not found. Available: ${manifest.namespaces.map((n) => n.name).join(\", \")}`,\n );\n }\n\n // Refuse rename collisions before opening the transaction\n if (opts.rename && opts.rename !== name) {\n if (manifest.namespaces.some((n) => n.name === opts.rename)) {\n throw new Error(`Namespace '${opts.rename}' already exists.`);\n }\n this.assertValidIdentifier(\"namespace\", opts.rename);\n }\n\n // Compute the file ops we need to perform. Renames produce both an\n // old-path and a new-path entry so the transaction can stage the new\n // files and roll back any creations on failure.\n const isRename = opts.rename !== undefined && opts.rename !== name;\n const renamePairs = isRename\n ? this.collectRenamePairs(manifest, repoRoot, name, opts.rename!, \"namespace\")\n : [];\n\n // Refuse rename if any target file already exists \u2014 this would clobber data\n if (isRename) {\n for (const pair of renamePairs) {\n if (fs.existsSync(pair.to)) {\n throw new Error(\n `Rename target '${path.relative(repoRoot, pair.to)}' already exists. ` +\n `Move or remove it first.`,\n );\n }\n }\n }\n\n const description = this.describeEdit(\"namespace\", name, opts);\n\n await this.tx.run(repoRoot, {\n description,\n paths: this.txPaths(repoRoot, renamePairs),\n mutate: async () => {\n if (isRename) {\n this.applyRenames(renamePairs);\n }\n\n const doc = readManifestYaml(repoRoot);\n this.applyNamespaceManifestEdit(doc, name, opts);\n writeManifestYaml(repoRoot, doc);\n },\n });\n }\n\n /**\n * Edit an environment's manifest entry, optionally renaming the env\n * (which also renames cell files across every namespace and updates\n * every service identity's environments map key).\n */\n async editEnvironment(\n name: string,\n opts: EnvironmentEditOptions,\n manifest: ClefManifest,\n repoRoot: string,\n ): Promise<void> {\n const env = manifest.environments.find((e) => e.name === name);\n if (!env) {\n throw new Error(\n `Environment '${name}' not found. Available: ${manifest.environments.map((e) => e.name).join(\", \")}`,\n );\n }\n\n if (opts.rename && opts.rename !== name) {\n if (manifest.environments.some((e) => e.name === opts.rename)) {\n throw new Error(`Environment '${opts.rename}' already exists.`);\n }\n this.assertValidIdentifier(\"environment\", opts.rename);\n }\n\n const isRename = opts.rename !== undefined && opts.rename !== name;\n const renamePairs = isRename\n ? this.collectRenamePairs(manifest, repoRoot, name, opts.rename!, \"environment\")\n : [];\n\n if (isRename) {\n for (const pair of renamePairs) {\n if (fs.existsSync(pair.to)) {\n throw new Error(\n `Rename target '${path.relative(repoRoot, pair.to)}' already exists. ` +\n `Move or remove it first.`,\n );\n }\n }\n }\n\n const description = this.describeEdit(\"env\", name, opts);\n\n await this.tx.run(repoRoot, {\n description,\n paths: this.txPaths(repoRoot, renamePairs),\n mutate: async () => {\n if (isRename) {\n this.applyRenames(renamePairs);\n }\n\n const doc = readManifestYaml(repoRoot);\n this.applyEnvironmentManifestEdit(doc, name, opts);\n writeManifestYaml(repoRoot, doc);\n },\n });\n }\n\n // \u2500\u2500 Private helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 * For a rename, return every (oldPath, newPath) pair that needs to move on\n * disk. Includes the encrypted cell files AND their sibling .clef-meta.yaml\n * pending-metadata files. Filters to existing cells only \u2014 empty cells\n * (no file on disk) need no rename.\n */\n private collectRenamePairs(\n manifest: ClefManifest,\n repoRoot: string,\n oldName: string,\n newName: string,\n axis: \"namespace\" | \"environment\",\n ): Array<{ from: string; to: string }> {\n const cells = this.matrixManager\n .resolveMatrix(manifest, repoRoot)\n .filter(\n (c) =>\n c.exists && (axis === \"namespace\" ? c.namespace === oldName : c.environment === oldName),\n );\n\n const pairs: Array<{ from: string; to: string }> = [];\n for (const cell of cells) {\n const newCellPath = this.swapAxisInCellPath(repoRoot, manifest, cell, axis, newName);\n pairs.push({ from: cell.filePath, to: newCellPath });\n\n // Sibling .clef-meta.yaml file (only include if it actually exists)\n const oldMeta = cell.filePath.replace(/\\.enc\\.(yaml|json)$/, \".clef-meta.yaml\");\n if (fs.existsSync(oldMeta)) {\n const newMeta = newCellPath.replace(/\\.enc\\.(yaml|json)$/, \".clef-meta.yaml\");\n pairs.push({ from: oldMeta, to: newMeta });\n }\n }\n return pairs;\n }\n\n /**\n * Build the new file path by substituting the renamed axis (namespace or\n * environment) into the manifest's file_pattern. Reuses MatrixManager's\n * resolution logic instead of doing string surgery on the existing path.\n */\n private swapAxisInCellPath(\n repoRoot: string,\n manifest: ClefManifest,\n cell: MatrixCell,\n axis: \"namespace\" | \"environment\",\n newName: string,\n ): string {\n const ns = axis === \"namespace\" ? newName : cell.namespace;\n const env = axis === \"environment\" ? newName : cell.environment;\n return path.join(\n repoRoot,\n manifest.file_pattern.replace(\"{namespace}\", ns).replace(\"{environment}\", env),\n );\n }\n\n /**\n * Compute the repo-relative paths a transaction needs to know about.\n * Includes both ends of every rename plus the manifest itself.\n */\n private txPaths(repoRoot: string, renamePairs: Array<{ from: string; to: string }>): string[] {\n const paths = new Set<string>();\n for (const pair of renamePairs) {\n paths.add(path.relative(repoRoot, pair.from));\n paths.add(path.relative(repoRoot, pair.to));\n }\n paths.add(CLEF_MANIFEST_FILENAME);\n return [...paths];\n }\n\n /**\n * Apply each rename in order. Creates parent directories as needed (a\n * namespace rename moves files into a brand-new directory).\n */\n private applyRenames(pairs: Array<{ from: string; to: string }>): void {\n for (const pair of pairs) {\n const targetDir = path.dirname(pair.to);\n if (!fs.existsSync(targetDir)) {\n fs.mkdirSync(targetDir, { recursive: true });\n }\n fs.renameSync(pair.from, pair.to);\n }\n }\n\n /**\n * Compute the repo-relative paths for a remove op. Includes every cell\n * file being deleted, every existing .clef-meta.yaml sibling, and the\n * manifest itself.\n */\n private deletePaths(repoRoot: string, cells: MatrixCell[]): string[] {\n const paths = new Set<string>();\n for (const cell of cells) {\n paths.add(path.relative(repoRoot, cell.filePath));\n const meta = cell.filePath.replace(/\\.enc\\.(yaml|json)$/, \".clef-meta.yaml\");\n if (fs.existsSync(meta)) {\n paths.add(path.relative(repoRoot, meta));\n }\n }\n paths.add(CLEF_MANIFEST_FILENAME);\n return [...paths];\n }\n\n /**\n * Delete the .clef-meta.yaml sibling of a cell file if it exists. No-op\n * otherwise. Used by remove ops to keep pending-state files in sync with\n * the cells they describe.\n */\n private unlinkMetaSibling(cellPath: string): void {\n const meta = cellPath.replace(/\\.enc\\.(yaml|json)$/, \".clef-meta.yaml\");\n if (fs.existsSync(meta)) {\n fs.unlinkSync(meta);\n }\n }\n\n /**\n * Mutate the manifest doc in place to apply a namespace edit. Handles\n * description/schema replacement and the rename cascade through every\n * service identity that references the namespace.\n */\n private applyNamespaceManifestEdit(\n doc: Record<string, unknown>,\n name: string,\n opts: NamespaceEditOptions,\n ): void {\n const namespaces = doc.namespaces as Array<Record<string, unknown>>;\n const ns = namespaces.find((n) => (n as Record<string, unknown>).name === name);\n if (!ns) {\n throw new Error(`Namespace '${name}' disappeared from the manifest mid-transaction.`);\n }\n\n if (opts.rename && opts.rename !== name) {\n ns.name = opts.rename;\n // Cascade through service identities \u2014 each SI references namespaces by string name\n const sis = doc.service_identities as Array<Record<string, unknown>> | undefined;\n if (Array.isArray(sis)) {\n for (const si of sis) {\n const siNs = si.namespaces as string[] | undefined;\n if (Array.isArray(siNs)) {\n const idx = siNs.indexOf(name);\n if (idx !== -1) siNs[idx] = opts.rename;\n }\n }\n }\n }\n if (opts.description !== undefined) {\n ns.description = opts.description;\n }\n if (opts.schema !== undefined) {\n // Empty string clears the schema reference; any other value sets it.\n if (opts.schema === \"\") {\n delete ns.schema;\n } else {\n ns.schema = opts.schema;\n }\n }\n }\n\n /**\n * Mutate the manifest doc in place to apply an environment edit. Handles\n * description/protected updates and the rename cascade through every\n * service identity's environments map.\n */\n private applyEnvironmentManifestEdit(\n doc: Record<string, unknown>,\n name: string,\n opts: EnvironmentEditOptions,\n ): void {\n const environments = doc.environments as Array<Record<string, unknown>>;\n const env = environments.find((e) => (e as Record<string, unknown>).name === name);\n if (!env) {\n throw new Error(`Environment '${name}' disappeared from the manifest mid-transaction.`);\n }\n\n if (opts.rename && opts.rename !== name) {\n env.name = opts.rename;\n // Cascade through service identities. The SI's environments map is\n // keyed by env name, so we need to rename the key while preserving\n // insertion order (so the resulting YAML diff is minimal).\n const sis = doc.service_identities as Array<Record<string, unknown>> | undefined;\n if (Array.isArray(sis)) {\n for (const si of sis) {\n const envs = si.environments as Record<string, unknown> | undefined;\n if (envs && Object.prototype.hasOwnProperty.call(envs, name)) {\n si.environments = renameKeyPreservingOrder(envs, name, opts.rename);\n }\n }\n }\n }\n if (opts.description !== undefined) {\n env.description = opts.description;\n }\n if (opts.protected !== undefined) {\n if (opts.protected) {\n env.protected = true;\n } else {\n delete env.protected;\n }\n }\n }\n\n /** Reject rename targets that aren't safe path segments. */\n private assertValidIdentifier(kind: \"namespace\" | \"environment\", name: string): void {\n if (!/^[A-Za-z0-9._-]+$/.test(name)) {\n throw new Error(\n `Invalid ${kind} name '${name}'. Use letters, numbers, '.', '_', or '-' only.`,\n );\n }\n }\n\n /** Build the human-readable commit message for an edit. */\n private describeEdit(\n kind: \"namespace\" | \"env\",\n name: string,\n opts: NamespaceEditOptions | EnvironmentEditOptions,\n ): string {\n const parts: string[] = [];\n if (opts.rename) parts.push(`rename to ${opts.rename}`);\n if (\"description\" in opts && opts.description !== undefined) parts.push(\"description\");\n if (\"schema\" in opts && opts.schema !== undefined) parts.push(\"schema\");\n if (\"protected\" in opts && opts.protected !== undefined) {\n parts.push(opts.protected ? \"protect\" : \"unprotect\");\n }\n return `clef ${kind} edit ${name}: ${parts.join(\", \") || \"no-op\"}`;\n }\n}\n\n/**\n * Build a new object that contains the same keys as `obj`, in the same order,\n * but with the entry `oldKey` replaced by `newKey` (same value). Used for\n * env-rename cascades through SI environment maps so the YAML diff stays clean.\n */\nfunction renameKeyPreservingOrder(\n obj: Record<string, unknown>,\n oldKey: string,\n newKey: string,\n): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const k of Object.keys(obj)) {\n out[k === oldKey ? newKey : k] = obj[k];\n }\n return out;\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 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 { FilePackOutput } from \"./output\";\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 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 };\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\n // Use provided output backend, or fall back to FilePackOutput for backward compat\n const output = config.output ?? new FilePackOutput(config.outputPath ?? \"artifact.json\");\n await output.write(artifact, json);\n\n const keys = Object.keys(resolved.values);\n return {\n outputPath: config.outputPath ?? \"\",\n namespaceCount: resolved.identity.namespaces.length,\n keyCount: keys.length,\n keys,\n artifactSize: Buffer.byteLength(json, \"utf-8\"),\n revision: artifact.revision,\n };\n }\n}\n", "import * as fs from \"fs\";\nimport * as path from \"path\";\nimport type { PackOutput, PackedArtifact } from \"./types\";\n\n/** Writes the packed artifact to a local file (atomic rename). */\nexport class FilePackOutput implements PackOutput {\n constructor(private readonly outputPath: string) {}\n\n async write(_artifact: PackedArtifact, json: string): Promise<void> {\n const outputDir = path.dirname(this.outputPath);\n if (!fs.existsSync(outputDir)) {\n fs.mkdirSync(outputDir, { recursive: true });\n }\n const tmpOutput = `${this.outputPath}.tmp.${process.pid}`;\n fs.writeFileSync(tmpOutput, json, \"utf-8\");\n fs.renameSync(tmpOutput, this.outputPath);\n }\n}\n\n/** Keeps the packed artifact in memory. Used by `clef serve` to avoid disk I/O. */\nexport class MemoryPackOutput implements PackOutput {\n private _artifact: PackedArtifact | null = null;\n private _json: string | null = null;\n\n async write(artifact: PackedArtifact, json: string): Promise<void> {\n this._artifact = artifact;\n this._json = json;\n }\n\n /** The packed artifact, or null if `write` hasn't been called. */\n get artifact(): PackedArtifact | null {\n return this._artifact;\n }\n\n /** The serialized JSON, or null if `write` hasn't been called. */\n get json(): string | null {\n return this._json;\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 * Key names are intentionally excluded from the signing payload \u2014 they are\n * not present in the envelope and are derived from decrypted values at runtime.\n */\nexport function buildSigningPayload(artifact: PackedArtifact): Buffer {\n const fields = [\n \"clef-sig-v3\",\n String(artifact.version),\n artifact.identity,\n artifact.environment,\n artifact.revision,\n artifact.packedAt,\n artifact.ciphertextHash,\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", "import { ClefError } from \"../types\";\nimport type { KmsEnvelope, PackedArtifact, SignatureAlgorithm } from \"./types\";\n\n/** Discriminated union returned by {@link validatePackedArtifact}. */\nexport type ValidationResult<T> = { valid: true; value: T } | { valid: false; reason: string };\n\n/**\n * Thrown by {@link assertPackedArtifact} when an unknown value does not\n * conform to the {@link PackedArtifact} shape. Follows the {@link ClefError}\n * convention so callers can catch uniformly.\n */\nexport class InvalidArtifactError extends ClefError {\n constructor(message: string) {\n super(\n message,\n \"Ensure the artifact was produced by a compatible clef version and was not tampered with.\",\n );\n this.name = \"InvalidArtifactError\";\n }\n}\n\nconst VALID_SIGNATURE_ALGORITHMS: readonly SignatureAlgorithm[] = [\"Ed25519\", \"ECDSA_SHA256\"];\n\n/**\n * Type predicate for {@link KmsEnvelope}. Verifies shape only \u2014 does not\n * check semantic validity (e.g. non-empty strings, valid base64).\n */\nexport function isKmsEnvelope(x: unknown): x is KmsEnvelope {\n if (typeof x !== \"object\" || x === null) return false;\n const o = x as Record<string, unknown>;\n return (\n typeof o.provider === \"string\" &&\n typeof o.keyId === \"string\" &&\n typeof o.wrappedKey === \"string\" &&\n typeof o.algorithm === \"string\" &&\n typeof o.iv === \"string\" &&\n typeof o.authTag === \"string\"\n );\n}\n\n/**\n * Validate an unknown value as a {@link PackedArtifact} and return a\n * discriminated result with a field-level reason on failure. Semantic\n * checks (non-empty strings, signature validity, expiry) live in the\n * runtime's poller, not here \u2014 this is a pure shape guard.\n */\nexport function validatePackedArtifact(x: unknown): ValidationResult<PackedArtifact> {\n if (typeof x !== \"object\" || x === null) {\n return { valid: false, reason: \"expected object\" };\n }\n const o = x as Record<string, unknown>;\n\n if (o.version !== 1) {\n return { valid: false, reason: `unsupported version: ${String(o.version)}` };\n }\n if (typeof o.identity !== \"string\") {\n return { valid: false, reason: \"missing or invalid 'identity' (expected string)\" };\n }\n if (typeof o.environment !== \"string\") {\n return { valid: false, reason: \"missing or invalid 'environment' (expected string)\" };\n }\n if (typeof o.packedAt !== \"string\") {\n return { valid: false, reason: \"missing or invalid 'packedAt' (expected string)\" };\n }\n if (typeof o.revision !== \"string\") {\n return { valid: false, reason: \"missing or invalid 'revision' (expected string)\" };\n }\n if (typeof o.ciphertextHash !== \"string\") {\n return { valid: false, reason: \"missing or invalid 'ciphertextHash' (expected string)\" };\n }\n if (typeof o.ciphertext !== \"string\") {\n return { valid: false, reason: \"missing or invalid 'ciphertext' (expected string)\" };\n }\n if (o.envelope !== undefined && !isKmsEnvelope(o.envelope)) {\n return { valid: false, reason: \"invalid 'envelope' (expected KmsEnvelope shape)\" };\n }\n if (o.expiresAt !== undefined && typeof o.expiresAt !== \"string\") {\n return { valid: false, reason: \"invalid 'expiresAt' (expected string)\" };\n }\n if (o.revokedAt !== undefined && typeof o.revokedAt !== \"string\") {\n return { valid: false, reason: \"invalid 'revokedAt' (expected string)\" };\n }\n if (o.signature !== undefined && typeof o.signature !== \"string\") {\n return { valid: false, reason: \"invalid 'signature' (expected string)\" };\n }\n if (\n o.signatureAlgorithm !== undefined &&\n !VALID_SIGNATURE_ALGORITHMS.includes(o.signatureAlgorithm as SignatureAlgorithm)\n ) {\n return {\n valid: false,\n reason: `invalid 'signatureAlgorithm': expected one of ${VALID_SIGNATURE_ALGORITHMS.join(\", \")}`,\n };\n }\n\n return { valid: true, value: o as unknown as PackedArtifact };\n}\n\n/** Type predicate for {@link PackedArtifact}. */\nexport function isPackedArtifact(x: unknown): x is PackedArtifact {\n return validatePackedArtifact(x).valid;\n}\n\n/**\n * Assertion form of {@link validatePackedArtifact}. Throws with a\n * context-prefixed error message on invalid input. Intended for parse\n * boundaries (after `JSON.parse`) where a malformed artifact should be\n * a hard failure.\n */\nexport function assertPackedArtifact(x: unknown, context?: string): asserts x is PackedArtifact {\n const result = validatePackedArtifact(x);\n if (!result.valid) {\n const prefix = context ? `${context}: ` : \"\";\n throw new InvalidArtifactError(`${prefix}${result.reason}`);\n }\n}\n", "import type { PackBackend, PackBackendFactory } from \"./types\";\n\n/**\n * Registry of pack backends. The CLI registers `clef-native` eagerly and\n * may register additional backends discovered via optional plugin packages\n * (e.g. `@clef-sh/pack-vault`). Embedders (tests, IaC synth hooks) may\n * construct a registry directly and register only the backends they need.\n */\nexport class PackBackendRegistry {\n private readonly factories = new Map<string, PackBackendFactory>();\n\n /**\n * Register a backend factory under the given id. Throws if a backend\n * with the same id is already registered \u2014 collisions surface as a clear\n * error rather than a silent overwrite.\n */\n register(id: string, factory: PackBackendFactory): void {\n if (this.factories.has(id)) {\n throw new Error(`Pack backend \"${id}\" is already registered.`);\n }\n this.factories.set(id, factory);\n }\n\n /** Whether a backend with the given id has been registered. */\n has(id: string): boolean {\n return this.factories.has(id);\n }\n\n /** Registered backend ids, in registration order. */\n list(): string[] {\n return [...this.factories.keys()];\n }\n\n /**\n * Resolve a backend by id. Throws if unknown. Factories may be async so\n * a plugin package can defer construction (e.g. loading a heavy SDK only\n * when the backend is actually used).\n */\n async resolve(id: string): Promise<PackBackend> {\n const factory = this.factories.get(id);\n if (!factory) {\n const available = this.list().join(\", \") || \"(none)\";\n throw new Error(`Unknown pack backend \"${id}\". Available backends: ${available}`);\n }\n return await factory();\n }\n}\n", "import { ArtifactPacker } from \"../../artifact/packer\";\nimport { FilePackOutput } from \"../../artifact/output\";\nimport { MatrixManager } from \"../../matrix/manager\";\nimport type { PackOutput } from \"../../artifact/types\";\nimport type { BackendPackResult, PackBackend, PackRequest } from \"../types\";\n\n/**\n * Options specific to the {@link JsonEnvelopeBackend}. At least one of\n * `outputPath` or `output` must be provided; `signingKey` and\n * `signingKmsKeyId` are mutually exclusive.\n */\nexport interface JsonEnvelopeOptions {\n /** Local file path for the artifact JSON. Used when `output` is not provided. */\n outputPath?: string;\n /**\n * Pre-constructed output backend. Takes precedence over `outputPath`.\n * Used by `clef serve` with {@link MemoryPackOutput} to avoid disk I/O.\n */\n output?: PackOutput;\n /** Ed25519 private key for artifact signing (base64 DER PKCS8). */\n signingKey?: string;\n /** KMS asymmetric signing key ARN/ID (ECDSA_SHA_256). Mutually exclusive with signingKey. */\n signingKmsKeyId?: string;\n}\n\n/**\n * Default pack backend. Produces the canonical Clef JSON artifact\n * envelope (age-encrypted for age identities, AES-256-GCM with\n * KMS-wrapped DEK for KMS-envelope identities) and writes it to\n * a file or a provided output adapter.\n */\nexport class JsonEnvelopeBackend implements PackBackend {\n readonly id = \"json-envelope\";\n readonly description = \"Write the Clef JSON artifact envelope to a local file (default).\";\n\n validateOptions(raw: Record<string, unknown>): void {\n const opts = raw as JsonEnvelopeOptions;\n if (opts.signingKey && opts.signingKmsKeyId) {\n throw new Error(\n \"Cannot specify both signingKey (Ed25519) and signingKmsKeyId (KMS). Choose one.\",\n );\n }\n if (!opts.outputPath && !opts.output) {\n throw new Error(\"json-envelope backend requires an 'outputPath' or 'output' option.\");\n }\n }\n\n async pack(req: PackRequest): Promise<BackendPackResult> {\n const opts = req.backendOptions as JsonEnvelopeOptions;\n const packer = new ArtifactPacker(\n req.services.encryption,\n new MatrixManager(),\n req.services.kms,\n );\n const output =\n opts.output ?? (opts.outputPath ? new FilePackOutput(opts.outputPath) : undefined);\n const result = await packer.pack(\n {\n identity: req.identity,\n environment: req.environment,\n outputPath: opts.outputPath,\n output,\n ttl: req.ttl,\n signingKey: opts.signingKey,\n signingKmsKeyId: opts.signingKmsKeyId,\n },\n req.manifest,\n req.repoRoot,\n );\n return {\n ...result,\n backend: this.id,\n details: {\n outputPath: opts.outputPath ?? null,\n },\n };\n }\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", "import * as path from \"path\";\nimport * as YAML from \"yaml\";\nimport {\n BackendType,\n ClefManifest,\n EncryptionBackend,\n EnvironmentSopsOverride,\n MatrixCell,\n SopsMetadata,\n} from \"../types\";\nimport { MatrixManager } from \"../matrix/manager\";\nimport { CLEF_MANIFEST_FILENAME } from \"../manifest/parser\";\nimport { readManifestYaml, writeManifestYaml } from \"../manifest/io\";\nimport { TransactionManager } from \"../tx\";\n\nexport interface MigrationTarget {\n backend: BackendType;\n /** Key identifier: ARN, resource ID, URL, or fingerprint. Undefined for age. */\n key?: string;\n}\n\nexport interface MigrationOptions {\n target: MigrationTarget;\n /** Scope migration to a single environment. */\n environment?: string;\n /** Preview changes without modifying files. */\n dryRun?: boolean;\n /** Skip post-migration verification. */\n skipVerify?: boolean;\n}\n\nexport interface MigrationResult {\n migratedFiles: string[];\n skippedFiles: string[];\n rolledBack: boolean;\n error?: string;\n verifiedFiles: string[];\n warnings: string[];\n}\n\nexport interface MigrationProgressEvent {\n type: \"skip\" | \"migrate\" | \"verify\" | \"info\" | \"warn\";\n file?: string;\n message: string;\n}\n\n// \u2500\u2500 Key-field mapping \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 * Maps a SOPS backend to the manifest field that holds its key identifier.\n * `undefined` for backends that don't take a key (age).\n *\n * Exported so other backend-aware commands (clef reset, etc.) can\n * honour the same field layout without duplicating the mapping.\n */\nexport const BACKEND_KEY_FIELDS: Record<BackendType, keyof EnvironmentSopsOverride | undefined> = {\n age: undefined,\n awskms: \"aws_kms_arn\",\n gcpkms: \"gcp_kms_resource_id\",\n azurekv: \"azure_kv_url\",\n pgp: \"pgp_fingerprint\",\n hsm: \"pkcs11_uri\",\n};\n\nconst ALL_KEY_FIELDS = Object.values(BACKEND_KEY_FIELDS).filter(\n (v): v is keyof EnvironmentSopsOverride => v !== undefined,\n);\n\n/**\n * Build a per-environment SOPS override block.\n * Shared by BackendMigrator and ResetManager so the key-field mapping\n * lives in one place.\n */\nexport function buildSopsOverride(\n backend: BackendType,\n key: string | undefined,\n): EnvironmentSopsOverride {\n const override: EnvironmentSopsOverride = { backend };\n const keyField = BACKEND_KEY_FIELDS[backend];\n if (keyField && key) {\n (override as unknown as Record<string, unknown>)[keyField] = key;\n }\n return override;\n}\n\nfunction metadataMatchesTarget(meta: SopsMetadata, target: MigrationTarget): boolean {\n if (meta.backend !== target.backend) return false;\n if (!target.key) return true;\n return meta.recipients.includes(target.key);\n}\n\n// \u2500\u2500 BackendMigrator \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 class BackendMigrator {\n private readonly decryptBackend: EncryptionBackend;\n private readonly encryptBackend: EncryptionBackend;\n\n /**\n * @param encryption - Backend used for both decrypt and encrypt (standard case).\n * @param matrixManager - Matrix resolver.\n * @param tx - Transaction manager that wraps the migration in a single git commit\n * so a partial failure rolls back ALL files + the manifest via `git reset --hard`.\n * @param targetEncryption - Optional separate backend for encrypt. Use when migrating\n * from cloud (decrypt via keyservice) to another backend (encrypt via local credentials).\n */\n constructor(\n encryption: EncryptionBackend,\n private readonly matrixManager: MatrixManager,\n private readonly tx: TransactionManager,\n targetEncryption?: EncryptionBackend,\n ) {\n this.decryptBackend = encryption;\n this.encryptBackend = targetEncryption ?? encryption;\n }\n\n async migrate(\n manifest: ClefManifest,\n repoRoot: string,\n options: MigrationOptions,\n onProgress?: (event: MigrationProgressEvent) => void,\n ): Promise<MigrationResult> {\n const { target, environment, dryRun, skipVerify } = options;\n\n // \u2500\u2500 Phase 0: Validate \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 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 const allCells = this.matrixManager.resolveMatrix(manifest, repoRoot).filter((c) => c.exists);\n const targetCells = environment\n ? allCells.filter((c) => c.environment === environment)\n : allCells;\n\n if (targetCells.length === 0) {\n return {\n migratedFiles: [],\n skippedFiles: [],\n rolledBack: false,\n verifiedFiles: [],\n warnings: [\"No encrypted files found to migrate.\"],\n };\n }\n\n // Classify cells: skip those already on the target backend+key\n const toMigrate: MatrixCell[] = [];\n const skippedFiles: string[] = [];\n\n for (const cell of targetCells) {\n const meta = await this.decryptBackend.getMetadata(cell.filePath);\n if (metadataMatchesTarget(meta, target)) {\n skippedFiles.push(cell.filePath);\n onProgress?.({\n type: \"skip\",\n file: cell.filePath,\n message: `${cell.namespace}/${cell.environment}: already on ${target.backend}, skipping`,\n });\n } else {\n toMigrate.push(cell);\n }\n }\n\n if (toMigrate.length === 0) {\n return {\n migratedFiles: [],\n skippedFiles,\n rolledBack: false,\n verifiedFiles: [],\n warnings: [\"All files already use the target backend and key. Nothing to migrate.\"],\n };\n }\n\n // \u2500\u2500 Phase 1: Dry run \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 if (dryRun) {\n const warnings: string[] = [];\n for (const cell of toMigrate) {\n onProgress?.({\n type: \"info\",\n file: cell.filePath,\n message: `Would migrate ${cell.namespace}/${cell.environment} to ${target.backend}`,\n });\n }\n if (environment) {\n warnings.push(\n `Would add per-environment backend override for '${environment}' \u2192 ${target.backend}`,\n );\n } else {\n warnings.push(`Would update global default_backend \u2192 ${target.backend}`);\n }\n this.checkAgeRecipientsWarning(manifest, target, environment, warnings);\n return {\n migratedFiles: [],\n skippedFiles,\n rolledBack: false,\n verifiedFiles: [],\n warnings,\n };\n }\n\n // \u2500\u2500 Phase 2: Migrate inside a transaction \u2500\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 transaction wraps both the manifest update and every cell\n // re-encrypt. A failure mid-loop triggers `git reset --hard` to the\n // pre-migration state, which is what the previous in-method\n // backup/rollback machinery did by hand.\n\n const migratedFiles: string[] = [];\n let migrationFailed = false;\n let migrationError: Error | undefined;\n\n try {\n await this.tx.run(repoRoot, {\n description: environment\n ? `clef migrate-backend ${target.backend}: ${environment}`\n : `clef migrate-backend ${target.backend}`,\n paths: [\n ...toMigrate.map((c) => path.relative(repoRoot, c.filePath)),\n CLEF_MANIFEST_FILENAME,\n ],\n mutate: async () => {\n const doc = readManifestYaml(repoRoot);\n this.updateManifestDoc(doc, target, environment);\n writeManifestYaml(repoRoot, doc);\n\n const updatedManifest = YAML.parse(YAML.stringify(doc)) as ClefManifest;\n\n for (const cell of toMigrate) {\n onProgress?.({\n type: \"migrate\",\n file: cell.filePath,\n message: `Migrating ${cell.namespace}/${cell.environment}...`,\n });\n\n const decrypted = await this.decryptBackend.decrypt(cell.filePath);\n await this.encryptBackend.encrypt(\n cell.filePath,\n decrypted.values,\n updatedManifest,\n cell.environment,\n );\n\n migratedFiles.push(cell.filePath);\n }\n },\n });\n } catch (err) {\n migrationFailed = true;\n migrationError = err as Error;\n onProgress?.({\n type: \"warn\",\n message: `Migration failed: ${migrationError.message}. All changes rolled back.`,\n });\n }\n\n if (migrationFailed) {\n return {\n migratedFiles: [],\n skippedFiles,\n rolledBack: true,\n error: migrationError!.message,\n verifiedFiles: [],\n warnings: [\"All changes have been rolled back.\"],\n };\n }\n\n // \u2500\u2500 Phase 3: Verify \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 verifiedFiles: string[] = [];\n const warnings: string[] = [];\n\n if (!skipVerify) {\n for (const cell of toMigrate) {\n try {\n onProgress?.({\n type: \"verify\",\n file: cell.filePath,\n message: `Verifying ${cell.namespace}/${cell.environment}...`,\n });\n await this.encryptBackend.decrypt(cell.filePath);\n verifiedFiles.push(cell.filePath);\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : String(err);\n warnings.push(\n `Verification failed for ${cell.namespace}/${cell.environment}: ${errorMsg}`,\n );\n }\n }\n }\n\n this.checkAgeRecipientsWarning(manifest, target, environment, warnings);\n\n return { migratedFiles, skippedFiles, rolledBack: false, verifiedFiles, warnings };\n }\n\n // \u2500\u2500 Private helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 private updateManifestDoc(\n doc: Record<string, unknown>,\n target: MigrationTarget,\n environment?: string,\n ): void {\n const keyField = BACKEND_KEY_FIELDS[target.backend];\n\n if (environment) {\n // Per-environment override\n const environments = doc.environments as Record<string, unknown>[];\n const envDoc = environments.find(\n (e) => (e as { name: string }).name === environment,\n ) as Record<string, unknown>;\n\n envDoc.sops = buildSopsOverride(target.backend, target.key);\n } else {\n // Global default\n const sops = doc.sops as Record<string, unknown>;\n sops.default_backend = target.backend;\n\n // Clear all key fields, then set the new one\n for (const field of ALL_KEY_FIELDS) {\n delete sops[field];\n }\n if (keyField && target.key) {\n sops[keyField] = target.key;\n }\n }\n }\n\n private checkAgeRecipientsWarning(\n manifest: ClefManifest,\n target: MigrationTarget,\n environment: string | undefined,\n warnings: string[],\n ): void {\n if (target.backend === \"age\") return;\n\n const hasRecipients = environment\n ? manifest.environments.find((e) => e.name === environment)?.recipients?.length\n : manifest.environments.some((e) => e.recipients?.length);\n\n if (hasRecipients) {\n warnings.push(\n \"Per-environment age recipients are no longer used for encryption on the migrated environments. \" +\n \"Consider removing them from clef.yaml if they are no longer needed.\",\n );\n }\n }\n}\n", "import * as path from \"path\";\nimport { BackendType, ClefManifest, EncryptionBackend, MatrixCell } from \"../types\";\nimport { MatrixManager } from \"../matrix/manager\";\nimport { SchemaValidator } from \"../schema/validator\";\nimport { CLEF_MANIFEST_FILENAME } from \"../manifest/parser\";\nimport { readManifestYaml, writeManifestYaml } from \"../manifest/io\";\nimport { markPendingWithRetry, generateRandomValue } from \"../pending/metadata\";\nimport { TransactionManager } from \"../tx\";\nimport { BACKEND_KEY_FIELDS, buildSopsOverride } from \"../migration/backend\";\n\n/**\n * Target scope for a reset operation. The CLI command refuses a naked\n * `clef reset` with no scope \u2014 the user must name what they're destroying.\n */\nexport type ResetScope =\n | { kind: \"env\"; name: string }\n | { kind: \"namespace\"; name: string }\n | { kind: \"cell\"; namespace: string; environment: string };\n\nexport interface ResetOptions {\n scope: ResetScope;\n /**\n * If provided, switch the affected environments to this backend as part\n * of the reset. Written as a per-env SOPS override so other environments\n * are unaffected. When omitted, reset uses whatever backend the manifest\n * currently specifies.\n */\n backend?: BackendType;\n /**\n * Key identifier for KMS backends (ARN, resource ID, URL, fingerprint).\n * Required when `backend` is `awskms`, `gcpkms`, `azurekv`, or `pgp`.\n */\n key?: string;\n /**\n * Explicit key names to scaffold as pending random placeholders. Used\n * when the affected namespace has no schema. Ignored when a schema is\n * present \u2014 the schema's keys are authoritative.\n */\n keys?: string[];\n}\n\nexport interface ResetResult {\n scaffoldedCells: string[];\n pendingKeysByCell: Record<string, string[]>;\n backendChanged: boolean;\n affectedEnvironments: string[];\n}\n\n/**\n * Destructive recovery command. Abandons the current encrypted contents of\n * matrix cells in a target scope and scaffolds fresh empty/placeholder cells\n * using the current manifest backend (or a new one supplied via options).\n *\n * Critical property: this command does NOT attempt to decrypt anything. It\n * exists precisely for the case where decryption is impossible (lost age\n * key, nuked KMS key, deleted cloud env). The scaffold path only needs\n * encrypt access to whatever backend the manifest resolves for each env \u2014\n * which can be freshly provided via `options.backend` + `options.key` as\n * part of the same transaction.\n *\n * Placeholder strategy:\n * - If the affected namespace has a schema, every schema key is scaffolded\n * with a random value and marked pending. User runs `clef set` to refill.\n * - If no schema and `options.keys` is provided, that key list is used.\n * - Otherwise an empty cell (`{}`) is scaffolded.\n *\n * Transaction: the manifest update (when switching backends) and every\n * cell re-scaffold run inside one TransactionManager commit. Any failure\n * rolls back the manifest AND the cell writes via `git reset --hard`.\n */\nexport class ResetManager {\n constructor(\n private readonly matrixManager: MatrixManager,\n private readonly encryption: EncryptionBackend,\n private readonly schemaValidator: SchemaValidator,\n private readonly tx: TransactionManager,\n ) {}\n\n async reset(opts: ResetOptions, manifest: ClefManifest, repoRoot: string): Promise<ResetResult> {\n validateResetScope(opts.scope, manifest);\n validateBackendKeyCombination(opts.backend, opts.key);\n\n const targetCells = this.resolveCells(opts.scope, manifest, repoRoot);\n if (targetCells.length === 0) {\n throw new Error(\n `Reset scope ${describeScope(opts.scope)} matches zero cells. Check the scope name.`,\n );\n }\n\n const affectedEnvs = Array.from(new Set(targetCells.map((c) => c.environment))).sort();\n const affectedNamespaces = Array.from(new Set(targetCells.map((c) => c.namespace)));\n\n // Resolve the per-namespace key plan up front so schema load errors\n // surface before we open a transaction and before the confirmation\n // screen is passed. Also avoids re-loading the same schema for every\n // cell in a namespace-spanning reset.\n const keyPlan = this.resolveKeyPlan(affectedNamespaces, opts.keys, manifest, repoRoot);\n\n // Tx paths must only include files we'll actually create \u2014 `git add`\n // errors on a pathspec that doesn't match anything in the worktree.\n // The manifest is only touched when switching backends; the\n // .clef-meta.yaml sibling is only written when the cell has pending\n // keys; the cell file itself is always rewritten.\n const txPaths: string[] = [];\n if (opts.backend) {\n txPaths.push(CLEF_MANIFEST_FILENAME);\n }\n for (const cell of targetCells) {\n txPaths.push(path.relative(repoRoot, cell.filePath));\n const cellKeys = keyPlan.get(cell.namespace) ?? [];\n if (cellKeys.length > 0) {\n txPaths.push(\n path.relative(repoRoot, cell.filePath.replace(/\\.enc\\.(yaml|json)$/, \".clef-meta.yaml\")),\n );\n }\n }\n\n // Mutable local manifest reference so the scaffold loop sees the new\n // backend after the manifest update inside mutate.\n let effectiveManifest = manifest;\n const scaffoldedCells: string[] = [];\n const pendingKeysByCell: Record<string, string[]> = {};\n\n await this.tx.run(repoRoot, {\n description: describeResetCommit(opts, affectedEnvs, targetCells.length),\n paths: txPaths,\n mutate: async () => {\n if (opts.backend) {\n const doc = readManifestYaml(repoRoot);\n applyBackendOverride(doc, affectedEnvs, opts.backend, opts.key);\n writeManifestYaml(repoRoot, doc);\n effectiveManifest = withBackendOverride(manifest, affectedEnvs, opts.backend, opts.key);\n }\n\n for (const cell of targetCells) {\n const keys = keyPlan.get(cell.namespace) ?? [];\n const placeholders = this.buildPlaceholders(keys);\n\n await this.encryption.encrypt(\n cell.filePath,\n placeholders,\n effectiveManifest,\n cell.environment,\n );\n\n if (keys.length > 0) {\n // Mark every scaffolded key as pending so `clef lint` and the UI\n // show the user which keys need real values.\n await markPendingWithRetry(cell.filePath, keys, \"clef reset\");\n pendingKeysByCell[cell.filePath] = keys;\n }\n scaffoldedCells.push(cell.filePath);\n }\n },\n });\n\n return {\n scaffoldedCells,\n pendingKeysByCell,\n backendChanged: opts.backend !== undefined,\n affectedEnvironments: affectedEnvs,\n };\n }\n\n // \u2500\u2500 Private helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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 * Resolve the scope into an explicit list of cells. Assumes the scope has\n * already been validated by `validateResetScope`. Unlike most other\n * commands, reset includes cells whether or not the file currently exists\n * on disk \u2014 \"reset a namespace\" also re-scaffolds any missing cells under\n * it, which is the natural interpretation of \"reset everything in this\n * scope.\"\n */\n private resolveCells(scope: ResetScope, manifest: ClefManifest, repoRoot: string): MatrixCell[] {\n const allCells = this.matrixManager.resolveMatrix(manifest, repoRoot);\n switch (scope.kind) {\n case \"env\":\n return allCells.filter((c) => c.environment === scope.name);\n case \"namespace\":\n return allCells.filter((c) => c.namespace === scope.name);\n case \"cell\":\n return allCells.filter(\n (c) => c.namespace === scope.namespace && c.environment === scope.environment,\n );\n }\n }\n\n /**\n * Build the placeholder values for a new cell from a pre-resolved key list.\n * The list is computed once per namespace by `resolveKeyPlan` so schema\n * files aren't re-read for every cell in a namespace-spanning reset.\n */\n private buildPlaceholders(keyNames: string[]): Record<string, string> {\n const values: Record<string, string> = {};\n for (const keyName of keyNames) {\n values[keyName] = generateRandomValue();\n }\n return values;\n }\n\n /**\n * Decide the scaffold key list for each affected namespace exactly once.\n *\n * - Namespace has a schema \u2192 every schema key (schema errors propagate;\n * a corrupt schema is a configuration problem, not a silent fallback).\n * - No schema and `--keys` provided \u2192 that list.\n * - Otherwise \u2192 empty, user fills via `clef set`.\n */\n private resolveKeyPlan(\n namespaces: string[],\n explicitKeys: string[] | undefined,\n manifest: ClefManifest,\n repoRoot: string,\n ): Map<string, string[]> {\n const plan = new Map<string, string[]>();\n for (const namespace of namespaces) {\n const nsDef = manifest.namespaces.find((n) => n.name === namespace);\n if (nsDef?.schema) {\n const schema = this.schemaValidator.loadSchema(path.join(repoRoot, nsDef.schema));\n plan.set(namespace, Object.keys(schema.keys));\n continue;\n }\n plan.set(namespace, explicitKeys && explicitKeys.length > 0 ? [...explicitKeys] : []);\n }\n return plan;\n }\n}\n\n/** Human-readable description of a reset scope for commit messages and errors. */\nexport function describeScope(scope: ResetScope): string {\n switch (scope.kind) {\n case \"env\":\n return `env ${scope.name}`;\n case \"namespace\":\n return `namespace ${scope.name}`;\n case \"cell\":\n return `${scope.namespace}/${scope.environment}`;\n }\n}\n\n/**\n * Validate a reset scope against the manifest. Exported so the CLI can\n * reject a bad scope *before* prompting for destructive confirmation \u2014\n * otherwise the user is asked to confirm destroying something, types \"y\",\n * and only then finds out the name was wrong. The ResetManager re-uses\n * this as the authoritative check at the top of `reset()`.\n */\nexport function validateResetScope(\n scope: ResetScope,\n manifest: { environments: { name: string }[]; namespaces: { name: string }[] },\n): void {\n switch (scope.kind) {\n case \"env\":\n if (!manifest.environments.some((e) => e.name === scope.name)) {\n throw new Error(\n `Environment '${scope.name}' not found in manifest. ` +\n `Available: ${manifest.environments.map((e) => e.name).join(\", \")}`,\n );\n }\n return;\n case \"namespace\":\n if (!manifest.namespaces.some((n) => n.name === scope.name)) {\n throw new Error(\n `Namespace '${scope.name}' not found in manifest. ` +\n `Available: ${manifest.namespaces.map((n) => n.name).join(\", \")}`,\n );\n }\n return;\n case \"cell\":\n if (!manifest.namespaces.some((n) => n.name === scope.namespace)) {\n throw new Error(`Namespace '${scope.namespace}' not found in manifest.`);\n }\n if (!manifest.environments.some((e) => e.name === scope.environment)) {\n throw new Error(`Environment '${scope.environment}' not found in manifest.`);\n }\n return;\n }\n}\n\nfunction validateBackendKeyCombination(\n backend: BackendType | undefined,\n key: string | undefined,\n): void {\n if (!backend) return;\n const keyField = BACKEND_KEY_FIELDS[backend];\n if (keyField && !key) {\n throw new Error(`Backend '${backend}' requires a key. Pass --key <keyId>.`);\n }\n if (!keyField && key) {\n throw new Error(`Backend '${backend}' does not take a key.`);\n }\n}\n\nfunction describeResetCommit(opts: ResetOptions, envs: string[], cellCount: number): string {\n const scopeLabel = describeScope(opts.scope);\n const backendLabel = opts.backend ? `: switch ${envs.join(\",\")} to ${opts.backend}` : \"\";\n return `clef reset ${scopeLabel}${backendLabel} (${cellCount} cell${cellCount === 1 ? \"\" : \"s\"})`;\n}\n\n/**\n * Mutate a manifest YAML doc in place to set a per-env backend override\n * on every environment in `envNames`. Matches the shape BackendMigrator\n * uses for its non-destructive migration path.\n */\nfunction applyBackendOverride(\n doc: Record<string, unknown>,\n envNames: string[],\n backend: BackendType,\n key: string | undefined,\n): void {\n const environments = doc.environments as Record<string, unknown>[];\n\n for (const envName of envNames) {\n const envDoc = environments.find((e) => (e as { name: string }).name === envName) as\n | Record<string, unknown>\n | undefined;\n if (!envDoc) continue;\n envDoc.sops = buildSopsOverride(backend, key);\n }\n}\n\n/**\n * Return a new in-memory ClefManifest with backend overrides applied to the\n * given environments. Used so the scaffold step sees the new backend without\n * needing to re-read and re-parse the manifest from disk.\n */\nfunction withBackendOverride(\n manifest: ClefManifest,\n envNames: string[],\n backend: BackendType,\n key: string | undefined,\n): ClefManifest {\n const envSet = new Set(envNames);\n return {\n ...manifest,\n environments: manifest.environments.map((env) =>\n envSet.has(env.name) ? { ...env, sops: buildSopsOverride(backend, key) } : env,\n ),\n };\n}\n", "import * as path from \"path\";\nimport { ClefManifest, EncryptionBackend } from \"../types\";\nimport { MatrixManager } from \"../matrix/manager\";\nimport { TransactionManager } from \"../tx\";\nimport { readSopsKeyNames } from \"../sops/keys\";\nimport { markPendingWithRetry, generateRandomValue } from \"../pending/metadata\";\n\nexport interface SyncOptions {\n /** Target namespace, or undefined to sync all namespaces. */\n namespace?: string;\n /** Compute the plan but skip the transaction. */\n dryRun?: boolean;\n}\n\nexport interface SyncCellPlan {\n namespace: string;\n environment: string;\n filePath: string;\n missingKeys: string[];\n isProtected: boolean;\n}\n\nexport interface SyncPlan {\n cells: SyncCellPlan[];\n totalKeys: number;\n hasProtectedEnvs: boolean;\n}\n\nexport interface SyncResult {\n modifiedCells: string[];\n scaffoldedKeys: Record<string, string[]>;\n totalKeysScaffolded: number;\n}\n\n/**\n * Fills gaps in the namespace \u00D7 environment matrix by scaffolding missing\n * keys with random pending values.\n *\n * For a given namespace, computes the union of all keys across every\n * environment, then adds any absent keys to the environments where they\n * are missing. Each new key gets a cryptographically random placeholder\n * and is marked pending so the user knows to replace it before deploying.\n *\n * Detection uses {@link readSopsKeyNames} \u2014 plaintext key names from SOPS\n * YAML with no decryption. Mutation decrypts, merges, re-encrypts, and\n * marks pending inside a single {@link TransactionManager} commit.\n */\nexport class SyncManager {\n constructor(\n private readonly matrixManager: MatrixManager,\n private readonly encryption: EncryptionBackend,\n private readonly tx: TransactionManager,\n ) {}\n\n /**\n * Compute what sync would do without mutating anything.\n */\n async plan(manifest: ClefManifest, repoRoot: string, opts: SyncOptions): Promise<SyncPlan> {\n if (opts.namespace) {\n const exists = manifest.namespaces.some((n) => n.name === opts.namespace);\n if (!exists) {\n throw new Error(`Namespace '${opts.namespace}' not found in manifest.`);\n }\n }\n\n const allCells = this.matrixManager.resolveMatrix(manifest, repoRoot);\n const existingCells = allCells.filter((c) => c.exists);\n\n // Filter to target namespace(s)\n const targetCells = opts.namespace\n ? existingCells.filter((c) => c.namespace === opts.namespace)\n : existingCells;\n\n // Group keys by namespace\n const keysByNsEnv: Record<string, Record<string, Set<string>>> = {};\n for (const cell of targetCells) {\n const keys = readSopsKeyNames(cell.filePath);\n if (!keys) continue;\n if (!keysByNsEnv[cell.namespace]) keysByNsEnv[cell.namespace] = {};\n keysByNsEnv[cell.namespace][cell.environment] = new Set(keys);\n }\n\n // Compute union per namespace and identify gaps\n const cells: SyncCellPlan[] = [];\n let totalKeys = 0;\n let hasProtectedEnvs = false;\n\n for (const [nsName, envKeys] of Object.entries(keysByNsEnv)) {\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 cell of targetCells) {\n if (cell.namespace !== nsName) continue;\n const cellKeys = envKeys[cell.environment];\n if (!cellKeys) continue;\n\n const missing = [...allKeys].filter((k) => !cellKeys.has(k));\n if (missing.length === 0) continue;\n\n const isProtected = this.matrixManager.isProtectedEnvironment(manifest, cell.environment);\n if (isProtected) hasProtectedEnvs = true;\n\n cells.push({\n namespace: cell.namespace,\n environment: cell.environment,\n filePath: cell.filePath,\n missingKeys: missing.sort(),\n isProtected,\n });\n totalKeys += missing.length;\n }\n }\n\n return { cells, totalKeys, hasProtectedEnvs };\n }\n\n /**\n * Execute the sync: scaffold missing keys with random pending values.\n *\n * Returns immediately (no-op) when the plan has nothing to do.\n * When `dryRun` is set, returns a result with zero modifications \u2014\n * the caller can inspect the plan via {@link plan} separately.\n */\n async sync(\n manifest: ClefManifest,\n repoRoot: string,\n opts: SyncOptions = {},\n ): Promise<SyncResult> {\n const syncPlan = await this.plan(manifest, repoRoot, opts);\n\n if (opts.dryRun || syncPlan.totalKeys === 0) {\n return { modifiedCells: [], scaffoldedKeys: {}, totalKeysScaffolded: 0 };\n }\n\n const txPaths: string[] = [];\n for (const cell of syncPlan.cells) {\n const rel = path.relative(repoRoot, cell.filePath);\n txPaths.push(rel);\n txPaths.push(rel.replace(/\\.enc\\.(yaml|json)$/, \".clef-meta.yaml\"));\n }\n\n const modifiedCells: string[] = [];\n const scaffoldedKeys: Record<string, string[]> = {};\n\n const nsLabel = opts.namespace ?? \"all\";\n const envCount = new Set(syncPlan.cells.map((c) => c.environment)).size;\n\n await this.tx.run(repoRoot, {\n description: `clef sync ${nsLabel}: ${syncPlan.totalKeys} key(s) across ${envCount} environment(s)`,\n paths: txPaths,\n mutate: async () => {\n for (const cell of syncPlan.cells) {\n const decrypted = await this.encryption.decrypt(cell.filePath);\n for (const key of cell.missingKeys) {\n decrypted.values[key] = generateRandomValue();\n }\n await this.encryption.encrypt(\n cell.filePath,\n decrypted.values,\n manifest,\n cell.environment,\n );\n await markPendingWithRetry(cell.filePath, cell.missingKeys, \"clef sync\");\n\n const cellLabel = `${cell.namespace}/${cell.environment}`;\n modifiedCells.push(cellLabel);\n scaffoldedKeys[cellLabel] = cell.missingKeys;\n }\n },\n });\n\n return {\n modifiedCells,\n scaffoldedKeys,\n totalKeysScaffolded: syncPlan.totalKeys,\n };\n }\n}\n", "/**\n * TIER 1 MODULE \u2014 Security and correctness critical.\n *\n * The parsed policy is embedded verbatim in compliance artifacts and hashed\n * for cross-repo drift detection. A validation slip here ships a corrupt\n * policy snapshot to every downstream consumer and breaks reproducibility of\n * older artifacts via hash mismatch. Before 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 { PolicyValidationError } from \"../types\";\nimport { DEFAULT_POLICY, PolicyDocument, PolicyRotationConfig } from \"./types\";\n\n/** Canonical filename for the Clef policy file, relative to the repo root. */\nexport const CLEF_POLICY_FILENAME = \".clef/policy.yaml\";\n\nconst SUPPORTED_VERSIONS = [1] as const;\n\n/**\n * Parses and validates `.clef/policy.yaml` files.\n *\n * @example\n * ```ts\n * const parser = new PolicyParser();\n * const policy = parser.load(\".clef/policy.yaml\"); // returns DEFAULT_POLICY if missing\n * ```\n */\nexport class PolicyParser {\n /**\n * Read and validate a policy file from disk.\n *\n * @throws {@link PolicyValidationError} If the file cannot be read, contains\n * invalid YAML, or fails schema validation.\n */\n parse(filePath: string): PolicyDocument {\n let raw: string;\n try {\n raw = fs.readFileSync(filePath, \"utf-8\");\n } catch {\n throw new PolicyValidationError(`Could not read policy file at '${filePath}'.`);\n }\n return this.parseContent(raw);\n }\n\n /**\n * Parse and validate a policy document from a YAML string.\n *\n * @throws {@link PolicyValidationError} If the content is malformed or\n * fails validation.\n */\n parseContent(content: string): PolicyDocument {\n let parsed: unknown;\n try {\n parsed = YAML.parse(content);\n } catch {\n throw new PolicyValidationError(\n \"Policy file contains invalid YAML. Check for syntax errors.\",\n );\n }\n return this.validate(parsed);\n }\n\n /**\n * Load policy from disk, returning {@link DEFAULT_POLICY} if the file does\n * not exist. Any other read or validation error throws.\n */\n load(filePath: string): PolicyDocument {\n if (!fs.existsSync(filePath)) return DEFAULT_POLICY;\n return this.parse(filePath);\n }\n\n private validate(raw: unknown): PolicyDocument {\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n throw new PolicyValidationError(\"Policy file must be a YAML object.\");\n }\n const doc = raw as Record<string, unknown>;\n\n if (!SUPPORTED_VERSIONS.includes(doc.version as 1)) {\n throw new PolicyValidationError(\n `Policy file must declare 'version: 1', got: ${JSON.stringify(doc.version)}.`,\n \"version\",\n );\n }\n\n const rotation = doc.rotation === undefined ? undefined : this.validateRotation(doc.rotation);\n\n return { version: 1, ...(rotation ? { rotation } : {}) };\n }\n\n private validateRotation(raw: unknown): PolicyRotationConfig {\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n throw new PolicyValidationError(\"Policy 'rotation' must be an object.\", \"rotation\");\n }\n const rot = raw as Record<string, unknown>;\n\n const maxAge = rot.max_age_days;\n if (typeof maxAge !== \"number\" || !Number.isFinite(maxAge) || maxAge <= 0) {\n throw new PolicyValidationError(\n \"Policy 'rotation.max_age_days' must be a positive number.\",\n \"rotation.max_age_days\",\n );\n }\n\n const result: PolicyRotationConfig = { max_age_days: maxAge };\n\n if (rot.environments !== undefined) {\n if (\n typeof rot.environments !== \"object\" ||\n rot.environments === null ||\n Array.isArray(rot.environments)\n ) {\n throw new PolicyValidationError(\n \"Policy 'rotation.environments' must be an object keyed by environment name.\",\n \"rotation.environments\",\n );\n }\n const envs: Record<string, { max_age_days: number }> = {};\n for (const [envName, envVal] of Object.entries(rot.environments as Record<string, unknown>)) {\n if (typeof envVal !== \"object\" || envVal === null || Array.isArray(envVal)) {\n throw new PolicyValidationError(\n `Policy 'rotation.environments.${envName}' must be an object.`,\n `rotation.environments.${envName}`,\n );\n }\n const envMaxAge = (envVal as Record<string, unknown>).max_age_days;\n if (typeof envMaxAge !== \"number\" || !Number.isFinite(envMaxAge) || envMaxAge <= 0) {\n throw new PolicyValidationError(\n `Policy 'rotation.environments.${envName}.max_age_days' must be a positive number.`,\n `rotation.environments.${envName}.max_age_days`,\n );\n }\n envs[envName] = { max_age_days: envMaxAge };\n }\n result.environments = envs;\n }\n\n return result;\n }\n}\n", "/**\n * Public types for `.clef/policy.yaml` and the per-file evaluation results\n * produced by {@link PolicyEvaluator}.\n *\n * These types are part of the compliance artifact contract \u2014 renaming or\n * removing any field here breaks downstream consumers (the compliance GitHub\n * Action, dashboards, and audit tooling that re-reads compliance documents).\n * Add fields freely; do not rename or repurpose existing ones without bumping\n * the artifact `schema_version`.\n */\n\nimport { BackendType } from \"../types\";\n\n/** Per-environment override of {@link PolicyRotationConfig.max_age_days}. */\nexport interface PolicyEnvironmentRotation {\n /** Maximum secret age in days before rotation is required for this environment. */\n max_age_days: number;\n}\n\n/** Rotation policy block of {@link PolicyDocument}. */\nexport interface PolicyRotationConfig {\n /** Maximum secret age in days before rotation is required. */\n max_age_days: number;\n /**\n * Per-environment overrides keyed by environment name (must match\n * `clef.yaml`). Takes precedence over the top-level `max_age_days`.\n */\n environments?: Record<string, PolicyEnvironmentRotation>;\n}\n\n/** Parsed contents of `.clef/policy.yaml`. */\nexport interface PolicyDocument {\n version: 1;\n rotation?: PolicyRotationConfig;\n}\n\n/**\n * Per-key rotation verdict inside a {@link FileRotationStatus}. Each entry\n * corresponds to one plaintext key present in the encrypted file.\n *\n * The authoritative signal is `last_rotated_at` from `.clef-meta.yaml`\n * (recorded by `clef set` / `clef import` when a value actually changes).\n * When no record exists, `last_rotated_known: false` and `compliant: false` \u2014\n * unknown rotation state is treated as a policy violation by design.\n */\nexport interface KeyRotationStatus {\n /** Key name as it appears in the cipher (plaintext). */\n key: string;\n /** ISO 8601 of the last recorded rotation, or `null` when unknown. */\n last_rotated_at: string | null;\n /** Whether `.clef-meta.yaml` had a rotation record for this key. */\n last_rotated_known: boolean;\n /** Git identity that performed the last rotation, or `null` when unknown. */\n rotated_by: string | null;\n /** Monotonically increasing counter across rotations, or `0` when unknown. */\n rotation_count: number;\n /** `last_rotated_at + max_age_days`. `null` when `last_rotated_known: false`. */\n rotation_due: string | null;\n /** `true` iff the rotation is known and past due. */\n rotation_overdue: boolean;\n /** `0` when not overdue or unknown. */\n days_overdue: number;\n /** `true` iff `last_rotated_known && !rotation_overdue`. */\n compliant: boolean;\n}\n\n/**\n * Result of evaluating a single encrypted file against a {@link PolicyDocument}.\n *\n * Field names are part of the public compliance artifact contract \u2014 see the\n * notice at the top of this file.\n *\n * The policy gate is driven by per-key rotation state (`keys[*].compliant`).\n * `compliant` on this struct is the AND of the per-key verdicts. File-level\n * rotation fields are intentionally absent \u2014 `sops.lastmodified` is a file\n * freshness signal, not a value-rotation signal, and the two answer different\n * questions (see the rotation policy docs for rationale).\n */\nexport interface FileRotationStatus {\n /** Repo-relative or absolute path the evaluator was given. */\n path: string;\n /** Environment name resolved from the matrix. */\n environment: string;\n backend: BackendType;\n recipients: string[];\n /** ISO 8601 timestamp from `sops.lastmodified`, or the parse-time fallback. */\n last_modified: string;\n /**\n * Whether the underlying SOPS file actually carried a `lastmodified` field.\n * `false` means `last_modified` is a synthetic fallback. Kept as a raw\n * signal for audit consumers; does not gate policy.\n */\n last_modified_known: boolean;\n /** Per-key rotation verdicts. Empty array only for cells that have no keys. */\n keys: KeyRotationStatus[];\n /** AND of `keys[*].compliant`. `true` only when every key is compliant. */\n compliant: boolean;\n}\n\n/**\n * Default policy applied when `.clef/policy.yaml` is absent.\n *\n * **Frozen on purpose.** Compliance artifacts embed the resolved policy and\n * its hash; mutating this object would silently invalidate every previously\n * archived `policy_hash`. Use a fresh object if you need a different default.\n */\nexport const DEFAULT_POLICY: PolicyDocument = Object.freeze({\n version: 1 as const,\n rotation: Object.freeze({ max_age_days: 90 }),\n}) as PolicyDocument;\n", "/**\n * TIER 1 MODULE \u2014 Security and correctness critical.\n *\n * This module produces the per-file rotation verdicts that are aggregated\n * into compliance artifacts and surfaced as PR check results. A logic slip\n * here either silently passes overdue secrets (false-negative compliance)\n * or floods CI with false alarms. Before 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 { SopsMetadata } from \"../types\";\nimport { RotationRecord } from \"../pending/metadata\";\nimport { FileRotationStatus, KeyRotationStatus, PolicyDocument } from \"./types\";\n\nconst MS_PER_DAY = 86_400_000;\n/** Default `max_age_days` applied when policy omits the rotation block entirely. */\nconst DEFAULT_MAX_AGE_DAYS = 90;\n\n/**\n * Evaluates per-key rotation state against a {@link PolicyDocument}.\n *\n * The evaluator is intentionally pure \u2014 it never reads the filesystem and\n * never decrypts. All inputs (file metadata, key names, rotation records)\n * come from the caller.\n */\nexport class PolicyEvaluator {\n constructor(private readonly policy: PolicyDocument) {}\n\n /**\n * Evaluate a single encrypted file's per-key rotation state.\n *\n * @param filePath Repo-relative or absolute path to the encrypted file.\n * @param environment Environment name; selects per-env overrides.\n * @param metadata SOPS metadata for the file (carries last_modified,\n * backend, recipients). The evaluator does not read\n * `last_modified` for the policy gate \u2014 it is echoed\n * into the output for audit consumers only.\n * @param keys Plaintext key names present in the cipher, enumerated\n * from the unencrypted YAML top-level keys (no decrypt\n * required since SOPS stores key names in plaintext).\n * @param rotations Rotation records from `.clef-meta.yaml`. Records for\n * keys not in `keys` are ignored (those are orphans;\n * lint surfaces them as a warning).\n * @param now Reference time. Inject for deterministic tests.\n */\n evaluateFile(\n filePath: string,\n environment: string,\n metadata: SopsMetadata,\n keys: string[],\n rotations: RotationRecord[],\n now: Date = new Date(),\n ): FileRotationStatus {\n const maxAgeDays = this.resolveMaxAgeDays(environment);\n const byKey = new Map(rotations.map((r) => [r.key, r]));\n\n const keyStatuses: KeyRotationStatus[] = keys.map((key) =>\n this.evaluateKey(key, byKey.get(key), maxAgeDays, now),\n );\n\n return {\n path: filePath,\n environment,\n backend: metadata.backend,\n recipients: metadata.recipients,\n last_modified: metadata.lastModified.toISOString(),\n last_modified_known: metadata.lastModifiedPresent !== false,\n keys: keyStatuses,\n // Cell-level compliance is the AND of per-key verdicts. An empty\n // `keys` array (cell with no secrets) is vacuously compliant.\n compliant: keyStatuses.every((k) => k.compliant),\n };\n }\n\n private evaluateKey(\n key: string,\n record: RotationRecord | undefined,\n maxAgeDays: number,\n now: Date,\n ): KeyRotationStatus {\n if (!record) {\n // Unknown rotation state. Per the design rule, unknown = violation \u2014\n // we can't prove the value has been rotated within the window, so we\n // don't claim it.\n return {\n key,\n last_rotated_at: null,\n last_rotated_known: false,\n rotated_by: null,\n rotation_count: 0,\n rotation_due: null,\n rotation_overdue: false,\n days_overdue: 0,\n compliant: false,\n };\n }\n\n const rotationDue = new Date(record.lastRotatedAt.getTime() + maxAgeDays * MS_PER_DAY);\n const rotationOverdue = now.getTime() > rotationDue.getTime();\n const daysOverdue = rotationOverdue\n ? Math.floor((now.getTime() - rotationDue.getTime()) / MS_PER_DAY)\n : 0;\n\n return {\n key,\n last_rotated_at: record.lastRotatedAt.toISOString(),\n last_rotated_known: true,\n rotated_by: record.rotatedBy,\n rotation_count: record.rotationCount,\n rotation_due: rotationDue.toISOString(),\n rotation_overdue: rotationOverdue,\n days_overdue: daysOverdue,\n compliant: !rotationOverdue,\n };\n }\n\n private resolveMaxAgeDays(environment: string): number {\n const envOverride = this.policy.rotation?.environments?.[environment];\n if (envOverride !== undefined) return envOverride.max_age_days;\n return this.policy.rotation?.max_age_days ?? DEFAULT_MAX_AGE_DAYS;\n }\n}\n", "/**\n * TIER 1 MODULE \u2014 Security and correctness critical.\n *\n * This module produces the compliance artifact that downstream tooling\n * (the GitHub Action bot, dashboards, auditors) parses long after the\n * generating run has finished. The artifact's hash is used for cross-repo\n * policy-drift detection \u2014 a non-deterministic hash silently breaks that\n * detection at scale. Before 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 { createHash } from \"crypto\";\nimport { ComplianceDocument, ComplianceSummary, GenerateOptions } from \"./types\";\nimport { FileRotationStatus, PolicyDocument } from \"../policy/types\";\nimport { LintResult } from \"../types\";\nimport { ScanResult } from \"../scanner\";\n\nconst SCHEMA_VERSION = \"1\" as const;\n\n/**\n * Stable, recursive JSON serializer with sorted object keys. `JSON.stringify`\n * preserves insertion order, which is enough for V8 today but not a spec\n * guarantee \u2014 and per-key order leakage from YAML parsers, network DTOs, or\n * future Node versions would silently change `policy_hash` for an unchanged\n * policy. Sorting keys deterministically makes the hash a function of the\n * policy *value*, not its in-memory layout.\n */\nfunction canonicalJson(value: unknown): string {\n if (value === null || typeof value !== \"object\") {\n return JSON.stringify(value);\n }\n if (Array.isArray(value)) {\n return `[${value.map(canonicalJson).join(\",\")}]`;\n }\n const obj = value as Record<string, unknown>;\n const keys = Object.keys(obj).sort();\n const entries = keys.map((k) => `${JSON.stringify(k)}:${canonicalJson(obj[k])}`);\n return `{${entries.join(\",\")}}`;\n}\n\n/**\n * Composes a {@link ComplianceDocument} from already-collected scan, lint,\n * policy-evaluation, and Git context inputs. This class does no I/O \u2014 the\n * caller (the GitHub Action) owns reading `.clef/policy.yaml`, walking the\n * matrix, and invoking the runners.\n */\nexport class ComplianceGenerator {\n generate(opts: GenerateOptions): ComplianceDocument {\n const { sha, repo, policy, scanResult, lintResult, files, now } = opts;\n\n const generated_at = (now ?? new Date()).toISOString();\n const policy_hash = `sha256:${createHash(\"sha256\").update(canonicalJson(policy)).digest(\"hex\")}`;\n\n return {\n schema_version: SCHEMA_VERSION,\n generated_at,\n sha,\n repo,\n policy_hash,\n policy_snapshot: policy,\n summary: this.buildSummary(scanResult, lintResult, files),\n files,\n scan: scanResult,\n lint: lintResult,\n };\n }\n\n /**\n * Compute a {@link ComplianceDocument.policy_hash}-format hash of any\n * {@link PolicyDocument} without generating a full document. Useful for\n * external consumers that want to compare policies across repos.\n */\n static hashPolicy(policy: PolicyDocument): string {\n return `sha256:${createHash(\"sha256\").update(canonicalJson(policy)).digest(\"hex\")}`;\n }\n\n private buildSummary(\n scan: ScanResult,\n lint: LintResult,\n files: FileRotationStatus[],\n ): ComplianceSummary {\n // A cell counts as \"rotation_overdue\" in the summary when ANY key in it\n // is either overdue or of unknown rotation state \u2014 both classes fail the\n // per-key gate and therefore the cell's `compliant` flag.\n const rotationOverdue = files.filter((f) => !f.compliant).length;\n return {\n total_files: files.length,\n compliant: files.filter((f) => f.compliant).length,\n rotation_overdue: rotationOverdue,\n scan_violations: scan.matches.length,\n lint_errors: lint.issues.filter((i) => i.severity === \"error\").length,\n };\n }\n}\n", "/**\n * TIER 1 MODULE \u2014 Security and correctness critical.\n *\n * `runCompliance` is the single entry point that the CLI (`clef policy *`)\n * and every CI integration (the GitHub compliance Action, GitLab pipes,\n * Bitbucket pipelines, CircleCI orbs) call to produce a compliance verdict\n * + artifact for a repository. Both surfaces emit byte-equivalent output\n * for a given input \u2014 local debugging must match CI verdicts.\n *\n * A logic slip here either silently passes overdue / leaking secrets or\n * floods every downstream pipeline with false alarms. Before adding or\n * 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 { ManifestParser } from \"../manifest/parser\";\nimport { MatrixManager } from \"../matrix/manager\";\nimport { SopsClient } from \"../sops/client\";\nimport { LintRunner } from \"../lint/runner\";\nimport { SchemaValidator } from \"../schema/validator\";\nimport { ScanRunner, ScanResult } from \"../scanner\";\nimport { LintResult, SubprocessRunner } from \"../types\";\nimport { CLEF_POLICY_FILENAME, PolicyParser } from \"../policy/parser\";\nimport { PolicyEvaluator } from \"../policy/evaluator\";\nimport { FileRotationStatus, PolicyDocument } from \"../policy/types\";\nimport { readSopsKeyNames } from \"../sops/keys\";\nimport { getRotations } from \"../pending/metadata\";\nimport { ComplianceGenerator } from \"./generator\";\nimport { ComplianceDocument } from \"./types\";\n\n/**\n * Inputs for {@link runCompliance}.\n *\n * `runner` is required. Compliance only ever shells out to `git` and\n * `sops filestatus` (no stdin piping), so callers can ship a minimal\n * `SubprocessRunner` around `child_process.execFile` \u2014 there is no need\n * for the FIFO workaround that `@clef-sh/cli`'s `NodeSubprocessRunner`\n * uses for encrypt/decrypt.\n */\nexport interface RunComplianceOptions {\n /** Required. See note above. */\n runner: SubprocessRunner;\n /** Repository root. Defaults to `process.cwd()`. */\n repoRoot?: string;\n /** Manifest path. Defaults to `<repoRoot>/clef.yaml`. */\n manifestPath?: string;\n /**\n * Policy path. Defaults to `<repoRoot>/.clef/policy.yaml`. A missing\n * file is not an error \u2014 the run uses {@link DEFAULT_POLICY}.\n */\n policyPath?: string;\n /**\n * Pre-resolved policy. Wins over `policyPath`. Useful when callers\n * have already merged an org-wide policy with the repo's own.\n */\n policy?: PolicyDocument;\n /** Git commit SHA. Auto-detected from CI env / `git rev-parse HEAD`. */\n sha?: string;\n /** `owner/repo`. Auto-detected from CI env / `git remote get-url`. */\n repo?: string;\n /** Subset of the matrix to evaluate. Empty arrays mean \"no filter\". */\n filter?: { namespaces?: string[]; environments?: string[] };\n /** Reference time for `generated_at` and rotation evaluation. */\n now?: Date;\n /** Toggle individual checks. All true by default. */\n include?: { scan?: boolean; lint?: boolean; rotation?: boolean };\n /**\n * Optional override for the sops binary path. When omitted,\n * {@link resolveSopsPath} chooses (CLEF_SOPS_PATH env, bundled package,\n * then bare \"sops\" on PATH). Callers that already resolved the path\n * (the UI server, the CLI) can pass it through to skip re-resolution.\n */\n sopsPath?: string;\n /**\n * Age key material \u2014 inline private key string. When provided, the\n * internal {@link SopsClient} uses it for decrypt-requiring checks\n * (lint, schema validation). When omitted, those checks run without\n * keys and surface decrypt failures as `info`-level lint issues.\n *\n * KMS-encrypted files authenticate via ambient env (AWS_PROFILE, IMDS,\n * etc.) \u2014 no parameter threading required.\n */\n ageKey?: string;\n /** Age key file path. Same semantics as {@link ageKey}. */\n ageKeyFile?: string;\n}\n\nexport interface RunComplianceResult {\n document: ComplianceDocument;\n /**\n * `true` iff zero rotation-overdue files, zero scan violations, and\n * zero lint errors. The CI gate.\n */\n passed: boolean;\n /** Wall-clock duration in milliseconds. */\n durationMs: number;\n}\n\n/** Sentinel returned when neither CI env nor git can supply context. */\nconst UNKNOWN = \"unknown\";\n\n/**\n * Compose all compliance signals for a repository into a single artifact.\n *\n * @throws Errors only on infrastructure failures: missing manifest, invalid\n * policy YAML, missing `sops` binary. Policy violations are normal\n * results and surface as `result.passed === false`.\n */\nexport async function runCompliance(opts: RunComplianceOptions): Promise<RunComplianceResult> {\n const start = Date.now();\n const repoRoot = opts.repoRoot ?? process.cwd();\n const manifestPath = opts.manifestPath ?? path.join(repoRoot, \"clef.yaml\");\n const policyPath = opts.policyPath ?? path.join(repoRoot, CLEF_POLICY_FILENAME);\n const include = {\n scan: opts.include?.scan ?? true,\n lint: opts.include?.lint ?? true,\n rotation: opts.include?.rotation ?? true,\n };\n const now = opts.now ?? new Date();\n\n const manifest = new ManifestParser().parse(manifestPath);\n const policy = opts.policy ?? new PolicyParser().load(policyPath);\n\n // Metadata-only paths (getMetadata, readSopsKeyNames) never decrypt.\n // Lint may decrypt for schema validation \u2014 accept optional age keys from\n // the caller so local invocations with keys available produce clean\n // output. CI (no keys) still works: decrypt failures are downgraded to\n // `info` below. KMS files authenticate via ambient env and need no\n // parameter threading.\n const sopsClient = new SopsClient(opts.runner, opts.ageKeyFile, opts.ageKey, opts.sopsPath);\n const matrixManager = new MatrixManager();\n const schemaValidator = new SchemaValidator();\n\n // Detect git context in parallel with metadata lookups \u2014 both are cheap\n // and independent.\n const [sha, repo, files, scanResult, lintResult] = await Promise.all([\n opts.sha !== undefined ? Promise.resolve(opts.sha) : detectSha(opts.runner, repoRoot),\n opts.repo !== undefined ? Promise.resolve(opts.repo) : detectRepo(opts.runner, repoRoot),\n include.rotation\n ? evaluateMatrix({\n manifest,\n repoRoot,\n policy,\n matrixManager,\n sopsClient,\n filter: opts.filter,\n now,\n })\n : Promise.resolve<FileRotationStatus[]>([]),\n include.scan\n ? new ScanRunner(opts.runner).scan(repoRoot, manifest)\n : Promise.resolve(emptyScan()),\n include.lint\n ? new LintRunner(matrixManager, schemaValidator, sopsClient).run(manifest, repoRoot)\n : Promise.resolve(emptyLint()),\n ]);\n\n // Compliance runs without decryption keys by design (see above). The lint\n // runner emits `severity: \"error\"` for every file it can't decrypt, which\n // would fail the gate on a condition that's environmental, not a repo\n // issue. Downgrade those to `info` so they stay visible in the artifact\n // but don't count toward `lint_errors`. A real decrypt failure on a dev\n // machine (where keys *should* be present) still surfaces as an error via\n // `clef lint` directly \u2014 this adjustment is scoped to compliance only.\n const adjustedLint = downgradeDecryptIssues(lintResult);\n\n const document = new ComplianceGenerator().generate({\n sha,\n repo,\n policy,\n scanResult,\n lintResult: adjustedLint,\n files,\n now,\n });\n\n const passed =\n document.summary.rotation_overdue === 0 &&\n document.summary.scan_violations === 0 &&\n document.summary.lint_errors === 0;\n\n return { document, passed, durationMs: Date.now() - start };\n}\n\ninterface EvaluateMatrixArgs {\n manifest: ReturnType<ManifestParser[\"parse\"]>;\n repoRoot: string;\n policy: PolicyDocument;\n matrixManager: MatrixManager;\n sopsClient: SopsClient;\n filter: RunComplianceOptions[\"filter\"];\n now: Date;\n}\n\nasync function evaluateMatrix(args: EvaluateMatrixArgs): Promise<FileRotationStatus[]> {\n const evaluator = new PolicyEvaluator(args.policy);\n const cells = args.matrixManager\n .resolveMatrix(args.manifest, args.repoRoot)\n .filter((c) => applyFilter(c.namespace, c.environment, args.filter))\n .filter((c) => c.exists);\n\n return Promise.all(\n cells.map(async (cell) => {\n const metadata = await args.sopsClient.getMetadata(cell.filePath);\n const relPath = path.relative(args.repoRoot, cell.filePath).replace(/\\\\/g, \"/\");\n // Enumerate plaintext key names without decrypting \u2014 SOPS stores them\n // in plaintext at the top level. `readSopsKeyNames` returns null on\n // parse failure; treat as an empty cell for policy purposes (lint\n // will separately flag the file as malformed).\n const keys = readSopsKeyNames(cell.filePath) ?? [];\n const rotations = await getRotations(cell.filePath);\n return evaluator.evaluateFile(relPath, cell.environment, metadata, keys, rotations, args.now);\n }),\n );\n}\n\nfunction applyFilter(\n namespace: string,\n environment: string,\n filter: RunComplianceOptions[\"filter\"],\n): boolean {\n if (filter?.namespaces?.length && !filter.namespaces.includes(namespace)) return false;\n if (filter?.environments?.length && !filter.environments.includes(environment)) return false;\n return true;\n}\n\nfunction emptyScan(): ScanResult {\n return {\n matches: [],\n filesScanned: 0,\n filesSkipped: 0,\n unencryptedMatrixFiles: [],\n durationMs: 0,\n };\n}\n\nfunction emptyLint(): LintResult {\n return { issues: [], fileCount: 0, pendingCount: 0 };\n}\n\n/**\n * Reclassify `Failed to decrypt` lint errors as info-level. Keeps the issue\n * in the artifact (so reviewers can see which files weren't readable in this\n * environment) without failing the compliance gate.\n */\nfunction downgradeDecryptIssues(result: LintResult): LintResult {\n return {\n ...result,\n issues: result.issues.map((issue) => {\n if (issue.category === \"sops\" && issue.message.startsWith(\"Failed to decrypt\")) {\n return {\n ...issue,\n severity: \"info\" as const,\n message: `File not decryptable in this environment (compliance runs without keys). Original check: ${issue.message}`,\n };\n }\n return issue;\n }),\n };\n}\n\n/**\n * Resolve the commit SHA in priority order:\n * 1. CI env vars (GitHub, GitLab, Bitbucket, CircleCI)\n * 2. `git rev-parse HEAD`\n * 3. The literal string `\"unknown\"` so the artifact stays well-formed.\n */\nasync function detectSha(runner: SubprocessRunner, repoRoot: string): Promise<string> {\n const env = process.env;\n const fromEnv =\n env.GITHUB_SHA ??\n env.CI_COMMIT_SHA ??\n env.BITBUCKET_COMMIT ??\n env.CIRCLE_SHA1 ??\n env.BUILD_VCS_NUMBER;\n if (fromEnv) return fromEnv;\n\n const result = await runner.run(\"git\", [\"rev-parse\", \"HEAD\"], { cwd: repoRoot });\n if (result.exitCode !== 0) return UNKNOWN;\n const trimmed = result.stdout.trim();\n return trimmed || UNKNOWN;\n}\n\n/**\n * Resolve the `owner/repo` slug in priority order:\n * 1. CI env vars\n * 2. `git remote get-url origin` \u2192 parse last two path segments.\n * Supports both `git@github.com:owner/repo.git` and HTTPS variants.\n * 3. The literal string `\"unknown\"`.\n */\nasync function detectRepo(runner: SubprocessRunner, repoRoot: string): Promise<string> {\n const env = process.env;\n const fromEnv =\n env.GITHUB_REPOSITORY ??\n env.CI_PROJECT_PATH ??\n env.BITBUCKET_REPO_FULL_NAME ??\n (env.CIRCLE_PROJECT_USERNAME && env.CIRCLE_PROJECT_REPONAME\n ? `${env.CIRCLE_PROJECT_USERNAME}/${env.CIRCLE_PROJECT_REPONAME}`\n : undefined);\n if (fromEnv) return fromEnv;\n\n const result = await runner.run(\"git\", [\"remote\", \"get-url\", \"origin\"], { cwd: repoRoot });\n if (result.exitCode !== 0) return UNKNOWN;\n const url = result.stdout.trim();\n // Matches the trailing `owner/repo[.git]` segment of either\n // git@host:owner/repo.git or\n // https://host/owner/repo(.git)\n const match = url.match(/[:/]([^/:]+)\\/([^/]+?)(?:\\.git)?\\/?$/);\n return match ? `${match[1]}/${match[2]}` : UNKNOWN;\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": ["process", "global", "writeFileSync", "fs", "crypto", "path", "fs", "path", "err", "err2", "er", "er2", "fs", "path", "fs", "queue", "closeSync", "path", "options", "cb", "data", "src", "dest", "flags", "go$readdir", "mode", "original", "require_retry", "require_signals", "process", "unload", "emit", "load", "processReallyExit", "processEmit", "fs", "err", "path", "fs", "err", "mtimePrecision", "lock", "isOverThreshold", "file", "fs", "lockfile", "lock", "obj", "fs", "YAML", "writeFileAtomic", "fs", "path", "fs", "path", "fs", "path", "YAML", "fs", "path", "YAML", "fs", "YAML", "fs", "YAML", "path", "path", "fs", "path", "fs", "path", "import_write_file_atomic", "fs", "randomBytes", "YAML", "fs", "path", "fs", "path", "randomBytes", "writeFileAtomic", "fs", "path", "fs", "path", "cached", "path", "path", "path", "YAML", "parse", "parse", "decrypted", "path", "fs", "path", "YAML", "HEADER_COMMENT", "path", "path", "fs", "YAML", "HEADER_COMMENT", "emptyMetadata", "path", "fs", "path", "crypto", "fs", "path", "crypto", "isKmsEnvelope", "path", "YAML", "warnings", "path", "path", "fs", "YAML", "createHash", "path"]
7
7
  }