{"version":3,"sources":["../src/utils/error.ts","../src/utils/args.ts","../src/utils/agent.ts","../src/utils/io.ts","../src/utils/version.ts","../src/core-bridge/index.ts","../src/utils/projection.ts","../src/utils/pdfops.ts","../src/utils/layout.ts","../src/commands/render.ts","../src/utils/keys.ts","../src/commands/sign.ts","../src/utils/asn1-walk.ts","../src/utils/cms-verify.ts","../src/utils/cert-chain.ts","../src/utils/timestamp-verify.ts","../src/utils/fetch-guard.ts","../src/utils/revocation.ts","../src/commands/verify.ts","../src/commands/inspect.ts","../src/commands/merge.ts","../src/utils/pages.ts","../src/commands/split.ts","../src/commands/extract.ts","../src/commands/extract-text.ts","../src/commands/fill.ts","../src/commands/encrypt.ts","../src/commands/decrypt.ts","../src/commands/annotate.ts","../src/utils/governance.ts","../src/commands/govern.ts","../src/utils/colors.ts","../src/commands/batch.ts","../src/commands/completion.ts","../src/commands/schema.ts","../src/commands/doctor.ts","../src/index.ts","../src/utils/config.ts"],"names":["message","resolve","readFile","writeFile","createWriteStream","require","createRequire","_pnInitCrypto","PdfPasswordError","PdfEncryptionUnsupportedError","PDF_A_CONFORMANCE_TARGETS","main","joinPath","dirname","hasFontLoader","loadFontData","pathToFileURL","registerFont","deepMerge","isPlainObject","bytes","buildPDFStreamPageByPage","buildPDFStreamTrue","buildPDFStream","buildPDFBytes","inspectDocumentLayout","buildDocumentPDFStreamPageByPage","buildDocumentPDFStreamTrue","buildDocumentPDFStream","buildDocumentPDFBytes","initNodeCompression","resolvePath","watchFile","unwatchFile","split","createPrivateKey","createSign","parseRsaPrivateKey","der","derDecode","parseCertificate","addSignaturePlaceholder","signPdfBytes","oidToString","bytesToBigInt","createHash","rsaVerifyHash","decodeEcPublicKey","ecdsaVerify","verifyCertSignature","isSelfSigned","OID_TIMESTAMP_TOKEN","isIP","lookup","httpsRequest","httpRequest","bytesEqual","decodeGeneralizedTime","DIGEST_BY_OID","isRef","isArray","isStream","isDict","OID_SHA1","OID_SHA256","isName","nameValue","openPdf","validatePdfUA","readFormFields","encrypt","streamMergedPdfs","mergePdfs","basename","extname","mkdir","streamSplitPdf","join","splitPdf","streamExtractPages","extractPages","extractText","inputBuf","fillForm","flattenForm","FormFieldNotFoundError","FormValueTypeError","FormUnsupportedError","createModifier","buildAnnotationBody","readdir","existsSync","path","readFileSync","c"],"mappings":"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","file":"cli.cjs","sourcesContent":["/**\r\n * Stable, machine-readable error codes surfaced in the agent JSON envelope\r\n * (see {@link ../utils/agent.ts}). These are part of the CLI's public contract:\r\n * they let autonomous callers branch on a failure class without parsing the\r\n * human-readable message. Numeric exit codes (0/1/2) are unchanged.\r\n */\r\nexport const ErrorCode = {\r\n    /** Usage error — missing/invalid flag or argument (exit 2). */\r\n    USAGE: 'E_USAGE',\r\n    /** Invalid input payload (wrong shape, failed validation). */\r\n    INPUT: 'E_INPUT',\r\n    /** Failed to parse JSON / PDF / DER input. */\r\n    PARSE: 'E_PARSE',\r\n    /** Filesystem or stream I/O failure. */\r\n    IO: 'E_IO',\r\n    /** Signing failed (message is always generic — never leaks key material). */\r\n    SIGN: 'E_SIGN',\r\n    /** `verify --strict` found one or more invalid signatures. */\r\n    VERIFY_FAILED: 'E_VERIFY_FAILED',\r\n    /** `inspect --check` assertion failed. */\r\n    CHECK_FAILED: 'E_CHECK_FAILED',\r\n    /** `govern verify-issue` found an AI-governance policy violation. */\r\n    POLICY: 'E_POLICY',\r\n    /** Requested capability is reserved / not yet available. */\r\n    UNSUPPORTED: 'E_UNSUPPORTED',\r\n    /** Encrypted PDF: password missing or incorrect (encrypt/decrypt/read). */\r\n    PASSWORD: 'E_PASSWORD',\r\n    /** Catch-all runtime error (exit 1). */\r\n    RUNTIME: 'E_RUNTIME',\r\n} as const;\r\n\r\nexport type ErrorCodeValue = (typeof ErrorCode)[keyof typeof ErrorCode];\r\n\r\n/**\r\n * CLI Error — thrown by commands when a user-facing error occurs.\r\n *\r\n * Exit code conventions:\r\n *   1 = runtime error (invalid input, I/O failure)\r\n *   2 = usage error  (missing required argument)\r\n *\r\n * The optional `code` is a stable {@link ErrorCode} string used by the agent\r\n * JSON envelope. When omitted it defaults from the exit code (2 → `E_USAGE`,\r\n * otherwise `E_RUNTIME`), so existing call sites keep a sensible code for free.\r\n */\r\nexport class CliError extends Error {\r\n    public readonly exitCode: number;\r\n    public readonly code: ErrorCodeValue;\r\n\r\n    constructor(message: string, exitCode = 1, code?: ErrorCodeValue) {\r\n        super(message);\r\n        this.name = 'CliError';\r\n        this.exitCode = exitCode;\r\n        this.code = code ?? (exitCode === 2 ? ErrorCode.USAGE : ErrorCode.RUNTIME);\r\n    }\r\n}\r\n\r\n/**\r\n * Print a message to stderr and terminate the process.\r\n * Never returns — declared as `never` for type narrowing.\r\n */\r\nexport function die(message: string, exitCode = 1): never {\r\n    process.stderr.write(message + '\\n');\r\n    process.exit(exitCode);\r\n}\r\n\r\n/**\r\n * Emit a single deprecation warning to stderr.\r\n * Idempotent per (name) within a process — repeated calls produce one line.\r\n *\r\n * @param name        - Deprecated flag/feature name (without leading dashes).\r\n * @param replacement - Suggested replacement (e.g. another flag name).\r\n */\r\nconst _deprecateSeen = new Set<string>();\r\nexport function deprecate(name: string, replacement: string): void {\r\n    if (_deprecateSeen.has(name)) return;\r\n    _deprecateSeen.add(name);\r\n    process.stderr.write(`warning: --${name} is deprecated; use ${replacement} instead.\\n`);\r\n}\r\n","import { CliError } from './error.js';\r\n\r\nexport interface ParsedArgs {\r\n    readonly flags: Record<string, string | boolean | readonly string[]>;\r\n    readonly positionals: readonly string[];\r\n}\r\n\r\n/**\r\n * Zero-dependency argument parser.\r\n *\r\n * Supported forms:\r\n *   --flag value      flags.flag = 'value'\r\n *   --flag=value      flags.flag = 'value'\r\n *   -f value          flags.f   = 'value'\r\n *   --flag            flags.flag = true   (boolean)\r\n *   --                stop flag parsing; rest → positionals\r\n *   bare token        positionals[]\r\n *\r\n * When the same long flag is provided more than once with a string value\r\n * (e.g. `--cert-chain a.pem --cert-chain b.pem`), values are collected into\r\n * a `readonly string[]`. Use `getStringFlagAll()` to retrieve them.\r\n */\r\nexport function parseArgs(argv: readonly string[]): ParsedArgs {\r\n    const flags: Record<string, string | boolean | string[]> = {};\r\n    const positionals: string[] = [];\r\n    let i = 0;\r\n\r\n    const setFlag = (key: string, value: string | boolean): void => {\r\n        const existing = flags[key];\r\n        if (existing === undefined || typeof existing === 'boolean') {\r\n            flags[key] = value;\r\n            return;\r\n        }\r\n        if (typeof value === 'boolean') {\r\n            // `--flag value --flag` — keep the existing string array/value\r\n            return;\r\n        }\r\n        // Both old and new are strings → collect into array\r\n        if (typeof existing === 'string') {\r\n            flags[key] = [existing, value];\r\n        } else {\r\n            existing.push(value);\r\n        }\r\n    };\r\n\r\n    while (i < argv.length) {\r\n        const token = argv[i] as string;\r\n\r\n        if (token === '--') {\r\n            // Everything after -- goes into positionals\r\n            i++;\r\n            while (i < argv.length) {\r\n                positionals.push(argv[i] as string);\r\n                i++;\r\n            }\r\n            break;\r\n        }\r\n\r\n        if (token.startsWith('--')) {\r\n            const eqIdx = token.indexOf('=');\r\n            if (eqIdx !== -1) {\r\n                // --flag=value\r\n                const key = token.slice(2, eqIdx);\r\n                const value = token.slice(eqIdx + 1);\r\n                setFlag(key, value);\r\n            } else {\r\n                const key = token.slice(2);\r\n                const next = argv[i + 1];\r\n                if (next !== undefined && !next.startsWith('-')) {\r\n                    // --flag value\r\n                    setFlag(key, next);\r\n                    i++;\r\n                } else {\r\n                    // --flag (boolean)\r\n                    setFlag(key, true);\r\n                }\r\n            }\r\n        } else if (token.startsWith('-') && token.length === 2) {\r\n            // -f value\r\n            const key = token.slice(1);\r\n            const next = argv[i + 1];\r\n            if (next !== undefined && !next.startsWith('-')) {\r\n                setFlag(key, next);\r\n                i++;\r\n            } else {\r\n                setFlag(key, true);\r\n            }\r\n        } else {\r\n            positionals.push(token);\r\n        }\r\n\r\n        i++;\r\n    }\r\n\r\n    return { flags, positionals };\r\n}\r\n\r\n/**\r\n * Return the string value of the first matching flag name, or undefined.\r\n * Throws CliError if the flag is present but its value is a boolean (i.e. no value provided).\r\n * If the flag was provided multiple times, returns the FIRST value; use {@link getStringFlagAll}\r\n * to retrieve every occurrence.\r\n */\r\nexport function getStringFlag(\r\n    flags: ParsedArgs['flags'],\r\n    ...names: string[]\r\n): string | undefined {\r\n    for (const name of names) {\r\n        const value = flags[name];\r\n        if (value === undefined) continue;\r\n        if (typeof value === 'boolean') {\r\n            throw new CliError(`Flag --${name} requires a value.`, 2);\r\n        }\r\n        if (typeof value === 'string') return value;\r\n        return value[0];\r\n    }\r\n    return undefined;\r\n}\r\n\r\n/**\r\n * Return every string value provided for any of the named flags (in order).\r\n * Returns an empty array if no value was provided. Throws CliError if a name\r\n * is present as a boolean flag (i.e. `--flag` without a value).\r\n */\r\nexport function getStringFlagAll(\r\n    flags: ParsedArgs['flags'],\r\n    ...names: string[]\r\n): readonly string[] {\r\n    const out: string[] = [];\r\n    for (const name of names) {\r\n        const value = flags[name];\r\n        if (value === undefined) continue;\r\n        if (typeof value === 'boolean') {\r\n            throw new CliError(`Flag --${name} requires a value.`, 2);\r\n        }\r\n        if (typeof value === 'string') {\r\n            out.push(value);\r\n        } else {\r\n            out.push(...value);\r\n        }\r\n    }\r\n    return out;\r\n}\r\n\r\n/** Return true if any of the given flag names is present (boolean or string value). */\r\nexport function hasFlag(flags: ParsedArgs['flags'], ...names: string[]): boolean {\r\n    return names.some((n) => flags[n] !== undefined);\r\n}\r\n\r\n/**\r\n * Resolve a tri-state boolean flag.\r\n *\r\n * Returns `undefined` when the flag is absent (caller applies its default),\r\n * `true` for a bare `--flag` or `--flag=true|1|yes|on`, and `false` for\r\n * `--flag=false|0|no|off`. Throws CliError on any other value so typos are\r\n * surfaced rather than silently coerced.\r\n */\r\nexport function getBoolFlag(\r\n    flags: ParsedArgs['flags'],\r\n    ...names: string[]\r\n): boolean | undefined {\r\n    for (const name of names) {\r\n        const value = flags[name];\r\n        if (value === undefined) continue;\r\n        if (typeof value === 'boolean') return value;\r\n        const v = (typeof value === 'string' ? value : (value[0] ?? '')).trim().toLowerCase();\r\n        if (v === '' || v === 'true' || v === '1' || v === 'yes' || v === 'on') return true;\r\n        if (v === 'false' || v === '0' || v === 'no' || v === 'off') return false;\r\n        throw new CliError(`Flag --${name} expects a boolean (true/false), got \"${value}\".`, 2);\r\n    }\r\n    return undefined;\r\n}\r\n","// Agent-mode helpers — the cross-cutting \"machine contract\" that lets an\n// autonomous caller (an AI agent, a CI step, another program) drive the CLI\n// deterministically.\n//\n// Contract (see docs/KNOWLEDGE_BASE.md → \"Agent automation contract\"):\n//   • stdout carries the primary artifact (PDF, JSON report, schema, script).\n//   • stderr carries ALL diagnostics, including the agent envelopes below.\n//   • Global `--json` sets PDFNATIVE_JSON=1 (done in index.ts). In that mode:\n//       – on any failure, a single JSON object is written to stderr:\n//           { \"ok\": false, \"command\": <name|null>,\n//             \"error\": { \"code\": \"E_*\", \"message\": \"…\" } }\n//       – render/sign/batch emit a success status envelope to stderr:\n//           { \"ok\": true, \"command\": \"render\", … }\n//   • Numeric exit codes (0/1/2) are unchanged in every mode.\n//\n// This module is intentionally tiny and dependency-free: agent mode is a thin\n// presentation layer over the existing dispatch, never a separate runtime.\n\nimport { CliError, ErrorCode, type ErrorCodeValue } from './error.js';\n\n/** True when the caller passed the global `--json` flag (agent mode). */\nexport function isJsonMode(): boolean {\n    return process.env['PDFNATIVE_JSON'] === '1';\n}\n\n/** True when `--dry-run` is in effect (set by index.ts for the active command). */\nexport function isDryRun(): boolean {\n    return process.env['PDFNATIVE_DRY_RUN'] === '1';\n}\n\nexport interface AgentErrorEnvelope {\n    readonly ok: false;\n    readonly command: string | null;\n    readonly error: {\n        readonly code: ErrorCodeValue;\n        readonly message: string;\n    };\n}\n\nconst DEFAULT_MESSAGE: Readonly<Record<ErrorCodeValue, string>> = {\n    [ErrorCode.USAGE]: 'usage error',\n    [ErrorCode.INPUT]: 'invalid input',\n    [ErrorCode.PARSE]: 'failed to parse input',\n    [ErrorCode.IO]: 'I/O error',\n    [ErrorCode.SIGN]: 'failed to sign PDF',\n    [ErrorCode.VERIFY_FAILED]: 'one or more signatures failed verification',\n    [ErrorCode.CHECK_FAILED]: 'one or more checks failed',\n    [ErrorCode.POLICY]: 'AI-governance policy violation',\n    [ErrorCode.UNSUPPORTED]: 'unsupported operation',\n    [ErrorCode.PASSWORD]: 'missing or incorrect password',\n    [ErrorCode.RUNTIME]: 'runtime error',\n};\n\n/** Build the machine-readable error envelope for any thrown value. */\nexport function buildErrorEnvelope(command: string | null, err: unknown): AgentErrorEnvelope {\n    if (err instanceof CliError) {\n        const message = err.message.length > 0 ? err.message : DEFAULT_MESSAGE[err.code];\n        return { ok: false, command, error: { code: err.code, message } };\n    }\n    const message = err instanceof Error ? err.message : String(err);\n    return { ok: false, command, error: { code: ErrorCode.RUNTIME, message } };\n}\n\n/** Write the JSON error envelope to stderr (single line, newline-terminated). */\nexport function emitJsonError(command: string | null, err: unknown): void {\n    process.stderr.write(JSON.stringify(buildErrorEnvelope(command, err)) + '\\n');\n}\n\n/**\n * Emit a success status envelope to stderr when in agent (`--json`) mode.\n * No-op otherwise, so commands can call it unconditionally. stdout is never\n * touched here — it stays reserved for the primary artifact.\n */\nexport function emitStatus(envelope: Readonly<Record<string, unknown>>): void {\n    if (!isJsonMode()) return;\n    process.stderr.write(JSON.stringify({ ok: true, ...envelope }) + '\\n');\n}\n","import { createWriteStream } from 'node:fs';\r\nimport { readFile, writeFile } from 'node:fs/promises';\r\nimport { CliError } from './error.js';\r\n\r\nconst JSON_SIZE_LIMIT = 50 * 1024 * 1024; // 50 MB\r\n\r\n/**\r\n * Validate a file path against directory traversal.\r\n * Throws CliError if the path contains `../` or `..\\\\` sequences.\r\n */\r\nexport function validatePath(filePath: string): void {\r\n    // Normalise backslashes for Windows paths and check for traversal\r\n    const normalised = filePath.replace(/\\\\/g, '/');\r\n    if (normalised.includes('../') || normalised === '..') {\r\n        throw new CliError(`Path traversal detected in path: ${filePath}`, 1);\r\n    }\r\n}\r\n\r\n/**\r\n * Read all bytes from stdin.\r\n */\r\nexport function readStdin(): Promise<Buffer> {\r\n    return new Promise((resolve, reject) => {\r\n        const chunks: Buffer[] = [];\r\n        process.stdin.on('data', (chunk: Buffer) => chunks.push(chunk));\r\n        process.stdin.on('end', () => resolve(Buffer.concat(chunks)));\r\n        process.stdin.on('error', reject);\r\n    });\r\n}\r\n\r\n/**\r\n * Read a file by path, or fall back to stdin if `filePath` is undefined.\r\n */\r\nexport async function readFileOrStdin(filePath: string | undefined): Promise<Buffer> {\r\n    if (filePath === undefined) {\r\n        return readStdin();\r\n    }\r\n    validatePath(filePath);\r\n    return readFile(filePath);\r\n}\r\n\r\n/**\r\n * Read a binary file by path. Used for image / attachment / cert payloads.\r\n * Path-traversal validated before access.\r\n */\r\nexport async function readBinaryFile(filePath: string): Promise<Uint8Array> {\r\n    validatePath(filePath);\r\n    const buf = await readFile(filePath);\r\n    return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\r\n}\r\n\r\n/**\r\n * Enforce the 50 MB JSON input size limit on a buffer.\r\n * Throws CliError if the buffer exceeds the limit.\r\n */\r\nexport function assertJsonSizeLimit(buf: Buffer): void {\r\n    if (buf.length > JSON_SIZE_LIMIT) {\r\n        throw new CliError(\r\n            `JSON input exceeds the 50 MB limit (got ${(buf.length / 1024 / 1024).toFixed(1)} MB).`,\r\n            1,\r\n        );\r\n    }\r\n}\r\n\r\n/**\r\n * Write binary data to a file path, or to stdout if `filePath` is undefined.\r\n */\r\nexport async function writeOutput(data: Uint8Array, filePath: string | undefined): Promise<void> {\r\n    if (filePath === undefined) {\r\n        await new Promise<void>((resolve, reject) => {\r\n            process.stdout.write(data, (err) => {\r\n                if (err) reject(err);\r\n                else resolve();\r\n            });\r\n        });\r\n        return;\r\n    }\r\n    validatePath(filePath);\r\n    await writeFile(filePath, data);\r\n}\r\n\r\n/**\r\n * Pipe streaming PDF chunks to a file or stdout.\r\n * Used by `render --stream`.\r\n */\r\nexport async function writeStreamingOutput(\r\n    chunks: AsyncGenerator<Uint8Array>,\r\n    filePath: string | undefined,\r\n): Promise<void> {\r\n    if (filePath === undefined) {\r\n        for await (const chunk of chunks) {\r\n            await new Promise<void>((resolve, reject) => {\r\n                process.stdout.write(chunk, (err) => {\r\n                    if (err) reject(err);\r\n                    else resolve();\r\n                });\r\n            });\r\n        }\r\n        return;\r\n    }\r\n\r\n    validatePath(filePath);\r\n    const stream = createWriteStream(filePath);\r\n    await new Promise<void>((resolve, reject) => {\r\n        stream.on('error', reject);\r\n        stream.on('finish', resolve);\r\n        (async () => {\r\n            for await (const chunk of chunks) {\r\n                const ok = stream.write(chunk);\r\n                if (!ok) {\r\n                    await new Promise<void>((r) => stream.once('drain', r));\r\n                }\r\n            }\r\n            stream.end();\r\n        })().catch(reject);\r\n    });\r\n}\r\n\r\n","// Resolve the CLI's own version from package.json — robustly across BOTH the\n// source layout (tests run `src/**/*.ts` directly) and the bundled artifact\n// (tsup flattens everything into `dist/cli.cjs`, so a path relative to a\n// command file no longer points where it did in source).\n//\n// We try a few candidate locations and accept only our own package.json\n// (guarded by name), so a sibling/parent package.json can never be picked up.\n\nimport { createRequire } from 'node:module';\n\nlet cached: string | null = null;\n\nconst CANDIDATES = ['../package.json', '../../package.json', '../../../package.json'];\n\nexport function cliVersion(): string {\n    if (cached !== null) return cached;\n    const require = createRequire(import.meta.url);\n    for (const candidate of CANDIDATES) {\n        try {\n            const pkg = require(candidate) as { name?: string; version?: string };\n            if (pkg.name === 'pdfnative-cli' && typeof pkg.version === 'string') {\n                cached = pkg.version;\n                return cached;\n            }\n        } catch {\n            // Not at this relative location — try the next candidate.\n        }\n    }\n    // Should never happen in a correctly packaged install; fail soft.\n    cached = '0.0.0';\n    return cached;\n}\n","// Selective re-exports from pdfnative — keeps the CLI surface minimal.\r\n// All PDF logic lives in pdfnative; this module is the only import point.\r\n\r\n// ── Render (free-form documents) ─────────────────────────────────────\r\nexport { buildDocumentPDFBytes, buildDocumentPDFStream } from 'pdfnative';\r\n\r\n// ── Render (table-centric, --variant table) ──────────────────────────\r\nexport { buildPDFBytes, buildPDFStream } from 'pdfnative';\r\n\r\n// ── Render (page-by-page streaming, v1.2.0) ──────────────────────────\r\nexport { buildDocumentPDFStreamPageByPage, buildPDFStreamPageByPage } from 'pdfnative';\r\n// ── Render (true constant-memory streaming, v1.3.0) ──────────────\r\nexport { buildDocumentPDFStreamTrue, buildPDFStreamTrue } from 'pdfnative';\r\n\r\n// ── PDF/A conformance targets (single source of truth, v1.2.0) ───────\r\nexport { PDF_A_CONFORMANCE_TARGETS } from 'pdfnative';\r\n\r\n// ── Compression bootstrap (Node Flate) ───────────────────────────────\r\nexport { initNodeCompression } from 'pdfnative';\r\n\r\n// ── Sign ─────────────────────────────────────────────────────────────\r\nexport { signPdfBytes, buildSigDict, addSignaturePlaceholder } from 'pdfnative';\r\nexport { parseRsaPrivateKey, parseCertificate } from 'pdfnative';\r\n\r\n// ── Sign — native constant-time crypto provider (v1.4.0) ─────────────\r\n// Lets the CLI route CMS signing through node:crypto instead of the pure-JS\r\n// RSA/ECDSA math, for constant-time (side-channel-resistant) signatures.\r\nexport { setCryptoProvider, getCryptoProvider } from 'pdfnative';\r\nexport type { CryptoProvider } from 'pdfnative';\r\n\r\n// ── One-time async crypto bootstrap (initCrypto must run before any\r\n// RSA / ECDSA key parsing or CMS verification). pdfnative throws\r\n// \"ASN.1 module must be imported before RSA key parsing\" otherwise.\r\nimport { initCrypto as _pnInitCrypto } from 'pdfnative';\r\nlet _cryptoReady: Promise<void> | null = null;\r\nexport function ensureCryptoReady(): Promise<void> {\r\n    if (_cryptoReady === null) _cryptoReady = _pnInitCrypto();\r\n    return _cryptoReady;\r\n}\r\n\r\n// ── Verify ───────────────────────────────────────────────────────────\r\nexport {\r\n    derDecode,\r\n    verifyCertSignature,\r\n    isSelfSigned,\r\n    rsaVerifyHash,\r\n    ecdsaVerify,\r\n    decodeEcPublicKey,\r\n} from 'pdfnative';\r\n\r\n// ── Inspect / Verify — PDF parser helpers ────────────────────────────\r\nexport { openPdf, isRef, isName, isDict, isArray, isStream, nameValue } from 'pdfnative';\r\n\r\n// ── Page-tree manipulation — merge / split / extract (v1.4.0) ─────────\r\nexport { mergePdfs, splitPdf, extractPages } from 'pdfnative';\r\nexport type { PageRange, MergeOptions } from 'pdfnative';\r\n\r\n// ── Streaming page-tree — constant-memory merge/split/extract (v1.6.0) ─\r\nexport { streamMergedPdfs, streamSplitPdf, streamExtractPages } from 'pdfnative';\r\nexport type { StreamMergeOptions, SplitPdfStream, PdfSourceInput } from 'pdfnative';\r\n\r\n// ── Encryption / decryption on read + re-encryption (v1.6.0) ──────────\r\n// `openPdf` (below) gained an { password } option; `reader.encryption`\r\n// surfaces the Standard Security Handler details. `MergeOptions.encrypt`\r\n// (above) re-encrypts page-tree output with AES-128/256.\r\nexport { PdfPasswordError, PdfEncryptionUnsupportedError } from 'pdfnative';\r\nexport type { OpenPdfOptions, PdfEncryptionInfo } from 'pdfnative';\r\n// Note: `EncryptionOptions` is already re-exported below in the shared types block.\r\n\r\n// ── Text extraction — reading-order Unicode + positioned runs (v1.6.0) ─\r\nexport { extractText } from 'pdfnative';\r\nexport type { ExtractTextOptions, ExtractedPageText, ExtractedTextRun } from 'pdfnative';\r\n\r\n// ── AcroForm fill & flatten of existing PDFs (v1.6.0) ─────────────────\r\nexport { readFormFields, fillForm, flattenForm } from 'pdfnative';\r\nexport {\r\n    FormFieldNotFoundError,\r\n    FormValueTypeError,\r\n    FormUnsupportedError,\r\n} from 'pdfnative';\r\nexport type {\r\n    ParsedFormField,\r\n    ParsedFieldType,\r\n    FormFillValue,\r\n    FillFormOptions,\r\n    FlattenFormOptions,\r\n} from 'pdfnative';\r\n\r\n// ── Native vector charts — document `chart` block (v1.6.0) ────────────\r\nexport type { ChartBlock, ChartSeries, ChartType } from 'pdfnative';\r\n\r\n// ── Incremental modifier + markup annotations (v1.5.0) ───────────────\r\nexport { createModifier } from 'pdfnative';\r\nexport { buildAnnotation, buildAnnotationBody } from 'pdfnative';\r\nexport type { PdfModifier } from 'pdfnative';\r\nexport type {\r\n    AnnotationRect,\r\n    AnnotationBase,\r\n    TextAnnotation,\r\n    TextMarkupAnnotation,\r\n    ShapeAnnotation,\r\n    LineAnnotation,\r\n    FreeTextAnnotation,\r\n    MarkupAnnotation,\r\n    ParsedAnnotation,\r\n} from 'pdfnative';\r\n\r\n// ── Layout inspection + debug overlay (v1.5.0) ───────────────────────\r\nexport { inspectDocumentLayout } from 'pdfnative';\r\nexport type {\r\n    LayoutInspection,\r\n    InspectedPage,\r\n    InspectedBlock,\r\n    LayoutDebugOptions,\r\n} from 'pdfnative';\r\n\r\n// ── Inspect — PDF/UA structural validator (ISO 14289-1, v1.3.0) ──────\r\nexport { validatePdfUA } from 'pdfnative';\r\n\r\n// ── Fonts (multi-language --lang flag, v1.1.0 latin/emoji modules) ──\r\nexport { registerFont, registerFonts, loadFontData, hasFontLoader } from 'pdfnative';\r\n\r\n// ── Types ────────────────────────────────────────────────────────────\r\nexport type {\r\n    DocumentParams,\r\n    PdfParams,\r\n    PdfLayoutOptions,\r\n    PdfColor,\r\n    PdfColors,\r\n    PageTemplate,\r\n    WatermarkOptions,\r\n    EncryptionOptions,\r\n    PdfAttachment,\r\n    PdfAttachmentRelationship,\r\n    StreamOptions,\r\n    FontEntry,\r\n    OutlineItem,\r\n    PageLabelRange,\r\n    PageLabelStyle,\r\n} from 'pdfnative';\r\n\r\nexport type {\r\n    PdfSignOptions,\r\n    SignatureAlgorithm,\r\n    AddSignaturePlaceholderOptions,\r\n    SigDictMetadata,\r\n    PdfAConformanceTarget,\r\n    X509Certificate,\r\n    X509Name,\r\n    RsaPrivateKey,\r\n    EcPrivateKey,\r\n    EcPublicKey,\r\n    Asn1Node,\r\n} from 'pdfnative';\r\n\r\nexport type { PdfReader, PdfValue, PdfName, PdfRef, PdfStream } from 'pdfnative';\r\nexport type { ParsedDict as PdfDict, ParsedArray as PdfArray } from 'pdfnative';\r\nexport type { PdfUAValidationResult } from 'pdfnative';\r\n","// Agent output projection layer.\n//\n// A thin, dependency-free abstraction that lets autonomous AI agents (and CI)\n// shrink the JSON the CLI emits on stdout — typically by ~90 % — without losing\n// the information they actually branch on. Three composable levers:\n//\n//   1. Compact serialization   — `serializeJson(value, pretty=false)` drops the\n//      2-space indentation agents never read (smaller, still valid JSON).\n//   2. `--fields a,b.c`        — `selectFields` projects a result down to a set\n//      of dot-paths; an array segment maps over every element.\n//   3. (canonical summaries live in each command — they feed this layer.)\n//\n// Everything here is pure data manipulation: no I/O, no globals, no deps.\n\n/** Parse a comma-separated `--fields` value into trimmed, non-empty dot-paths. */\nexport function parseFieldList(csv: string): string[] {\n    return csv\n        .split(',')\n        .map((s) => s.trim())\n        .filter((s) => s.length > 0);\n}\n\n/**\n * Serialize a value as JSON. Agents get compact output (no indentation); humans\n * get pretty 2-space output. The compact form is byte-for-byte smaller while\n * remaining valid JSON, which is the bulk of the token saving.\n */\nexport function serializeJson(value: unknown, pretty: boolean): string {\n    return JSON.stringify(value, null, pretty ? 2 : 0);\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n    return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\n/**\n * Project a value down to a single dot-path, preserving its nesting.\n * - An empty path returns the whole subtree (leaf).\n * - On an array, the remaining path is mapped over every element.\n * - A missing/typed-out path yields `undefined` (the caller omits it).\n */\nfunction pick(value: unknown, segments: readonly string[]): unknown {\n    if (segments.length === 0) return value;\n    if (Array.isArray(value)) {\n        return value.map((el) => pick(el, segments));\n    }\n    if (isPlainObject(value)) {\n        const [head, ...rest] = segments;\n        if (head === undefined || !(head in value)) return undefined;\n        const picked = pick(value[head], rest);\n        if (picked === undefined) return undefined;\n        return { [head]: picked };\n    }\n    // A primitive with path left to walk → the path does not exist.\n    return undefined;\n}\n\n/** Deep-merge two projections so multiple `--fields` paths combine into one. */\nfunction deepMerge(a: unknown, b: unknown): unknown {\n    if (b === undefined) return a;\n    if (a === undefined) return b;\n    if (Array.isArray(a) && Array.isArray(b)) {\n        const len = Math.max(a.length, b.length);\n        const out: unknown[] = [];\n        for (let i = 0; i < len; i++) out.push(deepMerge(a[i], b[i]));\n        return out;\n    }\n    if (isPlainObject(a) && isPlainObject(b)) {\n        const out: Record<string, unknown> = { ...a };\n        for (const [k, v] of Object.entries(b)) {\n            out[k] = k in out ? deepMerge(out[k], v) : v;\n        }\n        return out;\n    }\n    return b; // scalar conflict: last path wins\n}\n\n/**\n * Build a pruned projection of `value` containing only the requested dot-paths.\n *\n * - Paths are dot-separated; a segment landing on an array maps over its items\n *   (e.g. `signatures.signatureValid` → `{ signatures: [{ signatureValid }, …] }`).\n * - Unknown or non-existent paths are silently omitted (lenient by design, so an\n *   agent never crashes the CLI by asking for a field that is conditionally absent).\n * - Multiple paths are deep-merged into a single object.\n */\nexport function selectFields(value: unknown, paths: readonly string[]): unknown {\n    let result: unknown;\n    for (const path of paths) {\n        const segments = path\n            .split('.')\n            .map((s) => s.trim())\n            .filter((s) => s.length > 0);\n        if (segments.length === 0) continue;\n        result = deepMerge(result, pick(value, segments));\n    }\n    return result === undefined ? {} : result;\n}\n","// Shared helpers for the page-tree commands (`merge`, `split`, `extract`) and\r\n// the encryption-aware commands (`encrypt`, `decrypt`). Pure and dependency-free\r\n// except for the pdfnative error classes re-exported through core-bridge.\r\n\r\nimport { CliError, ErrorCode } from './error.js';\r\nimport { validatePath } from './io.js';\r\nimport type { ParsedArgs } from './args.js';\r\nimport { getStringFlag } from './args.js';\r\nimport { PdfPasswordError, PdfEncryptionUnsupportedError } from '../core-bridge/index.js';\r\nimport type { EncryptionOptions } from '../core-bridge/index.js';\r\n\r\n/**\r\n * Parse the optional `--max-output-size` flag (bytes). Accepts a positive\r\n * integer, or `0` / `none` / `off` to disable the guard (maps to `Infinity`).\r\n * Returns `undefined` when the flag is absent (pdfnative applies its 256 MiB\r\n * default).\r\n */\r\nexport function parseMaxOutputSize(raw: string | undefined): number | undefined {\r\n    if (raw === undefined) return undefined;\r\n    const trimmed = raw.trim().toLowerCase();\r\n    if (trimmed === '0' || trimmed === 'none' || trimmed === 'off') {\r\n        return Number.POSITIVE_INFINITY;\r\n    }\r\n    const n = Number.parseInt(trimmed, 10);\r\n    if (!Number.isInteger(n) || n <= 0 || String(n) !== trimmed) {\r\n        throw new CliError(\r\n            `Invalid --max-output-size \"${raw}\". Expected a positive integer (bytes) or 0/none to disable.`,\r\n            2,\r\n        );\r\n    }\r\n    return n;\r\n}\r\n\r\n/**\r\n * Merge positional source paths with any repeated `--input` values, in order,\r\n * validating each against path traversal. De-duplication is intentionally NOT\r\n * performed — a caller may legitimately repeat a document.\r\n */\r\nexport function collectSourcePaths(\r\n    positionals: readonly string[],\r\n    inputFlags: readonly string[],\r\n): string[] {\r\n    const sources = [...positionals, ...inputFlags].map((s) => s.trim()).filter((s) => s.length > 0);\r\n    for (const path of sources) validatePath(path);\r\n    return sources;\r\n}\r\n\r\n/**\r\n * Parse the optional `--chunk-size` flag (bytes) for the streaming page-tree\r\n * variants. pdfnative clamps to 1 KiB–16 MiB; we only require a positive\r\n * integer. Returns `undefined` when absent (pdfnative applies its 64 KiB\r\n * default).\r\n */\r\nexport function parseChunkSize(raw: string | undefined): number | undefined {\r\n    if (raw === undefined) return undefined;\r\n    const trimmed = raw.trim();\r\n    const n = Number.parseInt(trimmed, 10);\r\n    if (!Number.isInteger(n) || n <= 0 || String(n) !== trimmed) {\r\n        throw new CliError(\r\n            `Invalid --chunk-size \"${raw}\". Expected a positive integer (bytes).`,\r\n            2,\r\n        );\r\n    }\r\n    return n;\r\n}\r\n\r\n// ── Encryption / password helpers (pdfnative 1.6.0) ───────────────────\r\n//\r\n// Secret hygiene: passwords are read from a flag OR an environment variable,\r\n// with the ENVIRONMENT WINNING (same convention as `sign` key material). This\r\n// lets automation keep secrets out of argv/process listings. Passwords are\r\n// never logged or echoed in error messages.\r\n\r\n/**\r\n * Return the first argument that is a non-empty string, else undefined. Used to\r\n * layer env → flag(s) precedence while treating an EMPTY env/flag value as\r\n * absent — so `PDFNATIVE_PASSWORD=\"\"` does not silently override `--password`.\r\n */\r\nexport function firstNonEmpty(...vals: readonly (string | undefined)[]): string | undefined {\r\n    for (const v of vals) {\r\n        if (v !== undefined && v !== '') return v;\r\n    }\r\n    return undefined;\r\n}\r\n\r\n/** Password used to OPEN an encrypted source (`--password` / $PDFNATIVE_PASSWORD). */\r\nexport function resolveSourcePassword(flags: ParsedArgs['flags']): string | undefined {\r\n    return firstNonEmpty(process.env['PDFNATIVE_PASSWORD'], getStringFlag(flags, 'password'));\r\n}\r\n\r\n/** Owner password for NEW output (`--owner-password` / $PDFNATIVE_ENCRYPT_OWNER_PASS). */\r\nexport function resolveOwnerPassword(flags: ParsedArgs['flags']): string | undefined {\r\n    return firstNonEmpty(process.env['PDFNATIVE_ENCRYPT_OWNER_PASS'], getStringFlag(flags, 'owner-password'));\r\n}\r\n\r\n/** User password for NEW output (`--user-password` / $PDFNATIVE_ENCRYPT_USER_PASS). */\r\nexport function resolveUserPassword(flags: ParsedArgs['flags']): string | undefined {\r\n    return firstNonEmpty(process.env['PDFNATIVE_ENCRYPT_USER_PASS'], getStringFlag(flags, 'user-password'));\r\n}\r\n\r\nconst VALID_PT_PERMISSIONS = new Set(['print', 'copy', 'modify', 'extract', 'extracttext']);\r\n\r\n/** Normalise an `aes-128|aes-256|128|256` value to pdfnative's `'aes128'|'aes256'`. */\r\nexport function normalizeEncryptAlgo(raw: string | undefined): 'aes128' | 'aes256' {\r\n    if (raw === undefined) return 'aes128';\r\n    const v = raw.trim().toLowerCase().replace(/[-_]/g, '');\r\n    if (v === '' || v === 'aes128' || v === '128') return 'aes128';\r\n    if (v === 'aes256' || v === '256') return 'aes256';\r\n    throw new CliError(`Invalid encryption algorithm \"${raw}\". Valid: aes-128, aes-256.`, 2);\r\n}\r\n\r\n/**\r\n * Parse `--permissions print,copy,modify,extract` into the pdfnative shape.\r\n * Shared by the page-tree commands and `render` (same permission set).\r\n */\r\nexport function parsePermissions(raw: string | undefined): EncryptionOptions['permissions'] | undefined {\r\n    if (raw === undefined) return undefined;\r\n    const perms: Record<string, boolean> = {};\r\n    for (const token of raw.split(',').map((s) => s.trim()).filter((s) => s.length > 0)) {\r\n        const lower = token.toLowerCase();\r\n        if (!VALID_PT_PERMISSIONS.has(lower)) {\r\n            throw new CliError(\r\n                `Invalid permission \"${token}\" in --permissions. Valid: print, copy, modify, extract.`,\r\n                2,\r\n            );\r\n        }\r\n        const key = lower === 'extract' || lower === 'extracttext' ? 'extractText' : lower;\r\n        perms[key] = true;\r\n    }\r\n    return perms;\r\n}\r\n\r\n/**\r\n * Resolve the `--encrypt` trigger on the page-tree commands. A bare `--encrypt`\r\n * enables AES-128; `--encrypt aes-256` (or `256`) selects the algorithm.\r\n */\r\nexport function readEncryptTrigger(\r\n    flags: ParsedArgs['flags'],\r\n): { enabled: boolean; algoRaw: string | undefined } {\r\n    const v = flags['encrypt'];\r\n    if (v === undefined) return { enabled: false, algoRaw: undefined };\r\n    if (typeof v === 'boolean') return { enabled: v, algoRaw: undefined };\r\n    const s = (typeof v === 'string' ? v : (v[0] ?? '')).trim();\r\n    // Allow `--encrypt=false|off|0|no` to disable rather than be read as an algorithm.\r\n    if (/^(false|off|0|no)$/i.test(s)) return { enabled: false, algoRaw: undefined };\r\n    return { enabled: true, algoRaw: s };\r\n}\r\n\r\n/**\r\n * Build page-tree re-encryption options ({@link EncryptionOptions}) from flags.\r\n * The owner password is required (empty is rejected). `algoRaw` is the explicit\r\n * algorithm value (from `--algorithm` on `encrypt`, or the `--encrypt` value on\r\n * merge/split/extract). Throws with usage (exit 2) on invalid input.\r\n */\r\nexport function buildEncryptOptions(args: ParsedArgs, algoRaw: string | undefined): EncryptionOptions {\r\n    const owner = resolveOwnerPassword(args.flags);\r\n    if (owner === undefined || owner.length === 0) {\r\n        throw new CliError(\r\n            'Encryption requires an owner password. Provide --owner-password <pass> or $PDFNATIVE_ENCRYPT_OWNER_PASS.',\r\n            2,\r\n        );\r\n    }\r\n    const user = resolveUserPassword(args.flags);\r\n    const perms = parsePermissions(getStringFlag(args.flags, 'permissions'));\r\n    const opts: { -readonly [K in keyof EncryptionOptions]: EncryptionOptions[K] } = {\r\n        ownerPassword: owner,\r\n        algorithm: normalizeEncryptAlgo(algoRaw),\r\n    };\r\n    if (user !== undefined) opts.userPassword = user;\r\n    if (perms !== undefined) opts.permissions = perms;\r\n    return opts;\r\n}\r\n\r\n/**\r\n * Map a value thrown by a pdfnative parse/crypto call to a {@link CliError}\r\n * with the correct stable error code, without leaking secrets. `context` is a\r\n * short human prefix (e.g. \"Failed to read PDF\").\r\n */\r\nexport function mapPdfError(e: unknown, context: string): CliError {\r\n    if (e instanceof PdfPasswordError) {\r\n        return new CliError(`${context}: ${e.message}`, 1, ErrorCode.PASSWORD);\r\n    }\r\n    if (e instanceof PdfEncryptionUnsupportedError) {\r\n        return new CliError(`${context}: ${e.message}`, 1, ErrorCode.UNSUPPORTED);\r\n    }\r\n    const message = e instanceof Error ? e.message : String(e);\r\n    return new CliError(`${context}: ${message}`, 1, ErrorCode.PARSE);\r\n}\r\n","// Layout utilities for the `render` command.\r\n//\r\n// Implements the hybrid layout model: high-frequency knobs are CLI flags,\r\n// the full PdfLayoutOptions surface is reachable via --layout <file.json>.\r\n// Precedence: CLI flags > layout file > pdfnative defaults.\r\n\r\nimport { readFile } from 'node:fs/promises';\r\nimport {\r\n    PDF_A_CONFORMANCE_TARGETS,\r\n} from '../core-bridge/index.js';\r\nimport type {\r\n    PdfLayoutOptions,\r\n    PageTemplate,\r\n    WatermarkOptions,\r\n    EncryptionOptions,\r\n    PdfAttachment,\r\n    PdfAttachmentRelationship,\r\n    LayoutDebugOptions,\r\n} from '../core-bridge/index.js';\r\nimport { type ParsedArgs, getStringFlag, getStringFlagAll, hasFlag } from './args.js';\r\nimport { validatePath, readBinaryFile } from './io.js';\r\nimport { CliError, deprecate } from './error.js';\r\nimport {\r\n    normalizeEncryptAlgo,\r\n    readEncryptTrigger,\r\n    parsePermissions,\r\n    firstNonEmpty,\r\n} from './pdfops.js';\r\n\r\n/**\r\n * Tagged-mode values accepted by the `--tagged` flag.\r\n *\r\n * The PDF/A targets are sourced from pdfnative's `PDF_A_CONFORMANCE_TARGETS`\r\n * constant (single source of truth) so the CLI never drifts from the set of\r\n * conformance levels the renderer actually supports.\r\n */\r\nexport const VALID_TAGGED = ['none', ...PDF_A_CONFORMANCE_TARGETS] as const;\r\nexport type TaggedValue = (typeof VALID_TAGGED)[number];\r\n\r\n/** Built-in named page sizes (points). Matches pdfnative `PAGE_SIZES`. */\r\nconst NAMED_PAGE_SIZES: Readonly<Record<string, readonly [number, number]>> = {\r\n    a4:      [595.28, 841.89],\r\n    letter:  [612.00, 792.00],\r\n    legal:   [612.00, 1008.00],\r\n    a3:      [841.89, 1190.55],\r\n    tabloid: [792.00, 1224.00],\r\n    a5:      [419.53, 595.28],\r\n};\r\n\r\n/**\r\n * Load a `Partial<PdfLayoutOptions>` JSON file from disk.\r\n * Returns an empty object when no path is provided.\r\n *\r\n * Validates path against directory traversal and JSON shape (must be an object).\r\n * Binary attachment payloads must be supplied via `--attachment` flag — JSON\r\n * fields like `attachments[].data` are NOT supported (no path/data injection).\r\n */\r\nexport async function loadLayoutFile(\r\n    filePath: string | undefined,\r\n): Promise<Partial<PdfLayoutOptions>> {\r\n    if (filePath === undefined) return {};\r\n    validatePath(filePath);\r\n    let raw: string;\r\n    try {\r\n        raw = await readFile(filePath, 'utf8');\r\n    } catch (e) {\r\n        const msg = e instanceof Error ? e.message : String(e);\r\n        throw new CliError(`Failed to read --layout file: ${msg}`, 1);\r\n    }\r\n    let parsed: unknown;\r\n    try {\r\n        parsed = JSON.parse(raw);\r\n    } catch (e) {\r\n        const msg = e instanceof Error ? e.message : String(e);\r\n        throw new CliError(`Failed to parse --layout JSON: ${msg}`, 1);\r\n    }\r\n    if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {\r\n        throw new CliError('--layout file must contain a JSON object.', 1);\r\n    }\r\n    // Strip any attachments[].data — binary payloads must come from --attachment, not JSON.\r\n    const obj = parsed as Record<string, unknown>;\r\n    if (Array.isArray(obj.attachments)) {\r\n        obj.attachments = obj.attachments.map((a): unknown => {\r\n            if (typeof a !== 'object' || a === null) return a;\r\n            const rest = { ...(a as Record<string, unknown>) };\r\n            delete rest.data;\r\n            return rest;\r\n        });\r\n    }\r\n    return obj as Partial<PdfLayoutOptions>;\r\n}\r\n\r\n/** Parse the `--debug-layout` flag into `PdfLayoutOptions.debug`, or undefined.\r\n *  Bare `--debug-layout` → `true` (full overlay). A value is a comma list of\r\n *  `margins` / `content` / `cells` mapping to the LayoutDebugOptions boxes. */\r\nfunction parseDebugLayout(args: ParsedArgs): boolean | LayoutDebugOptions | undefined {\r\n    const raw = args.flags['debug-layout'];\r\n    if (raw === undefined) return undefined;\r\n    if (typeof raw === 'boolean') return raw ? true : undefined;\r\n    const value = (typeof raw === 'string' ? raw : (raw[0] ?? '')).trim();\r\n    if (value === '' || value.toLowerCase() === 'true') return true;\r\n    if (value.toLowerCase() === 'false') return undefined;\r\n    const opts: { -readonly [K in keyof LayoutDebugOptions]: LayoutDebugOptions[K] } = {};\r\n    for (const token of value.split(',').map((s) => s.trim().toLowerCase()).filter((s) => s.length > 0)) {\r\n        if (token === 'margins') opts.showMargins = true;\r\n        else if (token === 'content' || token === 'bounds') opts.showContentBounds = true;\r\n        else if (token === 'cells') opts.showCells = true;\r\n        else {\r\n            throw new CliError(\r\n                `Invalid --debug-layout token \"${token}\". Valid: margins, content, cells.`,\r\n                2,\r\n            );\r\n        }\r\n    }\r\n    return opts;\r\n}\r\n\r\n/** Parse `WxH` (e.g. `595.28x841.89`) into `[w, h]` or return null. */\r\nfunction parsePageSizePair(value: string): readonly [number, number] | null {\r\n    const m = /^(\\d+(?:\\.\\d+)?)x(\\d+(?:\\.\\d+)?)$/i.exec(value.trim());\r\n    if (m === null) return null;\r\n    return [Number.parseFloat(m[1] as string), Number.parseFloat(m[2] as string)];\r\n}\r\n\r\n/** Parse `--page-size` into `{ pageWidth, pageHeight }`. */\r\nfunction parsePageSize(value: string): { pageWidth: number; pageHeight: number } {\r\n    const lower = value.toLowerCase();\r\n    const named = NAMED_PAGE_SIZES[lower];\r\n    if (named !== undefined) {\r\n        return { pageWidth: named[0], pageHeight: named[1] };\r\n    }\r\n    const pair = parsePageSizePair(value);\r\n    if (pair !== null) {\r\n        return { pageWidth: pair[0], pageHeight: pair[1] };\r\n    }\r\n    const valid = Object.keys(NAMED_PAGE_SIZES).join(', ');\r\n    throw new CliError(\r\n        `Invalid --page-size value \"${value}\". Expected one of: ${valid}, or WxH (points).`,\r\n        2,\r\n    );\r\n}\r\n\r\n/** Parse `--margin` (uniform N or `t,r,b,l`). */\r\nfunction parseMargin(value: string): { t: number; r: number; b: number; l: number } {\r\n    const parts = value.split(',').map((p) => p.trim());\r\n    const nums = parts.map((p) => {\r\n        const n = Number.parseFloat(p);\r\n        if (!Number.isFinite(n) || n < 0) {\r\n            throw new CliError(`Invalid --margin value \"${value}\".`, 2);\r\n        }\r\n        return n;\r\n    });\r\n    if (nums.length === 1) {\r\n        const v = nums[0] as number;\r\n        return { t: v, r: v, b: v, l: v };\r\n    }\r\n    if (nums.length === 4) {\r\n        return {\r\n            t: nums[0] as number,\r\n            r: nums[1] as number,\r\n            b: nums[2] as number,\r\n            l: nums[3] as number,\r\n        };\r\n    }\r\n    throw new CliError(`Invalid --margin \"${value}\". Expected N or T,R,B,L.`, 2);\r\n}\r\n\r\n/** Parse `--tagged` into a `PdfLayoutOptions['tagged']` value. */\r\nfunction parseTagged(value: string): PdfLayoutOptions['tagged'] {\r\n    const v = value.toLowerCase();\r\n    if (v === 'none') return false;\r\n    if ((VALID_TAGGED as readonly string[]).includes(v)) {\r\n        return v as Exclude<TaggedValue, 'none'>;\r\n    }\r\n    throw new CliError(\r\n        `Invalid --tagged value \"${value}\". Valid: ${VALID_TAGGED.join(', ')}.`,\r\n        2,\r\n    );\r\n}\r\n\r\n/** Convert deprecated `--conformance 1b|2b|3b` to a `--tagged` value. */\r\nfunction conformanceToTagged(value: string): PdfLayoutOptions['tagged'] {\r\n    const validShort = new Set(['1b', '2b', '3b']);\r\n    if (!validShort.has(value)) {\r\n        throw new CliError(\r\n            `Invalid --conformance value \"${value}\". Valid: 1b, 2b, 3b.`,\r\n            2,\r\n        );\r\n    }\r\n    return ('pdfa' + value) as Exclude<TaggedValue, 'none'>;\r\n}\r\n\r\ninterface HeaderFooterFlags {\r\n    readonly left?: string;\r\n    readonly center?: string;\r\n    readonly right?: string;\r\n}\r\n\r\nfunction buildPageTemplate(parts: HeaderFooterFlags): PageTemplate | undefined {\r\n    if (parts.left === undefined && parts.center === undefined && parts.right === undefined) {\r\n        return undefined;\r\n    }\r\n    const tpl: { -readonly [K in keyof PageTemplate]: PageTemplate[K] } = {};\r\n    if (parts.left !== undefined) tpl.left = parts.left;\r\n    if (parts.center !== undefined) tpl.center = parts.center;\r\n    if (parts.right !== undefined) tpl.right = parts.right;\r\n    return tpl;\r\n}\r\n\r\n/**\r\n * Build encryption options from CLI flags (or env vars for passwords).\r\n *\r\n * Two flag vocabularies are accepted, so `render` matches merge/split/extract:\r\n *   - Unified (preferred): `--encrypt [aes-128|aes-256]`, `--owner-password`,\r\n *     `--user-password`, `--permissions`.\r\n *   - Legacy (still supported): `--encrypt-algorithm`, `--encrypt-owner-pass`,\r\n *     `--encrypt-user-pass`, `--encrypt-permissions`.\r\n * Env vars ($PDFNATIVE_ENCRYPT_OWNER_PASS / _USER_PASS) win over both; an empty\r\n * value is treated as absent. The unified value wins over the legacy alias.\r\n */\r\nfunction buildEncryptionFromFlags(args: ParsedArgs): EncryptionOptions | undefined {\r\n    const { enabled: encryptTriggered, algoRaw: unifiedAlgo } = readEncryptTrigger(args.flags);\r\n    const legacyAlgo = getStringFlag(args.flags, 'encrypt-algorithm');\r\n    const permsRaw = firstNonEmpty(\r\n        getStringFlag(args.flags, 'permissions'),\r\n        getStringFlag(args.flags, 'encrypt-permissions'),\r\n    );\r\n    const owner = firstNonEmpty(\r\n        process.env.PDFNATIVE_ENCRYPT_OWNER_PASS,\r\n        getStringFlag(args.flags, 'owner-password'),\r\n        getStringFlag(args.flags, 'encrypt-owner-pass'),\r\n    );\r\n    const user = firstNonEmpty(\r\n        process.env.PDFNATIVE_ENCRYPT_USER_PASS,\r\n        getStringFlag(args.flags, 'user-password'),\r\n        getStringFlag(args.flags, 'encrypt-user-pass'),\r\n    );\r\n\r\n    const requested =\r\n        encryptTriggered ||\r\n        legacyAlgo !== undefined ||\r\n        owner !== undefined ||\r\n        user !== undefined ||\r\n        permsRaw !== undefined;\r\n    if (!requested) return undefined;\r\n\r\n    if (owner === undefined) {\r\n        throw new CliError(\r\n            'Encryption requires an owner password. Provide --owner-password <pass> or $PDFNATIVE_ENCRYPT_OWNER_PASS.',\r\n            2,\r\n        );\r\n    }\r\n    const opts: { -readonly [K in keyof EncryptionOptions]: EncryptionOptions[K] } = {\r\n        ownerPassword: owner,\r\n        algorithm: normalizeEncryptAlgo(unifiedAlgo ?? legacyAlgo),\r\n    };\r\n    if (user !== undefined) opts.userPassword = user;\r\n    const perms = parsePermissions(permsRaw);\r\n    if (perms !== undefined) opts.permissions = perms;\r\n    return opts;\r\n}\r\n\r\n/** Build watermark options from CLI flags. */\r\nasync function buildWatermarkFromFlags(\r\n    args: ParsedArgs,\r\n): Promise<WatermarkOptions | undefined> {\r\n    const text = getStringFlag(args.flags, 'watermark-text');\r\n    const opacity = getStringFlag(args.flags, 'watermark-opacity');\r\n    const angle = getStringFlag(args.flags, 'watermark-angle');\r\n    const color = getStringFlag(args.flags, 'watermark-color');\r\n    const fontSize = getStringFlag(args.flags, 'watermark-font-size');\r\n    const imagePath = getStringFlag(args.flags, 'watermark-image');\r\n    const position = getStringFlag(args.flags, 'watermark-position');\r\n\r\n    if (\r\n        text === undefined &&\r\n        imagePath === undefined &&\r\n        opacity === undefined &&\r\n        angle === undefined &&\r\n        color === undefined &&\r\n        fontSize === undefined &&\r\n        position === undefined\r\n    ) {\r\n        return undefined;\r\n    }\r\n\r\n    const wm: { -readonly [K in keyof WatermarkOptions]: WatermarkOptions[K] } = {};\r\n\r\n    if (text !== undefined) {\r\n        const t: Record<string, unknown> = { text };\r\n        if (opacity !== undefined) t.opacity = parseUnit(opacity, 'watermark-opacity', 0, 1);\r\n        if (angle !== undefined) t.angle = parseFloatFlag(angle, 'watermark-angle');\r\n        if (color !== undefined) t.color = color;\r\n        if (fontSize !== undefined) t.fontSize = parseFloatFlag(fontSize, 'watermark-font-size');\r\n        wm.text = t as unknown as WatermarkOptions['text'];\r\n    }\r\n    if (imagePath !== undefined) {\r\n        const data = await readBinaryFile(imagePath);\r\n        const img: Record<string, unknown> = { data };\r\n        if (opacity !== undefined && text === undefined) {\r\n            img.opacity = parseUnit(opacity, 'watermark-opacity', 0, 1);\r\n        }\r\n        wm.image = img as unknown as WatermarkOptions['image'];\r\n    }\r\n    if (position !== undefined) {\r\n        if (position !== 'background' && position !== 'foreground') {\r\n            throw new CliError(\r\n                `Invalid --watermark-position \"${position}\". Valid: background, foreground.`,\r\n                2,\r\n            );\r\n        }\r\n        wm.position = position;\r\n    }\r\n    return wm;\r\n}\r\n\r\nfunction parseFloatFlag(value: string, flag: string): number {\r\n    const n = Number.parseFloat(value);\r\n    if (!Number.isFinite(n)) {\r\n        throw new CliError(`Invalid --${flag} value \"${value}\".`, 2);\r\n    }\r\n    return n;\r\n}\r\n\r\nfunction parseUnit(value: string, flag: string, min: number, max: number): number {\r\n    const n = parseFloatFlag(value, flag);\r\n    if (n < min || n > max) {\r\n        throw new CliError(`--${flag} must be between ${min} and ${max} (got ${value}).`, 2);\r\n    }\r\n    return n;\r\n}\r\n\r\n/** Load PDF/A-3 attachments from `--attachment <path>` (repeatable). */\r\nasync function loadAttachmentsFromFlags(\r\n    args: ParsedArgs,\r\n): Promise<readonly PdfAttachment[] | undefined> {\r\n    const paths = getStringFlagAll(args.flags, 'attachment');\r\n    if (paths.length === 0) return undefined;\r\n    const out: PdfAttachment[] = [];\r\n    for (const raw of paths) {\r\n        // Syntax: <path>[:mime[:relationship[:description]]]\r\n        //\r\n        // Windows paths start with a drive letter followed by a colon (e.g. C:\\…).\r\n        // A naïve split(':') would truncate the path at the drive-letter colon.\r\n        // Guard: if the first token is a single ASCII letter we are looking at a\r\n        // Windows drive letter — re-join it with the next token before extracting\r\n        // the optional mime/rel/desc parts.\r\n        const parts = raw.split(':');\r\n        let pathPart = parts[0] ?? '';\r\n        let offset = 1;\r\n\r\n        if (pathPart.length === 1 && /^[A-Za-z]$/.test(pathPart) && parts.length > 1) {\r\n            // Re-join drive letter with the rest of the path segment.\r\n            pathPart = `${pathPart}:${parts[1] ?? ''}`;\r\n            offset = 2;\r\n        }\r\n\r\n        if (pathPart.length === 0) {\r\n            throw new CliError(`Invalid --attachment value \"${raw}\".`, 2);\r\n        }\r\n\r\n        const mimePart = parts[offset];\r\n        const relPart  = parts[offset + 1];\r\n        const descPart = parts[offset + 2];\r\n\r\n        const data = await readBinaryFile(pathPart);\r\n        const filename = pathPart.split(/[/\\\\]/).pop() ?? 'attachment';\r\n        const mime = mimePart && mimePart.length > 0 ? mimePart : 'application/octet-stream';\r\n        const att: { -readonly [K in keyof PdfAttachment]: PdfAttachment[K] } = {\r\n            filename,\r\n            data,\r\n            mimeType: mime,\r\n        };\r\n        if (relPart !== undefined && relPart.length > 0) {\r\n            att.relationship = relPart as PdfAttachmentRelationship;\r\n        }\r\n        if (descPart !== undefined && descPart.length > 0) {\r\n            att.description = descPart;\r\n        }\r\n        out.push(att);\r\n    }\r\n    return out;\r\n}\r\n\r\n/**\r\n * Compose the final `Partial<PdfLayoutOptions>` for a render invocation.\r\n *\r\n * Order of precedence (low → high): pdfnative defaults → --layout file → CLI flags.\r\n * Throws CliError on invalid combinations (e.g. encryption + tagged).\r\n */\r\nexport async function buildLayoutOptions(\r\n    args: ParsedArgs,\r\n): Promise<Partial<PdfLayoutOptions>> {\r\n    const layoutPath = getStringFlag(args.flags, 'layout');\r\n    const fromFile = await loadLayoutFile(layoutPath);\r\n    const out: Record<string, unknown> = { ...fromFile };\r\n\r\n    // --page-size\r\n    const pageSize = getStringFlag(args.flags, 'page-size');\r\n    if (pageSize !== undefined) {\r\n        const { pageWidth, pageHeight } = parsePageSize(pageSize);\r\n        out.pageWidth = pageWidth;\r\n        out.pageHeight = pageHeight;\r\n    }\r\n\r\n    // --margin\r\n    const margin = getStringFlag(args.flags, 'margin');\r\n    if (margin !== undefined) {\r\n        out.margins = parseMargin(margin);\r\n    }\r\n\r\n    // --compress\r\n    if (hasFlag(args.flags, 'compress')) {\r\n        out.compress = true;\r\n    }\r\n\r\n    // --debug-layout (pdfnative 1.5.0 layout.debug overlay). A bare flag turns\r\n    // on the full overlay; a comma list selects boxes: margins, content, cells.\r\n    const debug = parseDebugLayout(args);\r\n    if (debug !== undefined) {\r\n        out.debug = debug;\r\n    }\r\n\r\n    // --max-blocks (pdfnative 1.3.0 layout.maxBlocks; default DEFAULT_MAX_BLOCKS = 100000)\r\n    const maxBlocks = getStringFlag(args.flags, 'max-blocks');\r\n    if (maxBlocks !== undefined) {\r\n        const n = Number.parseInt(maxBlocks, 10);\r\n        if (!Number.isInteger(n) || n <= 0 || String(n) !== maxBlocks.trim()) {\r\n            throw new CliError(\r\n                `Invalid --max-blocks value \"${maxBlocks}\". Expected a positive integer.`,\r\n                2,\r\n            );\r\n        }\r\n        out.maxBlocks = n;\r\n    }\r\n\r\n    // --tagged / deprecated --conformance\r\n    const tagged = getStringFlag(args.flags, 'tagged');\r\n    const conformance = getStringFlag(args.flags, 'conformance');\r\n    if (tagged !== undefined && conformance !== undefined) {\r\n        throw new CliError(\r\n            'Use either --tagged or --conformance, not both. Prefer --tagged.',\r\n            2,\r\n        );\r\n    }\r\n    if (tagged !== undefined) {\r\n        out.tagged = parseTagged(tagged);\r\n    } else if (conformance !== undefined) {\r\n        deprecate('conformance', '--tagged pdfa<level>');\r\n        out.tagged = conformanceToTagged(conformance);\r\n    }\r\n\r\n    // --header-* / --footer-*\r\n    const header = buildPageTemplate({\r\n        left: getStringFlag(args.flags, 'header-left'),\r\n        center: getStringFlag(args.flags, 'header-center'),\r\n        right: getStringFlag(args.flags, 'header-right'),\r\n    });\r\n    if (header !== undefined) out.headerTemplate = header;\r\n\r\n    const footer = buildPageTemplate({\r\n        left: getStringFlag(args.flags, 'footer-left'),\r\n        center: getStringFlag(args.flags, 'footer-center'),\r\n        right: getStringFlag(args.flags, 'footer-right'),\r\n    });\r\n    if (footer !== undefined) out.footerTemplate = footer;\r\n\r\n    // --watermark-*\r\n    const watermark = await buildWatermarkFromFlags(args);\r\n    if (watermark !== undefined) out.watermark = watermark;\r\n\r\n    // --encrypt-*\r\n    const encryption = buildEncryptionFromFlags(args);\r\n    if (encryption !== undefined) out.encryption = encryption;\r\n\r\n    // --attachment (repeatable)\r\n    const attachments = await loadAttachmentsFromFlags(args);\r\n    if (attachments !== undefined) out.attachments = attachments;\r\n\r\n    // Validate mutually-exclusive combinations\r\n    const tg = out.tagged;\r\n    if (encryption !== undefined && tg !== undefined && tg !== false) {\r\n        throw new CliError(\r\n            'Encryption is mutually exclusive with --tagged (PDF/A forbids encryption per ISO 19005-1 §6.3.2).',\r\n            2,\r\n        );\r\n    }\r\n\r\n    return out as Partial<PdfLayoutOptions>;\r\n}\r\n\r\n/**\r\n * Validate streaming-incompatible flag combinations.\r\n * Streaming requires single-pass page emission, so:\r\n *   - {pages} placeholder in any header/footer template\r\n *   - TOC blocks (caller must check separately on params.blocks)\r\n * are rejected.\r\n */\r\nexport function assertStreamingCompatible(layout: Partial<PdfLayoutOptions>): void {\r\n    const check = (tpl: PageTemplate | undefined, label: string): void => {\r\n        if (tpl === undefined) return;\r\n        for (const part of [tpl.left, tpl.center, tpl.right]) {\r\n            if (part !== undefined && part.includes('{pages}')) {\r\n                throw new CliError(\r\n                    `--stream is incompatible with the {pages} placeholder in --${label}-* (total page count not known until full render).`,\r\n                    2,\r\n                );\r\n            }\r\n        }\r\n    };\r\n    check(layout.headerTemplate, 'header');\r\n    check(layout.footerTemplate, 'footer');\r\n}\r\n","import { watchFile, unwatchFile } from 'node:fs';\r\nimport { resolve as resolvePath, dirname, join as joinPath } from 'node:path';\r\nimport { pathToFileURL } from 'node:url';\r\nimport { createRequire } from 'node:module';\r\nimport {\r\n    buildDocumentPDFBytes,\r\n    buildDocumentPDFStream,\r\n    buildDocumentPDFStreamPageByPage,\r\n    buildDocumentPDFStreamTrue,\r\n    buildPDFBytes,\r\n    buildPDFStream,\r\n    buildPDFStreamPageByPage,\r\n    buildPDFStreamTrue,\r\n    initNodeCompression,\r\n    loadFontData,\r\n    hasFontLoader,\r\n    registerFont,\r\n    inspectDocumentLayout,\r\n} from '../core-bridge/index.js';\r\nimport type {\r\n    DocumentParams,\r\n    PdfLayoutOptions,\r\n    PdfParams,\r\n    PdfColor,\r\n    FontEntry,\r\n    OutlineItem,\r\n} from '../core-bridge/index.js';\r\nimport {\r\n    type ParsedArgs,\r\n    getStringFlag,\r\n    getStringFlagAll,\r\n    getBoolFlag,\r\n    hasFlag,\r\n} from '../utils/args.js';\r\nimport {\r\n    readFileOrStdin,\r\n    writeOutput,\r\n    writeStreamingOutput,\r\n    assertJsonSizeLimit,\r\n} from '../utils/io.js';\r\nimport { CliError, ErrorCode } from '../utils/error.js';\r\nimport { emitStatus, isDryRun, isJsonMode } from '../utils/agent.js';\r\nimport { serializeJson } from '../utils/projection.js';\r\nimport {\r\n    buildLayoutOptions,\r\n    assertStreamingCompatible,\r\n} from '../utils/layout.js';\r\n\r\nconst VALID_VARIANTS = new Set(['document', 'table']);\r\n\r\n/**\r\n * Allow-list of bundled font shortcuts exposed via `--font <name>`.\r\n * Each maps to a Noto-* data module shipped with pdfnative ≥ 1.1.0 under\r\n * its `fonts/` directory (which is not part of the package `exports` map,\r\n * so we resolve it via `package.json` and import a `file://` URL).\r\n *\r\n * Adding to this list is intentional (no auto-discovery) so the CLI surface\r\n * stays predictable and free from path-based RCE vectors.\r\n */\r\nconst BUNDLED_FONT_MODULES: Readonly<Record<string, string>> = Object.freeze({\r\n    // Latin + monochrome / COLRv1 colour emoji\r\n    latin: 'noto-sans-data.js',\r\n    emoji: 'noto-emoji-data.js',\r\n    'color-emoji': 'noto-color-emoji-data.js',\r\n    // Mathematical / technical symbols (pdfnative ≥ 1.5.0). Code points in the\r\n    // math operator / geometric-shape blocks are auto-routed to this font.\r\n    math: 'noto-sans-math-data.js',\r\n    // 22 Unicode scripts (pdfnative ≥ 1.3.0). The shortcut name doubles as the\r\n    // `--lang` code; pdfnative routes each code point to the font whose cmap\r\n    // covers it, so any registered script font is used automatically.\r\n    ar: 'noto-arabic-data.js',\r\n    hy: 'noto-armenian-data.js',\r\n    bn: 'noto-bengali-data.js',\r\n    ru: 'noto-cyrillic-data.js',\r\n    hi: 'noto-devanagari-data.js',\r\n    am: 'noto-ethiopic-data.js',\r\n    ka: 'noto-georgian-data.js',\r\n    el: 'noto-greek-data.js',\r\n    he: 'noto-hebrew-data.js',\r\n    ja: 'noto-jp-data.js',\r\n    km: 'noto-khmer-data.js',\r\n    ko: 'noto-kr-data.js',\r\n    my: 'noto-myanmar-data.js',\r\n    pl: 'noto-polish-data.js',\r\n    zh: 'noto-sc-data.js',\r\n    si: 'noto-sinhala-data.js',\r\n    ta: 'noto-tamil-data.js',\r\n    te: 'noto-telugu-data.js',\r\n    th: 'noto-thai-data.js',\r\n    bo: 'noto-tibetan-data.js',\r\n    tr: 'noto-turkish-data.js',\r\n    vi: 'noto-vietnamese-data.js',\r\n});\r\n\r\nlet cachedFontsDir: string | null = null;\r\nfunction resolveFontsDir(): string {\r\n    if (cachedFontsDir !== null) return cachedFontsDir;\r\n    const require = createRequire(import.meta.url);\r\n    // pdfnative's package.json is not exported, but the main entry is. Resolve\r\n    // the main entry (.../dist/index.js) and walk up two levels to the package\r\n    // root, which contains the `fonts/` directory.\r\n    const main = require.resolve('pdfnative');\r\n    cachedFontsDir = joinPath(dirname(dirname(main)), 'fonts');\r\n    return cachedFontsDir;\r\n}\r\n\r\ninterface DocumentInputShape {\r\n    readonly blocks?: unknown;\r\n    readonly fontEntries?: unknown;\r\n    readonly layout?: unknown;\r\n}\r\n\r\n/** Best-effort structural guard for `PdfParams` (table variant). */\r\nfunction isPdfParamsLike(value: unknown): value is PdfParams {\r\n    if (typeof value !== 'object' || value === null) return false;\r\n    const v = value as Record<string, unknown>;\r\n    return (\r\n        typeof v.title === 'string' &&\r\n        Array.isArray(v.headers) &&\r\n        Array.isArray(v.rows)\r\n    );\r\n}\r\n\r\n/** Best-effort structural guard for `DocumentParams`. */\r\nfunction isDocumentParamsLike(value: unknown): value is DocumentParams {\r\n    if (typeof value !== 'object' || value === null) return false;\r\n    const v = value as DocumentInputShape;\r\n    return Array.isArray(v.blocks);\r\n}\r\n\r\n/** Detect TOC blocks (incompatible with --stream). */\r\nfunction hasTocBlock(params: DocumentParams): boolean {\r\n    for (const b of params.blocks) {\r\n        const block = b as { type?: unknown };\r\n        if (block.type === 'toc') return true;\r\n    }\r\n    return false;\r\n}\r\n\r\n// ── Smart-table defaults (pdfnative 1.2.0) ───────────────────────────────\r\n\r\n/**\r\n * CLI-level defaults applied to every document `TableBlock` that does not\r\n * already specify the corresponding field. Block-level values always win, so\r\n * a JSON input remains authoritative; these flags only fill the gaps.\r\n *\r\n * Table-variant input (`--variant table`, `PdfParams`) does not carry these\r\n * per-block fields and is therefore unaffected.\r\n */\r\nconst VALID_TABLE_WRAP = new Set(['auto', 'always', 'never']);\r\n\r\ninterface TableDefaults {\r\n    readonly wrap?: 'auto' | 'always' | 'never';\r\n    readonly repeatHeader?: boolean;\r\n    readonly zebra?: boolean | PdfColor;\r\n    readonly minRowHeight?: number;\r\n    readonly cellPadding?: number;\r\n}\r\n\r\nfunction parseNonNegativeNumber(value: string, flag: string): number {\r\n    const n = Number.parseFloat(value);\r\n    if (!Number.isFinite(n) || n < 0) {\r\n        throw new CliError(`Invalid --${flag} value \"${value}\". Expected a non-negative number.`, 2);\r\n    }\r\n    return n;\r\n}\r\n\r\n/** Parse the smart-table default flags, or return undefined when none are set. */\r\nfunction parseTableDefaults(args: ParsedArgs): TableDefaults | undefined {\r\n    const defaults: { -readonly [K in keyof TableDefaults]: TableDefaults[K] } = {};\r\n    let any = false;\r\n\r\n    const wrap = getStringFlag(args.flags, 'table-wrap');\r\n    if (wrap !== undefined) {\r\n        if (!VALID_TABLE_WRAP.has(wrap)) {\r\n            throw new CliError(`Invalid --table-wrap \"${wrap}\". Valid: auto, always, never.`, 2);\r\n        }\r\n        defaults.wrap = wrap as 'auto' | 'always' | 'never';\r\n        any = true;\r\n    }\r\n\r\n    const repeatHeader = getBoolFlag(args.flags, 'repeat-header');\r\n    if (repeatHeader !== undefined) {\r\n        defaults.repeatHeader = repeatHeader;\r\n        any = true;\r\n    }\r\n\r\n    const zebraVal = args.flags['zebra'];\r\n    if (zebraVal !== undefined) {\r\n        if (typeof zebraVal === 'boolean') {\r\n            defaults.zebra = zebraVal;\r\n        } else {\r\n            const s = (typeof zebraVal === 'string' ? zebraVal : (zebraVal[0] ?? '')).trim();\r\n            const low = s.toLowerCase();\r\n            if (low === '' || low === 'true' || low === 'on' || low === 'yes' || low === '1') {\r\n                defaults.zebra = true;\r\n            } else if (low === 'false' || low === 'off' || low === 'no' || low === '0') {\r\n                defaults.zebra = false;\r\n            } else {\r\n                // Treat any other value as a PdfColor (e.g. \"0.95 0.95 0.98\").\r\n                defaults.zebra = s as PdfColor;\r\n            }\r\n        }\r\n        any = true;\r\n    }\r\n\r\n    const minRowHeight = getStringFlag(args.flags, 'min-row-height');\r\n    if (minRowHeight !== undefined) {\r\n        defaults.minRowHeight = parseNonNegativeNumber(minRowHeight, 'min-row-height');\r\n        any = true;\r\n    }\r\n\r\n    const cellPadding = getStringFlag(args.flags, 'cell-padding');\r\n    if (cellPadding !== undefined) {\r\n        defaults.cellPadding = parseNonNegativeNumber(cellPadding, 'cell-padding');\r\n        any = true;\r\n    }\r\n\r\n    return any ? defaults : undefined;\r\n}\r\n\r\n/**\r\n * Return a copy of `params` with the smart-table `defaults` merged into every\r\n * `TableBlock`. Block-level fields take precedence; only absent fields are\r\n * filled. Returns `params` unchanged when there are no table blocks.\r\n */\r\nfunction applyTableDefaults(params: DocumentParams, defaults: TableDefaults): DocumentParams {\r\n    let touched = false;\r\n    const blocks = params.blocks.map((b) => {\r\n        const block = b as { type?: unknown } & Record<string, unknown>;\r\n        if (block.type !== 'table') return b;\r\n        touched = true;\r\n        const merged: Record<string, unknown> = { ...block };\r\n        for (const [key, value] of Object.entries(defaults)) {\r\n            if (merged[key] === undefined) merged[key] = value;\r\n        }\r\n        return merged as unknown as typeof b;\r\n    });\r\n    if (!touched) return params;\r\n    return { ...params, blocks: blocks as DocumentParams['blocks'] };\r\n}\r\n\r\n/** Build font entries for bundled-language codes (e.g. th, ja, ar). */\r\nasync function buildFontEntriesForLangs(\r\n    langs: readonly string[],\r\n    nextRefStart: number,\r\n): Promise<readonly FontEntry[]> {\r\n    if (langs.length === 0) return [];\r\n    const entries: FontEntry[] = [];\r\n    let nextRef = nextRefStart;\r\n    for (const lang of langs) {\r\n        if (!hasFontLoader(lang)) {\r\n            throw new CliError(\r\n                `--lang \"${lang}\" is not a bundled pdfnative font. ` +\r\n                'Use --font to register a bundled font shortcut, or register a loader programmatically.',\r\n                2,\r\n            );\r\n        }\r\n        const fontData = await loadFontData(lang);\r\n        if (fontData === null) {\r\n            throw new CliError(`Failed to load font data for --lang \"${lang}\".`, 1);\r\n        }\r\n        entries.push({ fontData, fontRef: `/F${nextRef}`, lang });\r\n        nextRef++;\r\n    }\r\n    return entries;\r\n}\r\n\r\n/**\r\n * Register bundled font shortcuts from `--font` flags. Names are validated\r\n * against {@link BUNDLED_FONT_MODULES}. Idempotent across watch re-renders\r\n * (pdfnative's `registerFont` simply overwrites existing entries).\r\n */\r\nasync function applyFontFlags(fontFlags: readonly string[]): Promise<void> {\r\n    if (fontFlags.length === 0) return;\r\n    // Validate all names BEFORE touching the filesystem so unknown shortcuts\r\n    // surface a CliError rather than a resolution error.\r\n    const resolved: { name: string; fileName: string }[] = [];\r\n    for (const raw of fontFlags) {\r\n        const name = raw.trim().toLowerCase();\r\n        if (name.length === 0) continue;\r\n        const fileName = BUNDLED_FONT_MODULES[name];\r\n        if (fileName === undefined) {\r\n            const allowed = Object.keys(BUNDLED_FONT_MODULES).join(', ');\r\n            throw new CliError(\r\n                `--font \"${raw}\" is not a recognized bundled font. Allowed: ${allowed}.`,\r\n                2,\r\n            );\r\n        }\r\n        resolved.push({ name, fileName });\r\n    }\r\n    if (resolved.length === 0) return;\r\n    const fontsDir = resolveFontsDir();\r\n    for (const { name, fileName } of resolved) {\r\n        const fileUrl = pathToFileURL(joinPath(fontsDir, fileName)).href;\r\n        // The Noto data modules ARE the FontData shape (namespace import).\r\n        registerFont(name, () => import(fileUrl) as Promise<never>);\r\n    }\r\n}\r\n\r\n/**\r\n * Deep-merge `override` on top of `base`. Plain objects merge recursively;\r\n * arrays and primitives are replaced wholesale (override wins). Used by\r\n * `--template` to layer stdin / `--input` JSON over a template file.\r\n */\r\nfunction deepMerge(base: unknown, override: unknown): unknown {\r\n    if (!isPlainObject(base) || !isPlainObject(override)) return override;\r\n    const result: Record<string, unknown> = { ...base };\r\n    for (const key of Object.keys(override)) {\r\n        result[key] = key in base\r\n            ? deepMerge(base[key], override[key])\r\n            : override[key];\r\n    }\r\n    return result;\r\n}\r\n\r\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\r\n    return typeof value === 'object'\r\n        && value !== null\r\n        && !Array.isArray(value)\r\n        && Object.getPrototypeOf(value) === Object.prototype;\r\n}\r\n\r\ninterface RenderConfig {\r\n    readonly variant: string;\r\n    readonly useStream: boolean;\r\n    readonly usePageStream: boolean;\r\n    readonly useStreamTrue: boolean;\r\n    readonly inputPath: string | undefined;\r\n    readonly outputPath: string | undefined;\r\n    readonly langs: readonly string[];\r\n    readonly layout: Partial<PdfLayoutOptions>;\r\n    readonly tableDefaults: TableDefaults | undefined;\r\n    readonly outline: readonly OutlineItem[] | 'auto' | undefined;\r\n    readonly inspectLayout: boolean;\r\n    readonly pretty: boolean;\r\n    readonly dryRun: boolean;\r\n}\r\n\r\n/** Parse `--outline`: `auto` selects heading-derived bookmarks; any other value\r\n *  is a path to a JSON file holding an `OutlineItem[]` tree. */\r\nasync function loadOutline(\r\n    spec: string,\r\n): Promise<readonly OutlineItem[] | 'auto'> {\r\n    if (spec.trim().toLowerCase() === 'auto') return 'auto';\r\n    const buf = await readFileOrStdin(spec);\r\n    assertJsonSizeLimit(buf);\r\n    let parsed: unknown;\r\n    try {\r\n        parsed = JSON.parse(buf.toString('utf8'));\r\n    } catch (e) {\r\n        const message = e instanceof Error ? e.message : String(e);\r\n        throw new CliError(`Failed to parse --outline JSON: ${message}`, 1, ErrorCode.PARSE);\r\n    }\r\n    if (!Array.isArray(parsed)) {\r\n        throw new CliError(\r\n            '--outline file must be a JSON array of OutlineItem objects (or use --outline auto).',\r\n            1,\r\n            ErrorCode.INPUT,\r\n        );\r\n    }\r\n    return parsed as readonly OutlineItem[];\r\n}\r\n\r\nasync function loadTemplate(templatePath: string): Promise<unknown> {\r\n    const buf = await readFileOrStdin(templatePath);\r\n    assertJsonSizeLimit(buf);\r\n    try {\r\n        return JSON.parse(buf.toString('utf8'));\r\n    } catch (e) {\r\n        const message = e instanceof Error ? e.message : String(e);\r\n        throw new CliError(`Failed to parse --template JSON: ${message}`, 1);\r\n    }\r\n}\r\n\r\n/** Single render pass. Reused by both one-shot and watch loops. */\r\nasync function renderOnce(cfg: RenderConfig, template: unknown): Promise<void> {\r\n    const inputBuf = await readFileOrStdin(cfg.inputPath);\r\n    assertJsonSizeLimit(inputBuf);\r\n\r\n    let parsedInput: unknown;\r\n    try {\r\n        parsedInput = JSON.parse(inputBuf.toString('utf8'));\r\n    } catch (e) {\r\n        const message = e instanceof Error ? e.message : String(e);\r\n        throw new CliError(`Failed to parse JSON input: ${message}`, 1);\r\n    }\r\n\r\n    if (template !== undefined) {\r\n        parsedInput = deepMerge(template, parsedInput);\r\n    }\r\n\r\n    if (cfg.variant === 'table') {\r\n        if (!isPdfParamsLike(parsedInput)) {\r\n            throw new CliError(\r\n                'JSON input must be a PdfParams object (with title, headers, rows) when --variant table is used.',\r\n                1,\r\n                ErrorCode.INPUT,\r\n            );\r\n        }\r\n        if (cfg.dryRun) {\r\n            emitStatus({ command: 'render', variant: 'table', dryRun: true, output: cfg.outputPath ?? '-' });\r\n            return;\r\n        }\r\n        let bytes: number | null = null;\r\n        if (cfg.usePageStream) {\r\n            const generator = buildPDFStreamPageByPage(parsedInput, cfg.layout);\r\n            await writeStreamingOutput(generator, cfg.outputPath);\r\n        } else if (cfg.useStreamTrue) {\r\n            const generator = buildPDFStreamTrue(parsedInput, cfg.layout);\r\n            await writeStreamingOutput(generator, cfg.outputPath);\r\n        } else if (cfg.useStream) {\r\n            const generator = buildPDFStream(parsedInput, cfg.layout);\r\n            await writeStreamingOutput(generator, cfg.outputPath);\r\n        } else {\r\n            const pdfBytes = buildPDFBytes(parsedInput, cfg.layout);\r\n            bytes = pdfBytes.length;\r\n            await writeOutput(pdfBytes, cfg.outputPath);\r\n        }\r\n        emitStatus({ command: 'render', variant: 'table', dryRun: false, output: cfg.outputPath ?? '-', bytes });\r\n        return;\r\n    }\r\n\r\n    // variant === 'document'\r\n    if (!isDocumentParamsLike(parsedInput)) {\r\n        throw new CliError(\r\n            'JSON input must be a DocumentParams object (with a \"blocks\" array).',\r\n            1,\r\n            ErrorCode.INPUT,\r\n        );\r\n    }\r\n\r\n    let params: DocumentParams = parsedInput;\r\n\r\n    if (cfg.tableDefaults !== undefined) {\r\n        params = applyTableDefaults(params, cfg.tableDefaults);\r\n    }\r\n\r\n    // --outline (pdfnative 1.4.0 bookmarks). Flag wins over any JSON-embedded\r\n    // outline so the CLI stays authoritative.\r\n    if (cfg.outline !== undefined) {\r\n        params = { ...params, outline: cfg.outline as DocumentParams['outline'] };\r\n    }\r\n\r\n    if (cfg.langs.length > 0) {\r\n        const existing = (params.fontEntries ?? []) as readonly FontEntry[];\r\n        // /F1 = Helvetica, /F2 = Bold; user fonts start at /F3 + (existing count).\r\n        const fontEntries = await buildFontEntriesForLangs(cfg.langs, 3 + existing.length);\r\n        params = { ...params, fontEntries: [...existing, ...fontEntries] };\r\n    }\r\n\r\n    // Merge layout: params.layout (JSON-embedded, lowest priority) is the base;\r\n    // CLI flags / --layout file (already in `layout`) override on top.\r\n    // pdfnative uses `layoutOptions ?? params.layout` — an empty object from\r\n    // the CLI side is not nullish, so params.layout would be silently dropped\r\n    // without this explicit merge.\r\n    const effectiveLayout: Partial<PdfLayoutOptions> =\r\n        params.layout !== undefined && params.layout !== null\r\n            ? { ...params.layout, ...cfg.layout }\r\n            : cfg.layout;\r\n\r\n    // --inspect-layout (pdfnative 1.5.0): emit the deterministic layout report\r\n    // as JSON instead of rendering a PDF. A read-only pre-flight for agents.\r\n    if (cfg.inspectLayout) {\r\n        let report: unknown;\r\n        try {\r\n            report = inspectDocumentLayout(params, effectiveLayout);\r\n        } catch (e) {\r\n            const message = e instanceof Error ? e.message : String(e);\r\n            throw new CliError(`Failed to inspect layout: ${message}`, 1, ErrorCode.INPUT);\r\n        }\r\n        const pretty = cfg.pretty || !isJsonMode();\r\n        await writeOutput(\r\n            new TextEncoder().encode(serializeJson(report, pretty) + '\\n'),\r\n            cfg.outputPath,\r\n        );\r\n        emitStatus({ command: 'render', variant: 'document', inspectLayout: true, output: cfg.outputPath ?? '-' });\r\n        return;\r\n    }\r\n\r\n    if (cfg.useStream && hasTocBlock(params)) {\r\n        throw new CliError(\r\n            '--stream is incompatible with TOC blocks (multi-pass pagination required).',\r\n            2,\r\n        );\r\n    }\r\n    if (cfg.useStreamTrue && hasTocBlock(params)) {\r\n        throw new CliError(\r\n            '--stream-true is incompatible with TOC blocks (multi-pass pagination required).',\r\n            2,\r\n        );\r\n    }\r\n\r\n    if (cfg.dryRun) {\r\n        emitStatus({ command: 'render', variant: 'document', dryRun: true, output: cfg.outputPath ?? '-' });\r\n        return;\r\n    }\r\n\r\n    let bytes: number | null = null;\r\n    if (cfg.usePageStream) {\r\n        // Page-by-page streaming assembles the full PDF, then chunks it at PDF\r\n        // object boundaries — so TOC blocks and {pages} placeholders are fully\r\n        // supported (unlike single-pass --stream).\r\n        const generator = buildDocumentPDFStreamPageByPage(params, effectiveLayout);\r\n        await writeStreamingOutput(generator, cfg.outputPath);\r\n    } else if (cfg.useStreamTrue) {\r\n        // True constant-memory streaming: parts are emitted and freed as they\r\n        // go, so the joined binary never materialises. Same constraints as\r\n        // --stream (no TOC, no {pages}); byte-identical to buildDocumentPDFBytes.\r\n        const generator = buildDocumentPDFStreamTrue(params, effectiveLayout);\r\n        await writeStreamingOutput(generator, cfg.outputPath);\r\n    } else if (cfg.useStream) {\r\n        const generator = buildDocumentPDFStream(params, effectiveLayout);\r\n        await writeStreamingOutput(generator, cfg.outputPath);\r\n    } else {\r\n        const pdfBytes = buildDocumentPDFBytes(params, effectiveLayout);\r\n        bytes = pdfBytes.length;\r\n        await writeOutput(pdfBytes, cfg.outputPath);\r\n    }\r\n    emitStatus({ command: 'render', variant: 'document', dryRun: false, output: cfg.outputPath ?? '-', bytes });\r\n}\r\n\r\nexport async function render(args: ParsedArgs): Promise<void> {\r\n    const inputPath = getStringFlag(args.flags, 'input', 'i');\r\n    const outputPath = getStringFlag(args.flags, 'output', 'o');\r\n    const useStream = hasFlag(args.flags, 'stream');\r\n    const usePageStream = hasFlag(args.flags, 'stream-page-by-page');\r\n    const useStreamTrue = hasFlag(args.flags, 'stream-true');\r\n    const useWatch = hasFlag(args.flags, 'watch');\r\n    const dryRun = hasFlag(args.flags, 'dry-run') || isDryRun();\r\n    const variant = getStringFlag(args.flags, 'variant') ?? 'document';\r\n    const langsRaw = getStringFlag(args.flags, 'lang');\r\n    const templatePath = getStringFlag(args.flags, 'template');\r\n    const fontFlags = getStringFlagAll(args.flags, 'font');\r\n    const tableDefaults = parseTableDefaults(args);\r\n    const outlineSpec = getStringFlag(args.flags, 'outline');\r\n    const inspectLayout = hasFlag(args.flags, 'inspect-layout');\r\n    const pretty = hasFlag(args.flags, 'pretty');\r\n\r\n    if (!VALID_VARIANTS.has(variant)) {\r\n        throw new CliError(\r\n            `Invalid --variant \"${variant}\". Valid: document, table.`,\r\n            2,\r\n        );\r\n    }\r\n\r\n    if ([useStream, usePageStream, useStreamTrue].filter(Boolean).length > 1) {\r\n        throw new CliError(\r\n            'Use only one of --stream, --stream-page-by-page, or --stream-true.',\r\n            2,\r\n        );\r\n    }\r\n\r\n    if (useWatch) {\r\n        if (inputPath === undefined) {\r\n            throw new CliError('--watch requires --input <file> (cannot watch stdin).', 2);\r\n        }\r\n        if (outputPath === undefined || outputPath === '-') {\r\n            throw new CliError('--watch requires --output <file> (cannot stream to stdout).', 2);\r\n        }\r\n    }\r\n\r\n    const layout = await buildLayoutOptions(args);\r\n    if (useStream || useStreamTrue) assertStreamingCompatible(layout);\r\n\r\n    if (layout.compress === true) {\r\n        // Required once per process for FlateDecode in Node ESM.\r\n        await initNodeCompression();\r\n    }\r\n\r\n    // Register --font shortcuts before any --lang resolution happens.\r\n    await applyFontFlags(fontFlags);\r\n\r\n    const langs = langsRaw === undefined\r\n        ? []\r\n        : langsRaw.split(',').map((s) => s.trim()).filter((s) => s.length > 0);\r\n\r\n    const template = templatePath !== undefined ? await loadTemplate(templatePath) : undefined;\r\n    const outline = outlineSpec !== undefined ? await loadOutline(outlineSpec) : undefined;\r\n\r\n    if (inspectLayout && variant !== 'document') {\r\n        throw new CliError('--inspect-layout is only available for the document variant.', 2);\r\n    }\r\n\r\n    const cfg: RenderConfig = {\r\n        variant,\r\n        useStream,\r\n        usePageStream,\r\n        useStreamTrue,\r\n        inputPath,\r\n        outputPath,\r\n        langs,\r\n        layout,\r\n        tableDefaults,\r\n        outline,\r\n        inspectLayout,\r\n        pretty,\r\n        dryRun,\r\n    };\r\n\r\n    // Initial render (always runs, even in --watch mode).\r\n    await renderOnce(cfg, template);\r\n\r\n    if (dryRun || !useWatch || inputPath === undefined) return;\r\n\r\n    // Watch loop: 200 ms debounce, stderr-only logs. Re-render errors are\r\n    // reported and the watcher stays alive (renderOnce never escapes here).\r\n    const absInput = resolvePath(inputPath);\r\n    process.stderr.write(`watching ${absInput} (Ctrl+C to stop)\\n`);\r\n\r\n    let timer: NodeJS.Timeout | null = null;\r\n    let busy = false;\r\n\r\n    const onChange = (): void => {\r\n        if (timer !== null) clearTimeout(timer);\r\n        timer = setTimeout(() => {\r\n            timer = null;\r\n            if (busy) return;\r\n            busy = true;\r\n            const stamp = new Date().toISOString();\r\n            renderOnce(cfg, template)\r\n                .then(() => {\r\n                    process.stderr.write(`[${stamp}] re-rendered ${outputPath ?? '-'}\\n`);\r\n                })\r\n                .catch((e: unknown) => {\r\n                    const msg = e instanceof Error ? e.message : String(e);\r\n                    process.stderr.write(`[${stamp}] render failed: ${msg}\\n`);\r\n                })\r\n                .finally(() => {\r\n                    busy = false;\r\n                });\r\n        }, 200);\r\n    };\r\n\r\n    watchFile(absInput, { interval: 200 }, (curr, prev) => {\r\n        if (curr.mtimeMs !== prev.mtimeMs) onChange();\r\n    });\r\n\r\n    // Block until SIGINT/SIGTERM.\r\n    await new Promise<void>((resolve) => {\r\n        const stop = (): void => {\r\n            unwatchFile(absInput);\r\n            if (timer !== null) clearTimeout(timer);\r\n            resolve();\r\n        };\r\n        process.once('SIGINT', stop);\r\n        process.once('SIGTERM', stop);\r\n    });\r\n}\r\n","// PEM key/certificate loading helpers shared by `sign` and `verify`.\r\n//\r\n// Security invariants:\r\n//   - PEM bodies and DER bytes NEVER appear in any thrown error message.\r\n//   - Path-traversal validated for every file path.\r\n//   - Env-var precedence over file paths (avoids accidental disk persistence).\r\n\r\nimport { readFile } from 'node:fs/promises';\r\nimport { createPrivateKey, createSign } from 'node:crypto';\r\nimport {\r\n    parseRsaPrivateKey,\r\n    parseCertificate,\r\n    derDecode,\r\n} from '../core-bridge/index.js';\r\nimport type {\r\n    RsaPrivateKey,\r\n    EcPrivateKey,\r\n    X509Certificate,\r\n    Asn1Node,\r\n    CryptoProvider,\r\n} from '../core-bridge/index.js';\r\nimport { validatePath } from './io.js';\r\nimport { CliError, ErrorCode } from './error.js';\r\n\r\n\r\n/**\r\n * Decode a PEM-encoded block to DER bytes.\r\n * Strips -----BEGIN ...-----/-----END ...----- headers and base64-decodes.\r\n *\r\n * Accepts a single concatenated PEM string containing one OR more blocks\r\n * (returns the concatenation in DER form is NOT supported — call splitPemBlocks\r\n * first if you need multiple blocks).\r\n */\r\nexport function pemToDer(pem: string): Uint8Array {\r\n    const body = pem\r\n        .replace(/-----BEGIN [^-]+-----/g, '')\r\n        .replace(/-----END [^-]+-----/g, '')\r\n        .replace(/\\s+/g, '');\r\n    const binaryStr = atob(body);\r\n    const bytes = new Uint8Array(binaryStr.length);\r\n    for (let i = 0; i < binaryStr.length; i++) {\r\n        bytes[i] = binaryStr.charCodeAt(i);\r\n    }\r\n    return bytes;\r\n}\r\n\r\n/** Split a concatenated PEM string into individual blocks (preserving headers). */\r\nexport function splitPemBlocks(pem: string): string[] {\r\n    const re = /-----BEGIN [^-]+-----[\\s\\S]*?-----END [^-]+-----/g;\r\n    const matches = pem.match(re);\r\n    return matches ?? [];\r\n}\r\n\r\n/**\r\n * Load PEM content from an environment variable or a file path.\r\n * Environment variable wins (security best practice for CI/CD).\r\n *\r\n * @param envVar  Name of the env var that may contain the PEM string.\r\n * @param filePath Optional file path from a CLI flag.\r\n * @param label   Human-readable label used in error messages (e.g. \"private key\").\r\n * @param flagName CLI flag name used in error messages (e.g. \"key\").\r\n */\r\nexport async function loadPem(\r\n    envVar: string,\r\n    filePath: string | undefined,\r\n    label: string,\r\n    flagName: string,\r\n): Promise<string> {\r\n    const fromEnv = process.env[envVar];\r\n    if (fromEnv !== undefined && fromEnv.trim().length > 0) return fromEnv;\r\n    if (filePath !== undefined) {\r\n        validatePath(filePath);\r\n        return readFile(filePath, 'utf8');\r\n    }\r\n    throw new CliError(\r\n        `Missing ${label}. Provide $${envVar} (env) or --${flagName} <path>.`,\r\n        2,\r\n    );\r\n}\r\n\r\n/** Load multiple PEM blocks from repeated `--cert-chain` flags or a single env var. */\r\nexport async function loadPemChain(\r\n    envVar: string,\r\n    filePaths: readonly string[],\r\n): Promise<string[]> {\r\n    const blocks: string[] = [];\r\n    const fromEnv = process.env[envVar];\r\n    if (fromEnv !== undefined && fromEnv.trim().length > 0) {\r\n        blocks.push(...splitPemBlocks(fromEnv));\r\n    }\r\n    for (const filePath of filePaths) {\r\n        validatePath(filePath);\r\n        const content = await readFile(filePath, 'utf8');\r\n        const split = splitPemBlocks(content);\r\n        if (split.length === 0) {\r\n            // File without standard PEM markers — treat as a single PEM block.\r\n            blocks.push(content);\r\n        } else {\r\n            blocks.push(...split);\r\n        }\r\n    }\r\n    return blocks;\r\n}\r\n\r\n/**\r\n * Build a native, constant-time CMS crypto provider from a PEM private key,\r\n * backed by Node's OpenSSL bindings (`node:crypto`). Passed to pdfnative as\r\n * `PdfSignOptions.provider` so signing uses side-channel-resistant OpenSSL\r\n * math instead of the pure-JS bignum path.\r\n *\r\n * The provider signs the DER-encoded CMS `SignedAttributes`: `createSign`\r\n * hashes them with SHA-256 internally and returns the correct encoding for the\r\n * key type (RSASSA-PKCS1-v1_5 for RSA, DER-encoded ECDSA for EC keys).\r\n *\r\n * Security: the `KeyObject` is created once and captured in the closure; the\r\n * PEM string is never referenced again and never appears in error messages.\r\n */\r\nexport function createNativeCryptoProvider(pem: string): CryptoProvider {\r\n    let keyObject: ReturnType<typeof createPrivateKey>;\r\n    try {\r\n        keyObject = createPrivateKey(pem);\r\n    } catch {\r\n        throw new CliError(\r\n            'Failed to load private key for native signing. Verify it is a valid PEM key, '\r\n            + 'or pass --pure-crypto to use the pure-JS signer.',\r\n            1,\r\n        );\r\n    }\r\n    return {\r\n        sign(tbs: Uint8Array): Uint8Array {\r\n            try {\r\n                return new Uint8Array(createSign('sha256').update(tbs).sign(keyObject));\r\n            } catch {\r\n                // Never surface the underlying message — it may reference key bytes.\r\n                throw new CliError('Failed to sign PDF.', 1, ErrorCode.SIGN);\r\n            }\r\n        },\r\n    };\r\n}\r\n\r\n/**\r\n * Load and parse an RSA private key from PEM (env or file).\r\n * Never includes raw key material in error messages.\r\n */\r\nexport async function loadRsaPrivateKey(\r\n    envVar: string,\r\n    filePath: string | undefined,\r\n    flagName: string,\r\n): Promise<RsaPrivateKey> {\r\n    const pem = await loadPem(envVar, filePath, 'private key', flagName);\r\n    try {\r\n        return parseRsaPrivateKey(pemToDer(pem));\r\n    } catch {\r\n        throw new CliError(\r\n            'Failed to parse RSA private key. Verify the file is a valid PEM-encoded PKCS#8 RSA key.',\r\n            1,\r\n        );\r\n    }\r\n}\r\n\r\n// ── EC private key parsing (P-256 only) ─────────────────────────────────────\r\n//\r\n// pdfnative v1.1.0 does not (yet) ship `parseEcPrivateKey`. To deliver the\r\n// v0.3.0 ECDSA-signing roadmap item we ship a small CLI-local PKCS#8 / SEC1\r\n// parser that uses pdfnative's already-exported `derDecode` for all ASN.1\r\n// work. Scope is intentionally minimal:\r\n//   • SEC1 — RFC 5915 — ECPrivateKey ::= SEQUENCE { version INTEGER (1),\r\n//                                                  privateKey OCTET STRING,\r\n//                                                  [0] parameters? OID,\r\n//                                                  [1] publicKey? BIT STRING }\r\n//   • PKCS#8 — RFC 5208 — PrivateKeyInfo wraps SEC1 in an OCTET STRING.\r\n// Curve is constrained to P-256 (secp256r1, OID 1.2.840.10045.3.1.7) — the\r\n// only curve `ecdsa-sha256` accepts in pdfnative's CMS builder.\r\n\r\nconst OID_EC_PUBLIC_KEY = '1.2.840.10045.2.1';\r\nconst OID_P256 = '1.2.840.10045.3.1.7';\r\n\r\n/** Decode an ASN.1 OID node value to dotted-decimal string. Returns null when not OID-shaped. */\r\nfunction oidToString(node: Asn1Node): string | null {\r\n    if (node.tag !== 0x06) return null;\r\n    const bytes = node.value;\r\n    if (bytes.length === 0) return null;\r\n    const first = bytes[0] as number;\r\n    const parts: number[] = [Math.floor(first / 40), first % 40];\r\n    let v = 0;\r\n    for (let i = 1; i < bytes.length; i++) {\r\n        const byte = bytes[i] as number;\r\n        v = (v << 7) | (byte & 0x7f);\r\n        if ((byte & 0x80) === 0) {\r\n            parts.push(v);\r\n            v = 0;\r\n        }\r\n    }\r\n    return parts.join('.');\r\n}\r\n\r\n/** Find the first descendant OID node matching `oidStr`. */\r\nfunction containsOid(node: Asn1Node, oidStr: string): boolean {\r\n    if (oidToString(node) === oidStr) return true;\r\n    for (const child of node.children) {\r\n        if (containsOid(child, oidStr)) return true;\r\n    }\r\n    return false;\r\n}\r\n\r\n/** Big-endian byte array → BigInt. */\r\nfunction bytesToBigInt(bytes: Uint8Array): bigint {\r\n    let v = 0n;\r\n    for (let i = 0; i < bytes.length; i++) {\r\n        v = (v << 8n) | BigInt(bytes[i] as number);\r\n    }\r\n    return v;\r\n}\r\n\r\n/**\r\n * Parse a SEC1 / PKCS#8 EC private key DER blob into an `EcPrivateKey`.\r\n * Throws a generic CliError on any structural failure (no key bytes leak).\r\n *\r\n * @internal exported for unit tests.\r\n */\r\nexport function parseEcPrivateKeyDer(der: Uint8Array): EcPrivateKey {\r\n    const root = derDecode(der);\r\n    if (root.tag !== 0x30 || root.children.length < 2) {\r\n        throw new CliError('Invalid EC private key: not an ASN.1 SEQUENCE.', 1);\r\n    }\r\n\r\n    // PKCS#8 wrapping detection: PrivateKeyInfo ::= SEQUENCE { version INTEGER,\r\n    //   privateKeyAlgorithm AlgorithmIdentifier, privateKey OCTET STRING }.\r\n    // SEC1 ECPrivateKey starts with version INTEGER (1) then OCTET STRING d.\r\n    let sec1: Asn1Node;\r\n    const second = root.children[1] as Asn1Node;\r\n    if (second.tag === 0x30) {\r\n        // PKCS#8: second child is AlgorithmIdentifier SEQUENCE.\r\n        if (!containsOid(second, OID_EC_PUBLIC_KEY)) {\r\n            throw new CliError('EC private key algorithm is not id-ecPublicKey.', 1);\r\n        }\r\n        if (!containsOid(second, OID_P256)) {\r\n            throw new CliError(\r\n                'Unsupported EC curve. Only P-256 (secp256r1) is supported in v0.3.0.',\r\n                1,\r\n            );\r\n        }\r\n        const inner = root.children[2] as Asn1Node | undefined;\r\n        if (inner === undefined || inner.tag !== 0x04) {\r\n            throw new CliError('Invalid PKCS#8 EC private key: missing inner OCTET STRING.', 1);\r\n        }\r\n        sec1 = derDecode(inner.value);\r\n    } else if (second.tag === 0x04) {\r\n        // SEC1 ECPrivateKey directly.\r\n        sec1 = root;\r\n        if (!containsOid(root, OID_P256)) {\r\n            throw new CliError(\r\n                'Unsupported EC curve. Only P-256 (secp256r1) is supported in v0.3.0.',\r\n                1,\r\n            );\r\n        }\r\n    } else {\r\n        throw new CliError('Unrecognised EC private key DER structure.', 1);\r\n    }\r\n\r\n    if (sec1.tag !== 0x30 || sec1.children.length < 2) {\r\n        throw new CliError('Invalid SEC1 EC private key.', 1);\r\n    }\r\n    const dOctet = sec1.children[1] as Asn1Node;\r\n    if (dOctet.tag !== 0x04 || dOctet.value.length === 0 || dOctet.value.length > 32) {\r\n        throw new CliError('Invalid SEC1 EC private key: bad scalar OCTET STRING.', 1);\r\n    }\r\n    const d = bytesToBigInt(dOctet.value);\r\n    if (d === 0n) {\r\n        throw new CliError('Invalid SEC1 EC private key: zero scalar.', 1);\r\n    }\r\n    return { d };\r\n}\r\n\r\n/**\r\n * Load and parse an EC P-256 private key from PEM (env or file).\r\n * Accepts both `-----BEGIN EC PRIVATE KEY-----` (SEC1) and\r\n * `-----BEGIN PRIVATE KEY-----` (PKCS#8) wrappings.\r\n * Never includes raw key material in error messages.\r\n */\r\nexport async function loadEcPrivateKey(\r\n    envVar: string,\r\n    filePath: string | undefined,\r\n    flagName: string,\r\n): Promise<EcPrivateKey> {\r\n    const pem = await loadPem(envVar, filePath, 'private key', flagName);\r\n    try {\r\n        return parseEcPrivateKeyDer(pemToDer(pem));\r\n    } catch (e) {\r\n        if (e instanceof CliError) throw e; // preserve specific curve/wrapping messages\r\n        throw new CliError(\r\n            'Failed to parse EC private key. Verify the file is a valid PEM-encoded P-256 key (SEC1 or PKCS#8).',\r\n            1,\r\n        );\r\n    }\r\n}\r\n\r\n/**\r\n * Load and parse an X.509 certificate from PEM (env or file).\r\n * Never includes raw certificate bytes in error messages.\r\n */\r\nexport async function loadCertificate(\r\n    envVar: string,\r\n    filePath: string | undefined,\r\n    flagName: string,\r\n): Promise<X509Certificate> {\r\n    const pem = await loadPem(envVar, filePath, 'certificate', flagName);\r\n    try {\r\n        return parseCertificate(pemToDer(pem));\r\n    } catch {\r\n        throw new CliError(\r\n            'Failed to parse X.509 certificate. Verify the file is valid PEM-encoded.',\r\n            1,\r\n        );\r\n    }\r\n}\r\n\r\n/** Parse a concatenated certificate chain (PEM blocks) into X509Certificate[]. */\r\nexport function parseCertificateChain(pemBlocks: readonly string[]): X509Certificate[] {\r\n    const out: X509Certificate[] = [];\r\n    for (const pem of pemBlocks) {\r\n        try {\r\n            out.push(parseCertificate(pemToDer(pem)));\r\n        } catch {\r\n            throw new CliError('Failed to parse certificate in chain.', 1);\r\n        }\r\n    }\r\n    return out;\r\n}\r\n","import { signPdfBytes, addSignaturePlaceholder, ensureCryptoReady } from '../core-bridge/index.js';\r\nimport type { PdfSignOptions, SignatureAlgorithm } from '../core-bridge/index.js';\r\nimport { type ParsedArgs, getStringFlag, getStringFlagAll, hasFlag } from '../utils/args.js';\r\nimport { readFileOrStdin, writeOutput } from '../utils/io.js';\r\nimport { CliError, ErrorCode } from '../utils/error.js';\r\nimport { emitStatus, isDryRun } from '../utils/agent.js';\r\nimport {\r\n    loadRsaPrivateKey,\r\n    loadEcPrivateKey,\r\n    loadCertificate,\r\n    loadPem,\r\n    loadPemChain,\r\n    parseCertificateChain,\r\n    createNativeCryptoProvider,\r\n} from '../utils/keys.js';\r\n\r\nconst VALID_ALGORITHMS = new Set<SignatureAlgorithm>(['rsa-sha256', 'ecdsa-sha256']);\r\n\r\nfunction parseSigningTime(raw: string): Date {\r\n    const t = new Date(raw);\r\n    if (Number.isNaN(t.getTime())) {\r\n        throw new CliError(`Invalid --signing-time \"${raw}\". Expected ISO 8601 (e.g. 2026-04-28T12:00:00Z).`, 2);\r\n    }\r\n    return t;\r\n}\r\n\r\n/** Validate that a flag value is a well-formed http(s) URL. */\r\nfunction assertHttpUrl(value: string, flag: string): void {\r\n    let url: URL;\r\n    try {\r\n        url = new URL(value);\r\n    } catch {\r\n        throw new CliError(`Invalid --${flag} URL \"${value}\".`, 2);\r\n    }\r\n    if (url.protocol !== 'http:' && url.protocol !== 'https:') {\r\n        throw new CliError(`--${flag} must be an http(s) URL, got \"${url.protocol}\".`, 2);\r\n    }\r\n}\r\n\r\nexport async function sign(args: ParsedArgs): Promise<void> {\r\n    const inputPath = getStringFlag(args.flags, 'input', 'i');\r\n    const outputPath = getStringFlag(args.flags, 'output', 'o');\r\n    const keyPath = getStringFlag(args.flags, 'key');\r\n    const certPath = getStringFlag(args.flags, 'cert');\r\n    const algorithm = (getStringFlag(args.flags, 'algorithm') ?? 'rsa-sha256') as SignatureAlgorithm;\r\n    const reason = getStringFlag(args.flags, 'reason');\r\n    const name = getStringFlag(args.flags, 'name');\r\n    const location = getStringFlag(args.flags, 'location');\r\n    const contactInfo = getStringFlag(args.flags, 'contact');\r\n    const signingTimeRaw = getStringFlag(args.flags, 'signing-time');\r\n    const chainPaths = getStringFlagAll(args.flags, 'cert-chain');\r\n    const timestampUrl = getStringFlag(args.flags, 'timestamp');\r\n    const pureCrypto = hasFlag(args.flags, 'pure-crypto');\r\n    const dryRun = hasFlag(args.flags, 'dry-run') || isDryRun();\r\n\r\n    if (!VALID_ALGORITHMS.has(algorithm)) {\r\n        throw new CliError(\r\n            `Invalid --algorithm \"${algorithm}\". Valid: rsa-sha256, ecdsa-sha256.`,\r\n            2,\r\n        );\r\n    }\r\n\r\n    // Sign-side RFC 3161 timestamping (PAdES-T) requires timestamp-token\r\n    // embedding inside the CMS SignedData — PDF-writing logic that belongs in\r\n    // pdfnative and is not yet exposed (≤ 1.2.0). We surface the flag so the\r\n    // CLI contract is stable, but fail clearly rather than silently ignoring\r\n    // it. Verify-side timestamp validation IS supported (`pdfnative verify`).\r\n    if (timestampUrl !== undefined) {\r\n        assertHttpUrl(timestampUrl, 'timestamp');\r\n        throw new CliError(\r\n            'Sign-side RFC 3161 timestamping (PAdES-T) is not yet available: embedding a '\r\n            + 'timestamp token at signing time requires upstream support in pdfnative '\r\n            + '(tracked at https://github.com/pdfnative/pdfnative/issues). '\r\n            + 'Timestamp VALIDATION is already supported — run `pdfnative verify` on a '\r\n            + 'timestamped PDF.',\r\n            2,\r\n            ErrorCode.UNSUPPORTED,\r\n        );\r\n    }\r\n\r\n    // Validate scalar flags up-front so usage errors (exit 2) are reported\r\n    // before any I/O or expensive PEM parsing.\r\n    const signingTime = signingTimeRaw !== undefined ? parseSigningTime(signingTimeRaw) : undefined;\r\n\r\n    // Pre-flight: assert credentials are reachable BEFORE doing any expensive parsing.\r\n    // This guarantees a usage error (exit 2) is reported when a flag/env var is missing,\r\n    // even if a partial set of credentials would parse successfully.\r\n    if (process.env['PDFNATIVE_SIGN_KEY'] === undefined && keyPath === undefined) {\r\n        throw new CliError('Missing private key. Provide $PDFNATIVE_SIGN_KEY (env) or --key <path>.', 2);\r\n    }\r\n    if (process.env['PDFNATIVE_SIGN_CERT'] === undefined && certPath === undefined) {\r\n        throw new CliError('Missing certificate. Provide $PDFNATIVE_SIGN_CERT (env) or --cert <path>.', 2);\r\n    }\r\n\r\n    // Async crypto bootstrap MUST run before any RSA/ECDSA key parsing.\r\n    // pdfnative throws \"ASN.1 module must be imported\" otherwise.\r\n    await ensureCryptoReady();\r\n\r\n    const pdfBuf = await readFileOrStdin(inputPath);\r\n    let pdfBytes: Uint8Array<ArrayBufferLike> = new Uint8Array(pdfBuf);\r\n\r\n    // Load credentials. Env vars beat file flags (OWASP best practice).\r\n    const signerCert = await loadCertificate('PDFNATIVE_SIGN_CERT', certPath, 'cert');\r\n\r\n    // Optional intermediate-CA chain\r\n    const chainPemBlocks = await loadPemChain('PDFNATIVE_SIGN_CHAIN', chainPaths);\r\n    const certChain = chainPemBlocks.length > 0 ? parseCertificateChain(chainPemBlocks) : undefined;\r\n\r\n    const options: { -readonly [K in keyof PdfSignOptions]: PdfSignOptions[K] } = {\r\n        signerCert,\r\n        algorithm,\r\n    };\r\n    // Signing engine. By default the CLI routes CMS signing through a native,\r\n    // constant-time (side-channel-resistant) OpenSSL signer via node:crypto.\r\n    // `--pure-crypto` forces pdfnative's pure-JS RSA/ECDSA math (useful for\r\n    // reproducibility or environments without node:crypto).\r\n    if (pureCrypto) {\r\n        if (algorithm === 'ecdsa-sha256') {\r\n            options.ecKey = await loadEcPrivateKey('PDFNATIVE_SIGN_KEY', keyPath, 'key');\r\n        } else {\r\n            options.rsaKey = await loadRsaPrivateKey('PDFNATIVE_SIGN_KEY', keyPath, 'key');\r\n        }\r\n    } else {\r\n        const keyPem = await loadPem('PDFNATIVE_SIGN_KEY', keyPath, 'private key', 'key');\r\n        options.provider = createNativeCryptoProvider(keyPem);\r\n    }\r\n    if (certChain !== undefined) options.certChain = certChain;\r\n    if (reason !== undefined) options.reason = reason;\r\n    if (name !== undefined) options.name = name;\r\n    if (location !== undefined) options.location = location;\r\n    if (contactInfo !== undefined) options.contactInfo = contactInfo;\r\n    if (signingTime !== undefined) options.signingTime = signingTime;\r\n\r\n    // Auto-inject a signature placeholder when the input PDF doesn't already\r\n    // carry one (the common case for `pdfnative render`-produced PDFs, which\r\n    // ship no AcroForm). pdfnative's addSignaturePlaceholder is idempotent:\r\n    // a PDF that already carries a /FT /Sig widget is returned unchanged.\r\n    try {\r\n        pdfBytes = addSignaturePlaceholder(pdfBytes);\r\n    } catch (e) {\r\n        if (e instanceof CliError) throw e;\r\n        throw new CliError('Failed to prepare PDF for signing.', 1, ErrorCode.SIGN);\r\n    }\r\n\r\n    // Dry-run: credentials parsed, PDF read and placeholder-prepared. Stop\r\n    // before producing (or writing) a signature. No key material is touched\r\n    // beyond the validation already performed above.\r\n    if (dryRun) {\r\n        emitStatus({ command: 'sign', dryRun: true, algorithm, output: outputPath ?? '-' });\r\n        return;\r\n    }\r\n\r\n    let signedBytes: Uint8Array;\r\n    try {\r\n        signedBytes = signPdfBytes(pdfBytes, options);\r\n    } catch (e) {\r\n        // Never include the underlying message — it may reference key bytes or hashes.\r\n        if (e instanceof CliError) throw e;\r\n        throw new CliError('Failed to sign PDF.', 1, ErrorCode.SIGN);\r\n    }\r\n    await writeOutput(signedBytes, outputPath);\r\n    emitStatus({\r\n        command: 'sign',\r\n        dryRun: false,\r\n        algorithm,\r\n        output: outputPath ?? '-',\r\n        bytes: signedBytes.length,\r\n    });\r\n}\r\n","/**\r\n * Minimal ASN.1 / DER walker with **absolute** byte offsets.\r\n *\r\n * pdfnative's `derDecode` returns nodes whose `offset` is correct only at\r\n * depth 1 (immediate children of the root). At deeper levels, `offset` is\r\n * relative to an intermediate parent's `value` slice — slicing the original\r\n * buffer with those offsets yields garbage.\r\n *\r\n * For CMS / certificate extraction we need absolute offsets at every depth,\r\n * so we re-walk the buffer ourselves with explicit length-byte arithmetic.\r\n *\r\n * Scope is intentionally minimal: tag, header length, content length, and\r\n * children. No primitive value decoding — callers slice `bytes[abs : abs +\r\n * total]` themselves when they need the exact DER for hashing or\r\n * re-encoding (RFC 5652 §5.4).\r\n *\r\n * @internal\r\n */\r\n\r\nconst TAG_CONSTRUCTED = 0x20;\r\n\r\nexport interface AbsNode {\r\n    /** ASN.1 tag byte (incl. constructed bit). */\r\n    readonly tag: number;\r\n    /** Absolute offset of the tag byte in the original buffer. */\r\n    readonly abs: number;\r\n    /** Number of header bytes (tag + length encoding). */\r\n    readonly headerLen: number;\r\n    /** Length of the content in bytes. */\r\n    readonly contentLen: number;\r\n    /** Total length = headerLen + contentLen. */\r\n    readonly totalLen: number;\r\n    /** Decoded children (constructed types only). */\r\n    readonly children: readonly AbsNode[];\r\n}\r\n\r\n/** Hard cap on a single ASN.1 node's content length: 50 MiB.\r\n *  Defends against crafted CMS structures with multi-GB declared lengths. */\r\nconst MAX_CONTENT_LEN = 50 * 1024 * 1024;\r\n\r\nfunction decodeLength(buf: Uint8Array, pos: number): { length: number; nextPos: number } {\r\n    if (pos >= buf.length) throw new Error('ASN.1: unexpected end in length');\r\n    const first = buf[pos] as number;\r\n    if (first < 0x80) return { length: first, nextPos: pos + 1 };\r\n    const numBytes = first & 0x7f;\r\n    if (numBytes === 0 || numBytes > 4) {\r\n        throw new Error(`ASN.1: unsupported long-form length (${numBytes} bytes)`);\r\n    }\r\n    if (pos + 1 + numBytes > buf.length) {\r\n        throw new Error('ASN.1: length bytes extend beyond buffer');\r\n    }\r\n    let v = 0;\r\n    for (let i = 0; i < numBytes; i++) {\r\n        v = (v << 8) | (buf[pos + 1 + i] as number);\r\n    }\r\n    if (v < 0 || v > MAX_CONTENT_LEN) {\r\n        throw new Error(`ASN.1: content length ${v} exceeds maximum (${MAX_CONTENT_LEN})`);\r\n    }\r\n    return { length: v, nextPos: pos + 1 + numBytes };\r\n}\r\n\r\n/** Decode one DER node at `abs` offset in `buf`, recursively. */\r\nexport function walkAbs(buf: Uint8Array, abs = 0): AbsNode {\r\n    if (abs >= buf.length) throw new Error(`ASN.1: unexpected end at offset ${abs}`);\r\n    const tag = buf[abs] as number;\r\n    const { length: contentLen, nextPos: contentStart } = decodeLength(buf, abs + 1);\r\n    const headerLen = contentStart - abs;\r\n    const totalLen = headerLen + contentLen;\r\n    if (abs + totalLen > buf.length) {\r\n        throw new Error(\r\n            `ASN.1: value extends beyond buffer at offset ${abs} (need ${abs + totalLen}, have ${buf.length})`,\r\n        );\r\n    }\r\n    const children: AbsNode[] = [];\r\n    if ((tag & TAG_CONSTRUCTED) !== 0) {\r\n        let p = contentStart;\r\n        const end = contentStart + contentLen;\r\n        while (p < end) {\r\n            const child = walkAbs(buf, p);\r\n            children.push(child);\r\n            p += child.totalLen;\r\n        }\r\n    }\r\n    return { tag, abs, headerLen, contentLen, totalLen, children };\r\n}\r\n\r\n/** Slice the full DER bytes (header + content) of a node from `buf`. */\r\nexport function sliceNode(buf: Uint8Array, node: AbsNode): Uint8Array {\r\n    return buf.subarray(node.abs, node.abs + node.totalLen);\r\n}\r\n\r\n/** Slice only the content bytes of a node from `buf`. */\r\nexport function sliceContent(buf: Uint8Array, node: AbsNode): Uint8Array {\r\n    return buf.subarray(node.abs + node.headerLen, node.abs + node.totalLen);\r\n}\r\n","// CMS / PKCS#7 signature-value verification helpers (RFC 5652 §5).\r\n//\r\n// pdfnative v1.1.0 does not (yet) ship a CMS verifier. v0.3.0 of the CLI\r\n// implements signature-value verification locally, on top of pdfnative's\r\n// already-exported primitives:\r\n//   - `derDecode`         — generic ASN.1 DER walker\r\n//   - `rsaVerifyHash`     — RSA PKCS#1 v1.5 verify against a pre-computed hash\r\n//   - `ecdsaVerify`       — ECDSA P-256 verify (hashes the message internally)\r\n//   - `decodeEcPublicKey` — parse 0x04||x||y uncompressed point\r\n//\r\n// Scope:\r\n//   ✔ RSA-SHA-256 and ECDSA-SHA-256 SignerInfo verification\r\n//   ✔ Standard DER re-encoding of `signedAttrs` (replace IMPLICIT [0] tag 0xA0\r\n//     with the explicit SET tag 0x31, RFC 5652 §5.4 — the rest of the encoded\r\n//     bytes is byte-identical)\r\n//   ✔ Recognition of the RFC 3161 `signature-time-stamp-token` unsigned\r\n//     attribute (no TSP signature validation in v0.3.0 — see ROADMAP)\r\n//\r\n// Out of scope (deferred to v0.4.0):\r\n//   ✘ Full RFC 3161 timestamp signature validation\r\n//   ✘ OCSP / CRL revocation\r\n//   ✘ Long-Term Validation (LTV)\r\n\r\nimport { createHash } from 'node:crypto';\r\nimport {\r\n    derDecode,\r\n    rsaVerifyHash,\r\n    ecdsaVerify,\r\n    decodeEcPublicKey,\r\n} from '../core-bridge/index.js';\r\nimport type {\r\n    Asn1Node,\r\n    X509Certificate,\r\n} from '../core-bridge/index.js';\r\nimport { walkAbs, sliceNode, sliceContent, type AbsNode } from './asn1-walk.js';\r\n\r\n// ── OID constants ─────────────────────────────────────────────────────\r\n\r\n/** RSA encryption (PKCS#1) — id-rsaEncryption. */\r\nconst OID_RSA_ENCRYPTION = '1.2.840.113549.1.1.1';\r\n/** SHA-256 with RSA encryption — sha256WithRSAEncryption. */\r\nconst OID_SHA256_RSA = '1.2.840.113549.1.1.11';\r\n/** SHA-1 with RSA encryption (legacy CRL/OCSP responders). */\r\nconst OID_SHA1_RSA = '1.2.840.113549.1.1.5';\r\n/** SHA-384 / SHA-512 with RSA encryption. */\r\nconst OID_SHA384_RSA = '1.2.840.113549.1.1.12';\r\nconst OID_SHA512_RSA = '1.2.840.113549.1.1.13';\r\n/** ECDSA with SHA-256 — ecdsa-with-SHA256. */\r\nconst OID_ECDSA_SHA256 = '1.2.840.10045.4.3.2';\r\n/** id-data — ContentInfo content type. */\r\nconst OID_DATA = '1.2.840.113549.1.7.1';\r\n/** PKCS#9 message-digest signed attribute. */\r\nconst OID_MESSAGE_DIGEST = '1.2.840.113549.1.9.4';\r\n/** PKCS#9 content-type signed attribute. */\r\nconst OID_CONTENT_TYPE = '1.2.840.113549.1.9.3';\r\n/** RFC 3161 — id-aa-signatureTimeStampToken (unsigned attribute). */\r\nconst OID_TIMESTAMP_TOKEN = '1.2.840.113549.1.9.16.2.14';\r\n/** PKCS#7 SignedData. */\r\nconst OID_SIGNED_DATA = '1.2.840.113549.1.7.2';\r\n\r\n// ── ASN.1 helpers ─────────────────────────────────────────────────────\r\n\r\n/** Decode a DER OID node value to dotted-decimal string. Returns null when not OID-shaped. */\r\nexport function oidToString(node: Asn1Node): string | null {\r\n    if (node.tag !== 0x06) return null;\r\n    const bytes = node.value;\r\n    if (bytes.length === 0) return null;\r\n    const first = bytes[0] as number;\r\n    const parts: number[] = [Math.floor(first / 40), first % 40];\r\n    let v = 0;\r\n    for (let i = 1; i < bytes.length; i++) {\r\n        const byte = bytes[i] as number;\r\n        v = (v << 7) | (byte & 0x7f);\r\n        if ((byte & 0x80) === 0) {\r\n            parts.push(v);\r\n            v = 0;\r\n        }\r\n    }\r\n    return parts.join('.');\r\n}\r\n\r\n/** Big-endian byte array → BigInt. */\r\nfunction bytesToBigInt(bytes: Uint8Array): bigint {\r\n    let v = 0n;\r\n    for (let i = 0; i < bytes.length; i++) {\r\n        v = (v << 8n) | BigInt(bytes[i] as number);\r\n    }\r\n    return v;\r\n}\r\n\r\n// ── Public key extraction from X509Certificate ────────────────────────\r\n\r\ninterface RsaPublicKey { readonly n: bigint; readonly e: bigint }\r\n\r\n/**\r\n * Extract an RSA public key from an `X509Certificate`.\r\n * `cert.publicKeyBytes` carries the BIT STRING content of the cert's\r\n * SubjectPublicKeyInfo, which for RSA is `SEQUENCE { modulus INTEGER,\r\n * publicExponent INTEGER }`.\r\n */\r\nfunction rsaPubKeyFromCert(cert: X509Certificate): RsaPublicKey {\r\n    const node = derDecode(cert.publicKeyBytes);\r\n    if (node.tag !== 0x30 || node.children.length !== 2) {\r\n        throw new Error('not an RSA public key SEQUENCE');\r\n    }\r\n    const nNode = node.children[0] as Asn1Node;\r\n    const eNode = node.children[1] as Asn1Node;\r\n    if (nNode.tag !== 0x02 || eNode.tag !== 0x02) {\r\n        throw new Error('RSA public key components are not INTEGERs');\r\n    }\r\n    return { n: bytesToBigInt(nNode.value), e: bytesToBigInt(eNode.value) };\r\n}\r\n\r\n// ── CMS walker ────────────────────────────────────────────────────────\r\n\r\n/** Decode an OID from an `AbsNode` whose tag is OID (0x06). */\r\nfunction oidFromAbs(buf: Uint8Array, node: AbsNode): string | null {\r\n    if (node.tag !== 0x06) return null;\r\n    const bytes = sliceContent(buf, node);\r\n    if (bytes.length === 0) return null;\r\n    const first = bytes[0] as number;\r\n    const parts: number[] = [Math.floor(first / 40), first % 40];\r\n    let v = 0;\r\n    for (let i = 1; i < bytes.length; i++) {\r\n        const byte = bytes[i] as number;\r\n        v = (v << 7) | (byte & 0x7f);\r\n        if ((byte & 0x80) === 0) {\r\n            parts.push(v);\r\n            v = 0;\r\n        }\r\n    }\r\n    return parts.join('.');\r\n}\r\n\r\n/**\r\n * Locate the inner `SignedData` SEQUENCE of a CMS `ContentInfo`.\r\n *\r\n * ContentInfo ::= SEQUENCE { contentType OID, content [0] EXPLICIT ANY }\r\n * (contentType MUST be id-signedData).\r\n */\r\nfunction getSignedData(buf: Uint8Array, root: AbsNode): AbsNode | null {\r\n    if (root.tag !== 0x30 || root.children.length < 2) return null;\r\n    if (oidFromAbs(buf, root.children[0] as AbsNode) !== OID_SIGNED_DATA) return null;\r\n    const explicit = root.children[1] as AbsNode;\r\n    if (explicit.tag !== 0xa0 || explicit.children.length === 0) return null;\r\n    const signedData = explicit.children[0] as AbsNode;\r\n    return signedData.tag === 0x30 ? signedData : null;\r\n}\r\n\r\n/**\r\n * Locate the SignerInfo node inside a parsed CMS ContentInfo.\r\n *\r\n * SignedData  ::= SEQUENCE { version, digestAlgorithms SET, encapContentInfo,\r\n *                            certificates [0] IMPLICIT?, crls [1] IMPLICIT?,\r\n *                            signerInfos SET OF SignerInfo }\r\n */\r\nfunction findSignerInfo(buf: Uint8Array, root: AbsNode): AbsNode | null {\r\n    const signedData = getSignedData(buf, root);\r\n    if (signedData === null) return null;\r\n    // signerInfos is the last SET in SignedData.\r\n    for (let i = signedData.children.length - 1; i >= 0; i--) {\r\n        const child = signedData.children[i] as AbsNode;\r\n        if (child.tag === 0x31 && child.children.length > 0) {\r\n            return child.children[0] as AbsNode;\r\n        }\r\n    }\r\n    return null;\r\n}\r\n\r\n// ── SignerInfo destructuring ──────────────────────────────────────────\r\n\r\ninterface ParsedSignerInfo {\r\n    readonly signedAttrsRaw: Uint8Array | null; // includes [0] IMPLICIT tag header\r\n    readonly signatureAlgorithmOid: string | null;\r\n    readonly signatureValue: Uint8Array | null;\r\n    readonly unsignedAttrsRaw: Uint8Array | null;\r\n}\r\n\r\n/**\r\n * SignerInfo ::= SEQUENCE {\r\n *   version             CMSVersion,\r\n *   sid                 SignerIdentifier,\r\n *   digestAlgorithm     DigestAlgorithmIdentifier,\r\n *   signedAttrs   [0] IMPLICIT SignedAttributes OPTIONAL,\r\n *   signatureAlgorithm  SignatureAlgorithmIdentifier,\r\n *   signature           SignatureValue,\r\n *   unsignedAttrs [1] IMPLICIT UnsignedAttributes OPTIONAL\r\n * }\r\n */\r\nfunction parseSignerInfo(cmsBytes: Uint8Array, signerInfo: AbsNode): ParsedSignerInfo {\r\n    if (signerInfo.tag !== 0x30) {\r\n        return {\r\n            signedAttrsRaw: null,\r\n            signatureAlgorithmOid: null,\r\n            signatureValue: null,\r\n            unsignedAttrsRaw: null,\r\n        };\r\n    }\r\n    let signedAttrsRaw: Uint8Array | null = null;\r\n    let signatureAlgorithmOid: string | null = null;\r\n    let signatureValue: Uint8Array | null = null;\r\n    let unsignedAttrsRaw: Uint8Array | null = null;\r\n\r\n    // Walk children left-to-right so we can rely on declaration order.\r\n    let sigAlgSeen = false;\r\n    for (const child of signerInfo.children) {\r\n        if (child.tag === 0xa0) {\r\n            // [0] IMPLICIT signedAttrs — capture raw bytes including header.\r\n            signedAttrsRaw = sliceNode(cmsBytes, child);\r\n        } else if (child.tag === 0xa1) {\r\n            unsignedAttrsRaw = sliceNode(cmsBytes, child);\r\n        } else if (child.tag === 0x30 && !sigAlgSeen) {\r\n            // First plain SEQUENCE we encounter AFTER signedAttrs must be the\r\n            // signatureAlgorithm. (digestAlgorithm appears before signedAttrs.)\r\n            if (signedAttrsRaw !== null) {\r\n                signatureAlgorithmOid = oidFromAbs(cmsBytes, child.children[0] as AbsNode);\r\n                sigAlgSeen = true;\r\n            }\r\n        } else if (child.tag === 0x04 && sigAlgSeen) {\r\n            signatureValue = sliceContent(cmsBytes, child);\r\n        }\r\n    }\r\n    return { signedAttrsRaw, signatureAlgorithmOid, signatureValue, unsignedAttrsRaw };\r\n}\r\n\r\n// ── signedAttrs DER re-encoding for hashing (RFC 5652 §5.4) ───────────\r\n\r\n/**\r\n * Replace the leading `[0] IMPLICIT` tag (`0xA0`) of the signedAttrs blob\r\n * with the explicit `SET OF` tag (`0x31`). The length encoding is\r\n * unchanged. Returns a NEW byte array (input is never mutated).\r\n */\r\nexport function reencodeSignedAttrsAsSet(signedAttrsRaw: Uint8Array): Uint8Array {\r\n    if (signedAttrsRaw.length === 0 || signedAttrsRaw[0] !== 0xa0) {\r\n        throw new Error('signedAttrs does not start with [0] IMPLICIT tag');\r\n    }\r\n    const out = new Uint8Array(signedAttrsRaw.length);\r\n    out.set(signedAttrsRaw);\r\n    out[0] = 0x31;\r\n    return out;\r\n}\r\n\r\n// ── ECDSA signature value parsing ─────────────────────────────────────\r\n\r\n/**\r\n * CMS ECDSA `signatureValue` is a DER-encoded `Ecdsa-Sig-Value\r\n * SEQUENCE { r INTEGER, s INTEGER }`. Extract `(r, s)` as BigInts.\r\n */\r\nexport function decodeEcdsaSignatureValue(sig: Uint8Array): { r: bigint; s: bigint } {\r\n    const node = derDecode(sig);\r\n    if (node.tag !== 0x30 || node.children.length !== 2) {\r\n        throw new Error('ECDSA signature is not a 2-element SEQUENCE');\r\n    }\r\n    const rNode = node.children[0] as Asn1Node;\r\n    const sNode = node.children[1] as Asn1Node;\r\n    if (rNode.tag !== 0x02 || sNode.tag !== 0x02) {\r\n        throw new Error('ECDSA signature components are not INTEGERs');\r\n    }\r\n    return { r: bytesToBigInt(rNode.value), s: bytesToBigInt(sNode.value) };\r\n}\r\n\r\n// ── Timestamp recognition ─────────────────────────────────────────────\r\n\r\n/** Scan an UnsignedAttributes node for the RFC 3161 timestamp OID. */\r\nexport function hasTimestampToken(unsignedAttrsRaw: Uint8Array | null): boolean {\r\n    if (unsignedAttrsRaw === null) return false;\r\n    let root: Asn1Node;\r\n    try {\r\n        // Re-encode to a SET so derDecode does not refuse the IMPLICIT [1] tag.\r\n        const buf = new Uint8Array(unsignedAttrsRaw);\r\n        buf[0] = 0x31;\r\n        root = derDecode(buf);\r\n    } catch {\r\n        return false;\r\n    }\r\n    for (const attr of root.children) {\r\n        if (attr.children.length > 0) {\r\n            const oid = oidToString(attr.children[0] as Asn1Node);\r\n            if (oid === OID_TIMESTAMP_TOKEN) return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\n\r\n// ── Signature-value verification ──────────────────────────────────────\r\n\r\nexport interface CmsVerifyResult {\r\n    /** True iff the signature value verifies against the signed attributes. */\r\n    readonly signatureValid: boolean;\r\n    /** Detected algorithm. `null` when unknown / unsupported. */\r\n    readonly algorithm: 'rsa-sha256' | 'ecdsa-sha256' | null;\r\n    /** True when an RFC 3161 timestamp token is present (NOT validated). */\r\n    readonly timestampPresent: boolean;\r\n    /** Human-readable diagnostic for failures or unsupported flows. */\r\n    readonly note: string | null;\r\n}\r\n\r\n/**\r\n * Verify the CMS signature value against the signed attributes for a single\r\n * SignerInfo, using the leaf certificate's public key.\r\n *\r\n * The CLI's [verify command](../commands/verify.ts) is responsible for\r\n * orchestrating chain + integrity + trust checks; this function ONLY checks\r\n * the cryptographic signature over `signedAttrs`.\r\n */\r\nexport function verifyCmsSignatureValue(\r\n    cmsBytes: Uint8Array,\r\n    leafCert: X509Certificate,\r\n): CmsVerifyResult {\r\n    let root: AbsNode;\r\n    try {\r\n        root = walkAbs(cmsBytes);\r\n    } catch {\r\n        return {\r\n            signatureValid: false,\r\n            algorithm: null,\r\n            timestampPresent: false,\r\n            note: 'failed to decode CMS DER',\r\n        };\r\n    }\r\n    const signerInfo = findSignerInfo(cmsBytes, root);\r\n    if (signerInfo === null) {\r\n        return {\r\n            signatureValid: false,\r\n            algorithm: null,\r\n            timestampPresent: false,\r\n            note: 'SignerInfo not found in CMS',\r\n        };\r\n    }\r\n\r\n    const parsed = parseSignerInfo(cmsBytes, signerInfo);\r\n    const timestampPresent = hasTimestampToken(parsed.unsignedAttrsRaw);\r\n\r\n    if (parsed.signedAttrsRaw === null) {\r\n        return {\r\n            signatureValid: false,\r\n            algorithm: null,\r\n            timestampPresent,\r\n            note: 'signedAttrs missing — direct content signing not supported in v0.3.0',\r\n        };\r\n    }\r\n    if (parsed.signatureValue === null) {\r\n        return {\r\n            signatureValid: false,\r\n            algorithm: null,\r\n            timestampPresent,\r\n            note: 'signatureValue missing in SignerInfo',\r\n        };\r\n    }\r\n\r\n    let signedAttrsForHash: Uint8Array;\r\n    try {\r\n        signedAttrsForHash = reencodeSignedAttrsAsSet(parsed.signedAttrsRaw);\r\n    } catch (e) {\r\n        return {\r\n            signatureValid: false,\r\n            algorithm: null,\r\n            timestampPresent,\r\n            note: e instanceof Error ? e.message : 'signedAttrs re-encoding failed',\r\n        };\r\n    }\r\n\r\n    const oid = parsed.signatureAlgorithmOid;\r\n    if (oid === OID_SHA256_RSA || oid === OID_RSA_ENCRYPTION) {\r\n        let pubKey: RsaPublicKey;\r\n        try {\r\n            pubKey = rsaPubKeyFromCert(leafCert);\r\n        } catch (e) {\r\n            return {\r\n                signatureValid: false,\r\n                algorithm: 'rsa-sha256',\r\n                timestampPresent,\r\n                note: e instanceof Error ? e.message : 'RSA public key extraction failed',\r\n            };\r\n        }\r\n        const hash = createHash('sha256').update(signedAttrsForHash).digest();\r\n        let valid = false;\r\n        try {\r\n            valid = rsaVerifyHash(new Uint8Array(hash), parsed.signatureValue, pubKey);\r\n        } catch (e) {\r\n            return {\r\n                signatureValid: false,\r\n                algorithm: 'rsa-sha256',\r\n                timestampPresent,\r\n                note: e instanceof Error ? e.message : 'RSA verification threw',\r\n            };\r\n        }\r\n        return {\r\n            signatureValid: valid,\r\n            algorithm: 'rsa-sha256',\r\n            timestampPresent,\r\n            note: valid ? null : 'RSA signature value mismatch',\r\n        };\r\n    }\r\n\r\n    if (oid === OID_ECDSA_SHA256) {\r\n        // For ECDSA, ecdsaVerify takes the message bytes (it hashes internally).\r\n        let r: bigint;\r\n        let s: bigint;\r\n        try {\r\n            ({ r, s } = decodeEcdsaSignatureValue(parsed.signatureValue));\r\n        } catch (e) {\r\n            return {\r\n                signatureValid: false,\r\n                algorithm: 'ecdsa-sha256',\r\n                timestampPresent,\r\n                note: e instanceof Error ? e.message : 'ECDSA signature decode failed',\r\n            };\r\n        }\r\n        let pubKey;\r\n        try {\r\n            pubKey = decodeEcPublicKey(leafCert.publicKeyBytes);\r\n        } catch (e) {\r\n            return {\r\n                signatureValid: false,\r\n                algorithm: 'ecdsa-sha256',\r\n                timestampPresent,\r\n                note: e instanceof Error ? e.message : 'EC public key extraction failed',\r\n            };\r\n        }\r\n        let valid = false;\r\n        try {\r\n            valid = ecdsaVerify(signedAttrsForHash, r, s, pubKey);\r\n        } catch (e) {\r\n            return {\r\n                signatureValid: false,\r\n                algorithm: 'ecdsa-sha256',\r\n                timestampPresent,\r\n                note: e instanceof Error ? e.message : 'ECDSA verification threw',\r\n            };\r\n        }\r\n        return {\r\n            signatureValid: valid,\r\n            algorithm: 'ecdsa-sha256',\r\n            timestampPresent,\r\n            note: valid ? null : 'ECDSA signature value mismatch',\r\n        };\r\n    }\r\n\r\n    return {\r\n        signatureValid: false,\r\n        algorithm: null,\r\n        timestampPresent,\r\n        note: `unsupported signature algorithm OID ${oid ?? '<unknown>'}`,\r\n    };\r\n}\r\n\r\nexport const __testOnly = {\r\n    OID_DATA,\r\n    OID_MESSAGE_DIGEST,\r\n    OID_CONTENT_TYPE,\r\n    OID_TIMESTAMP_TOKEN,\r\n};\r\n\r\n// ──────────────────────────────────────────────────────────────────────\r\n// Generic signed-structure verification (CRL `tbsCertList`, OCSP\r\n// `tbsResponseData`). Reuses the same RSA / ECDSA primitives as the CMS\r\n// SignerInfo verifier.\r\n// ──────────────────────────────────────────────────────────────────────\r\n\r\nconst RSA_DIGEST_BY_OID: Readonly<Record<string, string>> = {\r\n    [OID_SHA256_RSA]: 'sha256',\r\n    [OID_SHA1_RSA]: 'sha1',\r\n    [OID_SHA384_RSA]: 'sha384',\r\n    [OID_SHA512_RSA]: 'sha512',\r\n};\r\n\r\n/**\r\n * Verify a DER-signed structure (e.g. a CRL `tbsCertList` or an OCSP\r\n * `tbsResponseData`) against a signer certificate's public key.\r\n *\r\n * Supports RSA with SHA-1/256/384/512 and ECDSA-SHA-256. Returns `false`\r\n * (never throws) for unsupported algorithms or any structural problem.\r\n */\r\nexport function verifySignedStructure(\r\n    tbsBytes: Uint8Array,\r\n    signatureAlgorithmOid: string | null,\r\n    signature: Uint8Array,\r\n    signerCert: X509Certificate,\r\n): boolean {\r\n    if (signatureAlgorithmOid === null) return false;\r\n    try {\r\n        const rsaDigest = RSA_DIGEST_BY_OID[signatureAlgorithmOid];\r\n        if (rsaDigest !== undefined) {\r\n            const pub = rsaPubKeyFromCert(signerCert);\r\n            const hash = new Uint8Array(createHash(rsaDigest).update(tbsBytes).digest());\r\n            return rsaVerifyHash(hash, signature, pub);\r\n        }\r\n        if (signatureAlgorithmOid === OID_ECDSA_SHA256) {\r\n            const { r, s } = decodeEcdsaSignatureValue(signature);\r\n            const pub = decodeEcPublicKey(signerCert.publicKeyBytes);\r\n            return ecdsaVerify(tbsBytes, r, s, pub);\r\n        }\r\n    } catch {\r\n        return false;\r\n    }\r\n    return false;\r\n}\r\n\r\n// ──────────────────────────────────────────────────────────────────────\r\n// Shared CMS extraction helpers\r\n//\r\n// Re-used by the `verify` command, the RFC 3161 timestamp verifier\r\n// (timestamp-verify.ts) and the revocation checker (revocation.ts). Each\r\n// returns `null` / `[]` on any structural problem — callers decide how to\r\n// report. None of these throw on malformed input.\r\n// ──────────────────────────────────────────────────────────────────────\r\n\r\n/** Decode a DER OID node (absolute-offset) to dotted-decimal, or null. */\r\nexport function decodeOid(buf: Uint8Array, node: AbsNode): string | null {\r\n    return oidFromAbs(buf, node);\r\n}\r\n\r\n/** Extract every embedded X.509 certificate DER block from a CMS SignedData. */\r\nexport function extractCmsCertificates(cmsBytes: Uint8Array): Uint8Array[] {\r\n    let root: AbsNode;\r\n    try {\r\n        root = walkAbs(cmsBytes);\r\n    } catch {\r\n        return [];\r\n    }\r\n    const signedData = getSignedData(cmsBytes, root);\r\n    if (signedData === null) return [];\r\n    for (const child of signedData.children) {\r\n        if (child.tag === 0xa0) {\r\n            // certificates [0] IMPLICIT — children are SEQUENCEs (one per cert).\r\n            const out: Uint8Array[] = [];\r\n            for (const certNode of child.children) {\r\n                if (certNode.tag === 0x30) out.push(sliceNode(cmsBytes, certNode));\r\n            }\r\n            return out;\r\n        }\r\n    }\r\n    return [];\r\n}\r\n\r\n/** Extract every embedded CRL DER block from a CMS SignedData (`crls [1]`). */\r\nexport function extractCmsCrls(cmsBytes: Uint8Array): Uint8Array[] {\r\n    let root: AbsNode;\r\n    try {\r\n        root = walkAbs(cmsBytes);\r\n    } catch {\r\n        return [];\r\n    }\r\n    const signedData = getSignedData(cmsBytes, root);\r\n    if (signedData === null) return [];\r\n    for (const child of signedData.children) {\r\n        if (child.tag === 0xa1) {\r\n            // crls [1] IMPLICIT — children are CertificateList SEQUENCEs.\r\n            const out: Uint8Array[] = [];\r\n            for (const crlNode of child.children) {\r\n                if (crlNode.tag === 0x30) out.push(sliceNode(cmsBytes, crlNode));\r\n            }\r\n            return out;\r\n        }\r\n    }\r\n    return [];\r\n}\r\n\r\n/**\r\n * Extract the document SignerInfo's `signatureValue` OCTET STRING content.\r\n * This is the value an RFC 3161 timestamp's `messageImprint` is taken over.\r\n */\r\nexport function extractSignerSignatureValue(cmsBytes: Uint8Array): Uint8Array | null {\r\n    let root: AbsNode;\r\n    try {\r\n        root = walkAbs(cmsBytes);\r\n    } catch {\r\n        return null;\r\n    }\r\n    const signerInfo = findSignerInfo(cmsBytes, root);\r\n    if (signerInfo === null) return null;\r\n    return parseSignerInfo(cmsBytes, signerInfo).signatureValue;\r\n}\r\n\r\n/** Extract the raw `[1] IMPLICIT unsignedAttrs` blob (header included), or null. */\r\nexport function extractUnsignedAttrs(cmsBytes: Uint8Array): Uint8Array | null {\r\n    let root: AbsNode;\r\n    try {\r\n        root = walkAbs(cmsBytes);\r\n    } catch {\r\n        return null;\r\n    }\r\n    const signerInfo = findSignerInfo(cmsBytes, root);\r\n    if (signerInfo === null) return null;\r\n    return parseSignerInfo(cmsBytes, signerInfo).unsignedAttrsRaw;\r\n}\r\n\r\n/**\r\n * Extract the value of the SignerInfo `messageDigest` signed attribute\r\n * (PKCS#9 OID 1.2.840.113549.1.9.4), or null when absent.\r\n */\r\nexport function extractSignedMessageDigest(cmsBytes: Uint8Array): Uint8Array | null {\r\n    let root: AbsNode;\r\n    try {\r\n        root = walkAbs(cmsBytes);\r\n    } catch {\r\n        return null;\r\n    }\r\n    const signerInfo = findSignerInfo(cmsBytes, root);\r\n    if (signerInfo === null) return null;\r\n    const signedAttrsRaw = parseSignerInfo(cmsBytes, signerInfo).signedAttrsRaw;\r\n    if (signedAttrsRaw === null) return null;\r\n    let attrsSet: AbsNode;\r\n    try {\r\n        // Re-tag [0] IMPLICIT → SET (0x31) so the walker treats it uniformly.\r\n        const buf = new Uint8Array(signedAttrsRaw);\r\n        buf[0] = 0x31;\r\n        attrsSet = walkAbs(buf);\r\n        for (const attr of attrsSet.children) {\r\n            if (attr.children.length < 2) continue;\r\n            if (oidFromAbs(buf, attr.children[0] as AbsNode) !== OID_MESSAGE_DIGEST) continue;\r\n            const valueSet = attr.children[1] as AbsNode;\r\n            if (valueSet.children.length === 0) return null;\r\n            const oct = valueSet.children[0] as AbsNode;\r\n            if (oct.tag !== 0x04) return null;\r\n            return sliceContent(buf, oct);\r\n        }\r\n    } catch {\r\n        return null;\r\n    }\r\n    return null;\r\n}\r\n\r\n/** Encapsulated content of a CMS SignedData (`eContentType` + `eContent` bytes). */\r\nexport interface EncapsulatedContent {\r\n    readonly contentType: string | null;\r\n    readonly content: Uint8Array;\r\n}\r\n\r\n/**\r\n * Extract the encapsulated content (`eContentType`, `eContent`) of a CMS\r\n * SignedData. For an RFC 3161 token the content is the DER-encoded TSTInfo.\r\n */\r\nexport function extractEContent(cmsBytes: Uint8Array): EncapsulatedContent | null {\r\n    let root: AbsNode;\r\n    try {\r\n        root = walkAbs(cmsBytes);\r\n    } catch {\r\n        return null;\r\n    }\r\n    const signedData = getSignedData(cmsBytes, root);\r\n    if (signedData === null) return null;\r\n    // encapContentInfo is the first plain SEQUENCE child (after version INTEGER\r\n    // and digestAlgorithms SET).\r\n    for (const child of signedData.children) {\r\n        if (child.tag !== 0x30) continue;\r\n        if (child.children.length < 1) return null;\r\n        const oid = oidFromAbs(cmsBytes, child.children[0] as AbsNode);\r\n        // eContent is wrapped in [0] EXPLICIT containing an OCTET STRING.\r\n        if (child.children.length >= 2) {\r\n            const explicit = child.children[1] as AbsNode;\r\n            if (explicit.tag === 0xa0 && explicit.children.length > 0) {\r\n                const oct = explicit.children[0] as AbsNode;\r\n                if (oct.tag === 0x04) {\r\n                    return { contentType: oid, content: sliceContent(cmsBytes, oct) };\r\n                }\r\n            }\r\n        }\r\n        return { contentType: oid, content: new Uint8Array(0) };\r\n    }\r\n    return null;\r\n}\r\n","// X.509 certificate-chain construction and trust evaluation.\r\n//\r\n// Shared by the `verify` command, the RFC 3161 timestamp verifier\r\n// (timestamp-verify.ts) and the revocation checker (revocation.ts). All\r\n// signature math is delegated to pdfnative's `verifyCertSignature` /\r\n// `isSelfSigned`; this module only walks the parent links.\r\n\r\nimport { verifyCertSignature, isSelfSigned } from '../core-bridge/index.js';\r\nimport type { X509Certificate } from '../core-bridge/index.js';\r\n\r\n/** Byte-exact certificate equality (DER comparison). */\r\nexport function certEquals(a: X509Certificate, b: X509Certificate): boolean {\r\n    if (a.raw.length !== b.raw.length) return false;\r\n    for (let i = 0; i < a.raw.length; i++) {\r\n        if (a.raw[i] !== b.raw[i]) return false;\r\n    }\r\n    return true;\r\n}\r\n\r\n/** Find a certificate in `candidates` that signed `cert` (i.e. its issuer). */\r\nexport function findChainParent(\r\n    cert: X509Certificate,\r\n    candidates: readonly X509Certificate[],\r\n): X509Certificate | undefined {\r\n    for (const c of candidates) {\r\n        if (certEquals(c, cert)) continue;\r\n        try {\r\n            if (verifyCertSignature(cert, c)) return c;\r\n        } catch {\r\n            // ignore — try next candidate\r\n        }\r\n    }\r\n    return undefined;\r\n}\r\n\r\nexport interface BuiltChain {\r\n    /** Ordered chain from leaf → … → root. */\r\n    readonly chain: readonly X509Certificate[];\r\n    /** True when every intermediate link resolved to a verified parent. */\r\n    readonly chainValid: boolean;\r\n    /** The terminal certificate (self-signed root, or the last link found). */\r\n    readonly root: X509Certificate;\r\n}\r\n\r\n/**\r\n * Build a certificate chain from `leaf`, drawing parents from `pool`\r\n * (embedded certs + trust anchors). Stops at a self-signed certificate or\r\n * when no verified parent is found. Cycle-safe.\r\n */\r\nexport function buildChain(\r\n    leaf: X509Certificate,\r\n    pool: readonly X509Certificate[],\r\n): BuiltChain {\r\n    const chain: X509Certificate[] = [leaf];\r\n    let current = leaf;\r\n    let chainValid = true;\r\n    const seen: X509Certificate[] = [leaf];\r\n    while (!isSelfSigned(current)) {\r\n        const parent = findChainParent(current, pool);\r\n        if (parent === undefined || seen.some((c) => certEquals(c, parent))) {\r\n            chainValid = false;\r\n            break;\r\n        }\r\n        chain.push(parent);\r\n        seen.push(parent);\r\n        current = parent;\r\n    }\r\n    return { chain, chainValid, root: current };\r\n}\r\n\r\n/**\r\n * Evaluate whether a built chain's root is trusted.\r\n *\r\n * When `trustRoots` is empty, a self-signed root is accepted (the historical\r\n * CLI behaviour, surfaced as a note by callers). Otherwise the root must be\r\n * byte-equal to one of the provided anchors.\r\n */\r\nexport function isTrustedRoot(\r\n    root: X509Certificate,\r\n    trustRoots: readonly X509Certificate[],\r\n): boolean {\r\n    if (trustRoots.length === 0) return isSelfSigned(root);\r\n    return trustRoots.some((t) => certEquals(t, root));\r\n}\r\n","// RFC 3161 timestamp-token validation (PAdES-T).\r\n//\r\n// A PDF signature may carry a signed timestamp as the SignerInfo unsigned\r\n// attribute `id-aa-signatureTimeStampToken` (OID 1.2.840.113549.1.9.16.2.14).\r\n// The attribute value is a complete CMS `ContentInfo` (SignedData) whose\r\n// encapsulated content is an RFC 3161 `TSTInfo`.\r\n//\r\n// This verifier proves, OFFLINE and with no network access:\r\n//   1. the TSA's SignerInfo signature over its own signedAttrs is valid\r\n//      (delegated to cms-verify);\r\n//   2. the token's signed `messageDigest` attribute equals SHA-256 of the\r\n//      encapsulated TSTInfo (eContent integrity);\r\n//   3. the TSTInfo `messageImprint` equals the configured hash of the document\r\n//      signature value the token is bound to (binding integrity);\r\n//   4. the TSA certificate chain builds and (optionally) anchors to trust.\r\n//\r\n// `genTime` is extracted for reporting. No network, no nonce replay store.\r\n\r\nimport { createHash } from 'node:crypto';\r\nimport { walkAbs, sliceContent, type AbsNode } from './asn1-walk.js';\r\nimport {\r\n    verifyCmsSignatureValue,\r\n    extractEContent,\r\n    extractCmsCertificates,\r\n    extractSignedMessageDigest,\r\n    decodeOid,\r\n} from './cms-verify.js';\r\nimport { buildChain, isTrustedRoot } from './cert-chain.js';\r\nimport { parseCertificate } from '../core-bridge/index.js';\r\nimport type { X509Certificate } from '../core-bridge/index.js';\r\n\r\n// ── OID constants ─────────────────────────────────────────────────────\r\n\r\n/** RFC 3161 — id-aa-signatureTimeStampToken (SignerInfo unsigned attribute). */\r\nconst OID_TIMESTAMP_TOKEN = '1.2.840.113549.1.9.16.2.14';\r\n/** RFC 3161 — id-ct-TSTInfo (eContentType of the timestamp token). */\r\nconst OID_TST_INFO = '1.2.840.113549.1.9.16.1.4';\r\n/** Digest-algorithm OIDs supported for the messageImprint. */\r\nconst OID_SHA256 = '2.16.840.1.101.3.4.2.1';\r\nconst OID_SHA384 = '2.16.840.1.101.3.4.2.2';\r\nconst OID_SHA512 = '2.16.840.1.101.3.4.2.3';\r\nconst OID_SHA1 = '1.3.14.3.2.26';\r\n\r\nconst DIGEST_BY_OID: Readonly<Record<string, string>> = {\r\n    [OID_SHA256]: 'sha256',\r\n    [OID_SHA384]: 'sha384',\r\n    [OID_SHA512]: 'sha512',\r\n    [OID_SHA1]: 'sha1',\r\n};\r\n\r\n// ── Result type ───────────────────────────────────────────────────────\r\n\r\nexport interface TimestampVerifyResult {\r\n    /** True when a timestamp-token attribute was found. */\r\n    readonly present: boolean;\r\n    /**\r\n     * True when the token signature, eContent digest and messageImprint\r\n     * binding all verify. Trust/chain are reported separately so a valid\r\n     * timestamp from an untrusted TSA is still distinguishable.\r\n     */\r\n    readonly valid: boolean;\r\n    /** RFC 3161 `genTime` as an ISO 8601 string, or null. */\r\n    readonly genTime: string | null;\r\n    /** TSA signer certificate subject CN, or null. */\r\n    readonly tsaSubject: string | null;\r\n    /** True when the TSA certificate chain resolved to a (self-signed) root. */\r\n    readonly chainValid: boolean;\r\n    /** True when the TSA chain root is trusted (anchors or self-signed). */\r\n    readonly trusted: boolean;\r\n    /** Diagnostic for failures; never leaks byte offsets. */\r\n    readonly note: string | null;\r\n}\r\n\r\nconst ABSENT: TimestampVerifyResult = {\r\n    present: false,\r\n    valid: false,\r\n    genTime: null,\r\n    tsaSubject: null,\r\n    chainValid: false,\r\n    trusted: false,\r\n    note: null,\r\n};\r\n\r\n// ── Token extraction from the document SignerInfo unsignedAttrs ────────\r\n\r\n/**\r\n * Extract the timestamp-token CMS bytes from a re-tagged unsignedAttrs blob.\r\n * `unsignedAttrsRaw` must start with the `[1] IMPLICIT` tag (0xA1).\r\n */\r\nexport function extractTimestampToken(unsignedAttrsRaw: Uint8Array | null): Uint8Array | null {\r\n    if (unsignedAttrsRaw === null || unsignedAttrsRaw.length === 0) return null;\r\n    let attrs: AbsNode;\r\n    try {\r\n        const buf = new Uint8Array(unsignedAttrsRaw);\r\n        buf[0] = 0x31; // [1] IMPLICIT → SET\r\n        attrs = walkAbs(buf);\r\n        for (const attr of attrs.children) {\r\n            if (attr.children.length < 2) continue;\r\n            if (decodeOid(buf, attr.children[0] as AbsNode) !== OID_TIMESTAMP_TOKEN) continue;\r\n            const valueSet = attr.children[1] as AbsNode;\r\n            if (valueSet.children.length === 0) return null;\r\n            const token = valueSet.children[0] as AbsNode;\r\n            // token is a ContentInfo SEQUENCE — slice it as a standalone buffer.\r\n            return buf.subarray(token.abs, token.abs + token.totalLen).slice();\r\n        }\r\n    } catch {\r\n        return null;\r\n    }\r\n    return null;\r\n}\r\n\r\n// ── TSTInfo parsing ───────────────────────────────────────────────────\r\n\r\ninterface TstInfo {\r\n    readonly hashAlgorithm: string | null; // node:crypto digest name\r\n    readonly hashedMessage: Uint8Array;\r\n    readonly genTime: string | null;\r\n}\r\n\r\n/** Parse the minimal fields of a DER-encoded TSTInfo. */\r\nfunction parseTstInfo(tstBytes: Uint8Array): TstInfo | null {\r\n    let root: AbsNode;\r\n    try {\r\n        root = walkAbs(tstBytes);\r\n    } catch {\r\n        return null;\r\n    }\r\n    if (root.tag !== 0x30 || root.children.length < 5) return null;\r\n    // children: version, policy, messageImprint, serialNumber, genTime, ...\r\n    const messageImprint = root.children[2] as AbsNode;\r\n    if (messageImprint.tag !== 0x30 || messageImprint.children.length < 2) return null;\r\n    const algId = messageImprint.children[0] as AbsNode;\r\n    if (algId.tag !== 0x30 || algId.children.length < 1) return null;\r\n    const algOid = decodeOid(tstBytes, algId.children[0] as AbsNode);\r\n    const hashAlgorithm = algOid !== null ? (DIGEST_BY_OID[algOid] ?? null) : null;\r\n    const hashedOct = messageImprint.children[1] as AbsNode;\r\n    if (hashedOct.tag !== 0x04) return null;\r\n    const hashedMessage = sliceContent(tstBytes, hashedOct);\r\n\r\n    // genTime is the first GeneralizedTime (tag 0x18) at the top level.\r\n    let genTime: string | null = null;\r\n    for (let i = 3; i < root.children.length; i++) {\r\n        const node = root.children[i] as AbsNode;\r\n        if (node.tag === 0x18) {\r\n            genTime = decodeGeneralizedTime(sliceContent(tstBytes, node));\r\n            break;\r\n        }\r\n    }\r\n    return { hashAlgorithm, hashedMessage, genTime };\r\n}\r\n\r\n/** Decode an ASN.1 GeneralizedTime (e.g. `20260530120000Z`) to ISO 8601. */\r\nfunction decodeGeneralizedTime(bytes: Uint8Array): string | null {\r\n    const s = new TextDecoder('latin1').decode(bytes).trim();\r\n    const m = /^(\\d{4})(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})(?:\\.(\\d+))?Z?$/.exec(s);\r\n    if (m === null) return null;\r\n    const [, y, mo, d, h, mi, sec, frac] = m;\r\n    const iso = `${y}-${mo}-${d}T${h}:${mi}:${sec}${frac ? '.' + frac : ''}Z`;\r\n    const t = new Date(iso);\r\n    return Number.isNaN(t.getTime()) ? null : t.toISOString();\r\n}\r\n\r\nfunction bytesEqual(a: Uint8Array, b: Uint8Array): boolean {\r\n    if (a.length !== b.length) return false;\r\n    for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false;\r\n    return true;\r\n}\r\n\r\nfunction cnOf(cert: X509Certificate): string | null {\r\n    return cert.subject.cn ?? null;\r\n}\r\n\r\n// ── Public entry point ────────────────────────────────────────────────\r\n\r\n/**\r\n * Verify the RFC 3161 timestamp token bound to a document signature.\r\n *\r\n * @param unsignedAttrsRaw  The document SignerInfo `[1] unsignedAttrs` blob.\r\n * @param documentSignatureValue  The document SignerInfo `signature` OCTET\r\n *        STRING content — the value the timestamp imprints.\r\n * @param trustRoots  Optional trust anchors for the TSA chain.\r\n */\r\nexport function verifyTimestamp(\r\n    unsignedAttrsRaw: Uint8Array | null,\r\n    documentSignatureValue: Uint8Array | null,\r\n    trustRoots: readonly X509Certificate[],\r\n): TimestampVerifyResult {\r\n    const token = extractTimestampToken(unsignedAttrsRaw);\r\n    if (token === null) return ABSENT;\r\n\r\n    const fail = (note: string): TimestampVerifyResult => ({\r\n        present: true,\r\n        valid: false,\r\n        genTime: null,\r\n        tsaSubject: null,\r\n        chainValid: false,\r\n        trusted: false,\r\n        note,\r\n    });\r\n\r\n    const encap = extractEContent(token);\r\n    if (encap === null || encap.contentType !== OID_TST_INFO || encap.content.length === 0) {\r\n        return fail('timestamp token has no TSTInfo content');\r\n    }\r\n    const tst = parseTstInfo(encap.content);\r\n    if (tst === null) {\r\n        return fail('failed to parse TSTInfo');\r\n    }\r\n\r\n    // (2) eContent integrity: signed messageDigest == SHA-256(TSTInfo).\r\n    const tokenMd = extractSignedMessageDigest(token);\r\n    if (tokenMd !== null) {\r\n        const eHash = new Uint8Array(createHash('sha256').update(encap.content).digest());\r\n        if (!bytesEqual(tokenMd, eHash)) {\r\n            return fail('timestamp eContent digest mismatch');\r\n        }\r\n    }\r\n\r\n    // TSA certificate + (1) SignerInfo signature.\r\n    const certDers = extractCmsCertificates(token);\r\n    if (certDers.length === 0) {\r\n        return fail('no TSA certificate embedded in timestamp token');\r\n    }\r\n    let tsaCerts: X509Certificate[];\r\n    try {\r\n        tsaCerts = certDers.map((der) => parseCertificate(der));\r\n    } catch {\r\n        return fail('failed to parse TSA certificate');\r\n    }\r\n\r\n    // The TSA signer is whichever embedded cert verifies the token signature.\r\n    let tsaLeaf: X509Certificate | null = null;\r\n    let sigNote: string | null = null;\r\n    for (const cand of tsaCerts) {\r\n        const r = verifyCmsSignatureValue(token, cand);\r\n        if (r.signatureValid) {\r\n            tsaLeaf = cand;\r\n            break;\r\n        }\r\n        sigNote = r.note;\r\n    }\r\n    if (tsaLeaf === null) {\r\n        return fail(`TSA signature invalid${sigNote !== null ? ` (${sigNote})` : ''}`);\r\n    }\r\n\r\n    // (3) messageImprint binding to the document signature value.\r\n    let bindingOk = true;\r\n    if (documentSignatureValue !== null && tst.hashAlgorithm !== null) {\r\n        const imprint = new Uint8Array(\r\n            createHash(tst.hashAlgorithm).update(documentSignatureValue).digest(),\r\n        );\r\n        bindingOk = bytesEqual(imprint, tst.hashedMessage);\r\n    }\r\n    if (!bindingOk) {\r\n        return fail('timestamp messageImprint does not match the document signature');\r\n    }\r\n\r\n    // (4) TSA chain + trust.\r\n    const built = buildChain(tsaLeaf, tsaCerts.concat(trustRoots));\r\n    const trusted = isTrustedRoot(built.root, trustRoots);\r\n\r\n    return {\r\n        present: true,\r\n        valid: true,\r\n        genTime: tst.genTime,\r\n        tsaSubject: cnOf(tsaLeaf),\r\n        chainValid: built.chainValid,\r\n        trusted,\r\n        note: null,\r\n    };\r\n}\r\n","// SSRF-guarded HTTP(S) client for opt-in online revocation checking.\r\n//\r\n// The CLI is offline by default. When a user explicitly opts into online\r\n// OCSP / CRL fetching (`verify --revocation online`), every request passes\r\n// through this guard, which enforces:\r\n//   - scheme allow-list (http, https only);\r\n//   - DNS resolution + private/loopback/link-local/reserved address blocking\r\n//     (defends against SSRF to internal infrastructure);\r\n//   - a hard request timeout (default 10 s);\r\n//   - a hard response-size cap (default 5 MiB);\r\n//   - NO automatic redirect following (a redirect to an internal host would\r\n//     otherwise bypass the address check).\r\n//\r\n// Only the subset needed for RFC 6960 OCSP (POST) and RFC 5280 CRL (GET) is\r\n// implemented. No cookies, no auth, no keep-alive pooling.\r\n\r\nimport { request as httpsRequest } from 'node:https';\r\nimport { request as httpRequest } from 'node:http';\r\nimport { lookup } from 'node:dns/promises';\r\nimport { isIP } from 'node:net';\r\nimport type { IncomingMessage } from 'node:http';\r\n\r\nconst DEFAULT_TIMEOUT_MS = 10_000;\r\nconst DEFAULT_MAX_BYTES = 5 * 1024 * 1024;\r\n\r\nexport interface FetchOptions {\r\n    /** Request timeout in milliseconds. Default 10000. */\r\n    readonly timeoutMs?: number;\r\n    /** Maximum response size in bytes. Default 5 MiB. */\r\n    readonly maxBytes?: number;\r\n    /** HTTP method. Default 'GET'. */\r\n    readonly method?: 'GET' | 'POST';\r\n    /** Request body (for OCSP POST). */\r\n    readonly body?: Uint8Array;\r\n    /** Content-Type header (for OCSP POST). */\r\n    readonly contentType?: string;\r\n    /** Accept header. */\r\n    readonly accept?: string;\r\n}\r\n\r\nexport interface FetchResult {\r\n    readonly status: number;\r\n    readonly contentType: string | null;\r\n    readonly body: Uint8Array;\r\n}\r\n\r\nexport class FetchGuardError extends Error {}\r\n\r\n/**\r\n * Returns true when an IP address is private, loopback, link-local,\r\n * unique-local, or otherwise not a public unicast address. Both IPv4 and\r\n * IPv6 (incl. IPv4-mapped) are covered.\r\n */\r\nexport function isBlockedAddress(ip: string): boolean {\r\n    const family = isIP(ip);\r\n    if (family === 4) return isBlockedIPv4(ip);\r\n    if (family === 6) return isBlockedIPv6(ip.toLowerCase());\r\n    // Not a literal IP — caller must resolve first.\r\n    return true;\r\n}\r\n\r\nfunction isBlockedIPv4(ip: string): boolean {\r\n    const parts = ip.split('.').map((p) => Number.parseInt(p, 10));\r\n    if (parts.length !== 4 || parts.some((n) => !Number.isInteger(n) || n < 0 || n > 255)) {\r\n        return true;\r\n    }\r\n    const [a, b] = parts as [number, number, number, number];\r\n    if (a === 0) return true; // \"this\" network\r\n    if (a === 10) return true; // private\r\n    if (a === 127) return true; // loopback\r\n    if (a === 169 && b === 254) return true; // link-local (incl. cloud metadata 169.254.169.254)\r\n    if (a === 172 && b >= 16 && b <= 31) return true; // private\r\n    if (a === 192 && b === 168) return true; // private\r\n    if (a === 100 && b >= 64 && b <= 127) return true; // CGNAT\r\n    if (a >= 224) return true; // multicast + reserved\r\n    return false;\r\n}\r\n\r\nfunction isBlockedIPv6(ip: string): boolean {\r\n    if (ip === '::1' || ip === '::') return true; // loopback / unspecified\r\n    if (ip.startsWith('fe80')) return true; // link-local\r\n    if (ip.startsWith('fc') || ip.startsWith('fd')) return true; // unique-local\r\n    if (ip.startsWith('ff')) return true; // multicast\r\n    // IPv4-mapped (::ffff:a.b.c.d) — extract and re-check.\r\n    const mapped = /^::ffff:(\\d+\\.\\d+\\.\\d+\\.\\d+)$/.exec(ip);\r\n    if (mapped !== null) return isBlockedIPv4(mapped[1] as string);\r\n    return false;\r\n}\r\n\r\n/**\r\n * Resolve `hostname` and assert every resolved address is a public unicast\r\n * address. Returns one safe address to pin the connection to (defeats\r\n * DNS-rebinding between the check and the connect).\r\n */\r\nasync function resolveSafeAddress(hostname: string): Promise<string> {\r\n    const literal = isIP(hostname);\r\n    if (literal !== 0) {\r\n        if (isBlockedAddress(hostname)) {\r\n            throw new FetchGuardError('refusing to connect to a non-public address');\r\n        }\r\n        return hostname;\r\n    }\r\n    let records: { address: string }[];\r\n    try {\r\n        records = await lookup(hostname, { all: true });\r\n    } catch {\r\n        throw new FetchGuardError('DNS resolution failed');\r\n    }\r\n    if (records.length === 0) throw new FetchGuardError('DNS resolution returned no records');\r\n    for (const r of records) {\r\n        if (isBlockedAddress(r.address)) {\r\n            throw new FetchGuardError('hostname resolves to a non-public address');\r\n        }\r\n    }\r\n    return (records[0] as { address: string }).address;\r\n}\r\n\r\n/**\r\n * Perform a single guarded HTTP(S) request. Rejects with {@link FetchGuardError}\r\n * on any policy violation. Never follows redirects.\r\n */\r\nexport async function guardedFetch(url: string, options: FetchOptions = {}): Promise<FetchResult> {\r\n    let parsed: URL;\r\n    try {\r\n        parsed = new URL(url);\r\n    } catch {\r\n        throw new FetchGuardError('invalid URL');\r\n    }\r\n    if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {\r\n        throw new FetchGuardError(`unsupported URL scheme \"${parsed.protocol}\"`);\r\n    }\r\n\r\n    const safeAddress = await resolveSafeAddress(parsed.hostname);\r\n    const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\r\n    const maxBytes = options.maxBytes ?? DEFAULT_MAX_BYTES;\r\n    const method = options.method ?? 'GET';\r\n    const isHttps = parsed.protocol === 'https:';\r\n    const requestFn = isHttps ? httpsRequest : httpRequest;\r\n    const defaultPort = isHttps ? 443 : 80;\r\n\r\n    const headers: Record<string, string> = {\r\n        // Connect to the pinned, vetted address but present the real Host so\r\n        // virtual hosting + TLS SNI still work.\r\n        Host: parsed.host,\r\n    };\r\n    if (options.accept !== undefined) headers['Accept'] = options.accept;\r\n    if (method === 'POST' && options.body !== undefined) {\r\n        headers['Content-Length'] = String(options.body.length);\r\n        if (options.contentType !== undefined) headers['Content-Type'] = options.contentType;\r\n    }\r\n\r\n    return new Promise<FetchResult>((resolve, reject) => {\r\n        const req = requestFn(\r\n            {\r\n                protocol: parsed.protocol,\r\n                host: safeAddress,\r\n                servername: isHttps ? parsed.hostname : undefined,\r\n                port: parsed.port !== '' ? Number(parsed.port) : defaultPort,\r\n                method,\r\n                path: parsed.pathname + parsed.search,\r\n                headers,\r\n                timeout: timeoutMs,\r\n            },\r\n            (res: IncomingMessage) => {\r\n                const status = res.statusCode ?? 0;\r\n                if (status >= 300 && status < 400) {\r\n                    res.destroy();\r\n                    reject(new FetchGuardError('refusing to follow redirect'));\r\n                    return;\r\n                }\r\n                const chunks: Buffer[] = [];\r\n                let total = 0;\r\n                res.on('data', (chunk: Buffer) => {\r\n                    total += chunk.length;\r\n                    if (total > maxBytes) {\r\n                        res.destroy();\r\n                        reject(new FetchGuardError('response exceeds size cap'));\r\n                        return;\r\n                    }\r\n                    chunks.push(chunk);\r\n                });\r\n                res.on('end', () => {\r\n                    resolve({\r\n                        status,\r\n                        contentType: res.headers['content-type'] ?? null,\r\n                        body: new Uint8Array(Buffer.concat(chunks)),\r\n                    });\r\n                });\r\n                res.on('error', () => reject(new FetchGuardError('response stream error')));\r\n            },\r\n        );\r\n        req.on('timeout', () => {\r\n            req.destroy();\r\n            reject(new FetchGuardError('request timed out'));\r\n        });\r\n        req.on('error', () => reject(new FetchGuardError('request failed')));\r\n        if (method === 'POST' && options.body !== undefined) {\r\n            req.write(options.body);\r\n        }\r\n        req.end();\r\n    });\r\n}\r\n","// Certificate revocation checking — OCSP (RFC 6960) and CRL (RFC 5280).\r\n//\r\n// Two sources, in priority order:\r\n//   1. EMBEDDED (offline, default): OCSP responses and CRLs stapled into the\r\n//      PDF's Document Security Store (PAdES-LT `/DSS`).\r\n//   2. ONLINE (opt-in, `--revocation online`): fetched from the certificate's\r\n//      Authority Information Access (OCSP) and CRL Distribution Points (CRL)\r\n//      extensions, through the SSRF-guarded client in fetch-guard.ts.\r\n//\r\n// All signatures (OCSP `tbsResponseData`, CRL `tbsCertList`) are cryptographically\r\n// verified against the issuing certificate via cms-verify. Nothing here trusts\r\n// a response it cannot verify.\r\n\r\nimport { createHash } from 'node:crypto';\r\nimport { walkAbs, sliceNode, sliceContent, type AbsNode } from './asn1-walk.js';\r\nimport { decodeOid, verifySignedStructure } from './cms-verify.js';\r\nimport { certEquals } from './cert-chain.js';\r\nimport {\r\n    verifyCertSignature,\r\n    isSelfSigned,\r\n    isStream,\r\n    isDict,\r\n    isArray,\r\n    isRef,\r\n    parseCertificate,\r\n} from '../core-bridge/index.js';\r\nimport type { PdfReader, PdfDict, PdfValue, X509Certificate } from '../core-bridge/index.js';\r\nimport { guardedFetch } from './fetch-guard.js';\r\n\r\n// ── OIDs ──────────────────────────────────────────────────────────────\r\n\r\nconst OID_OCSP_BASIC = '1.3.6.1.5.5.7.48.1.1';\r\nconst OID_AD_OCSP = '1.3.6.1.5.5.7.48.1';\r\nconst OID_AIA = '1.3.6.1.5.5.7.1.1';\r\nconst OID_CRL_DP = '2.5.29.31';\r\nconst OID_SHA1 = '1.3.14.3.2.26';\r\nconst OID_SHA256 = '2.16.840.1.101.3.4.2.1';\r\n\r\nconst DIGEST_BY_OID: Readonly<Record<string, string>> = {\r\n    [OID_SHA1]: 'sha1',\r\n    [OID_SHA256]: 'sha256',\r\n};\r\n\r\n// ── Public types ──────────────────────────────────────────────────────\r\n\r\nexport type RevocationMode = 'offline' | 'online' | 'disabled';\r\nexport type RevocationPolicy = 'strict' | 'soft-fail';\r\nexport type RevocationStatus = 'good' | 'revoked' | 'unknown';\r\n\r\nexport interface RevocationResult {\r\n    readonly checked: boolean;\r\n    readonly status: RevocationStatus;\r\n    readonly source: 'embedded' | 'online' | 'none';\r\n    readonly method: 'ocsp' | 'crl' | null;\r\n    readonly revokedAt: string | null;\r\n    readonly note: string | null;\r\n}\r\n\r\nconst NOT_CHECKED: RevocationResult = {\r\n    checked: false,\r\n    status: 'unknown',\r\n    source: 'none',\r\n    method: null,\r\n    revokedAt: null,\r\n    note: null,\r\n};\r\n\r\n// ── Small helpers ─────────────────────────────────────────────────────\r\n\r\nfunction bytesEqual(a: Uint8Array, b: Uint8Array): boolean {\r\n    if (a.length !== b.length) return false;\r\n    for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false;\r\n    return true;\r\n}\r\n\r\nfunction bytesToBigInt(bytes: Uint8Array): bigint {\r\n    let v = 0n;\r\n    for (let i = 0; i < bytes.length; i++) v = (v << 8n) | BigInt(bytes[i] as number);\r\n    return v;\r\n}\r\n\r\n/** BIT STRING content → signature bytes (drop the leading unused-bits byte). */\r\nfunction bitStringBytes(buf: Uint8Array, node: AbsNode): Uint8Array {\r\n    const content = sliceContent(buf, node);\r\n    return content.length > 0 ? content.subarray(1) : content;\r\n}\r\n\r\nfunction decodeGeneralizedTime(bytes: Uint8Array): string | null {\r\n    const s = new TextDecoder('latin1').decode(bytes).trim();\r\n    const m = /^(\\d{4})(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})(?:\\.(\\d+))?Z?$/.exec(s);\r\n    if (m === null) return null;\r\n    const [, y, mo, d, h, mi, sec, frac] = m;\r\n    const t = new Date(`${y}-${mo}-${d}T${h}:${mi}:${sec}${frac ? '.' + frac : ''}Z`);\r\n    return Number.isNaN(t.getTime()) ? null : t.toISOString();\r\n}\r\n\r\nfunction decodeUtcTime(bytes: Uint8Array): string | null {\r\n    const s = new TextDecoder('latin1').decode(bytes).trim();\r\n    const m = /^(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})?Z?$/.exec(s);\r\n    if (m === null) return null;\r\n    const [, yy, mo, d, h, mi, sec] = m;\r\n    const year = Number.parseInt(yy as string, 10);\r\n    const fullYear = year >= 50 ? 1900 + year : 2000 + year;\r\n    const t = new Date(`${fullYear}-${mo}-${d}T${h}:${mi}:${sec ?? '00'}Z`);\r\n    return Number.isNaN(t.getTime()) ? null : t.toISOString();\r\n}\r\n\r\nfunction decodeTime(buf: Uint8Array, node: AbsNode): string | null {\r\n    if (node.tag === 0x17) return decodeUtcTime(sliceContent(buf, node));\r\n    if (node.tag === 0x18) return decodeGeneralizedTime(sliceContent(buf, node));\r\n    return null;\r\n}\r\n\r\n// ── Certificate extension extraction (AIA / CRL DP) ───────────────────\r\n\r\n/** Return the `extnValue` OCTET STRING content for `extnOid`, or null. */\r\nfunction extractCertExtension(cert: X509Certificate, extnOid: string): Uint8Array | null {\r\n    let tbs: AbsNode;\r\n    try {\r\n        tbs = walkAbs(cert.tbsCertificateBytes);\r\n    } catch {\r\n        return null;\r\n    }\r\n    if (tbs.tag !== 0x30) return null;\r\n    const extsContainer = tbs.children.find((c) => c.tag === 0xa3); // extensions [3] EXPLICIT\r\n    if (extsContainer === undefined || extsContainer.children.length === 0) return null;\r\n    const extsSeq = extsContainer.children[0] as AbsNode;\r\n    if (extsSeq.tag !== 0x30) return null;\r\n    for (const ext of extsSeq.children) {\r\n        if (ext.tag !== 0x30 || ext.children.length < 2) continue;\r\n        if (decodeOid(cert.tbsCertificateBytes, ext.children[0] as AbsNode) !== extnOid) continue;\r\n        const valueNode = ext.children[ext.children.length - 1] as AbsNode;\r\n        if (valueNode.tag !== 0x04) return null;\r\n        return sliceContent(cert.tbsCertificateBytes, valueNode).slice();\r\n    }\r\n    return null;\r\n}\r\n\r\n/** Parse an Authority Information Access extension for the OCSP responder URL. */\r\nfunction extractOcspUrl(cert: X509Certificate): string | null {\r\n    const extn = extractCertExtension(cert, OID_AIA);\r\n    if (extn === null) return null;\r\n    let aia: AbsNode;\r\n    try {\r\n        aia = walkAbs(extn);\r\n    } catch {\r\n        return null;\r\n    }\r\n    if (aia.tag !== 0x30) return null;\r\n    for (const access of aia.children) {\r\n        if (access.tag !== 0x30 || access.children.length < 2) continue;\r\n        if (decodeOid(extn, access.children[0] as AbsNode) !== OID_AD_OCSP) continue;\r\n        const loc = access.children[1] as AbsNode;\r\n        if (loc.tag === 0x86) {\r\n            // [6] IMPLICIT uniformResourceIdentifier\r\n            return new TextDecoder('latin1').decode(sliceContent(extn, loc)).trim();\r\n        }\r\n    }\r\n    return null;\r\n}\r\n\r\n/** Parse a CRL Distribution Points extension for the first HTTP(S) CRL URL. */\r\nfunction extractCrlUrl(cert: X509Certificate): string | null {\r\n    const extn = extractCertExtension(cert, OID_CRL_DP);\r\n    if (extn === null) return null;\r\n    let urls: string[] = [];\r\n    try {\r\n        const dps = walkAbs(extn);\r\n        collectUriStrings(extn, dps, urls);\r\n    } catch {\r\n        return null;\r\n    }\r\n    urls = urls.filter((u) => u.startsWith('http://') || u.startsWith('https://'));\r\n    return urls.length > 0 ? (urls[0] as string) : null;\r\n}\r\n\r\n/** Recursively collect all `[6] URI` GeneralName strings under a node. */\r\nfunction collectUriStrings(buf: Uint8Array, node: AbsNode, out: string[]): void {\r\n    if (node.tag === 0x86) {\r\n        out.push(new TextDecoder('latin1').decode(sliceContent(buf, node)).trim());\r\n        return;\r\n    }\r\n    for (const child of node.children) collectUriStrings(buf, child, out);\r\n}\r\n\r\n// ── CRL parsing & verification ────────────────────────────────────────\r\n\r\n/**\r\n * Check a DER CRL for `subjectCert`'s serial. Returns 'revoked' (with date),\r\n * 'good' (signature verified, serial absent), or 'unknown' (cannot verify).\r\n */\r\nfunction checkCrl(\r\n    crlDer: Uint8Array,\r\n    subjectCert: X509Certificate,\r\n    issuerCert: X509Certificate,\r\n): { status: RevocationStatus; revokedAt: string | null } {\r\n    let root: AbsNode;\r\n    try {\r\n        root = walkAbs(crlDer);\r\n    } catch {\r\n        return { status: 'unknown', revokedAt: null };\r\n    }\r\n    if (root.tag !== 0x30 || root.children.length < 3) return { status: 'unknown', revokedAt: null };\r\n    const tbs = root.children[0] as AbsNode;\r\n    const sigAlg = root.children[1] as AbsNode;\r\n    const sigBits = root.children[2] as AbsNode;\r\n    if (tbs.tag !== 0x30 || sigAlg.tag !== 0x30 || sigBits.tag !== 0x03) {\r\n        return { status: 'unknown', revokedAt: null };\r\n    }\r\n\r\n    // Verify CRL signature with the issuer's public key.\r\n    const sigAlgOid = sigAlg.children.length > 0 ? decodeOid(crlDer, sigAlg.children[0] as AbsNode) : null;\r\n    const tbsBytes = sliceNode(crlDer, tbs);\r\n    const sigBytes = bitStringBytes(crlDer, sigBits);\r\n    if (!verifySignedStructure(tbsBytes, sigAlgOid, sigBytes, issuerCert)) {\r\n        return { status: 'unknown', revokedAt: null };\r\n    }\r\n\r\n    // Locate revokedCertificates: the SEQUENCE whose children are all 2–3\r\n    // element SEQUENCEs beginning with an INTEGER serial.\r\n    for (const child of tbs.children) {\r\n        if (child.tag !== 0x30 || child.children.length === 0) continue;\r\n        const first = child.children[0] as AbsNode;\r\n        if (first.tag !== 0x30) continue;\r\n        if (first.children.length < 2 || (first.children[0] as AbsNode).tag !== 0x02) continue;\r\n        // This is the revokedCertificates list.\r\n        for (const entry of child.children) {\r\n            if (entry.tag !== 0x30 || entry.children.length < 2) continue;\r\n            const serialNode = entry.children[0] as AbsNode;\r\n            if (serialNode.tag !== 0x02) continue;\r\n            const serial = bytesToBigInt(sliceContent(crlDer, serialNode));\r\n            if (serial === subjectCert.serialNumber) {\r\n                const revokedAt = decodeTime(crlDer, entry.children[1] as AbsNode);\r\n                return { status: 'revoked', revokedAt };\r\n            }\r\n        }\r\n        // Serial not present in this CRL → good (signature already verified).\r\n        return { status: 'good', revokedAt: null };\r\n    }\r\n    // No revokedCertificates list (empty CRL) → good.\r\n    return { status: 'good', revokedAt: null };\r\n}\r\n\r\n// ── OCSP parsing & verification ───────────────────────────────────────\r\n\r\n/**\r\n * Check a DER OCSP response for `subjectCert`. Verifies the responder\r\n * signature and matches the CertID before reading the status.\r\n */\r\nfunction checkOcsp(\r\n    ocspDer: Uint8Array,\r\n    subjectCert: X509Certificate,\r\n    issuerCert: X509Certificate,\r\n    candidateResponders: readonly X509Certificate[],\r\n): { status: RevocationStatus; revokedAt: string | null } {\r\n    let root: AbsNode;\r\n    try {\r\n        root = walkAbs(ocspDer);\r\n    } catch {\r\n        return { status: 'unknown', revokedAt: null };\r\n    }\r\n    // OCSPResponse ::= SEQUENCE { responseStatus ENUMERATED, responseBytes [0] }\r\n    if (root.tag !== 0x30 || root.children.length < 1) return { status: 'unknown', revokedAt: null };\r\n    const statusNode = root.children[0] as AbsNode;\r\n    if (statusNode.tag !== 0x0a) return { status: 'unknown', revokedAt: null };\r\n    const responseStatus = sliceContent(ocspDer, statusNode)[0] ?? 6;\r\n    if (responseStatus !== 0) return { status: 'unknown', revokedAt: null };\r\n    const responseBytes = root.children.find((c) => c.tag === 0xa0);\r\n    if (responseBytes === undefined || responseBytes.children.length === 0) {\r\n        return { status: 'unknown', revokedAt: null };\r\n    }\r\n    const rb = responseBytes.children[0] as AbsNode; // ResponseBytes SEQUENCE\r\n    if (rb.tag !== 0x30 || rb.children.length < 2) return { status: 'unknown', revokedAt: null };\r\n    if (decodeOid(ocspDer, rb.children[0] as AbsNode) !== OID_OCSP_BASIC) {\r\n        return { status: 'unknown', revokedAt: null };\r\n    }\r\n    const respOct = rb.children[1] as AbsNode;\r\n    if (respOct.tag !== 0x04) return { status: 'unknown', revokedAt: null };\r\n    const basicDer = sliceContent(ocspDer, respOct).slice();\r\n\r\n    let basic: AbsNode;\r\n    try {\r\n        basic = walkAbs(basicDer);\r\n    } catch {\r\n        return { status: 'unknown', revokedAt: null };\r\n    }\r\n    // BasicOCSPResponse ::= SEQUENCE { tbsResponseData, signatureAlgorithm, signature BIT STRING, certs [0]? }\r\n    if (basic.tag !== 0x30 || basic.children.length < 3) return { status: 'unknown', revokedAt: null };\r\n    const tbsResponseData = basic.children[0] as AbsNode;\r\n    const sigAlg = basic.children[1] as AbsNode;\r\n    const sigBits = basic.children[2] as AbsNode;\r\n    if (tbsResponseData.tag !== 0x30 || sigBits.tag !== 0x03) {\r\n        return { status: 'unknown', revokedAt: null };\r\n    }\r\n\r\n    // Collect responder certs embedded in the BasicOCSPResponse.\r\n    const embedded: X509Certificate[] = [];\r\n    const certsContainer = basic.children.find((c) => c.tag === 0xa0);\r\n    if (certsContainer !== undefined && certsContainer.children.length > 0) {\r\n        const certsSeq = certsContainer.children[0] as AbsNode;\r\n        if (certsSeq.tag === 0x30) {\r\n            for (const certNode of certsSeq.children) {\r\n                if (certNode.tag !== 0x30) continue;\r\n                try {\r\n                    embedded.push(parseCertificate(sliceNode(basicDer, certNode)));\r\n                } catch {\r\n                    // ignore malformed embedded cert\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    // Verify the responder signature: the responder must be the issuer itself\r\n    // or a certificate authorised (signed) by the issuer.\r\n    const sigAlgOid = sigAlg.children.length > 0 ? decodeOid(basicDer, sigAlg.children[0] as AbsNode) : null;\r\n    const tbsBytes = sliceNode(basicDer, tbsResponseData);\r\n    const sigBytes = bitStringBytes(basicDer, sigBits);\r\n\r\n    const responderPool = [issuerCert, ...embedded, ...candidateResponders];\r\n    let verified = false;\r\n    for (const responder of responderPool) {\r\n        if (!verifySignedStructure(tbsBytes, sigAlgOid, sigBytes, responder)) continue;\r\n        // Authorisation: responder is the issuer, or issued by the issuer.\r\n        if (certEquals(responder, issuerCert)) {\r\n            verified = true;\r\n            break;\r\n        }\r\n        try {\r\n            if (verifyCertSignature(responder, issuerCert)) {\r\n                verified = true;\r\n                break;\r\n            }\r\n        } catch {\r\n            // not authorised by this issuer\r\n        }\r\n    }\r\n    if (!verified) return { status: 'unknown', revokedAt: null };\r\n\r\n    // Find the matching SingleResponse and read its status.\r\n    return readOcspSingleResponse(basicDer, tbsResponseData, subjectCert, issuerCert);\r\n}\r\n\r\nfunction readOcspSingleResponse(\r\n    buf: Uint8Array,\r\n    tbsResponseData: AbsNode,\r\n    subjectCert: X509Certificate,\r\n    issuerCert: X509Certificate,\r\n): { status: RevocationStatus; revokedAt: string | null } {\r\n    // ResponseData ::= SEQUENCE { version[0]?, responderID, producedAt, responses SEQ OF SingleResponse, ... }\r\n    const responses = tbsResponseData.children.find(\r\n        (c) => c.tag === 0x30 && c.children.length > 0 && (c.children[0] as AbsNode).tag === 0x30\r\n            && (c.children[0] as AbsNode).children.length > 0\r\n            && ((c.children[0] as AbsNode).children[0] as AbsNode).tag === 0x30,\r\n    );\r\n    if (responses === undefined) return { status: 'unknown', revokedAt: null };\r\n\r\n    for (const single of responses.children) {\r\n        if (single.tag !== 0x30 || single.children.length < 2) continue;\r\n        const certId = single.children[0] as AbsNode;\r\n        if (!ocspCertIdMatches(buf, certId, subjectCert, issuerCert)) continue;\r\n\r\n        const certStatus = single.children[1] as AbsNode;\r\n        // certStatus: [0] good (0x80), [1] revoked (0xA1), [2] unknown (0x82)\r\n        if (certStatus.tag === 0x80) return { status: 'good', revokedAt: null };\r\n        if (certStatus.tag === 0xa1) {\r\n            const revokedAt =\r\n                certStatus.children.length > 0\r\n                    ? decodeTime(buf, certStatus.children[0] as AbsNode)\r\n                    : null;\r\n            return { status: 'revoked', revokedAt };\r\n        }\r\n        return { status: 'unknown', revokedAt: null };\r\n    }\r\n    return { status: 'unknown', revokedAt: null };\r\n}\r\n\r\nfunction ocspCertIdMatches(\r\n    buf: Uint8Array,\r\n    certId: AbsNode,\r\n    subjectCert: X509Certificate,\r\n    issuerCert: X509Certificate,\r\n): boolean {\r\n    if (certId.tag !== 0x30 || certId.children.length < 4) return false;\r\n    const algId = certId.children[0] as AbsNode;\r\n    const nameHashNode = certId.children[1] as AbsNode;\r\n    const keyHashNode = certId.children[2] as AbsNode;\r\n    const serialNode = certId.children[3] as AbsNode;\r\n    if (serialNode.tag !== 0x02) return false;\r\n    if (bytesToBigInt(sliceContent(buf, serialNode)) !== subjectCert.serialNumber) return false;\r\n\r\n    const hashOid = algId.children.length > 0 ? decodeOid(buf, algId.children[0] as AbsNode) : null;\r\n    const digest = hashOid !== null ? DIGEST_BY_OID[hashOid] : undefined;\r\n    if (digest === undefined) return false;\r\n\r\n    // NOTE: `digest` is whatever algorithm the responder put in the CertID\r\n    // (often SHA-1 per RFC 6960 §B.1, sometimes SHA-256). The hash here is a\r\n    // non-security *identifier* over the issuer's PUBLIC name and public key\r\n    // — not an integrity/signature primitive. OCSP trust comes from the\r\n    // responder signature, verified separately. SHA-1 here is therefore safe\r\n    // and required for interoperability (NIST SP 800-131A permits SHA-1 for\r\n    // non-signature uses). See SECURITY.md § \"Cryptographic algorithm usage\".\r\n    const nameHash = new Uint8Array(createHash(digest).update(issuerCert.subject.raw).digest());\r\n    const keyHash = new Uint8Array(createHash(digest).update(issuerCert.publicKeyBytes).digest());\r\n    return (\r\n        bytesEqual(sliceContent(buf, nameHashNode), nameHash)\r\n        && bytesEqual(sliceContent(buf, keyHashNode), keyHash)\r\n    );\r\n}\r\n\r\n// ── DSS extraction ────────────────────────────────────────────────────\r\n\r\nfunction resolve(reader: PdfReader, val: PdfValue | undefined): PdfValue | null {\r\n    if (val === undefined) return null;\r\n    if (isRef(val)) {\r\n        try {\r\n            return reader.resolveValue(val);\r\n        } catch {\r\n            return null;\r\n        }\r\n    }\r\n    return val;\r\n}\r\n\r\nfunction readStreamArray(reader: PdfReader, dssDict: PdfDict, key: string): Uint8Array[] {\r\n    const arr = resolve(reader, dssDict.get(key));\r\n    if (arr === null || !isArray(arr)) return [];\r\n    const out: Uint8Array[] = [];\r\n    for (const item of arr) {\r\n        const stream = resolve(reader, item);\r\n        if (stream === null || !isStream(stream)) continue;\r\n        try {\r\n            out.push(reader.decodeStream(stream));\r\n        } catch {\r\n            // ignore undecodable stream\r\n        }\r\n    }\r\n    return out;\r\n}\r\n\r\ninterface DssData {\r\n    readonly ocsps: readonly Uint8Array[];\r\n    readonly crls: readonly Uint8Array[];\r\n}\r\n\r\n/** Read embedded OCSP responses and CRLs from the PDF `/DSS` dictionary. */\r\nexport function extractDss(reader: PdfReader): DssData {\r\n    try {\r\n        const catalog = reader.getCatalog();\r\n        const dss = resolve(reader, catalog.get('DSS'));\r\n        if (dss === null || !isDict(dss)) return { ocsps: [], crls: [] };\r\n        return {\r\n            ocsps: readStreamArray(reader, dss, 'OCSPs'),\r\n            crls: readStreamArray(reader, dss, 'CRLs'),\r\n        };\r\n    } catch {\r\n        return { ocsps: [], crls: [] };\r\n    }\r\n}\r\n\r\n// ── Orchestration ─────────────────────────────────────────────────────\r\n\r\n/**\r\n * Resolve the revocation status of `subjectCert`.\r\n *\r\n * @param reader        Reader over the PDF (for `/DSS` extraction).\r\n * @param subjectCert   The signer certificate to check.\r\n * @param issuerCert    Its issuer (for CertID + signature verification). When\r\n *                      null, or when the subject is self-signed, no authority\r\n *                      exists and the result is `unknown` / not-checked.\r\n * @param embeddedCerts CMS-embedded certs (potential OCSP responders).\r\n * @param mode          offline (embedded only), online (AIA/CDP fetch), disabled.\r\n */\r\nexport async function checkRevocation(\r\n    reader: PdfReader,\r\n    subjectCert: X509Certificate,\r\n    issuerCert: X509Certificate | null,\r\n    embeddedCerts: readonly X509Certificate[],\r\n    mode: RevocationMode,\r\n): Promise<RevocationResult> {\r\n    if (mode === 'disabled') return NOT_CHECKED;\r\n    if (issuerCert === null || isSelfSigned(subjectCert)) {\r\n        return { ...NOT_CHECKED, note: 'no revocation authority (self-signed or issuer unknown)' };\r\n    }\r\n\r\n    // 1. Embedded DSS (offline, always tried first).\r\n    const dss = extractDss(reader);\r\n    for (const ocsp of dss.ocsps) {\r\n        const r = checkOcsp(ocsp, subjectCert, issuerCert, embeddedCerts);\r\n        if (r.status !== 'unknown') {\r\n            return { checked: true, status: r.status, source: 'embedded', method: 'ocsp', revokedAt: r.revokedAt, note: null };\r\n        }\r\n    }\r\n    for (const crl of dss.crls) {\r\n        const r = checkCrl(crl, subjectCert, issuerCert);\r\n        if (r.status !== 'unknown') {\r\n            return { checked: true, status: r.status, source: 'embedded', method: 'crl', revokedAt: r.revokedAt, note: null };\r\n        }\r\n    }\r\n\r\n    if (mode === 'offline') {\r\n        return { ...NOT_CHECKED, note: 'no embedded OCSP/CRL found (use --revocation online to fetch)' };\r\n    }\r\n\r\n    // 2. Online (opt-in): OCSP via AIA, then CRL via CDP.\r\n    const ocspUrl = extractOcspUrl(subjectCert);\r\n    if (ocspUrl !== null) {\r\n        try {\r\n            const request = buildOcspRequest(subjectCert, issuerCert);\r\n            const res = await guardedFetch(ocspUrl, {\r\n                method: 'POST',\r\n                body: request,\r\n                contentType: 'application/ocsp-request',\r\n                accept: 'application/ocsp-response',\r\n            });\r\n            if (res.status === 200) {\r\n                const r = checkOcsp(res.body, subjectCert, issuerCert, embeddedCerts);\r\n                if (r.status !== 'unknown') {\r\n                    return { checked: true, status: r.status, source: 'online', method: 'ocsp', revokedAt: r.revokedAt, note: null };\r\n                }\r\n            }\r\n        } catch (e) {\r\n            return { ...NOT_CHECKED, note: `online OCSP failed: ${e instanceof Error ? e.message : 'error'}` };\r\n        }\r\n    }\r\n\r\n    const crlUrl = extractCrlUrl(subjectCert);\r\n    if (crlUrl !== null) {\r\n        try {\r\n            const res = await guardedFetch(crlUrl, { accept: 'application/pkix-crl' });\r\n            if (res.status === 200) {\r\n                const r = checkCrl(res.body, subjectCert, issuerCert);\r\n                if (r.status !== 'unknown') {\r\n                    return { checked: true, status: r.status, source: 'online', method: 'crl', revokedAt: r.revokedAt, note: null };\r\n                }\r\n            }\r\n        } catch (e) {\r\n            return { ...NOT_CHECKED, note: `online CRL failed: ${e instanceof Error ? e.message : 'error'}` };\r\n        }\r\n    }\r\n\r\n    return { ...NOT_CHECKED, note: 'no OCSP/CRL responder available' };\r\n}\r\n\r\n// ── Minimal DER encoder for the OCSP request ──────────────────────────\r\n\r\nfunction derLength(len: number): number[] {\r\n    if (len < 0x80) return [len];\r\n    const bytes: number[] = [];\r\n    let n = len;\r\n    while (n > 0) {\r\n        bytes.unshift(n & 0xff);\r\n        n >>= 8;\r\n    }\r\n    return [0x80 | bytes.length, ...bytes];\r\n}\r\n\r\nfunction der(tag: number, content: readonly number[]): number[] {\r\n    return [tag, ...derLength(content.length), ...content];\r\n}\r\n\r\nfunction encodeOidBytes(oid: string): number[] {\r\n    const parts = oid.split('.').map((p) => Number.parseInt(p, 10));\r\n    const out: number[] = [40 * (parts[0] as number) + (parts[1] as number)];\r\n    for (let i = 2; i < parts.length; i++) {\r\n        let v = parts[i] as number;\r\n        const stack: number[] = [v & 0x7f];\r\n        v >>= 7;\r\n        while (v > 0) {\r\n            stack.unshift((v & 0x7f) | 0x80);\r\n            v >>= 7;\r\n        }\r\n        out.push(...stack);\r\n    }\r\n    return out;\r\n}\r\n\r\nfunction bigIntToBytes(v: bigint): number[] {\r\n    if (v === 0n) return [0];\r\n    const bytes: number[] = [];\r\n    let n = v;\r\n    while (n > 0n) {\r\n        bytes.unshift(Number(n & 0xffn));\r\n        n >>= 8n;\r\n    }\r\n    if ((bytes[0] as number) & 0x80) bytes.unshift(0); // keep positive\r\n    return bytes;\r\n}\r\n\r\n/** Build a minimal RFC 6960 OCSPRequest containing a single CertID. */\r\nexport function buildOcspRequest(\r\n    subjectCert: X509Certificate,\r\n    issuerCert: X509Certificate,\r\n): Uint8Array {\r\n    // SHA-1 is the RFC 6960 §B.1 DEFAULT CertID hash algorithm and the only one\r\n    // reliably indexed by deployed OCSP responders. The hash is a non-security\r\n    // *identifier* over the issuer's PUBLIC subject DN and public key — NOT an\r\n    // integrity or signature primitive (OCSP trust derives from the responder\r\n    // signature, which we verify separately). NIST SP 800-131A explicitly\r\n    // permits SHA-1 for such non-signature uses. Using SHA-256 here would make\r\n    // most responders answer \"unknown\". This is a reviewed CodeQL false positive\r\n    // (js/weak-cryptographic-algorithm). See SECURITY.md § \"Cryptographic\r\n    // algorithm usage\".\r\n    // codeql[js/weak-cryptographic-algorithm]\r\n    const nameHash = Array.from(createHash('sha1').update(issuerCert.subject.raw).digest());\r\n    // codeql[js/weak-cryptographic-algorithm]\r\n    const keyHash = Array.from(createHash('sha1').update(issuerCert.publicKeyBytes).digest());\r\n    const serial = bigIntToBytes(subjectCert.serialNumber);\r\n\r\n    const hashAlg = der(0x30, [...der(0x06, encodeOidBytes(OID_SHA1)), ...der(0x05, [])]); // sha1 + NULL\r\n    const certId = der(0x30, [\r\n        ...hashAlg,\r\n        ...der(0x04, nameHash),\r\n        ...der(0x04, keyHash),\r\n        ...der(0x02, serial),\r\n    ]);\r\n    const request = der(0x30, [...certId]); // Request ::= SEQUENCE { reqCert CertID }\r\n    const requestList = der(0x30, [...request]); // SEQUENCE OF Request\r\n    const tbsRequest = der(0x30, [...requestList]); // TBSRequest\r\n    const ocspRequest = der(0x30, [...tbsRequest]); // OCSPRequest\r\n    return new Uint8Array(ocspRequest);\r\n}\r\n","import { createHash } from 'node:crypto';\r\nimport {\r\n    openPdf,\r\n    ensureCryptoReady,\r\n    parseCertificate,\r\n    isRef,\r\n    isName,\r\n    isDict,\r\n    isArray,\r\n    nameValue,\r\n} from '../core-bridge/index.js';\r\nimport type {\r\n    PdfReader,\r\n    PdfDict,\r\n    PdfValue,\r\n    X509Certificate,\r\n    X509Name,\r\n} from '../core-bridge/index.js';\r\nimport { type ParsedArgs, getStringFlag, getStringFlagAll, hasFlag } from '../utils/args.js';\r\nimport { readFileOrStdin } from '../utils/io.js';\r\nimport { CliError, ErrorCode } from '../utils/error.js';\r\nimport { isJsonMode } from '../utils/agent.js';\r\nimport { selectFields, serializeJson, parseFieldList } from '../utils/projection.js';\r\nimport { walkAbs, sliceNode, sliceContent, type AbsNode } from '../utils/asn1-walk.js';\r\nimport { loadPemChain, parseCertificateChain } from '../utils/keys.js';\r\nimport { verifyCmsSignatureValue, extractUnsignedAttrs, extractSignerSignatureValue } from '../utils/cms-verify.js';\r\nimport { buildChain, isTrustedRoot } from '../utils/cert-chain.js';\r\nimport { verifyTimestamp } from '../utils/timestamp-verify.js';\r\nimport {\r\n    checkRevocation,\r\n    type RevocationMode,\r\n    type RevocationPolicy,\r\n    type RevocationStatus,\r\n} from '../utils/revocation.js';\r\n\r\n\r\n/**\r\n * `pdfnative-cli verify` — verify CMS/PKCS#7 signatures embedded in a PDF.\r\n *\r\n * Scope (v1.0.0):\r\n *   ✔ Enumerate signature fields and parse /ByteRange + /Contents\r\n *   ✔ Recompute SHA-256 of byte-range-covered bytes\r\n *   ✔ Compare with messageDigest attribute embedded in CMS SignedData (integrity)\r\n *   ✔ Walk certificate chain via pdfnative `verifyCertSignature`\r\n *   ✔ Trust evaluation against --trust roots (or self-signed acceptance)\r\n *   ✔ FULL CMS signature-value verification (RSA + ECDSA over signedAttrs)\r\n *   ✔ RFC 3161 signature-time-stamp-token validation (PAdES-T)\r\n *   ✔ OCSP (RFC 6960) + CRL (RFC 5280) revocation — embedded DSS (offline,\r\n *     default) and opt-in online fetching (--revocation online, SSRF-guarded)\r\n *\r\n * Out of scope:\r\n *   ✘ Sign-side LTV (embedding timestamps / DSS) — tracked upstream in pdfnative\r\n */\r\n\r\ninterface SignatureReport {\r\n    readonly index: number;\r\n    readonly fieldName: string | null;\r\n    readonly subFilter: string | null;\r\n    readonly signerSubject: string | null;\r\n    readonly signerIssuer: string | null;\r\n    readonly signingTime: string | null;\r\n    readonly reason: string | null;\r\n    readonly location: string | null;\r\n    readonly digest: string | null;\r\n    readonly integrity: boolean;\r\n    readonly chainValid: boolean;\r\n    readonly trustedRoot: boolean;\r\n    readonly signatureValid: boolean;\r\n    readonly signatureAlgorithm: 'rsa-sha256' | 'ecdsa-sha256' | null;\r\n    readonly timestampPresent: boolean;\r\n    readonly timestampValid: boolean;\r\n    readonly timestampTime: string | null;\r\n    readonly tsaSubject: string | null;\r\n    readonly revocationChecked: boolean;\r\n    readonly revocationStatus: RevocationStatus;\r\n    readonly revocationSource: 'embedded' | 'online' | 'none';\r\n    readonly revocationMethod: 'ocsp' | 'crl' | null;\r\n    readonly revocationRevokedAt: string | null;\r\n    readonly notes: readonly string[];\r\n}\r\n\r\ninterface VerifyResult {\r\n    readonly signatures: readonly SignatureReport[];\r\n    readonly allValid: boolean;\r\n}\r\n\r\n// ──────────────────────────────────────────────────────────────────────\r\n// Byte / hex helpers\r\n// ──────────────────────────────────────────────────────────────────────\r\n\r\nfunction decodeHexString(hex: string): Uint8Array {\r\n    const clean = hex.replace(/\\s+/g, '');\r\n    if (clean.length % 2 !== 0) {\r\n        throw new Error('hex string has odd length');\r\n    }\r\n    const out = new Uint8Array(clean.length / 2);\r\n    for (let i = 0; i < out.length; i++) {\r\n        out[i] = Number.parseInt(clean.slice(i * 2, i * 2 + 2), 16);\r\n    }\r\n    return out;\r\n}\r\n\r\nfunction bytesToHex(bytes: Uint8Array): string {\r\n    let s = '';\r\n    for (let i = 0; i < bytes.length; i++) {\r\n        s += (bytes[i] as number).toString(16).padStart(2, '0');\r\n    }\r\n    return s;\r\n}\r\n\r\nfunction digestByteRange(\r\n    pdfBytes: Uint8Array,\r\n    byteRange: readonly [number, number, number, number],\r\n): string {\r\n    const [a, b, c, d] = byteRange;\r\n    const hash = createHash('sha256');\r\n    hash.update(pdfBytes.subarray(a, a + b));\r\n    hash.update(pdfBytes.subarray(c, c + d));\r\n    return hash.digest('hex');\r\n}\r\n\r\n// ──────────────────────────────────────────────────────────────────────\r\n// ASN.1 / CMS helpers\r\n// ──────────────────────────────────────────────────────────────────────\r\n\r\nconst MESSAGE_DIGEST_OID = '1.2.840.113549.1.9.4';\r\n\r\n/** Decode an OID from an `AbsNode` whose tag is OID (0x06). */\r\nfunction decodeOidAbs(buf: Uint8Array, node: AbsNode): string | null {\r\n    if (node.tag !== 0x06) return null;\r\n    const bytes = sliceContent(buf, node);\r\n    if (bytes.length === 0) return null;\r\n    const first = bytes[0] as number;\r\n    const parts: number[] = [Math.floor(first / 40), first % 40];\r\n    let v = 0;\r\n    for (let i = 1; i < bytes.length; i++) {\r\n        const byte = bytes[i] as number;\r\n        v = (v << 7) | (byte & 0x7f);\r\n        if ((byte & 0x80) === 0) {\r\n            parts.push(v);\r\n            v = 0;\r\n        }\r\n    }\r\n    return parts.join('.');\r\n}\r\n\r\n/** Recursively scan an absolute-offset ASN.1 tree for the messageDigest octet string. */\r\nfunction findMessageDigest(buf: Uint8Array, node: AbsNode): Uint8Array | null {\r\n    if (node.children.length >= 2) {\r\n        const oid = decodeOidAbs(buf, node.children[0] as AbsNode);\r\n        if (oid === MESSAGE_DIGEST_OID) {\r\n            const setNode = node.children[1] as AbsNode;\r\n            if (setNode.children.length > 0) {\r\n                const oct = setNode.children[0] as AbsNode;\r\n                if (oct.tag === 0x04) {\r\n                    return sliceContent(buf, oct);\r\n                }\r\n            }\r\n        }\r\n    }\r\n    for (const child of node.children) {\r\n        const found = findMessageDigest(buf, child);\r\n        if (found !== null) return found;\r\n    }\r\n    return null;\r\n}\r\n\r\n/**\r\n * Extract certificate DER blocks from a CMS SignedData structure.\r\n *\r\n * Walks the precise CMS ASN.1 path (RFC 5652):\r\n *   ContentInfo SEQUENCE\r\n *     ├─ contentType OID\r\n *     └─ content [0] EXPLICIT\r\n *          └─ SignedData SEQUENCE\r\n *               ├─ version, digestAlgorithms SET, encapContentInfo, …\r\n *               └─ certificates [0] IMPLICIT  (← we want this)\r\n *                    └─ each child SEQUENCE = one X.509 certificate\r\n */\r\nfunction extractCertsFromCms(cmsBytes: Uint8Array, root: AbsNode): Uint8Array[] {\r\n    if (root.tag !== 0x30 || root.children.length < 2) return [];\r\n    const explicit = root.children[1] as AbsNode;\r\n    if (explicit.tag !== 0xa0 || explicit.children.length === 0) return [];\r\n    const signedData = explicit.children[0] as AbsNode;\r\n    if (signedData.tag !== 0x30) return [];\r\n\r\n    const certs: Uint8Array[] = [];\r\n    for (const child of signedData.children) {\r\n        if (child.tag === 0xa0) {\r\n            // certificates [0] IMPLICIT — children are SEQUENCEs (one per cert).\r\n            for (const certNode of child.children) {\r\n                if (certNode.tag === 0x30) certs.push(sliceNode(cmsBytes, certNode));\r\n            }\r\n            break;\r\n        }\r\n    }\r\n    return certs;\r\n}\r\n\r\n// ──────────────────────────────────────────────────────────────────────\r\n// PDF helpers\r\n// ──────────────────────────────────────────────────────────────────────\r\n\r\nfunction nameToString(name: X509Name | undefined): string | null {\r\n    if (name === undefined) return null;\r\n    const parts: string[] = [];\r\n    if (name.cn !== undefined) parts.push(`CN=${name.cn}`);\r\n    if (name.o !== undefined) parts.push(`O=${name.o}`);\r\n    if (name.ou !== undefined) parts.push(`OU=${name.ou}`);\r\n    if (name.c !== undefined) parts.push(`C=${name.c}`);\r\n    return parts.length > 0 ? parts.join(', ') : null;\r\n}\r\n\r\nfunction resolveValue(reader: PdfReader, val: PdfValue | undefined): PdfValue | null {\r\n    if (val === undefined) return null;\r\n    if (isRef(val)) {\r\n        try {\r\n            return reader.resolveValue(val);\r\n        } catch {\r\n            return null;\r\n        }\r\n    }\r\n    return val;\r\n}\r\n\r\nfunction getDictString(dict: PdfDict, key: string): string | null {\r\n    const v = dict.get(key);\r\n    return typeof v === 'string' ? v : null;\r\n}\r\n\r\nfunction getDictName(dict: PdfDict, key: string): string | null {\r\n    const v = dict.get(key);\r\n    return v !== undefined && isName(v) ? nameValue(v) ?? null : null;\r\n}\r\n\r\ninterface SignatureField {\r\n    readonly fieldName: string | null;\r\n    readonly sigDict: PdfDict;\r\n}\r\n\r\nfunction findSignatureFields(reader: PdfReader): readonly SignatureField[] {\r\n    try {\r\n        const catalog = reader.getCatalog();\r\n        const acroVal = resolveValue(reader, catalog.get('AcroForm'));\r\n        if (acroVal === null || !isDict(acroVal)) return [];\r\n        const fieldsVal = resolveValue(reader, acroVal.get('Fields'));\r\n        if (fieldsVal === null || !isArray(fieldsVal)) return [];\r\n\r\n        const out: SignatureField[] = [];\r\n        for (const fieldRef of fieldsVal) {\r\n            const field = resolveValue(reader, fieldRef);\r\n            if (field === null || !isDict(field)) continue;\r\n            if (getDictName(field, 'FT') !== 'Sig') continue;\r\n            const sigVal = resolveValue(reader, field.get('V'));\r\n            if (sigVal === null || !isDict(sigVal)) continue;\r\n            out.push({\r\n                fieldName: getDictString(field, 'T'),\r\n                sigDict: sigVal,\r\n            });\r\n        }\r\n        return out;\r\n    } catch {\r\n        return [];\r\n    }\r\n}\r\n\r\ninterface ParsedSignature {\r\n    readonly byteRange: readonly [number, number, number, number] | null;\r\n    readonly contents: Uint8Array | null;\r\n    readonly subFilter: string | null;\r\n    readonly signingTime: string | null;\r\n    readonly reason: string | null;\r\n    readonly location: string | null;\r\n}\r\n\r\n/**\r\n * Trim trailing zero-padding from a DER-encoded blob extracted from a PDF\r\n * `/Contents <…>` placeholder. Returns the slice up to the encoded length of\r\n * the outermost ASN.1 object, or `null` when the bytes don't start with a\r\n * valid tag-length prefix.\r\n */\r\nfunction trimDerToLength(bytes: Uint8Array): Uint8Array | null {\r\n    if (bytes.length < 2) return null;\r\n    const lenByte = bytes[1] as number;\r\n    let totalLen: number;\r\n    if (lenByte < 0x80) {\r\n        totalLen = 2 + lenByte;\r\n    } else {\r\n        const numLenBytes = lenByte & 0x7f;\r\n        if (numLenBytes === 0 || numLenBytes > 4) return null;\r\n        if (bytes.length < 2 + numLenBytes) return null;\r\n        let v = 0;\r\n        for (let i = 0; i < numLenBytes; i++) {\r\n            v = (v << 8) | (bytes[2 + i] as number);\r\n        }\r\n        totalLen = 2 + numLenBytes + v;\r\n    }\r\n    if (totalLen <= 0 || totalLen > bytes.length) return null;\r\n    if (totalLen === bytes.length) return bytes;\r\n    return bytes.slice(0, totalLen);\r\n}\r\n\r\nfunction parseSignatureDict(dict: PdfDict): ParsedSignature {\r\n    const brVal = dict.get('ByteRange');\r\n    let byteRange: readonly [number, number, number, number] | null = null;\r\n    if (Array.isArray(brVal) && brVal.length === 4 && brVal.every((n) => typeof n === 'number')) {\r\n        byteRange = [\r\n            brVal[0] as number,\r\n            brVal[1] as number,\r\n            brVal[2] as number,\r\n            brVal[3] as number,\r\n        ];\r\n    }\r\n\r\n    const contentsRaw = dict.get('Contents');\r\n    let contents: Uint8Array | null = null;\r\n    if (typeof contentsRaw === 'string') {\r\n        // pdfnative exposes hex strings as plain strings — most often already decoded\r\n        // or in hex form. Try hex first.\r\n        const stripped = contentsRaw.replace(/^</, '').replace(/>$/, '').trim();\r\n        if (/^[0-9a-fA-F\\s]+$/.test(stripped) && stripped.length > 0) {\r\n            try {\r\n                contents = decodeHexString(stripped);\r\n            } catch {\r\n                contents = null;\r\n            }\r\n        }\r\n        if (contents === null) {\r\n            // Fallback: treat as raw bytes (PDFDocEncoding-like 1:1 mapping)\r\n            const raw = new Uint8Array(contentsRaw.length);\r\n            for (let i = 0; i < contentsRaw.length; i++) {\r\n                raw[i] = contentsRaw.charCodeAt(i) & 0xff;\r\n            }\r\n            contents = raw;\r\n        }\r\n        // Trim trailing zero-padding from /Contents placeholder. The CMS\r\n        // is the first DER object; pdfnative pads the rest with 0x00 bytes.\r\n        if (contents !== null && contents.length >= 2) {\r\n            const trimmed = trimDerToLength(contents);\r\n            if (trimmed !== null) contents = trimmed;\r\n        }\r\n    }\r\n\r\n    return {\r\n        byteRange,\r\n        contents,\r\n        subFilter: getDictName(dict, 'SubFilter'),\r\n        signingTime: getDictString(dict, 'M'),\r\n        reason: getDictString(dict, 'Reason'),\r\n        location: getDictString(dict, 'Location'),\r\n    };\r\n}\r\n\r\n// ──────────────────────────────────────────────────────────────────────\r\n// Certificate chain\r\n// ──────────────────────────────────────────────────────────────────────\r\n\r\n// Chain construction, parent resolution, byte-equality and trust evaluation\r\n// live in ../utils/cert-chain.ts (shared with the timestamp + revocation\r\n// verifiers).\r\n\r\n// ──────────────────────────────────────────────────────────────────────\r\n// Main\r\n// ──────────────────────────────────────────────────────────────────────\r\n\r\nexport async function verify(args: ParsedArgs): Promise<void> {\r\n    const inputPath = getStringFlag(args.flags, 'input', 'i');\r\n    const format = getStringFlag(args.flags, 'format', 'f') ?? 'json';\r\n    const strict = hasFlag(args.flags, 'strict');\r\n    const trustPaths = getStringFlagAll(args.flags, 'trust');\r\n    const revocationMode = (getStringFlag(args.flags, 'revocation') ?? 'offline') as RevocationMode;\r\n    const revocationPolicy = (getStringFlag(args.flags, 'revocation-policy') ?? 'soft-fail') as RevocationPolicy;\r\n\r\n    if (format !== 'json' && format !== 'text') {\r\n        throw new CliError(`Invalid --format value \"${format}\". Valid: json, text.`, 2);\r\n    }\r\n    if (revocationMode !== 'offline' && revocationMode !== 'online' && revocationMode !== 'disabled') {\r\n        throw new CliError(\r\n            `Invalid --revocation value \"${revocationMode}\". Valid: offline, online, disabled.`,\r\n            2,\r\n        );\r\n    }\r\n    if (revocationPolicy !== 'soft-fail' && revocationPolicy !== 'strict') {\r\n        throw new CliError(\r\n            `Invalid --revocation-policy value \"${revocationPolicy}\". Valid: soft-fail, strict.`,\r\n            2,\r\n        );\r\n    }\r\n\r\n    // Async crypto bootstrap MUST run before any RSA/ECDSA verification.\r\n    await ensureCryptoReady();\r\n\r\n    const trustPemBlocks = await loadPemChain('PDFNATIVE_VERIFY_TRUST', trustPaths);\r\n    const trustRoots = trustPemBlocks.length > 0 ? parseCertificateChain(trustPemBlocks) : [];\r\n\r\n    const inputBuf = await readFileOrStdin(inputPath);\r\n    const pdfBytes = new Uint8Array(inputBuf);\r\n\r\n    let reader: PdfReader;\r\n    try {\r\n        reader = openPdf(pdfBytes);\r\n    } catch (e) {\r\n        const message = e instanceof Error ? e.message : String(e);\r\n        throw new CliError(`Failed to read PDF: ${message}`, 1, ErrorCode.PARSE);\r\n    }\r\n\r\n    const fields = findSignatureFields(reader);\r\n    const reports: SignatureReport[] = [];\r\n\r\n    for (let idx = 0; idx < fields.length; idx++) {\r\n        const field = fields[idx] as (typeof fields)[number];\r\n        const notes: string[] = [];\r\n        const sig = parseSignatureDict(field.sigDict);\r\n        let digest: string | null = null;\r\n        let integrity = false;\r\n        let signerSubject: string | null = null;\r\n        let signerIssuer: string | null = null;\r\n        let chainValid = false;\r\n        let trustedRoot = false;\r\n        let signatureValid = false;\r\n        let signatureAlgorithm: 'rsa-sha256' | 'ecdsa-sha256' | null = null;\r\n        let timestampPresent = false;\r\n        let timestampValid = false;\r\n        let timestampTime: string | null = null;\r\n        let tsaSubject: string | null = null;\r\n        let revocationChecked = false;\r\n        let revocationStatus: RevocationStatus = 'unknown';\r\n        let revocationSource: 'embedded' | 'online' | 'none' = 'none';\r\n        let revocationMethod: 'ocsp' | 'crl' | null = null;\r\n        let revocationRevokedAt: string | null = null;\r\n\r\n        if (sig.byteRange !== null) {\r\n            digest = digestByteRange(pdfBytes, sig.byteRange);\r\n        } else {\r\n            notes.push('missing /ByteRange');\r\n        }\r\n\r\n        if (sig.contents !== null) {\r\n            try {\r\n                const root = walkAbs(sig.contents);\r\n                const certDers = extractCertsFromCms(sig.contents, root);\r\n                if (certDers.length === 0) {\r\n                    notes.push('no certificates embedded in CMS');\r\n                } else {\r\n                    const certs = certDers.map((der) => parseCertificate(der));\r\n                    const leaf = certs[0] as X509Certificate;\r\n                    signerSubject = nameToString(leaf.subject);\r\n                    signerIssuer = nameToString(leaf.issuer);\r\n\r\n                    const md = findMessageDigest(sig.contents, root);\r\n                    if (md !== null && digest !== null) {\r\n                        integrity = bytesToHex(md) === digest;\r\n                        if (!integrity) {\r\n                            notes.push('messageDigest mismatch — content tampered after signing');\r\n                        }\r\n                    } else {\r\n                        notes.push('messageDigest attribute not found in CMS');\r\n                    }\r\n\r\n                    const pool = [...certs, ...trustRoots];\r\n                    const built = buildChain(leaf, pool);\r\n                    chainValid = built.chainValid;\r\n                    if (!chainValid) {\r\n                        notes.push('chain incomplete (no parent for an intermediate cert)');\r\n                    }\r\n\r\n                    trustedRoot = isTrustedRoot(built.root, trustRoots);\r\n                    if (trustRoots.length === 0 && trustedRoot) {\r\n                        notes.push('no --trust provided; accepted self-signed root');\r\n                    } else if (!trustedRoot) {\r\n                        notes.push('chain root not in --trust list');\r\n                    }\r\n\r\n                    // Full CMS signature-value verification (NEW in v0.3.0).\r\n                    const cmsResult = verifyCmsSignatureValue(sig.contents, leaf);\r\n                    signatureValid = cmsResult.signatureValid;\r\n                    signatureAlgorithm = cmsResult.algorithm;\r\n                    timestampPresent = cmsResult.timestampPresent;\r\n                    if (!signatureValid && cmsResult.note !== null) {\r\n                        notes.push(`CMS signature: ${cmsResult.note}`);\r\n                    }\r\n\r\n                    // RFC 3161 timestamp validation (PAdES-T, NEW in v1.0.0).\r\n                    if (timestampPresent) {\r\n                        const unsignedAttrs = extractUnsignedAttrs(sig.contents);\r\n                        const docSigValue = extractSignerSignatureValue(sig.contents);\r\n                        const ts = verifyTimestamp(unsignedAttrs, docSigValue, trustRoots);\r\n                        timestampValid = ts.valid;\r\n                        timestampTime = ts.genTime;\r\n                        tsaSubject = ts.tsaSubject;\r\n                        if (ts.valid) {\r\n                            notes.push(\r\n                                `RFC 3161 timestamp valid (genTime ${ts.genTime ?? 'unknown'}`\r\n                                + `${ts.trusted ? ', TSA trusted' : ', TSA untrusted'})`,\r\n                            );\r\n                        } else {\r\n                            notes.push(`RFC 3161 timestamp invalid${ts.note !== null ? `: ${ts.note}` : ''}`);\r\n                        }\r\n                    }\r\n\r\n                    // Certificate revocation — OCSP + CRL (PAdES-LT, NEW in v1.0.0).\r\n                    if (revocationMode !== 'disabled') {\r\n                        const issuerCert = built.chain.length > 1 ? (built.chain[1] as X509Certificate) : null;\r\n                        const rev = await checkRevocation(reader, leaf, issuerCert, certs, revocationMode);\r\n                        revocationChecked = rev.checked;\r\n                        revocationStatus = rev.status;\r\n                        revocationSource = rev.source;\r\n                        revocationMethod = rev.method;\r\n                        revocationRevokedAt = rev.revokedAt;\r\n                        if (rev.status === 'revoked') {\r\n                            notes.push(\r\n                                `certificate REVOKED${rev.revokedAt !== null ? ` at ${rev.revokedAt}` : ''}`\r\n                                + ` (via ${rev.method ?? 'unknown'}, ${rev.source})`,\r\n                            );\r\n                        } else if (rev.checked && rev.status === 'good') {\r\n                            notes.push(`revocation OK (via ${rev.method ?? 'unknown'}, ${rev.source})`);\r\n                        } else if (rev.note !== null) {\r\n                            notes.push(`revocation: ${rev.note}`);\r\n                        }\r\n                    }\r\n                }\r\n            } catch {\r\n                // Avoid leaking ASN.1 byte offsets or internal parser state.\r\n                notes.push('failed to parse CMS (malformed or unsupported structure)');\r\n            }\r\n        } else {\r\n            notes.push('missing /Contents');\r\n        }\r\n\r\n        reports.push({\r\n            index: idx,\r\n            fieldName: field.fieldName,\r\n            subFilter: sig.subFilter,\r\n            signerSubject,\r\n            signerIssuer,\r\n            signingTime: sig.signingTime,\r\n            reason: sig.reason,\r\n            location: sig.location,\r\n            digest,\r\n            integrity,\r\n            chainValid,\r\n            trustedRoot,\r\n            signatureValid,\r\n            signatureAlgorithm,\r\n            timestampPresent,\r\n            timestampValid,\r\n            timestampTime,\r\n            tsaSubject,\r\n            revocationChecked,\r\n            revocationStatus,\r\n            revocationSource,\r\n            revocationMethod,\r\n            revocationRevokedAt,\r\n            notes,\r\n        });\r\n    }\r\n\r\n    // A signature's revocation outcome blocks validity when the certificate is\r\n    // explicitly revoked, or — under the strict policy — whenever a 'good'\r\n    // status could not be positively established.\r\n    const revocationOk = (r: SignatureReport): boolean => {\r\n        if (r.revocationStatus === 'revoked') return false;\r\n        if (revocationPolicy === 'strict') return r.revocationStatus === 'good';\r\n        return true;\r\n    };\r\n\r\n    const allValid =\r\n        reports.length > 0\r\n        && reports.every(\r\n            (r) => r.integrity && r.chainValid && r.trustedRoot && r.signatureValid && revocationOk(r),\r\n        );\r\n\r\n    const result: VerifyResult = { signatures: reports, allValid };\r\n\r\n    if (format === 'json') {\r\n        const summary = hasFlag(args.flags, 'summary');\r\n        const fieldsRaw = getStringFlag(args.flags, 'fields');\r\n        let out: unknown = summary\r\n            ? {\r\n                valid: result.allValid,\r\n                signatures: result.signatures.length,\r\n                invalid: result.signatures.filter((s) => !s.signatureValid).length,\r\n            }\r\n            : result;\r\n        if (fieldsRaw !== undefined) {\r\n            out = selectFields(out, parseFieldList(fieldsRaw));\r\n        }\r\n        // Compact for agents (--json), pretty for humans; --pretty forces pretty.\r\n        const pretty = hasFlag(args.flags, 'pretty') || !isJsonMode();\r\n        process.stdout.write(serializeJson(out, pretty) + '\\n');\r\n    } else {\r\n        process.stdout.write(`Signatures: ${reports.length}\\n`);\r\n        for (const r of reports) {\r\n            process.stdout.write(\r\n                `\\n[${r.index}] field=${r.fieldName ?? '—'} subFilter=${r.subFilter ?? '—'}\\n`\r\n                + `    signer:    ${r.signerSubject ?? '—'}\\n`\r\n                + `    issuer:    ${r.signerIssuer ?? '—'}\\n`\r\n                + `    signed at: ${r.signingTime ?? '—'}\\n`\r\n                + `    algorithm: ${r.signatureAlgorithm ?? '—'}\\n`\r\n                + `    integrity: ${r.integrity ? 'OK' : 'FAIL'}\\n`\r\n                + `    signature: ${r.signatureValid ? 'OK' : 'FAIL'}\\n`\r\n                + `    chain:     ${r.chainValid ? 'valid' : 'invalid'}\\n`\r\n                + `    trust:     ${r.trustedRoot ? 'trusted' : 'untrusted'}\\n`\r\n                + `    timestamp: ${r.timestampPresent ? (r.timestampValid ? `valid (${r.timestampTime ?? 'unknown time'})` : 'present but INVALID') : '—'}\\n`\r\n                + `    revocation: ${r.revocationChecked ? `${r.revocationStatus} (${r.revocationMethod ?? '—'}, ${r.revocationSource})` : '—'}\\n`,\r\n            );\r\n            if (r.notes.length > 0) {\r\n                process.stdout.write(`    notes:     ${r.notes.join('; ')}\\n`);\r\n            }\r\n        }\r\n        process.stdout.write(\r\n            `\\nResult: ${allValid ? 'all signatures valid' : 'one or more checks failed'}\\n`,\r\n        );\r\n    }\r\n\r\n    if (strict && !allValid) {\r\n        throw new CliError('', 1, ErrorCode.VERIFY_FAILED);\r\n    }\r\n}\r\n","import { openPdf, validatePdfUA, isStream, readFormFields } from '../core-bridge/index.js';\r\nimport type { PdfReader, PdfUAValidationResult, PageLabelRange, ParsedAnnotation, PdfEncryptionInfo } from '../core-bridge/index.js';\r\nimport { type ParsedArgs, getStringFlag, getStringFlagAll, hasFlag } from '../utils/args.js';\r\nimport { readFileOrStdin } from '../utils/io.js';\r\nimport { CliError, ErrorCode } from '../utils/error.js';\r\nimport { isJsonMode } from '../utils/agent.js';\r\nimport { selectFields, serializeJson, parseFieldList } from '../utils/projection.js';\r\nimport { resolveSourcePassword, mapPdfError } from '../utils/pdfops.js';\r\n\r\nconst VALID_CHECKS = new Set(['pdfa', 'signed', 'encrypted', 'pdfua']);\r\n\r\ninterface PageInfo {\r\n    readonly index: number;\r\n    readonly width: number | null;\r\n    readonly height: number | null;\r\n    readonly rotation: number;\r\n    readonly annotations: number;\r\n    readonly formFields: number;\r\n}\r\n\r\ninterface AnnotationInfo {\r\n    readonly page: number;\r\n    readonly subtype: string;\r\n    readonly contents: string | null;\r\n    readonly title: string | null;\r\n    readonly url: string | null;\r\n}\r\n\r\ninterface PageLabelInfo {\r\n    readonly startPage: number;\r\n    readonly style: string | null;\r\n    readonly prefix: string | null;\r\n    readonly start: number | null;\r\n}\r\n\r\ninterface EncryptionDetail {\r\n    readonly algorithm: string;\r\n    readonly revision: number;\r\n    readonly authenticatedAs: string;\r\n}\r\n\r\ninterface FormFieldInfo {\r\n    readonly name: string;\r\n    readonly type: string;\r\n    readonly value: string | readonly string[] | boolean | null;\r\n    readonly readOnly: boolean;\r\n    readonly required: boolean;\r\n    readonly options?: readonly string[];\r\n}\r\n\r\ninterface InspectResult {\r\n    readonly version: string;\r\n    readonly pageCount: number;\r\n    readonly encrypted: boolean;\r\n    readonly pdfaConformance: string | null;\r\n    readonly signatures: number;\r\n    readonly metadata: {\r\n        readonly title: string | null;\r\n        readonly author: string | null;\r\n        readonly creationDate: string | null;\r\n        readonly subject: string | null;\r\n        readonly producer: string | null;\r\n    };\r\n    readonly pageLabels?: readonly PageLabelInfo[];\r\n    readonly encryption?: EncryptionDetail | null;\r\n    readonly formFields?: readonly FormFieldInfo[];\r\n    readonly pages?: readonly PageInfo[];\r\n    readonly annotations?: readonly AnnotationInfo[];\r\n    readonly pdfua?: {\r\n        readonly valid: boolean;\r\n        readonly errors: readonly string[];\r\n        readonly warnings: readonly string[];\r\n    };\r\n    readonly verbose?: {\r\n        readonly trailerKeys: readonly string[];\r\n        readonly catalogKeys: readonly string[];\r\n        readonly objectCount: number;\r\n        readonly xmpMetadata: string | null;\r\n    };\r\n}\r\n\r\ninterface CheckResult {\r\n    readonly checks: readonly string[];\r\n    readonly allPassed: boolean;\r\n}\r\n\r\nfunction safeInfoString(value: unknown): string | null {\r\n    if (typeof value !== 'string') return null;\r\n    const trimmed = value.trim();\r\n    if (trimmed.startsWith('(') && trimmed.endsWith(')')) {\r\n        return trimmed.slice(1, -1);\r\n    }\r\n    // eslint-disable-next-line no-control-regex\r\n    if (/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F]/.test(trimmed)) return null;\r\n    return trimmed.length > 0 ? trimmed : null;\r\n}\r\n\r\nfunction extractVersion(reader: PdfReader): string {\r\n    const header = new TextDecoder('ascii', { fatal: false }).decode(\r\n        reader.bytes.slice(0, 20),\r\n    );\r\n    const match = /^%PDF-(\\d+\\.\\d+)/.exec(header);\r\n    return match !== null ? (match[1] as string) : 'unknown';\r\n}\r\n\r\nfunction extractEncrypted(reader: PdfReader): boolean {\r\n    return reader.trailer.get('Encrypt') !== undefined;\r\n}\r\n\r\nfunction readXmp(reader: PdfReader): string | null {\r\n    try {\r\n        const catalog = reader.getCatalog();\r\n        const metaRef = catalog.get('Metadata');\r\n        if (metaRef === undefined) return null;\r\n        const metaObj = reader.resolveValue(metaRef);\r\n        if (!isStream(metaObj)) {\r\n            return null;\r\n        }\r\n        const decoded = reader.decodeStream(\r\n            metaObj as Parameters<PdfReader['decodeStream']>[0],\r\n        );\r\n        return new TextDecoder('utf-8', { fatal: false }).decode(decoded);\r\n    } catch {\r\n        return null;\r\n    }\r\n}\r\n\r\nfunction extractPdfaConformance(reader: PdfReader): string | null {\r\n    const xmp = readXmp(reader);\r\n    if (xmp === null) return null;\r\n    const partMatch = /pdfaid:part[^>]*>(\\d+)</.exec(xmp);\r\n    const confMatch = /pdfaid:conformance[^>]*>([A-Za-z]+)</.exec(xmp);\r\n    if (partMatch !== null && confMatch !== null) {\r\n        return `${partMatch[1] as string}${(confMatch[1] as string).toLowerCase()}`;\r\n    }\r\n    return null;\r\n}\r\n\r\nfunction countSignatures(reader: PdfReader): number {\r\n    try {\r\n        const catalog = reader.getCatalog();\r\n        const acroRef = catalog.get('AcroForm');\r\n        if (acroRef === undefined) return 0;\r\n        const acro = reader.resolveValue(acroRef);\r\n        if (!(acro instanceof Map)) return 0;\r\n        const fieldsVal = acro.get('Fields');\r\n        if (!Array.isArray(fieldsVal)) return 0;\r\n        let count = 0;\r\n        for (const ref of fieldsVal) {\r\n            const field = reader.resolveValue(ref as Parameters<PdfReader['resolveValue']>[0]);\r\n            if (field instanceof Map && field.get('FT') === '/Sig') {\r\n                count++;\r\n            }\r\n        }\r\n        return count;\r\n    } catch {\r\n        return 0;\r\n    }\r\n}\r\n\r\nfunction inspectPages(reader: PdfReader): readonly PageInfo[] {\r\n    const out: PageInfo[] = [];\r\n    for (let i = 0; i < reader.pageCount; i++) {\r\n        const page = reader.getPage(i);\r\n        const mediaBox = page.get('MediaBox');\r\n        let width: number | null = null;\r\n        let height: number | null = null;\r\n        const box = Array.isArray(mediaBox) ? mediaBox : null;\r\n        if (box !== null && box.length === 4) {\r\n            const w = box[2];\r\n            const h = box[3];\r\n            if (typeof w === 'number') width = w;\r\n            if (typeof h === 'number') height = h;\r\n        }\r\n        const rotation = typeof page.get('Rotate') === 'number'\r\n            ? (page.get('Rotate') as number)\r\n            : 0;\r\n        const annots = page.get('Annots');\r\n        let annotations = 0;\r\n        let formFields = 0;\r\n        if (Array.isArray(annots)) {\r\n            for (const ref of annots) {\r\n                annotations++;\r\n                try {\r\n                    const annot = reader.resolveValue(ref as Parameters<PdfReader['resolveValue']>[0]);\r\n                    if (annot instanceof Map && annot.get('Subtype') === '/Widget') {\r\n                        formFields++;\r\n                    }\r\n                } catch {\r\n                    // best-effort — keep counting other annotations\r\n                }\r\n            }\r\n        }\r\n        out.push({ index: i, width, height, rotation, annotations, formFields });\r\n    }\r\n    return out;\r\n}\r\n\r\nfunction runPdfUaCheck(bytes: Uint8Array): NonNullable<InspectResult['pdfua']> {\r\n    const res: PdfUAValidationResult = validatePdfUA(bytes);\r\n    return { valid: res.valid, errors: res.errors, warnings: res.warnings };\r\n}\r\n\r\n/** Read the document's /PageLabels number tree (pdfnative 1.5.0), or undefined. */\r\nfunction inspectPageLabels(reader: PdfReader): readonly PageLabelInfo[] | undefined {\r\n    let ranges: PageLabelRange[] | null;\r\n    try {\r\n        ranges = reader.getPageLabels();\r\n    } catch {\r\n        return undefined;\r\n    }\r\n    if (ranges === null || ranges.length === 0) return undefined;\r\n    return ranges.map((r) => ({\r\n        startPage: r.startPage,\r\n        style: r.style ?? null,\r\n        prefix: r.prefix ?? null,\r\n        start: r.start ?? null,\r\n    }));\r\n}\r\n\r\n/** Report the document's encryption scheme (pdfnative 1.6.0), or null. */\r\nfunction inspectEncryption(reader: PdfReader): EncryptionDetail | null {\r\n    const enc: PdfEncryptionInfo | null = reader.encryption;\r\n    if (enc === null) return null;\r\n    return { algorithm: enc.algorithm, revision: enc.revision, authenticatedAs: enc.authenticatedAs };\r\n}\r\n\r\n/** Enumerate interactive form fields (pdfnative 1.6.0 `readFormFields`). */\r\nfunction inspectFormFields(bytes: Uint8Array, password: string | undefined): readonly FormFieldInfo[] {\r\n    const fields = readFormFields(bytes, password !== undefined ? { password } : undefined);\r\n    return fields.map((f) => ({\r\n        name: f.name,\r\n        type: f.type,\r\n        value: f.value,\r\n        readOnly: f.readOnly,\r\n        required: f.required,\r\n        ...(f.options !== undefined ? { options: f.options.map((o) => o.export) } : {}),\r\n    }));\r\n}\r\n\r\n/** Read markup / link annotations across all pages (pdfnative 1.5.0). */\r\nfunction inspectAnnotations(reader: PdfReader): readonly AnnotationInfo[] {\r\n    const out: AnnotationInfo[] = [];\r\n    for (let i = 0; i < reader.pageCount; i++) {\r\n        let annots: ParsedAnnotation[];\r\n        try {\r\n            annots = reader.getAnnotations(i);\r\n        } catch {\r\n            continue;\r\n        }\r\n        for (const a of annots) {\r\n            out.push({\r\n                page: i + 1,\r\n                subtype: a.subtype,\r\n                contents: a.contents ?? null,\r\n                title: a.title ?? null,\r\n                url: a.url ?? null,\r\n            });\r\n        }\r\n    }\r\n    return out;\r\n}\r\n\r\nfunction buildVerbose(reader: PdfReader): InspectResult['verbose'] {\r\n    const trailerKeys: string[] = [];\r\n    for (const k of reader.trailer.keys()) trailerKeys.push(k);\r\n    const catalogKeys: string[] = [];\r\n    try {\r\n        for (const k of reader.getCatalog().keys()) catalogKeys.push(k);\r\n    } catch {\r\n        // catalog not resolvable — leave empty\r\n    }\r\n    const objectCount = reader.xref?.entries?.size ?? 0;\r\n    const xmp = readXmp(reader);\r\n    return {\r\n        trailerKeys,\r\n        catalogKeys,\r\n        objectCount,\r\n        xmpMetadata: xmp,\r\n    };\r\n}\r\n\r\n/** Canonical minimal verdict for agents (`--summary`). Stable, schema-pinned. */\r\nfunction toInspectSummary(result: InspectResult): Record<string, unknown> {\r\n    return {\r\n        pages: result.pageCount,\r\n        encrypted: result.encrypted,\r\n        signatures: result.signatures,\r\n        pdfa: result.pdfaConformance,\r\n    };\r\n}\r\n\r\nfunction evaluateChecks(checks: readonly string[], result: InspectResult): CheckResult {\r\n    const out: { name: string; passed: boolean }[] = [];\r\n    for (const c of checks) {\r\n        if (!VALID_CHECKS.has(c)) {\r\n            throw new CliError(\r\n                `Invalid --check value \"${c}\". Valid: ${[...VALID_CHECKS].join(', ')}.`,\r\n                2,\r\n            );\r\n        }\r\n        if (c === 'pdfa') out.push({ name: c, passed: result.pdfaConformance !== null });\r\n        if (c === 'signed') out.push({ name: c, passed: result.signatures > 0 });\r\n        if (c === 'encrypted') out.push({ name: c, passed: result.encrypted });\r\n        if (c === 'pdfua') out.push({ name: c, passed: result.pdfua?.valid === true });\r\n    }\r\n    return {\r\n        checks: out.map((x) => `${x.name}=${x.passed ? 'pass' : 'fail'}`),\r\n        allPassed: out.every((x) => x.passed),\r\n    };\r\n}\r\n\r\nexport async function inspect(args: ParsedArgs): Promise<void> {\r\n    const inputPath = getStringFlag(args.flags, 'input', 'i');\r\n    const format = getStringFlag(args.flags, 'format', 'f') ?? 'json';\r\n    const verbose = hasFlag(args.flags, 'verbose');\r\n    const includePages = hasFlag(args.flags, 'pages');\r\n    const includeAnnotations = hasFlag(args.flags, 'annotations');\r\n    const includeFormFields = hasFlag(args.flags, 'form-fields');\r\n    const includeEncryption = hasFlag(args.flags, 'encryption');\r\n    const password = resolveSourcePassword(args.flags);\r\n    const checks = getStringFlagAll(args.flags, 'check');\r\n    const includePdfua = hasFlag(args.flags, 'pdfua') || checks.includes('pdfua');\r\n\r\n    if (format !== 'json' && format !== 'text') {\r\n        throw new CliError(`Invalid --format value \"${format}\". Valid: json, text.`, 2);\r\n    }\r\n\r\n    const inputBuf = await readFileOrStdin(inputPath);\r\n    const pdfBytes = new Uint8Array(inputBuf);\r\n\r\n    let reader: PdfReader;\r\n    try {\r\n        reader = openPdf(pdfBytes, password !== undefined ? { password } : undefined);\r\n    } catch (e) {\r\n        throw mapPdfError(e, 'Failed to read PDF');\r\n    }\r\n\r\n    const info = reader.getInfo();\r\n    const baseResult: InspectResult = {\r\n        version: extractVersion(reader),\r\n        pageCount: reader.pageCount,\r\n        encrypted: extractEncrypted(reader),\r\n        pdfaConformance: extractPdfaConformance(reader),\r\n        signatures: countSignatures(reader),\r\n        metadata: {\r\n            title: info !== null ? safeInfoString(info.get('Title')) : null,\r\n            author: info !== null ? safeInfoString(info.get('Author')) : null,\r\n            creationDate: info !== null ? safeInfoString(info.get('CreationDate')) : null,\r\n            subject: info !== null ? safeInfoString(info.get('Subject')) : null,\r\n            producer: info !== null ? safeInfoString(info.get('Producer')) : null,\r\n        },\r\n    };\r\n\r\n    const pageLabels = inspectPageLabels(reader);\r\n    let formFields: readonly FormFieldInfo[] | undefined;\r\n    if (includeFormFields) {\r\n        try {\r\n            formFields = inspectFormFields(pdfBytes, password);\r\n        } catch (e) {\r\n            throw mapPdfError(e, 'Failed to read form fields');\r\n        }\r\n    }\r\n    const result: InspectResult = {\r\n        ...baseResult,\r\n        ...(pageLabels !== undefined ? { pageLabels } : {}),\r\n        ...(includeEncryption ? { encryption: inspectEncryption(reader) } : {}),\r\n        ...(formFields !== undefined ? { formFields } : {}),\r\n        ...(includePages ? { pages: inspectPages(reader) } : {}),\r\n        ...(includeAnnotations ? { annotations: inspectAnnotations(reader) } : {}),\r\n        ...(includePdfua ? { pdfua: runPdfUaCheck(pdfBytes) } : {}),\r\n        ...(verbose ? { verbose: buildVerbose(reader) } : {}),\r\n    };\r\n\r\n    if (format === 'json') {\r\n        const summary = hasFlag(args.flags, 'summary');\r\n        const fieldsRaw = getStringFlag(args.flags, 'fields');\r\n        let out: unknown = summary ? toInspectSummary(result) : result;\r\n        if (fieldsRaw !== undefined) {\r\n            out = selectFields(out, parseFieldList(fieldsRaw));\r\n        }\r\n        // Compact for agents (--json), pretty for humans; --pretty forces pretty.\r\n        const pretty = hasFlag(args.flags, 'pretty') || !isJsonMode();\r\n        process.stdout.write(serializeJson(out, pretty) + '\\n');\r\n    } else {\r\n        const lines = [\r\n            `Version:        ${result.version}`,\r\n            `Pages:          ${result.pageCount}`,\r\n            `Encrypted:      ${result.encrypted ? 'yes' : 'no'}`,\r\n            `PDF/A:          ${result.pdfaConformance ?? 'none'}`,\r\n            `Signatures:     ${result.signatures}`,\r\n            `Title:          ${result.metadata.title ?? '—'}`,\r\n            `Author:         ${result.metadata.author ?? '—'}`,\r\n            `Created:        ${result.metadata.creationDate ?? '—'}`,\r\n            `Subject:        ${result.metadata.subject ?? '—'}`,\r\n            `Producer:       ${result.metadata.producer ?? '—'}`,\r\n        ];\r\n        if (result.pages !== undefined) {\r\n            lines.push('Pages detail:');\r\n            for (const p of result.pages) {\r\n                lines.push(\r\n                    `  #${p.index + 1}: ${p.width ?? '?'}x${p.height ?? '?'}pt rot=${p.rotation}° annots=${p.annotations} fields=${p.formFields}`,\r\n                );\r\n            }\r\n        }\r\n        if (result.encryption !== undefined) {\r\n            if (result.encryption === null) {\r\n                lines.push('Encryption:     none');\r\n            } else {\r\n                lines.push(\r\n                    `Encryption:     ${result.encryption.algorithm} (R${result.encryption.revision}, opened as ${result.encryption.authenticatedAs})`,\r\n                );\r\n            }\r\n        }\r\n        if (result.formFields !== undefined) {\r\n            lines.push(`Form fields:    ${result.formFields.length}`);\r\n            for (const f of result.formFields) {\r\n                const flags = [f.required ? 'required' : '', f.readOnly ? 'read-only' : ''].filter((s) => s !== '').join(', ');\r\n                const val = f.value === null ? '' : Array.isArray(f.value) ? f.value.join('|') : String(f.value);\r\n                lines.push(`  ${f.name} [${f.type}]${val !== '' ? ` = ${val}` : ''}${flags !== '' ? ` (${flags})` : ''}`);\r\n            }\r\n        }\r\n        if (result.pageLabels !== undefined) {\r\n            lines.push('Page labels:');\r\n            for (const l of result.pageLabels) {\r\n                lines.push(\r\n                    `  from #${l.startPage + 1}: style=${l.style ?? 'none'}${l.prefix !== null ? ` prefix=\"${l.prefix}\"` : ''}${l.start !== null ? ` start=${l.start}` : ''}`,\r\n                );\r\n            }\r\n        }\r\n        if (result.annotations !== undefined) {\r\n            lines.push(`Annotations:    ${result.annotations.length}`);\r\n            for (const a of result.annotations) {\r\n                const detail = a.url ?? a.contents ?? a.title ?? '';\r\n                lines.push(`  page ${a.page} ${a.subtype}${detail !== '' ? `: ${detail}` : ''}`);\r\n            }\r\n        }\r\n        if (result.pdfua !== undefined) {\r\n            lines.push(`PDF/UA:         ${result.pdfua.valid ? 'valid' : 'invalid'}`);\r\n            for (const err of result.pdfua.errors) lines.push(`  error:   ${err}`);\r\n            for (const warn of result.pdfua.warnings) lines.push(`  warning: ${warn}`);\r\n        }\r\n        if (result.verbose !== undefined) {\r\n            lines.push(`Trailer keys:   ${result.verbose.trailerKeys.join(', ')}`);\r\n            lines.push(`Catalog keys:   ${result.verbose.catalogKeys.join(', ')}`);\r\n            lines.push(`Object count:   ${result.verbose.objectCount}`);\r\n            if (result.verbose.xmpMetadata !== null) {\r\n                lines.push(`XMP metadata:   (${result.verbose.xmpMetadata.length} chars)`);\r\n            }\r\n        }\r\n        process.stdout.write(lines.join('\\n') + '\\n');\r\n    }\r\n\r\n    // --check semantics: if any check is given, exit code reflects the result.\r\n    if (checks.length > 0) {\r\n        const evaluation = evaluateChecks(checks, result);\r\n        if (!evaluation.allPassed) {\r\n            const detail = `check failed: ${evaluation.checks.join(', ')}`;\r\n            // exit 1 = check failure (semantic), distinct from a usage error (2)\r\n            // or runtime error (1). Human mode prints the breakdown to stderr and\r\n            // throws an empty message (the dispatcher would otherwise re-print it);\r\n            // agent mode carries the detail in the JSON error envelope instead.\r\n            if (!isJsonMode()) {\r\n                process.stderr.write(detail + '\\n');\r\n                throw new CliError('', 1, ErrorCode.CHECK_FAILED);\r\n            }\r\n            throw new CliError(detail, 1, ErrorCode.CHECK_FAILED);\r\n        }\r\n    }\r\n}\r\n","// `pdfnative merge` — concatenate multiple PDFs into one (pdfnative page-tree\n// API). Rebuilds a fresh, self-contained document: signatures and form fields\n// are dropped (any page-tree edit invalidates a signature's /ByteRange), and\n// only self-contained URI links are kept. Encrypted sources are supported with\n// --password (v1.6.0); the output can be re-encrypted with --encrypt and\n// streamed at constant memory with --stream. See `verify` / `sign` for\n// signature workflows.\n\nimport { mergePdfs, streamMergedPdfs } from '../core-bridge/index.js';\nimport type { StreamMergeOptions } from '../core-bridge/index.js';\nimport { type ParsedArgs, getStringFlag, getStringFlagAll, hasFlag } from '../utils/args.js';\nimport { readBinaryFile, writeOutput, writeStreamingOutput } from '../utils/io.js';\nimport { CliError } from '../utils/error.js';\nimport { emitStatus, isDryRun } from '../utils/agent.js';\nimport {\n    parseMaxOutputSize,\n    collectSourcePaths,\n    resolveSourcePassword,\n    readEncryptTrigger,\n    buildEncryptOptions,\n    parseChunkSize,\n    mapPdfError,\n} from '../utils/pdfops.js';\n\nexport async function merge(args: ParsedArgs): Promise<void> {\n    const outputPath = getStringFlag(args.flags, 'output', 'o');\n    const dropAnnotations = hasFlag(args.flags, 'drop-annotations');\n    const maxOutputSize = parseMaxOutputSize(getStringFlag(args.flags, 'max-output-size'));\n    const password = resolveSourcePassword(args.flags);\n    const { enabled: doEncrypt, algoRaw } = readEncryptTrigger(args.flags);\n    const encrypt = doEncrypt ? buildEncryptOptions(args, algoRaw) : undefined;\n    const stream = hasFlag(args.flags, 'stream');\n    const chunkSize = parseChunkSize(getStringFlag(args.flags, 'chunk-size'));\n    const dryRun = hasFlag(args.flags, 'dry-run') || isDryRun();\n\n    const sources = collectSourcePaths(args.positionals, getStringFlagAll(args.flags, 'input'));\n    if (sources.length < 2) {\n        throw new CliError(\n            'merge requires at least two input PDFs (positional paths or repeated --input).',\n            2,\n        );\n    }\n    if (sources.length > 50) {\n        throw new CliError(`merge supports at most 50 sources (got ${sources.length}).`, 2);\n    }\n\n    const buffers: Uint8Array[] = [];\n    for (const path of sources) {\n        buffers.push(await readBinaryFile(path));\n    }\n\n    const opts: { -readonly [K in keyof StreamMergeOptions]: StreamMergeOptions[K] } = {\n        dropAnnotations,\n    };\n    if (maxOutputSize !== undefined) opts.maxOutputSize = maxOutputSize;\n    if (password !== undefined) opts.password = password;\n    if (encrypt !== undefined) opts.encrypt = encrypt;\n    if (chunkSize !== undefined) opts.chunkSize = chunkSize;\n\n    if (dryRun) {\n        emitStatus({\n            command: 'merge',\n            dryRun: true,\n            sources: sources.length,\n            encrypted: encrypt !== undefined,\n            output: outputPath ?? '-',\n        });\n        return;\n    }\n\n    if (stream) {\n        try {\n            await writeStreamingOutput(streamMergedPdfs(buffers, opts), outputPath);\n        } catch (e) {\n            throw mapPdfError(e, 'Failed to merge PDFs');\n        }\n        emitStatus({\n            command: 'merge',\n            dryRun: false,\n            sources: sources.length,\n            streamed: true,\n            encrypted: encrypt !== undefined,\n            output: outputPath ?? '-',\n        });\n        return;\n    }\n\n    let merged: Uint8Array;\n    try {\n        merged = mergePdfs(buffers, opts);\n    } catch (e) {\n        throw mapPdfError(e, 'Failed to merge PDFs');\n    }\n\n    await writeOutput(merged, outputPath);\n    emitStatus({\n        command: 'merge',\n        dryRun: false,\n        sources: sources.length,\n        encrypted: encrypt !== undefined,\n        output: outputPath ?? '-',\n        bytes: merged.length,\n    });\n}\n","// Page-selector parsing for the `split` and `extract` commands.\r\n//\r\n// Users express page selections in a familiar, 1-based syntax (like qpdf /\r\n// pdftk): a comma-separated list of single pages and inclusive ranges, e.g.\r\n//   \"1,3,5-7\"   → pages 1, 3, 5, 6, 7\r\n//   \"2-4\"       → pages 2, 3, 4\r\n// pdfnative's page-tree API is 0-based, so these helpers validate against the\r\n// document page count and return 0-based indices / ranges.\r\n//\r\n// Pure and dependency-free — the CLI's zero-dep contract holds.\r\n\r\nimport { CliError } from './error.js';\r\nimport type { PageRange } from '../core-bridge/index.js';\r\n\r\n/** Upper bound on distinct tokens in a selector, to bound parsing work. */\r\nconst MAX_TOKENS = 10_000;\r\n\r\ninterface ParsedToken {\r\n    readonly start: number; // 1-based\r\n    readonly end: number; // 1-based, inclusive\r\n}\r\n\r\n/** Split a selector string into validated 1-based (start,end) tokens. */\r\nfunction tokenize(spec: string, pageCount: number): ParsedToken[] {\r\n    const trimmed = spec.trim();\r\n    if (trimmed.length === 0) {\r\n        throw new CliError('Empty page selector. Expected e.g. \"1,3,5-7\".', 2);\r\n    }\r\n    const parts = trimmed.split(',');\r\n    if (parts.length > MAX_TOKENS) {\r\n        throw new CliError(`Page selector has too many segments (max ${MAX_TOKENS}).`, 2);\r\n    }\r\n    const tokens: ParsedToken[] = [];\r\n    for (const raw of parts) {\r\n        const part = raw.trim();\r\n        if (part.length === 0) {\r\n            throw new CliError(`Invalid page selector \"${spec}\": empty segment.`, 2);\r\n        }\r\n        const dash = part.indexOf('-');\r\n        let start: number;\r\n        let end: number;\r\n        if (dash === -1) {\r\n            start = end = parsePageNumber(part, spec);\r\n        } else {\r\n            start = parsePageNumber(part.slice(0, dash), spec);\r\n            end = parsePageNumber(part.slice(dash + 1), spec);\r\n        }\r\n        if (end < start) {\r\n            throw new CliError(\r\n                `Invalid page range \"${part}\" in \"${spec}\": end (${end}) is before start (${start}).`,\r\n                2,\r\n            );\r\n        }\r\n        if (start < 1 || end > pageCount) {\r\n            throw new CliError(\r\n                `Page range \"${part}\" is out of bounds for a ${pageCount}-page document (valid: 1-${pageCount}).`,\r\n                2,\r\n            );\r\n        }\r\n        tokens.push({ start, end });\r\n    }\r\n    return tokens;\r\n}\r\n\r\nfunction parsePageNumber(value: string, spec: string): number {\r\n    const n = Number.parseInt(value.trim(), 10);\r\n    if (!Number.isInteger(n) || String(n) !== value.trim()) {\r\n        throw new CliError(`Invalid page number \"${value}\" in selector \"${spec}\".`, 2);\r\n    }\r\n    return n;\r\n}\r\n\r\n/**\r\n * Parse a page selector into an ordered list of 0-based page indices.\r\n * Order is preserved and duplicates are kept (extract semantics).\r\n */\r\nexport function parsePageList(spec: string, pageCount: number): number[] {\r\n    const tokens = tokenize(spec, pageCount);\r\n    const indices: number[] = [];\r\n    for (const { start, end } of tokens) {\r\n        for (let p = start; p <= end; p++) indices.push(p - 1);\r\n    }\r\n    return indices;\r\n}\r\n\r\n/**\r\n * Parse a page selector into a list of 0-based inclusive {@link PageRange}s,\r\n * one per comma-separated segment (split semantics — each segment becomes a\r\n * separate output document).\r\n */\r\nexport function parsePageRanges(spec: string, pageCount: number): PageRange[] {\r\n    const tokens = tokenize(spec, pageCount);\r\n    return tokens.map(({ start, end }) => ({ start: start - 1, end: end - 1 }));\r\n}\r\n","// `pdfnative split` — split one PDF into multiple PDFs (pdfnative page-tree\n// API). With `--pages` each comma-separated segment becomes one output\n// document; without it, every page becomes its own single-page PDF.\n// Signatures/forms are dropped. Encrypted sources are supported with\n// --password (v1.6.0); each output can be re-encrypted with --encrypt and\n// written at constant memory with --stream (see `merge`).\n\nimport { mkdir } from 'node:fs/promises';\nimport { join, basename, extname } from 'node:path';\nimport { splitPdf, streamSplitPdf, openPdf } from '../core-bridge/index.js';\nimport type { StreamMergeOptions, PageRange } from '../core-bridge/index.js';\nimport { type ParsedArgs, getStringFlag, hasFlag } from '../utils/args.js';\nimport { readFileOrStdin, writeOutput, writeStreamingOutput, validatePath } from '../utils/io.js';\nimport { CliError } from '../utils/error.js';\nimport { emitStatus, isDryRun } from '../utils/agent.js';\nimport {\n    parseMaxOutputSize,\n    resolveSourcePassword,\n    readEncryptTrigger,\n    buildEncryptOptions,\n    parseChunkSize,\n    mapPdfError,\n} from '../utils/pdfops.js';\nimport { parsePageRanges } from '../utils/pages.js';\n\n/** Sanitise a user-supplied filename prefix (strip path separators / dots). */\nfunction sanitizePrefix(raw: string): string {\n    const cleaned = raw.replace(/[^A-Za-z0-9._-]+/g, '_').replace(/^\\.+/, '');\n    return cleaned.length > 0 ? cleaned : 'part';\n}\n\nexport async function split(args: ParsedArgs): Promise<void> {\n    const inputPath = getStringFlag(args.flags, 'input', 'i');\n    const outputDir = getStringFlag(args.flags, 'output-dir');\n    const pagesSpec = getStringFlag(args.flags, 'pages');\n    const prefixRaw = getStringFlag(args.flags, 'prefix');\n    const dropAnnotations = hasFlag(args.flags, 'drop-annotations');\n    const maxOutputSize = parseMaxOutputSize(getStringFlag(args.flags, 'max-output-size'));\n    const password = resolveSourcePassword(args.flags);\n    const { enabled: doEncrypt, algoRaw } = readEncryptTrigger(args.flags);\n    const encrypt = doEncrypt ? buildEncryptOptions(args, algoRaw) : undefined;\n    const stream = hasFlag(args.flags, 'stream');\n    const chunkSize = parseChunkSize(getStringFlag(args.flags, 'chunk-size'));\n    const dryRun = hasFlag(args.flags, 'dry-run') || isDryRun();\n\n    if (outputDir === undefined) {\n        throw new CliError('split requires --output-dir <dir>.', 2);\n    }\n    validatePath(outputDir);\n\n    const inputBuf = await readFileOrStdin(inputPath);\n    const pdfBytes = new Uint8Array(inputBuf);\n\n    let pageCount: number;\n    try {\n        pageCount = openPdf(pdfBytes, password !== undefined ? { password } : undefined).pageCount;\n    } catch (e) {\n        throw mapPdfError(e, 'Failed to read PDF');\n    }\n\n    const ranges: PageRange[] = pagesSpec !== undefined\n        ? parsePageRanges(pagesSpec, pageCount)\n        : Array.from({ length: pageCount }, (_, i) => ({ start: i, end: i }));\n\n    const prefix = sanitizePrefix(\n        prefixRaw ?? (inputPath !== undefined ? basename(inputPath, extname(inputPath)) : 'part'),\n    );\n\n    const opts: { -readonly [K in keyof StreamMergeOptions]: StreamMergeOptions[K] } = {\n        dropAnnotations,\n    };\n    if (maxOutputSize !== undefined) opts.maxOutputSize = maxOutputSize;\n    if (password !== undefined) opts.password = password;\n    if (encrypt !== undefined) opts.encrypt = encrypt;\n    if (chunkSize !== undefined) opts.chunkSize = chunkSize;\n\n    if (dryRun) {\n        emitStatus({\n            command: 'split',\n            dryRun: true,\n            parts: ranges.length,\n            encrypted: encrypt !== undefined,\n            outputDir,\n        });\n        return;\n    }\n\n    await mkdir(outputDir, { recursive: true });\n    // Zero-pad the index so lexical sort matches page order.\n    const width = String(ranges.length).length;\n    const outName = (i: number): string => `${prefix}-${String(i + 1).padStart(width, '0')}.pdf`;\n\n    if (stream) {\n        try {\n            for await (const part of streamSplitPdf(pdfBytes, ranges, opts)) {\n                // writeStreamingOutput fully drains part.pdf before we advance,\n                // which streamSplitPdf requires.\n                await writeStreamingOutput(part.pdf, join(outputDir, outName(part.index)));\n            }\n        } catch (e) {\n            throw mapPdfError(e, 'Failed to split PDF');\n        }\n        emitStatus({\n            command: 'split',\n            dryRun: false,\n            parts: ranges.length,\n            streamed: true,\n            encrypted: encrypt !== undefined,\n            outputDir,\n        });\n        return;\n    }\n\n    let parts: Uint8Array[];\n    try {\n        parts = splitPdf(pdfBytes, ranges, opts);\n    } catch (e) {\n        throw mapPdfError(e, 'Failed to split PDF');\n    }\n\n    for (let i = 0; i < parts.length; i++) {\n        await writeOutput(parts[i] as Uint8Array, join(outputDir, outName(i)));\n    }\n\n    emitStatus({\n        command: 'split',\n        dryRun: false,\n        parts: parts.length,\n        encrypted: encrypt !== undefined,\n        outputDir,\n    });\n}\n","// `pdfnative extract` — extract a subset of pages from a PDF into a new PDF\n// (pdfnative page-tree API). Page order follows the `--pages` selector and\n// pages may repeat. Signatures/forms are dropped. Encrypted sources are\n// supported with --password (v1.6.0); the output can be re-encrypted with\n// --encrypt and streamed at constant memory with --stream (see `merge`).\n\nimport { extractPages, streamExtractPages, openPdf } from '../core-bridge/index.js';\nimport type { StreamMergeOptions } from '../core-bridge/index.js';\nimport { type ParsedArgs, getStringFlag, hasFlag } from '../utils/args.js';\nimport { readFileOrStdin, writeOutput, writeStreamingOutput } from '../utils/io.js';\nimport { CliError } from '../utils/error.js';\nimport { emitStatus, isDryRun } from '../utils/agent.js';\nimport {\n    parseMaxOutputSize,\n    resolveSourcePassword,\n    readEncryptTrigger,\n    buildEncryptOptions,\n    parseChunkSize,\n    mapPdfError,\n} from '../utils/pdfops.js';\nimport { parsePageList } from '../utils/pages.js';\n\nexport async function extract(args: ParsedArgs): Promise<void> {\n    const inputPath = getStringFlag(args.flags, 'input', 'i');\n    const outputPath = getStringFlag(args.flags, 'output', 'o');\n    const pagesSpec = getStringFlag(args.flags, 'pages');\n    const dropAnnotations = hasFlag(args.flags, 'drop-annotations');\n    const maxOutputSize = parseMaxOutputSize(getStringFlag(args.flags, 'max-output-size'));\n    const password = resolveSourcePassword(args.flags);\n    const { enabled: doEncrypt, algoRaw } = readEncryptTrigger(args.flags);\n    const encrypt = doEncrypt ? buildEncryptOptions(args, algoRaw) : undefined;\n    const stream = hasFlag(args.flags, 'stream');\n    const chunkSize = parseChunkSize(getStringFlag(args.flags, 'chunk-size'));\n    const dryRun = hasFlag(args.flags, 'dry-run') || isDryRun();\n\n    if (pagesSpec === undefined) {\n        throw new CliError('extract requires --pages <selector> (e.g. \"1,3,5-7\").', 2);\n    }\n\n    const inputBuf = await readFileOrStdin(inputPath);\n    const pdfBytes = new Uint8Array(inputBuf);\n\n    let pageCount: number;\n    try {\n        pageCount = openPdf(pdfBytes, password !== undefined ? { password } : undefined).pageCount;\n    } catch (e) {\n        throw mapPdfError(e, 'Failed to read PDF');\n    }\n\n    const indices = parsePageList(pagesSpec, pageCount);\n\n    const opts: { -readonly [K in keyof StreamMergeOptions]: StreamMergeOptions[K] } = {\n        dropAnnotations,\n    };\n    if (maxOutputSize !== undefined) opts.maxOutputSize = maxOutputSize;\n    if (password !== undefined) opts.password = password;\n    if (encrypt !== undefined) opts.encrypt = encrypt;\n    if (chunkSize !== undefined) opts.chunkSize = chunkSize;\n\n    if (dryRun) {\n        emitStatus({\n            command: 'extract',\n            dryRun: true,\n            pages: indices.length,\n            encrypted: encrypt !== undefined,\n            output: outputPath ?? '-',\n        });\n        return;\n    }\n\n    if (stream) {\n        try {\n            await writeStreamingOutput(streamExtractPages(pdfBytes, indices, opts), outputPath);\n        } catch (e) {\n            throw mapPdfError(e, 'Failed to extract pages');\n        }\n        emitStatus({\n            command: 'extract',\n            dryRun: false,\n            pages: indices.length,\n            streamed: true,\n            encrypted: encrypt !== undefined,\n            output: outputPath ?? '-',\n        });\n        return;\n    }\n\n    let extracted: Uint8Array;\n    try {\n        extracted = extractPages(pdfBytes, indices, opts);\n    } catch (e) {\n        throw mapPdfError(e, 'Failed to extract pages');\n    }\n\n    await writeOutput(extracted, outputPath);\n    emitStatus({\n        command: 'extract',\n        dryRun: false,\n        pages: indices.length,\n        encrypted: encrypt !== undefined,\n        output: outputPath ?? '-',\n        bytes: extracted.length,\n    });\n}\n","// `pdfnative extract-text` — extract reading-order Unicode text from a PDF\n// (pdfnative 1.6.0 `extractText`). Built for agents / RAG pipelines: text on\n// stdout as plain text, a JSON array, or NDJSON (one line per page). Encrypted\n// documents are supported via --password. No OCR — image-only pages yield\n// empty text.\n\nimport { extractText, openPdf } from '../core-bridge/index.js';\nimport type { ExtractTextOptions, ExtractedPageText } from '../core-bridge/index.js';\nimport { type ParsedArgs, getStringFlag, hasFlag } from '../utils/args.js';\nimport { readFileOrStdin } from '../utils/io.js';\nimport { CliError } from '../utils/error.js';\nimport { isJsonMode } from '../utils/agent.js';\nimport { selectFields, serializeJson, parseFieldList } from '../utils/projection.js';\nimport { resolveSourcePassword, mapPdfError } from '../utils/pdfops.js';\nimport { parsePageList } from '../utils/pages.js';\n\nconst VALID_FORMATS = new Set(['text', 'json', 'ndjson']);\n\n/** Parse `--max-length` (chars): positive integer, or 0/none/off to disable. */\nfunction parseMaxLength(raw: string | undefined): number | undefined {\n    if (raw === undefined) return undefined;\n    const trimmed = raw.trim().toLowerCase();\n    if (trimmed === '0' || trimmed === 'none' || trimmed === 'off') return Number.POSITIVE_INFINITY;\n    const n = Number.parseInt(trimmed, 10);\n    if (!Number.isInteger(n) || n <= 0 || String(n) !== trimmed) {\n        throw new CliError(\n            `Invalid --max-length \"${raw}\". Expected a positive integer (chars) or 0/none to disable.`,\n            2,\n        );\n    }\n    return n;\n}\n\n/** Shape a page for JSON/NDJSON output (drop `runs` when not requested). */\nfunction pageToJson(p: ExtractedPageText, includeRuns: boolean): Record<string, unknown> {\n    const out: Record<string, unknown> = { pageIndex: p.pageIndex, text: p.text };\n    if (includeRuns && p.runs !== undefined) out.runs = p.runs;\n    return out;\n}\n\nexport async function extractTextCmd(args: ParsedArgs): Promise<void> {\n    const inputPath = getStringFlag(args.flags, 'input', 'i');\n    const format = getStringFlag(args.flags, 'format', 'f') ?? 'text';\n    const includeRuns = hasFlag(args.flags, 'runs');\n    const pagesSpec = getStringFlag(args.flags, 'pages');\n    const password = resolveSourcePassword(args.flags);\n    const maxTextLength = parseMaxLength(getStringFlag(args.flags, 'max-length'));\n\n    if (!VALID_FORMATS.has(format)) {\n        throw new CliError(\n            `Invalid --format value \"${format}\". Valid: text, json, ndjson.`,\n            2,\n        );\n    }\n\n    const inputBuf = await readFileOrStdin(inputPath);\n    const pdfBytes = new Uint8Array(inputBuf);\n\n    const opts: { -readonly [K in keyof ExtractTextOptions]: ExtractTextOptions[K] } = {};\n    if (password !== undefined) opts.password = password;\n    if (includeRuns) opts.includeRuns = true;\n    if (maxTextLength !== undefined) opts.maxTextLength = maxTextLength;\n\n    // A --pages selector is 1-based (like split/extract); extractText wants\n    // 0-based indices. Resolve the page count first for friendly bounds errors.\n    if (pagesSpec !== undefined) {\n        let pageCount: number;\n        try {\n            pageCount = openPdf(pdfBytes, password !== undefined ? { password } : undefined).pageCount;\n        } catch (e) {\n            throw mapPdfError(e, 'Failed to read PDF');\n        }\n        opts.pages = parsePageList(pagesSpec, pageCount);\n    }\n\n    let pages: ExtractedPageText[];\n    try {\n        pages = extractText(pdfBytes, opts);\n    } catch (e) {\n        throw mapPdfError(e, 'Failed to extract text');\n    }\n\n    if (format === 'text') {\n        // Form-feed page delimiter (pdftotext convention), reversible by callers.\n        process.stdout.write(pages.map((p) => p.text).join('\\f') + '\\n');\n        return;\n    }\n\n    if (format === 'ndjson') {\n        // One compact JSON object per page — ideal for streaming/RAG ingestion.\n        const lines = pages.map((p) => serializeJson(pageToJson(p, includeRuns), false));\n        process.stdout.write(lines.join('\\n') + (lines.length > 0 ? '\\n' : ''));\n        return;\n    }\n\n    // format === 'json'\n    const summary = hasFlag(args.flags, 'summary');\n    const fieldsRaw = getStringFlag(args.flags, 'fields');\n    let out: unknown = summary\n        ? { pages: pages.length, characters: pages.reduce((n, p) => n + p.text.length, 0) }\n        : pages.map((p) => pageToJson(p, includeRuns));\n    if (fieldsRaw !== undefined) {\n        out = selectFields(out, parseFieldList(fieldsRaw));\n    }\n    const pretty = hasFlag(args.flags, 'pretty') || !isJsonMode();\n    process.stdout.write(serializeJson(out, pretty) + '\\n');\n}\n","// `pdfnative fill` — fill and/or flatten an existing AcroForm PDF (pdfnative\n// 1.6.0 `fillForm` / `flattenForm`). Uses an incremental update, so any\n// existing signature stays valid for its revision. Encrypted documents are\n// supported via --password (appended objects are encrypted under the source's\n// existing scheme). Use `pdfnative inspect --form-fields` to discover fields.\n\nimport { readFile } from 'node:fs/promises';\nimport {\n    fillForm,\n    flattenForm,\n    readFormFields,\n    FormFieldNotFoundError,\n    FormValueTypeError,\n    FormUnsupportedError,\n} from '../core-bridge/index.js';\nimport type { FillFormOptions, FlattenFormOptions, FormFillValue, ParsedFormField } from '../core-bridge/index.js';\nimport { type ParsedArgs, getStringFlag, hasFlag } from '../utils/args.js';\nimport { readFileOrStdin, writeOutput, validatePath, assertJsonSizeLimit } from '../utils/io.js';\nimport { CliError, ErrorCode } from '../utils/error.js';\nimport { emitStatus, isDryRun, isJsonMode } from '../utils/agent.js';\nimport { serializeJson } from '../utils/projection.js';\nimport { resolveSourcePassword, mapPdfError } from '../utils/pdfops.js';\n\n/**\n * Map a parsed field to a `--data`-compatible export value, or `undefined` to\n * skip it. So the default export→edit→fill round-trip always re-applies cleanly:\n *   - text fields export their value (or `\"\"`, which `fill` accepts);\n *   - checkbox/radio export their boolean state;\n *   - choice fields (dropdown/listbox) export a value ONLY when set — an unset\n *     choice would export `\"\"`, which is not a valid option and would make a\n *     round-trip fill fail. Signature/button/unknown fields are always skipped.\n */\nfunction fieldExportValue(f: ParsedFormField): FormFillValue | undefined {\n    const v = f.value;\n    if (typeof v === 'boolean') return v;\n    if (Array.isArray(v)) return v.length > 0 ? [...v] : undefined;\n    if (typeof v === 'string') {\n        if ((f.type === 'dropdown' || f.type === 'listbox') && v === '') return undefined;\n        if (f.type === 'text' || f.type === 'dropdown' || f.type === 'listbox' || f.type === 'radio') return v;\n        return undefined;\n    }\n    // v === null (unset): only text fields get a blank template default.\n    return f.type === 'text' ? '' : undefined;\n}\n\n/** `fill --export`: emit the form's current values as a `--data`-shaped JSON map. */\nasync function exportValues(\n    pdfBytes: Uint8Array,\n    password: string | undefined,\n    outputPath: string | undefined,\n    pretty: boolean,\n): Promise<void> {\n    let fields: readonly ParsedFormField[];\n    try {\n        fields = readFormFields(pdfBytes, password !== undefined ? { password } : undefined);\n    } catch (e) {\n        throw mapPdfError(e, 'Failed to read form fields');\n    }\n    const map: Record<string, FormFillValue> = {};\n    for (const f of fields) {\n        const v = fieldExportValue(f);\n        if (v !== undefined) map[f.name] = v;\n    }\n    const json = serializeJson(map, pretty) + '\\n';\n    await writeOutput(new TextEncoder().encode(json), outputPath);\n}\n\n/** Validate that a parsed JSON value is a valid `Record<string, FormFillValue>`. */\nfunction coerceValues(parsed: unknown): Record<string, FormFillValue> {\n    // Unwrap the `{ \"values\": {…} }` convenience form ONLY when `values` is\n    // itself a map — so a form with a field literally named \"values\" (holding a\n    // string/boolean/array) is still treated as the field map, not the wrapper.\n    const isWrapper =\n        parsed !== null && typeof parsed === 'object' && !Array.isArray(parsed) &&\n        'values' in parsed &&\n        (() => {\n            const v = (parsed as { values: unknown }).values;\n            return v !== null && typeof v === 'object' && !Array.isArray(v);\n        })();\n    const obj = isWrapper ? (parsed as { values: unknown }).values : parsed;\n    // Malformed --data CONTENT is an input error (exit 1, E_INPUT) — the flag\n    // itself is well-formed, so it is not a usage error. Keep this consistent\n    // with the unknown-field / wrong-value paths below.\n    if (obj === null || typeof obj !== 'object' || Array.isArray(obj)) {\n        throw new CliError(\n            'Form data must be a JSON object mapping field name → value (string, boolean, or string[]).',\n            1,\n            ErrorCode.INPUT,\n        );\n    }\n    const out: Record<string, FormFillValue> = {};\n    for (const [key, value] of Object.entries(obj as Record<string, unknown>)) {\n        if (typeof value === 'string' || typeof value === 'boolean') {\n            out[key] = value;\n        } else if (Array.isArray(value) && value.every((v) => typeof v === 'string')) {\n            out[key] = value as readonly string[];\n        } else {\n            throw new CliError(\n                `Invalid value for field \"${key}\": expected string, boolean, or string[].`,\n                1,\n                ErrorCode.INPUT,\n            );\n        }\n    }\n    return out;\n}\n\nasync function loadValues(dataPath: string): Promise<Record<string, FormFillValue>> {\n    validatePath(dataPath);\n    const buf = await readFile(dataPath);\n    assertJsonSizeLimit(buf);\n    let parsed: unknown;\n    try {\n        parsed = JSON.parse(buf.toString('utf8'));\n    } catch (e) {\n        const msg = e instanceof Error ? e.message : String(e);\n        throw new CliError(`Failed to parse --data JSON: ${msg}`, 1, ErrorCode.PARSE);\n    }\n    return coerceValues(parsed);\n}\n\nexport async function fill(args: ParsedArgs): Promise<void> {\n    const inputPath = getStringFlag(args.flags, 'input', 'i');\n    const outputPath = getStringFlag(args.flags, 'output', 'o');\n    const dataPath = getStringFlag(args.flags, 'data');\n    const flatten = hasFlag(args.flags, 'flatten');\n    const force = hasFlag(args.flags, 'force');\n    const needAppearances = hasFlag(args.flags, 'need-appearances');\n    const onUnknown = getStringFlag(args.flags, 'on-unknown') ?? 'throw';\n    const password = resolveSourcePassword(args.flags);\n    const doExport = hasFlag(args.flags, 'export');\n    const dryRun = hasFlag(args.flags, 'dry-run') || isDryRun();\n\n    // `--export` is a read-only mode: dump the current field values as a\n    // `--data`-compatible JSON map (read → edit → fill round-trip). It ignores\n    // --data / --flatten.\n    if (doExport) {\n        const inputBuf = await readFileOrStdin(inputPath);\n        const pretty = hasFlag(args.flags, 'pretty') || !isJsonMode();\n        await exportValues(new Uint8Array(inputBuf), password, outputPath, pretty);\n        return;\n    }\n\n    if (onUnknown !== 'throw' && onUnknown !== 'ignore') {\n        throw new CliError(`Invalid --on-unknown \"${onUnknown}\". Valid: throw, ignore.`, 2);\n    }\n    if (dataPath === undefined && !flatten) {\n        throw new CliError(\n            'fill requires --data <values.json>, --flatten, or --export.',\n            2,\n        );\n    }\n\n    const values = dataPath !== undefined ? await loadValues(dataPath) : undefined;\n\n    const inputBuf = await readFileOrStdin(inputPath);\n    const pdfBytes = new Uint8Array(inputBuf);\n\n    if (dryRun) {\n        // Validate the source opens and enumerate fields without writing output.\n        let fieldCount: number;\n        try {\n            fieldCount = readFormFields(pdfBytes, password !== undefined ? { password } : undefined).length;\n        } catch (e) {\n            throw mapPdfError(e, 'Failed to read form fields');\n        }\n        emitStatus({\n            command: 'fill',\n            dryRun: true,\n            fields: fieldCount,\n            values: values !== undefined ? Object.keys(values).length : 0,\n            flatten,\n            output: outputPath ?? '-',\n        });\n        return;\n    }\n\n    let result: Uint8Array;\n    try {\n        if (values !== undefined) {\n            const opts: { -readonly [K in keyof FillFormOptions]: FillFormOptions[K] } = {\n                onUnknownField: onUnknown,\n            };\n            if (password !== undefined) opts.password = password;\n            if (flatten) opts.flatten = true;\n            if (needAppearances) opts.nonWinAnsi = 'needAppearances';\n            result = fillForm(pdfBytes, values, opts);\n        } else {\n            // --flatten with no --data: flatten existing field values in place.\n            const opts: { -readonly [K in keyof FlattenFormOptions]: FlattenFormOptions[K] } = {};\n            if (password !== undefined) opts.password = password;\n            if (force) opts.force = true;\n            result = flattenForm(pdfBytes, opts);\n        }\n    } catch (e) {\n        throw mapFillError(e);\n    }\n\n    await writeOutput(result, outputPath);\n    emitStatus({\n        command: 'fill',\n        dryRun: false,\n        values: values !== undefined ? Object.keys(values).length : 0,\n        flatten: flatten || values === undefined,\n        output: outputPath ?? '-',\n        bytes: result.length,\n    });\n}\n\n/** Map form-fill errors to stable codes; falls back to password/parse mapping. */\nfunction mapFillError(e: unknown): CliError {\n    if (e instanceof FormFieldNotFoundError || e instanceof FormValueTypeError) {\n        return new CliError(e.message, 1, ErrorCode.INPUT);\n    }\n    if (e instanceof FormUnsupportedError) {\n        return new CliError(e.message, 1, ErrorCode.UNSUPPORTED);\n    }\n    return mapPdfError(e, 'Failed to fill form');\n}\n","// `pdfnative encrypt` — re-secure a PDF with AES-128/256 encryption (pdfnative\n// 1.6.0 page-tree re-encryption). The document is rebuilt from its page tree,\n// so — like `merge` — signatures and form fields are dropped (any page-tree\n// edit invalidates a signature's /ByteRange). An already-encrypted source can\n// be opened with --password for password rotation. Requires a Web Crypto\n// CSPRNG; RC4 is never emitted.\n\nimport { extractPages, streamExtractPages, openPdf } from '../core-bridge/index.js';\nimport type { StreamMergeOptions } from '../core-bridge/index.js';\nimport { type ParsedArgs, getStringFlag, hasFlag } from '../utils/args.js';\nimport { readFileOrStdin, writeOutput, writeStreamingOutput } from '../utils/io.js';\nimport { emitStatus, isDryRun } from '../utils/agent.js';\nimport {\n    parseMaxOutputSize,\n    parseChunkSize,\n    resolveSourcePassword,\n    buildEncryptOptions,\n    mapPdfError,\n} from '../utils/pdfops.js';\n\nexport async function encrypt(args: ParsedArgs): Promise<void> {\n    const inputPath = getStringFlag(args.flags, 'input', 'i');\n    const outputPath = getStringFlag(args.flags, 'output', 'o');\n    const dropAnnotations = hasFlag(args.flags, 'drop-annotations');\n    const maxOutputSize = parseMaxOutputSize(getStringFlag(args.flags, 'max-output-size'));\n    const sourcePassword = resolveSourcePassword(args.flags);\n    const stream = hasFlag(args.flags, 'stream');\n    const chunkSize = parseChunkSize(getStringFlag(args.flags, 'chunk-size'));\n    const dryRun = hasFlag(args.flags, 'dry-run') || isDryRun();\n\n    // Owner password is required — buildEncryptOptions throws (exit 2) if absent.\n    const encryptOptions = buildEncryptOptions(args, getStringFlag(args.flags, 'algorithm'));\n\n    const inputBuf = await readFileOrStdin(inputPath);\n    const pdfBytes = new Uint8Array(inputBuf);\n\n    let pageCount: number;\n    try {\n        pageCount = openPdf(pdfBytes, sourcePassword !== undefined ? { password: sourcePassword } : undefined).pageCount;\n    } catch (e) {\n        throw mapPdfError(e, 'Failed to read PDF');\n    }\n    const indices = Array.from({ length: pageCount }, (_, i) => i);\n\n    const opts: { -readonly [K in keyof StreamMergeOptions]: StreamMergeOptions[K] } = {\n        dropAnnotations,\n        encrypt: encryptOptions,\n    };\n    if (sourcePassword !== undefined) opts.password = sourcePassword;\n    if (maxOutputSize !== undefined) opts.maxOutputSize = maxOutputSize;\n    if (chunkSize !== undefined) opts.chunkSize = chunkSize;\n\n    if (dryRun) {\n        emitStatus({\n            command: 'encrypt',\n            dryRun: true,\n            pages: pageCount,\n            algorithm: encryptOptions.algorithm ?? 'aes128',\n            output: outputPath ?? '-',\n        });\n        return;\n    }\n\n    if (stream) {\n        try {\n            await writeStreamingOutput(streamExtractPages(pdfBytes, indices, opts), outputPath);\n        } catch (e) {\n            throw mapPdfError(e, 'Failed to encrypt PDF');\n        }\n        emitStatus({\n            command: 'encrypt',\n            dryRun: false,\n            pages: pageCount,\n            algorithm: encryptOptions.algorithm ?? 'aes128',\n            streamed: true,\n            output: outputPath ?? '-',\n        });\n        return;\n    }\n\n    let out: Uint8Array;\n    try {\n        out = extractPages(pdfBytes, indices, opts);\n    } catch (e) {\n        throw mapPdfError(e, 'Failed to encrypt PDF');\n    }\n\n    await writeOutput(out, outputPath);\n    emitStatus({\n        command: 'encrypt',\n        dryRun: false,\n        pages: pageCount,\n        algorithm: encryptOptions.algorithm ?? 'aes128',\n        output: outputPath ?? '-',\n        bytes: out.length,\n    });\n}\n","// `pdfnative decrypt` — remove encryption from a PDF, emitting a plaintext copy\n// (pdfnative 1.6.0 transparent decryption + page-tree rebuild). Provide the\n// document password via --password (or $PDFNATIVE_PASSWORD). Like `merge`, the\n// page-tree rebuild drops signatures and form fields. An unencrypted input is\n// passed through (rebuilt) unchanged in security terms.\n\nimport { extractPages, streamExtractPages, openPdf } from '../core-bridge/index.js';\nimport type { StreamMergeOptions } from '../core-bridge/index.js';\nimport { type ParsedArgs, getStringFlag, hasFlag } from '../utils/args.js';\nimport { readFileOrStdin, writeOutput, writeStreamingOutput } from '../utils/io.js';\nimport { emitStatus, isDryRun } from '../utils/agent.js';\nimport { parseMaxOutputSize, parseChunkSize, resolveSourcePassword, mapPdfError } from '../utils/pdfops.js';\n\nexport async function decrypt(args: ParsedArgs): Promise<void> {\n    const inputPath = getStringFlag(args.flags, 'input', 'i');\n    const outputPath = getStringFlag(args.flags, 'output', 'o');\n    const dropAnnotations = hasFlag(args.flags, 'drop-annotations');\n    const maxOutputSize = parseMaxOutputSize(getStringFlag(args.flags, 'max-output-size'));\n    const password = resolveSourcePassword(args.flags);\n    const stream = hasFlag(args.flags, 'stream');\n    const chunkSize = parseChunkSize(getStringFlag(args.flags, 'chunk-size'));\n    const dryRun = hasFlag(args.flags, 'dry-run') || isDryRun();\n\n    const inputBuf = await readFileOrStdin(inputPath);\n    const pdfBytes = new Uint8Array(inputBuf);\n\n    let pageCount: number;\n    try {\n        pageCount = openPdf(pdfBytes, password !== undefined ? { password } : undefined).pageCount;\n    } catch (e) {\n        throw mapPdfError(e, 'Failed to read PDF');\n    }\n    const indices = Array.from({ length: pageCount }, (_, i) => i);\n\n    // No `encrypt` option → output is unencrypted.\n    const opts: { -readonly [K in keyof StreamMergeOptions]: StreamMergeOptions[K] } = { dropAnnotations };\n    if (password !== undefined) opts.password = password;\n    if (maxOutputSize !== undefined) opts.maxOutputSize = maxOutputSize;\n    if (chunkSize !== undefined) opts.chunkSize = chunkSize;\n\n    if (dryRun) {\n        emitStatus({ command: 'decrypt', dryRun: true, pages: pageCount, output: outputPath ?? '-' });\n        return;\n    }\n\n    if (stream) {\n        try {\n            await writeStreamingOutput(streamExtractPages(pdfBytes, indices, opts), outputPath);\n        } catch (e) {\n            throw mapPdfError(e, 'Failed to decrypt PDF');\n        }\n        emitStatus({ command: 'decrypt', dryRun: false, pages: pageCount, streamed: true, output: outputPath ?? '-' });\n        return;\n    }\n\n    let out: Uint8Array;\n    try {\n        out = extractPages(pdfBytes, indices, opts);\n    } catch (e) {\n        throw mapPdfError(e, 'Failed to decrypt PDF');\n    }\n\n    await writeOutput(out, outputPath);\n    emitStatus({\n        command: 'decrypt',\n        dryRun: false,\n        pages: pageCount,\n        output: outputPath ?? '-',\n        bytes: out.length,\n    });\n}\n","// `pdfnative annotate` — attach markup annotations to an existing PDF\r\n// (pdfnative 1.5.0 annotation API + incremental modifier). The annotations are\r\n// described by a JSON array (`--annotations <file>`), each entry being a markup\r\n// annotation plus a 1-based `page`. The document is updated with an incremental\r\n// save, so the original bytes are preserved (existing signatures stay intact).\r\n\r\nimport {\r\n    openPdf,\r\n    createModifier,\r\n    buildAnnotationBody,\r\n} from '../core-bridge/index.js';\r\nimport type { MarkupAnnotation, AnnotationRect } from '../core-bridge/index.js';\r\nimport { type ParsedArgs, getStringFlag, hasFlag } from '../utils/args.js';\r\nimport { readFileOrStdin, readBinaryFile, writeOutput, assertJsonSizeLimit } from '../utils/io.js';\r\nimport { CliError, ErrorCode } from '../utils/error.js';\r\nimport { emitStatus, isDryRun } from '../utils/agent.js';\r\n\r\nconst ANNOTATION_TYPES = new Set([\r\n    'text', 'highlight', 'underline', 'strikeout', 'squiggly',\r\n    'square', 'circle', 'line', 'freetext',\r\n]);\r\n\r\ninterface AnnotationSpec {\r\n    readonly page: number; // 1-based\r\n    readonly annotation: MarkupAnnotation;\r\n}\r\n\r\nfunction isNumberArray(value: unknown, length: number): boolean {\r\n    return Array.isArray(value)\r\n        && value.length === length\r\n        && value.every((n) => typeof n === 'number' && Number.isFinite(n));\r\n}\r\n\r\n/** Validate + narrow one raw annotation entry into a typed {@link AnnotationSpec}. */\r\nfunction parseAnnotationEntry(raw: unknown, index: number): AnnotationSpec {\r\n    if (typeof raw !== 'object' || raw === null || Array.isArray(raw)) {\r\n        throw new CliError(`Annotation #${index + 1} must be an object.`, 1, ErrorCode.INPUT);\r\n    }\r\n    const obj = raw as Record<string, unknown>;\r\n\r\n    const page = obj['page'];\r\n    if (typeof page !== 'number' || !Number.isInteger(page) || page < 1) {\r\n        throw new CliError(`Annotation #${index + 1} needs a 1-based integer \"page\".`, 1, ErrorCode.INPUT);\r\n    }\r\n\r\n    const type = obj['type'];\r\n    if (typeof type !== 'string' || !ANNOTATION_TYPES.has(type)) {\r\n        throw new CliError(\r\n            `Annotation #${index + 1} has invalid \"type\" (got ${JSON.stringify(type)}). `\r\n            + `Valid: ${[...ANNOTATION_TYPES].join(', ')}.`,\r\n            1,\r\n            ErrorCode.INPUT,\r\n        );\r\n    }\r\n\r\n    if (!isNumberArray(obj['rect'], 4)) {\r\n        throw new CliError(\r\n            `Annotation #${index + 1} needs \"rect\": [x1, y1, x2, y2] (four numbers).`,\r\n            1,\r\n            ErrorCode.INPUT,\r\n        );\r\n    }\r\n\r\n    if (type === 'line' && (!isNumberArray(obj['start'], 2) || !isNumberArray(obj['end'], 2))) {\r\n        throw new CliError(\r\n            `Line annotation #${index + 1} needs \"start\": [x, y] and \"end\": [x, y].`,\r\n            1,\r\n            ErrorCode.INPUT,\r\n        );\r\n    }\r\n\r\n    // Re-key only the fields pdfnative's builders understand — never spread the\r\n    // raw object, so unexpected keys can't leak into the emitted dictionary.\r\n    const rect = obj['rect'] as AnnotationRect;\r\n    const base: Record<string, unknown> = { type, rect };\r\n    for (const key of ['contents', 'color', 'opacity', 'title', 'modified', 'flags'] as const) {\r\n        if (obj[key] !== undefined) base[key] = obj[key];\r\n    }\r\n    if (type === 'text') {\r\n        if (obj['open'] !== undefined) base['open'] = obj['open'];\r\n        if (obj['icon'] !== undefined) base['icon'] = obj['icon'];\r\n    } else if (type === 'highlight' || type === 'underline' || type === 'strikeout' || type === 'squiggly') {\r\n        if (obj['quadPoints'] !== undefined) base['quadPoints'] = obj['quadPoints'];\r\n    } else if (type === 'square' || type === 'circle') {\r\n        if (obj['interiorColor'] !== undefined) base['interiorColor'] = obj['interiorColor'];\r\n        if (obj['borderWidth'] !== undefined) base['borderWidth'] = obj['borderWidth'];\r\n    } else if (type === 'line') {\r\n        base['start'] = obj['start'];\r\n        base['end'] = obj['end'];\r\n        if (obj['borderWidth'] !== undefined) base['borderWidth'] = obj['borderWidth'];\r\n    } else if (type === 'freetext') {\r\n        if (obj['fontSize'] !== undefined) base['fontSize'] = obj['fontSize'];\r\n    }\r\n\r\n    return { page, annotation: base as unknown as MarkupAnnotation };\r\n}\r\n\r\nfunction parseAnnotationsJson(text: string): AnnotationSpec[] {\r\n    let parsed: unknown;\r\n    try {\r\n        parsed = JSON.parse(text);\r\n    } catch (e) {\r\n        const message = e instanceof Error ? e.message : String(e);\r\n        throw new CliError(`Failed to parse --annotations JSON: ${message}`, 1, ErrorCode.PARSE);\r\n    }\r\n    // Accept either a bare array or { annotations: [...] }.\r\n    const list = Array.isArray(parsed)\r\n        ? parsed\r\n        : (typeof parsed === 'object' && parsed !== null && Array.isArray((parsed as Record<string, unknown>)['annotations'])\r\n            ? (parsed as Record<string, unknown>)['annotations'] as unknown[]\r\n            : null);\r\n    if (list === null) {\r\n        throw new CliError(\r\n            '--annotations must be a JSON array (or { \"annotations\": [...] }).',\r\n            1,\r\n            ErrorCode.INPUT,\r\n        );\r\n    }\r\n    if (list.length === 0) {\r\n        throw new CliError('--annotations contains no annotations.', 1, ErrorCode.INPUT);\r\n    }\r\n    return list.map((entry, i) => parseAnnotationEntry(entry, i));\r\n}\r\n\r\nexport async function annotate(args: ParsedArgs): Promise<void> {\r\n    const inputPath = getStringFlag(args.flags, 'input', 'i');\r\n    const outputPath = getStringFlag(args.flags, 'output', 'o');\r\n    const annotationsPath = getStringFlag(args.flags, 'annotations');\r\n    const dryRun = hasFlag(args.flags, 'dry-run') || isDryRun();\r\n\r\n    if (annotationsPath === undefined) {\r\n        throw new CliError('annotate requires --annotations <file.json>.', 2);\r\n    }\r\n\r\n    const annBuf = await readBinaryFile(annotationsPath);\r\n    assertJsonSizeLimit(Buffer.from(annBuf));\r\n    const specs = parseAnnotationsJson(new TextDecoder('utf-8', { fatal: false }).decode(annBuf));\r\n\r\n    const inputBuf = await readFileOrStdin(inputPath);\r\n    const pdfBytes = new Uint8Array(inputBuf);\r\n\r\n    const reader = (() => {\r\n        try {\r\n            return openPdf(pdfBytes);\r\n        } catch (e) {\r\n            const message = e instanceof Error ? e.message : String(e);\r\n            throw new CliError(`Failed to read PDF: ${message}`, 1, ErrorCode.PARSE);\r\n        }\r\n    })();\r\n\r\n    // Bounds-check every page reference before touching the document.\r\n    for (let i = 0; i < specs.length; i++) {\r\n        const spec = specs[i] as AnnotationSpec;\r\n        if (spec.page > reader.pageCount) {\r\n            throw new CliError(\r\n                `Annotation #${i + 1} targets page ${spec.page}, but the document has ${reader.pageCount} page(s).`,\r\n                1,\r\n                ErrorCode.INPUT,\r\n            );\r\n        }\r\n    }\r\n\r\n    if (dryRun) {\r\n        emitStatus({ command: 'annotate', dryRun: true, annotations: specs.length, output: outputPath ?? '-' });\r\n        return;\r\n    }\r\n\r\n    const modifier = createModifier(reader);\r\n    for (const spec of specs) {\r\n        const body = buildAnnotationBody(spec.annotation);\r\n        modifier.addAnnotation(spec.page - 1, body);\r\n    }\r\n\r\n    let outBytes: Uint8Array;\r\n    try {\r\n        outBytes = modifier.save();\r\n    } catch (e) {\r\n        const message = e instanceof Error ? e.message : String(e);\r\n        throw new CliError(`Failed to write annotated PDF: ${message}`, 1, ErrorCode.RUNTIME);\r\n    }\r\n\r\n    await writeOutput(outBytes, outputPath);\r\n    emitStatus({\r\n        command: 'annotate',\r\n        dryRun: false,\r\n        annotations: specs.length,\r\n        output: outputPath ?? '-',\r\n        bytes: outBytes.length,\r\n    });\r\n}\r\n","// AI-governance / Human-in-the-Loop (HITL) contract.\r\n//\r\n// pdfnative 1.5.0 introduced a monorepo-wide governance policy (issue #56): AI\r\n// coding agents act as *draftsmen*, never autonomous submitters. Every issue /\r\n// PR / release must be reviewed and triggered by a human, no runtime dependency\r\n// may be added, and a local reproduction must accompany any bug report.\r\n//\r\n// This module makes that contract a first-class CLI capability: agents driving\r\n// `pdfnative-cli` can emit the policy, print the human/agent rules, and — most\r\n// importantly — validate a draft issue/PR against the policy BEFORE a human\r\n// reviews and submits it. The validation logic is a pure, zero-dependency\r\n// port of pdfnative's `scripts/verify-issue.mjs`, so the CLI honours its own\r\n// zero-dependency contract.\r\n\r\n/** Machine-readable governance policy (mirrors `.github/ai-governance.json`). */\r\nexport const AI_GOVERNANCE_POLICY = Object.freeze({\r\n    $schema: 'https://json-schema.org/draft/2020-12/schema',\r\n    title: 'pdfnative AI Governance Configuration',\r\n    description:\r\n        'Machine-readable contract governing how AI coding agents may propose issues, '\r\n        + 'contributions, and changes across the pdfnative monorepo. Agents that scan '\r\n        + 'repository configuration on initialization MUST honour this file.',\r\n    version: '1.0.0',\r\n    applies_to: ['pdfnative', 'pdfnative-cli', 'pdfnative-mcp', 'pdfnative-react'],\r\n    policy: {\r\n        automatic_issue_reporting: false,\r\n        runtime_dependencies_allowed: false,\r\n        human_in_the_loop_mandatory: true,\r\n        autonomous_github_writes_allowed: false,\r\n        required_issue_fields: ['minimal_reproduction', 'environment', 'expected_behavior'],\r\n    },\r\n    human_in_the_loop: {\r\n        role_of_agent: 'draftsman',\r\n        gate:\r\n            'A human MUST explicitly review, sign off on, and trigger any GitHub issue, '\r\n            + 'comment, PR, or release. The agent\\'s authority ends at producing a local '\r\n            + 'draft plus a compliance report.',\r\n        identity_integrity:\r\n            'Any issue or PR is published under the human user\\'s GitHub identity. The '\r\n            + 'agent MUST remind the user of their shared responsibility for the content '\r\n            + 'before submission.',\r\n        draft_location: '.github/drafts/',\r\n    },\r\n    pre_issue_checklist: [\r\n        'no_duplicate_open_or_closed_issue',\r\n        'zero_runtime_dependency_preserved',\r\n        'local_minimal_reproduction_executed',\r\n        'expected_vs_actual_documented',\r\n        'environment_captured',\r\n    ],\r\n    compliance_report: {\r\n        required_fields: [\r\n            'zero_dependency_confirmed',\r\n            'reproduction_command',\r\n            'reproduction_result',\r\n            'duplicate_search_performed',\r\n            'affected_packages',\r\n            'identity_reminder_shown',\r\n        ],\r\n    },\r\n    verification: {\r\n        command: 'pdfnative govern verify-issue <draft.md>',\r\n        blocks_submission_on_failure: true,\r\n    },\r\n} as const);\r\n\r\n/** Human-and-agent-readable protocol (mirrors `.github/AGENT_RULES.md`). */\r\nexport const AGENT_RULES_TEXT = `\\\r\n# AI Agent Rules for the pdfnative ecosystem\r\n\r\nYou are an AI assistant helping a user develop or fix pdfnative (or its CLI,\r\nMCP, or React packages). You act as a DRAFTSMAN, never as an autonomous\r\nsubmitter.\r\n\r\n## Mandatory pre-issue rules\r\n\r\n1. Zero runtime dependencies. Never suggest, add, or import an external npm\r\n   package for a runtime feature. This is a non-negotiable blocker.\r\n2. No duplicates. Search open AND closed issues/PRs before proposing anything.\r\n3. Local validation & reproduction. Create and EXECUTE a minimal reproduction\r\n   script locally. If it does not fail, do not propose an issue.\r\n4. Byte-identity awareness. Confirm builder changes are additive and existing\r\n   output paths stay byte-identical; report any intentional byte changes.\r\n5. Human-in-the-loop gate (ethics). You are STRICTLY FORBIDDEN from\r\n   automatically creating, editing, or submitting issues, comments, PRs, or\r\n   releases via any tool or API. Produce a local markdown draft and present it\r\n   to the user with a compliance report. The user must explicitly approve and\r\n   trigger any submission.\r\n6. Identity integrity. Remind the user that anything submitted is published\r\n   under THEIR GitHub identity and that they share responsibility for it.\r\n\r\n## Validate a draft before presenting it\r\n\r\n    pdfnative govern verify-issue ./draft.md\r\n\r\nA passing check is NECESSARY BUT NOT SUFFICIENT — the human review gate above\r\nalways applies.\r\n\r\n## What agents must NOT do\r\n\r\n- Add a runtime dependency.\r\n- Open, edit, label, close, or comment on issues/PRs autonomously.\r\n- Submit anything under the user's identity without explicit, per-submission\r\n  human approval.\r\n- Bypass local validation or duplicate checks.\r\n`;\r\n\r\n/** Result of validating a draft issue/PR against the governance policy. */\r\nexport interface GovernanceValidation {\r\n    readonly ok: boolean;\r\n    readonly errors: readonly string[];\r\n    readonly warnings: readonly string[];\r\n}\r\n\r\n/** Patterns that indicate an external runtime dependency is being proposed. */\r\nconst DEPENDENCY_PATTERNS: readonly RegExp[] = [\r\n    /\\bnpm\\s+(install|i|add)\\s+(?!--)[a-z@]/i,\r\n    /\\b(yarn|pnpm|bun)\\s+add\\s+/i,\r\n    /\\bpnpm\\s+install\\s+[a-z@]/i,\r\n    /add\\s+[`\"']?[\\w@/-]+[`\"']?\\s+to\\s+(the\\s+)?(runtime\\s+)?dependencies\\b/i,\r\n    /\"dependencies\"\\s*:\\s*\\{[^}]*[\\w-]+[^}]*\\}/i,\r\n];\r\n\r\n/** Required issue fields (advisory — surfaced as warnings when missing). */\r\nconst REQUIRED_FIELDS: readonly { key: string; re: RegExp }[] = [\r\n    { key: 'minimal_reproduction', re: /repro|reproduc/i },\r\n    { key: 'environment', re: /environment|version|node|os\\b/i },\r\n    { key: 'expected_behavior', re: /expected/i },\r\n];\r\n\r\n/**\r\n * Validate a draft issue/PR markdown against the AI-governance policy.\r\n *\r\n * Errors (fail): proposing an external runtime dependency, or missing a\r\n * reproduction code block. Warnings (advisory): a recommended field appears\r\n * to be missing. A pure function — no filesystem access — so it is trivially\r\n * testable and reusable.\r\n */\r\nexport function validateGovernanceDraft(content: string): GovernanceValidation {\r\n    const errors: string[] = [];\r\n    const warnings: string[] = [];\r\n\r\n    for (const re of DEPENDENCY_PATTERNS) {\r\n        if (re.test(content)) {\r\n            errors.push('Proposing an external dependency violates the zero-dependency policy.');\r\n            break;\r\n        }\r\n    }\r\n\r\n    if (!/```[\\s\\S]*?```/.test(content)) {\r\n        errors.push('No reproduction code block found — include a minimal repro inside a fenced ``` block.');\r\n    }\r\n\r\n    for (const field of REQUIRED_FIELDS) {\r\n        if (!field.re.test(content)) {\r\n            warnings.push(`Recommended field appears to be missing: ${field.key}.`);\r\n        }\r\n    }\r\n\r\n    return { ok: errors.length === 0, errors, warnings };\r\n}\r\n","// `pdfnative govern <rules|policy|verify-issue>` — expose pdfnative's AI\r\n// governance / Human-in-the-Loop (HITL) contract to agents driving the CLI.\r\n//\r\n//   govern rules                 Print the human/agent protocol (AGENT_RULES).\r\n//   govern policy                Print the machine-readable policy (JSON).\r\n//   govern verify-issue <draft>  Validate an issue/PR draft against the policy.\r\n//\r\n// This makes the pdfnative 1.5.0 governance model actionable from any agent\r\n// pipeline: draft locally, verify, then let a HUMAN review and submit.\r\n\r\nimport { type ParsedArgs, getStringFlag, hasFlag } from '../utils/args.js';\r\nimport { readFileOrStdin, assertJsonSizeLimit } from '../utils/io.js';\r\nimport { CliError, ErrorCode } from '../utils/error.js';\r\nimport { isJsonMode } from '../utils/agent.js';\r\nimport { serializeJson } from '../utils/projection.js';\r\nimport {\r\n    AI_GOVERNANCE_POLICY,\r\n    AGENT_RULES_TEXT,\r\n    validateGovernanceDraft,\r\n    type GovernanceValidation,\r\n} from '../utils/governance.js';\r\n\r\nconst SUBCOMMANDS = ['rules', 'policy', 'verify-issue'];\r\n\r\nfunction printPolicy(pretty: boolean): void {\r\n    process.stdout.write(serializeJson(AI_GOVERNANCE_POLICY, pretty) + '\\n');\r\n}\r\n\r\nasync function verifyIssue(args: ParsedArgs): Promise<void> {\r\n    const draftPath = args.positionals[1] ?? getStringFlag(args.flags, 'input', 'i');\r\n    if (draftPath === undefined) {\r\n        throw new CliError('Usage: pdfnative govern verify-issue <draft.md>', 2);\r\n    }\r\n\r\n    const buf = await readFileOrStdin(draftPath);\r\n    assertJsonSizeLimit(buf);\r\n    const result: GovernanceValidation = validateGovernanceDraft(buf.toString('utf8'));\r\n\r\n    const jsonOut = isJsonMode() || getStringFlag(args.flags, 'format', 'f') === 'json';\r\n    if (jsonOut) {\r\n        const pretty = hasFlag(args.flags, 'pretty') || !isJsonMode();\r\n        process.stdout.write(serializeJson(result, pretty) + '\\n');\r\n    } else {\r\n        for (const w of result.warnings) process.stderr.write(`warning: ${w}\\n`);\r\n        if (result.ok) {\r\n            process.stdout.write(\r\n                'Draft validation PASSED. Reminder: this draft must be reviewed and '\r\n                + 'submitted by a HUMAN under their own GitHub identity.\\n',\r\n            );\r\n        } else {\r\n            for (const e of result.errors) process.stderr.write(`error: ${e}\\n`);\r\n        }\r\n    }\r\n\r\n    if (!result.ok) {\r\n        // Non-zero exit so pipelines can gate on the verdict. In agent mode the\r\n        // error envelope (stderr) carries the detail; the report is on stdout.\r\n        const detail = result.errors.join(' ');\r\n        throw new CliError(jsonOut ? detail : '', 1, ErrorCode.POLICY);\r\n    }\r\n}\r\n\r\nexport async function govern(args: ParsedArgs): Promise<void> {\r\n    const sub = args.positionals[0];\r\n    if (sub === undefined) {\r\n        throw new CliError(`Usage: pdfnative govern <${SUBCOMMANDS.join('|')}>`, 2);\r\n    }\r\n    switch (sub) {\r\n        case 'rules':\r\n            process.stdout.write(AGENT_RULES_TEXT);\r\n            return;\r\n        case 'policy':\r\n            printPolicy(hasFlag(args.flags, 'pretty') || !isJsonMode());\r\n            return;\r\n        case 'verify-issue':\r\n            await verifyIssue(args);\r\n            return;\r\n        default:\r\n            throw new CliError(\r\n                `Unknown govern subcommand \"${sub}\". Valid: ${SUBCOMMANDS.join(', ')}.`,\r\n                2,\r\n            );\r\n    }\r\n}\r\n","// Minimal ANSI color helper. Disabled automatically when output is not a TTY,\r\n// when NO_COLOR is set (https://no-color.org), or under --quiet. Colour is a\r\n// progressive enhancement only — never required to read CLI output.\r\n\r\nfunction colorEnabled(stream: NodeJS.WriteStream): boolean {\r\n    if (process.env['NO_COLOR'] !== undefined) return false;\r\n    return stream.isTTY === true;\r\n}\r\n\r\nconst CODES = {\r\n    reset: '\\x1b[0m',\r\n    bold: '\\x1b[1m',\r\n    dim: '\\x1b[2m',\r\n    red: '\\x1b[31m',\r\n    green: '\\x1b[32m',\r\n    yellow: '\\x1b[33m',\r\n    cyan: '\\x1b[36m',\r\n} as const;\r\n\r\ntype Style = keyof Omit<typeof CODES, 'reset'>;\r\n\r\n/** Wrap `text` in an ANSI style when colour is enabled for stdout. */\r\nexport function style(text: string, ...styles: Style[]): string {\r\n    if (!colorEnabled(process.stdout)) return text;\r\n    const prefix = styles.map((s) => CODES[s]).join('');\r\n    return `${prefix}${text}${CODES.reset}`;\r\n}\r\n","// `pdfnative batch` — render every JSON file in a directory to PDF.\r\n//\r\n// Reuses the full `render` pipeline per file (so every render flag — variant,\r\n// layout, smart tables, PDF/A, compression … — is honoured) and runs files\r\n// through a bounded-concurrency worker pool. Reports a per-file summary and\r\n// exits non-zero when any render fails.\r\n\r\nimport { readdir, mkdir } from 'node:fs/promises';\r\nimport { join, basename, extname } from 'node:path';\r\nimport { type ParsedArgs, getStringFlag, hasFlag } from '../utils/args.js';\r\nimport { validatePath } from '../utils/io.js';\r\nimport { CliError, ErrorCode } from '../utils/error.js';\r\nimport { isJsonMode, isDryRun } from '../utils/agent.js';\r\nimport { selectFields, serializeJson, parseFieldList } from '../utils/projection.js';\r\nimport { style } from '../utils/colors.js';\r\nimport { render } from './render.js';\r\n\r\n// Flags consumed by `batch` itself and therefore NOT forwarded to `render`.\r\nconst BATCH_ONLY_FLAGS = new Set([\r\n    'input-dir', 'output-dir', 'concurrency', 'fail-fast', 'format',\r\n    'input', 'i', 'output', 'o', 'watch', 'stream', 'stream-page-by-page',\r\n    'summary', 'fields', 'pretty',\r\n]);\r\n\r\ninterface FileResult {\r\n    readonly input: string;\r\n    readonly output: string;\r\n    readonly ok: boolean;\r\n    readonly error: string | null;\r\n}\r\n\r\nfunction quiet(): boolean {\r\n    return process.env['PDFNATIVE_QUIET'] === '1';\r\n}\r\n\r\nfunction progress(msg: string): void {\r\n    if (!quiet()) process.stderr.write(msg + '\\n');\r\n}\r\n\r\n/** Build the per-file ParsedArgs forwarded to `render` (batch flags stripped). */\r\nfunction forwardedFlags(args: ParsedArgs, input: string, output: string): ParsedArgs {\r\n    const flags: Record<string, string | boolean | readonly string[]> = {};\r\n    for (const [key, value] of Object.entries(args.flags)) {\r\n        if (BATCH_ONLY_FLAGS.has(key)) continue;\r\n        flags[key] = value;\r\n    }\r\n    flags['input'] = input;\r\n    flags['output'] = output;\r\n    return { flags, positionals: [] };\r\n}\r\n\r\nasync function runPool<T>(\r\n    items: readonly T[],\r\n    concurrency: number,\r\n    worker: (item: T) => Promise<void>,\r\n): Promise<void> {\r\n    let next = 0;\r\n    const runners: Promise<void>[] = [];\r\n    const n = Math.min(concurrency, items.length);\r\n    for (let i = 0; i < n; i++) {\r\n        runners.push(\r\n            (async () => {\r\n                for (;;) {\r\n                    const idx = next++;\r\n                    if (idx >= items.length) return;\r\n                    await worker(items[idx] as T);\r\n                }\r\n            })(),\r\n        );\r\n    }\r\n    await Promise.all(runners);\r\n}\r\n\r\nexport async function batch(args: ParsedArgs): Promise<void> {\r\n    const inputDir = getStringFlag(args.flags, 'input-dir');\r\n    const outputDir = getStringFlag(args.flags, 'output-dir');\r\n    // Agent mode (global --json) forces a machine-readable summary on stdout.\r\n    const format = isJsonMode() ? 'json' : (getStringFlag(args.flags, 'format') ?? 'text');\r\n    const failFast = hasFlag(args.flags, 'fail-fast');\r\n    const dryRun = hasFlag(args.flags, 'dry-run') || isDryRun();\r\n\r\n    if (inputDir === undefined) {\r\n        throw new CliError('batch requires --input-dir <dir>.', 2);\r\n    }\r\n    if (outputDir === undefined) {\r\n        throw new CliError('batch requires --output-dir <dir>.', 2);\r\n    }\r\n    if (format !== 'json' && format !== 'text') {\r\n        throw new CliError(`Invalid --format value \"${format}\". Valid: json, text.`, 2);\r\n    }\r\n    validatePath(inputDir);\r\n    validatePath(outputDir);\r\n\r\n    const concurrencyRaw = getStringFlag(args.flags, 'concurrency');\r\n    let concurrency = 4;\r\n    if (concurrencyRaw !== undefined) {\r\n        const n = Number.parseInt(concurrencyRaw, 10);\r\n        if (!Number.isInteger(n) || n < 1) {\r\n            throw new CliError('--concurrency must be a positive integer.', 2);\r\n        }\r\n        concurrency = n;\r\n    }\r\n\r\n    let entries: string[];\r\n    try {\r\n        entries = await readdir(inputDir);\r\n    } catch {\r\n        throw new CliError(`Cannot read --input-dir: ${inputDir}`, 1, ErrorCode.IO);\r\n    }\r\n    const inputs = entries.filter((e) => extname(e).toLowerCase() === '.json').sort();\r\n    if (inputs.length === 0) {\r\n        throw new CliError(`No .json files found in ${inputDir}.`, 1, ErrorCode.INPUT);\r\n    }\r\n\r\n    // In dry-run we validate every input via render (which short-circuits before\r\n    // writing); no output directory is created and no PDF is written.\r\n    if (!dryRun) {\r\n        await mkdir(outputDir, { recursive: true });\r\n    }\r\n\r\n    const results: FileResult[] = [];\r\n    let aborted = false;\r\n\r\n    await runPool(inputs, concurrency, async (file) => {\r\n        if (aborted) return;\r\n        const input = join(inputDir, file);\r\n        const output = join(outputDir, `${basename(file, extname(file))}.pdf`);\r\n        try {\r\n            await render(forwardedFlags(args, input, output));\r\n            results.push({ input, output, ok: true, error: null });\r\n            progress(`${style('✓', 'green')} ${file} → ${basename(output)}`);\r\n        } catch (e) {\r\n            const error = e instanceof Error ? e.message : String(e);\r\n            results.push({ input, output, ok: false, error });\r\n            progress(`${style('✗', 'red')} ${file}: ${error}`);\r\n            if (failFast) aborted = true;\r\n        }\r\n    });\r\n\r\n    const failures = results.filter((r) => !r.ok).length;\r\n    const succeeded = results.length - failures;\r\n\r\n    if (format === 'json') {\r\n        const summary = hasFlag(args.flags, 'summary');\r\n        const fieldsRaw = getStringFlag(args.flags, 'fields');\r\n        let out: unknown = summary\r\n            ? { total: inputs.length, succeeded, failed: failures }\r\n            : { total: inputs.length, succeeded, failed: failures, results };\r\n        if (fieldsRaw !== undefined) {\r\n            out = selectFields(out, parseFieldList(fieldsRaw));\r\n        }\r\n        // Compact for agents (--json), pretty for humans; --pretty forces pretty.\r\n        const pretty = hasFlag(args.flags, 'pretty') || !isJsonMode();\r\n        process.stdout.write(serializeJson(out, pretty) + '\\n');\r\n    } else {\r\n        process.stdout.write(`Rendered ${succeeded}/${inputs.length} file(s), ${failures} failed.\\n`);\r\n    }\r\n\r\n    if (failures > 0) {\r\n        throw new CliError('', 1);\r\n    }\r\n}\r\n","// `pdfnative completion <bash|zsh|fish|powershell>` — emit a shell completion\r\n// script.\r\n//\r\n// The generated scripts are self-contained and driven by the static command /\r\n// flag metadata below. Install by sourcing the output, e.g.:\r\n//\r\n//     pdfnative completion bash > /etc/bash_completion.d/pdfnative\r\n//     pdfnative completion zsh  > \"${fpath[1]}/_pdfnative\"\r\n//     pdfnative completion fish > ~/.config/fish/completions/pdfnative.fish\r\n//     pdfnative completion powershell >> $PROFILE\r\n\r\nimport type { ParsedArgs } from '../utils/args.js';\r\nimport { CliError } from '../utils/error.js';\r\n\r\nexport interface CommandSpec {\r\n    readonly name: string;\r\n    readonly summary: string;\r\n    readonly flags: readonly string[];\r\n}\r\n\r\nexport const GLOBAL_FLAGS = ['--help', '--version', '--no-color', '--quiet', '--json', '--dry-run', '--config', '--no-config'];\r\n\r\n// Shared password / re-encryption / streaming flags for the page-tree commands\r\n// (merge, split, extract) — pdfnative 1.6.0.\r\nconst PAGETREE_CRYPTO_FLAGS = [\r\n    '--password', '--encrypt', '--owner-password', '--user-password',\r\n    '--permissions', '--stream', '--chunk-size',\r\n];\r\n\r\nexport const COMMANDS: readonly CommandSpec[] = [\r\n    {\r\n        name: 'render',\r\n        summary: 'Render a JSON document definition to PDF',\r\n        flags: [\r\n            '--input', '--output', '--stream', '--stream-page-by-page', '--stream-true',\r\n            '--max-blocks', '--watch', '--template',\r\n            '--variant', '--table-wrap', '--repeat-header', '--zebra', '--min-row-height',\r\n            '--cell-padding', '--layout', '--page-size', '--margin', '--tagged', '--compress',\r\n            '--lang', '--font', '--outline', '--debug-layout', '--inspect-layout',\r\n            '--header-left', '--header-center', '--header-right',\r\n            '--footer-left', '--footer-center', '--footer-right',\r\n            '--watermark-text', '--watermark-image', '--watermark-opacity',\r\n            '--watermark-angle', '--watermark-color', '--watermark-font-size',\r\n            '--watermark-position',\r\n            '--encrypt', '--owner-password', '--user-password', '--permissions',\r\n            '--encrypt-algorithm', '--encrypt-owner-pass', '--encrypt-user-pass',\r\n            '--encrypt-permissions', '--attachment',\r\n        ],\r\n    },\r\n    {\r\n        name: 'sign',\r\n        summary: 'Apply a digital signature to a PDF',\r\n        flags: [\r\n            '--input', '--output', '--key', '--cert', '--cert-chain', '--algorithm',\r\n            '--reason', '--name', '--location', '--contact', '--signing-time', '--timestamp',\r\n            '--pure-crypto',\r\n        ],\r\n    },\r\n    {\r\n        name: 'verify',\r\n        summary: 'Verify embedded PDF signatures',\r\n        flags: ['--input', '--trust', '--strict', '--revocation', '--revocation-policy', '--format', '--summary', '--fields', '--pretty'],\r\n    },\r\n    {\r\n        name: 'inspect',\r\n        summary: 'Analyse a PDF and output metadata',\r\n        flags: ['--input', '--format', '--verbose', '--pages', '--pdfua', '--annotations', '--form-fields', '--encryption', '--password', '--check', '--summary', '--fields', '--pretty'],\r\n    },\r\n    {\r\n        name: 'merge',\r\n        summary: 'Concatenate multiple PDFs into one',\r\n        flags: ['--input', '--output', '--drop-annotations', '--max-output-size', ...PAGETREE_CRYPTO_FLAGS],\r\n    },\r\n    {\r\n        name: 'split',\r\n        summary: 'Split a PDF into multiple PDFs',\r\n        flags: ['--input', '--output-dir', '--pages', '--prefix', '--drop-annotations', '--max-output-size', ...PAGETREE_CRYPTO_FLAGS],\r\n    },\r\n    {\r\n        name: 'extract',\r\n        summary: 'Extract selected pages into a new PDF',\r\n        flags: ['--input', '--output', '--pages', '--drop-annotations', '--max-output-size', ...PAGETREE_CRYPTO_FLAGS],\r\n    },\r\n    {\r\n        name: 'extract-text',\r\n        summary: 'Extract reading-order text (text|json|ndjson)',\r\n        flags: ['--input', '--format', '--pages', '--runs', '--password', '--max-length', '--summary', '--fields', '--pretty'],\r\n    },\r\n    {\r\n        name: 'fill',\r\n        summary: 'Fill and/or flatten an AcroForm PDF',\r\n        flags: ['--input', '--output', '--data', '--flatten', '--export', '--force', '--on-unknown', '--need-appearances', '--password'],\r\n    },\r\n    {\r\n        name: 'encrypt',\r\n        summary: 'Re-secure a PDF with AES-128/256 encryption',\r\n        flags: ['--input', '--output', '--owner-password', '--user-password', '--algorithm', '--permissions', '--password', '--drop-annotations', '--max-output-size', '--stream', '--chunk-size'],\r\n    },\r\n    {\r\n        name: 'decrypt',\r\n        summary: 'Remove encryption from a PDF',\r\n        flags: ['--input', '--output', '--password', '--drop-annotations', '--max-output-size', '--stream', '--chunk-size'],\r\n    },\r\n    {\r\n        name: 'annotate',\r\n        summary: 'Attach markup annotations to a PDF',\r\n        flags: ['--input', '--output', '--annotations'],\r\n    },\r\n    {\r\n        name: 'batch',\r\n        summary: 'Render many JSON inputs to PDF in parallel',\r\n        flags: ['--input-dir', '--output-dir', '--concurrency', '--fail-fast', '--format', '--layout', '--variant', '--summary', '--fields', '--pretty'],\r\n    },\r\n    {\r\n        name: 'govern',\r\n        summary: 'AI-governance / HITL contract',\r\n        flags: ['--input', '--format', '--pretty'],\r\n    },\r\n    {\r\n        name: 'schema',\r\n        summary: 'Print a JSON Schema for a CLI input/output shape',\r\n        flags: [],\r\n    },\r\n    {\r\n        name: 'completion',\r\n        summary: 'Emit a shell completion script',\r\n        flags: [],\r\n    },\r\n    {\r\n        name: 'doctor',\r\n        summary: 'Environment / capability preflight',\r\n        flags: ['--format', '--json', '--pretty'],\r\n    },\r\n];\r\n\r\nconst COMMAND_NAMES = COMMANDS.map((c) => c.name);\r\n\r\nfunction bashScript(): string {\r\n    const cmds = COMMAND_NAMES.join(' ');\r\n    const cases = COMMANDS.map(\r\n        (c) => `        ${c.name}) opts=\"${[...c.flags, ...GLOBAL_FLAGS].join(' ')}\" ;;`,\r\n    ).join('\\n');\r\n    return `\\\r\n# bash completion for pdfnative\r\n_pdfnative() {\r\n    local cur prev words cword\r\n    _init_completion 2>/dev/null || { cur=\"\\${COMP_WORDS[COMP_CWORD]}\"; }\r\n    local cmd=\"\\${COMP_WORDS[1]}\"\r\n    local opts=\"${GLOBAL_FLAGS.join(' ')}\"\r\n    if [[ \\${COMP_CWORD} -eq 1 ]]; then\r\n        COMPREPLY=( $(compgen -W \"${cmds}\" -- \"\\${cur}\") )\r\n        return 0\r\n    fi\r\n    case \"\\${cmd}\" in\r\n${cases}\r\n    esac\r\n    COMPREPLY=( $(compgen -W \"\\${opts}\" -- \"\\${cur}\") )\r\n    return 0\r\n}\r\ncomplete -F _pdfnative pdfnative\r\n`;\r\n}\r\n\r\nfunction zshScript(): string {\r\n    const cmdLines = COMMANDS.map((c) => `        '${c.name}:${c.summary}'`).join('\\n');\r\n    const cases = COMMANDS.map(\r\n        (c) =>\r\n            `            ${c.name})\\n                _values 'flags' ${[...c.flags, ...GLOBAL_FLAGS]\r\n                .map((f) => `'${f}'`)\r\n                .join(' ')} ;;`,\r\n    ).join('\\n');\r\n    return `\\\r\n#compdef pdfnative\r\n# zsh completion for pdfnative\r\n_pdfnative() {\r\n    local -a commands\r\n    commands=(\r\n${cmdLines}\r\n    )\r\n    if (( CURRENT == 2 )); then\r\n        _describe 'command' commands\r\n        return\r\n    fi\r\n    case \"\\${words[2]}\" in\r\n${cases}\r\n    esac\r\n}\r\n_pdfnative \"$@\"\r\n`;\r\n}\r\n\r\nfunction fishScript(): string {\r\n    const lines: string[] = ['# fish completion for pdfnative'];\r\n    lines.push(\"complete -c pdfnative -f\");\r\n    for (const c of COMMANDS) {\r\n        lines.push(\r\n            `complete -c pdfnative -n __fish_use_subcommand -a ${c.name} -d '${c.summary.replace(/'/g, \"\")}'`,\r\n        );\r\n    }\r\n    for (const c of COMMANDS) {\r\n        for (const flag of [...c.flags, ...GLOBAL_FLAGS]) {\r\n            lines.push(\r\n                `complete -c pdfnative -n '__fish_seen_subcommand_from ${c.name}' -l ${flag.replace(/^--/, '')}`,\r\n            );\r\n        }\r\n    }\r\n    return lines.join('\\n') + '\\n';\r\n}\r\n\r\nfunction powershellScript(): string {\r\n    // A Register-ArgumentCompleter script block. First positional → command\r\n    // names; after a command → that command's flags plus the global flags.\r\n    const cmdList = COMMAND_NAMES.map((n) => `'${n}'`).join(', ');\r\n    const cases = COMMANDS.map(\r\n        (c) => `            '${c.name}' { @(${[...c.flags, ...GLOBAL_FLAGS].map((f) => `'${f}'`).join(', ')}) }`,\r\n    ).join('\\n');\r\n    return `\\\r\n# PowerShell completion for pdfnative\r\n# Add to your profile:  pdfnative completion powershell >> $PROFILE\r\nRegister-ArgumentCompleter -Native -CommandName pdfnative -ScriptBlock {\r\n    param($wordToComplete, $commandAst, $cursorPosition)\r\n    $commands = @(${cmdList})\r\n    $tokens = $commandAst.CommandElements | ForEach-Object { $_.ToString() }\r\n    # tokens[0] is 'pdfnative'; tokens[1] is the sub-command when present.\r\n    if ($tokens.Count -le 2 -and -not $wordToComplete.StartsWith('-')) {\r\n        $commands | Where-Object { $_ -like \"$wordToComplete*\" } |\r\n            ForEach-Object { [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_) }\r\n        return\r\n    }\r\n    $cmd = if ($tokens.Count -ge 2) { $tokens[1] } else { '' }\r\n    $flags = switch ($cmd) {\r\n${cases}\r\n            default { @(${GLOBAL_FLAGS.map((f) => `'${f}'`).join(', ')}) }\r\n    }\r\n    $flags | Where-Object { $_ -like \"$wordToComplete*\" } |\r\n        ForEach-Object { [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterName', $_) }\r\n}\r\n`;\r\n}\r\n\r\nexport async function completion(args: ParsedArgs): Promise<void> {\r\n    const shell = args.positionals[0];\r\n    if (shell === undefined) {\r\n        throw new CliError('Usage: pdfnative completion <bash|zsh|fish|powershell>', 2);\r\n    }\r\n    switch (shell) {\r\n        case 'bash':\r\n            process.stdout.write(bashScript());\r\n            break;\r\n        case 'zsh':\r\n            process.stdout.write(zshScript());\r\n            break;\r\n        case 'fish':\r\n            process.stdout.write(fishScript());\r\n            break;\r\n        case 'powershell':\r\n        case 'pwsh':\r\n            process.stdout.write(powershellScript());\r\n            break;\r\n        default:\r\n            throw new CliError(`Unsupported shell \"${shell}\". Valid: bash, zsh, fish, powershell.`, 2);\r\n    }\r\n}\r\n","// `pdfnative schema [subject]` — print a JSON Schema for a CLI input/output\n// shape so autonomous agents (and humans) can self-validate before invoking\n// the CLI.\n//\n// Schemas are CLI-scoped: they describe the TOP-LEVEL shape the CLI accepts or\n// emits, not every nested pdfnative block type (those live in pdfnative and its\n// docs). They are hand-authored and versioned via a `$id` that embeds the CLI\n// version, so drift is detectable and a test pins the contract.\n//\n// Philosophy: zero runtime deps, pure data. No validation engine is bundled —\n// the CLI only PRODUCES schemas; callers validate with their own tooling.\n\nimport type { ParsedArgs } from '../utils/args.js';\nimport { CliError, ErrorCode } from '../utils/error.js';\nimport { cliVersion } from '../utils/version.js';\nimport { COMMANDS, GLOBAL_FLAGS } from './completion.js';\n\ntype JsonSchema = Readonly<Record<string, unknown>>;\n\nconst SUBJECTS = [\n    'render',\n    'inspect',\n    'verify',\n    'batch',\n    'annotate',\n    'extract-text',\n    'fill',\n    'form-export',\n    'inspect-summary',\n    'verify-summary',\n    'batch-summary',\n    'govern-verify',\n    'status',\n    'manifest',\n    'doctor',\n] as const;\ntype Subject = (typeof SUBJECTS)[number];\n\nconst DRAFT = 'https://json-schema.org/draft/2020-12/schema';\nconst ID_BASE = 'https://pdfnative.dev/schema/cli';\n\nfunction id(subject: Subject): string {\n    return `${ID_BASE}/${cliVersion()}/${subject}.schema.json`;\n}\n\nfunction renderSchema(): JsonSchema {\n    const documentVariant: JsonSchema = {\n        type: 'object',\n        title: 'DocumentParams',\n        description: 'Free-form document input (default variant). The blocks array '\n            + 'is validated by pdfnative; see pdfnative docs for block types.',\n        required: ['blocks'],\n        properties: {\n            blocks: {\n                type: 'array',\n                description: 'Ordered document blocks (text, table, image, toc, …).',\n                items: { type: 'object' },\n            },\n            layout: { type: 'object', description: 'PdfLayoutOptions overrides.' },\n            fontEntries: {\n                type: 'array',\n                description: 'Pre-registered font entries (usually set via --font/--lang).',\n                items: { type: 'object' },\n            },\n        },\n    };\n    const tableVariant: JsonSchema = {\n        type: 'object',\n        title: 'PdfParams',\n        description: 'Table-centric input (use with `render --variant table`).',\n        required: ['title', 'headers', 'rows'],\n        properties: {\n            title: { type: 'string' },\n            headers: { type: 'array', items: { type: 'string' } },\n            rows: { type: 'array', items: { type: 'array' } },\n        },\n    };\n    return {\n        $schema: DRAFT,\n        $id: id('render'),\n        title: 'pdfnative-cli render input',\n        description: 'JSON accepted on stdin or via --input by `pdfnative render`. '\n            + 'One of two variants depending on --variant.',\n        oneOf: [documentVariant, tableVariant],\n    };\n}\n\nfunction inspectSchema(): JsonSchema {\n    return {\n        $schema: DRAFT,\n        $id: id('inspect'),\n        title: 'pdfnative-cli inspect output',\n        description: 'JSON emitted by `pdfnative inspect --format json`.',\n        type: 'object',\n        required: ['version', 'pageCount', 'encrypted', 'pdfaConformance', 'signatures', 'metadata'],\n        additionalProperties: false,\n        properties: {\n            version: { type: 'string' },\n            pageCount: { type: 'integer', minimum: 0 },\n            encrypted: { type: 'boolean' },\n            pdfaConformance: { type: ['string', 'null'] },\n            signatures: { type: 'integer', minimum: 0 },\n            metadata: {\n                type: 'object',\n                additionalProperties: false,\n                properties: {\n                    title: { type: ['string', 'null'] },\n                    author: { type: ['string', 'null'] },\n                    creationDate: { type: ['string', 'null'] },\n                    subject: { type: ['string', 'null'] },\n                    producer: { type: ['string', 'null'] },\n                },\n            },\n            pages: {\n                type: 'array',\n                items: {\n                    type: 'object',\n                    properties: {\n                        index: { type: 'integer' },\n                        width: { type: ['number', 'null'] },\n                        height: { type: ['number', 'null'] },\n                        rotation: { type: 'number' },\n                        annotations: { type: 'integer' },\n                        formFields: { type: 'integer' },\n                    },\n                },\n            },\n            pageLabels: {\n                type: 'array',\n                items: {\n                    type: 'object',\n                    properties: {\n                        startPage: { type: 'integer', minimum: 0 },\n                        style: { type: ['string', 'null'] },\n                        prefix: { type: ['string', 'null'] },\n                        start: { type: ['integer', 'null'] },\n                    },\n                },\n            },\n            encryption: {\n                type: ['object', 'null'],\n                description: 'Present with `inspect --encryption` (pdfnative 1.6.0).',\n                properties: {\n                    algorithm: { type: 'string', enum: ['rc4-40', 'rc4-128', 'aes128', 'aes256'] },\n                    revision: { type: 'integer' },\n                    authenticatedAs: { type: 'string', enum: ['user', 'owner'] },\n                },\n            },\n            formFields: {\n                type: 'array',\n                description: 'Present with `inspect --form-fields` (pdfnative 1.6.0).',\n                items: {\n                    type: 'object',\n                    properties: {\n                        name: { type: 'string' },\n                        type: {\n                            type: 'string',\n                            enum: ['text', 'checkbox', 'radio', 'dropdown', 'listbox', 'button', 'signature', 'unknown'],\n                        },\n                        value: { type: ['string', 'array', 'boolean', 'null'] },\n                        readOnly: { type: 'boolean' },\n                        required: { type: 'boolean' },\n                        options: { type: 'array', items: { type: 'string' } },\n                    },\n                },\n            },\n            annotations: {\n                type: 'array',\n                items: {\n                    type: 'object',\n                    properties: {\n                        page: { type: 'integer', minimum: 1 },\n                        subtype: { type: 'string' },\n                        contents: { type: ['string', 'null'] },\n                        title: { type: ['string', 'null'] },\n                        url: { type: ['string', 'null'] },\n                    },\n                },\n            },\n            pdfua: {\n                type: 'object',\n                properties: {\n                    valid: { type: 'boolean' },\n                    errors: { type: 'array', items: { type: 'string' } },\n                    warnings: { type: 'array', items: { type: 'string' } },\n                },\n            },\n            verbose: {\n                type: 'object',\n                properties: {\n                    trailerKeys: { type: 'array', items: { type: 'string' } },\n                    catalogKeys: { type: 'array', items: { type: 'string' } },\n                    objectCount: { type: 'integer' },\n                    xmpMetadata: { type: ['string', 'null'] },\n                },\n            },\n        },\n    };\n}\n\nfunction verifySchema(): JsonSchema {\n    return {\n        $schema: DRAFT,\n        $id: id('verify'),\n        title: 'pdfnative-cli verify output',\n        description: 'JSON emitted by `pdfnative verify --format json`.',\n        type: 'object',\n        required: ['signatures', 'allValid'],\n        additionalProperties: false,\n        properties: {\n            allValid: { type: 'boolean' },\n            signatures: {\n                type: 'array',\n                items: {\n                    type: 'object',\n                    properties: {\n                        index: { type: 'integer' },\n                        fieldName: { type: ['string', 'null'] },\n                        subFilter: { type: ['string', 'null'] },\n                        signerSubject: { type: ['string', 'null'] },\n                        signerIssuer: { type: ['string', 'null'] },\n                        signingTime: { type: ['string', 'null'] },\n                        reason: { type: ['string', 'null'] },\n                        location: { type: ['string', 'null'] },\n                        digest: { type: ['string', 'null'] },\n                        integrity: { type: 'boolean' },\n                        chainValid: { type: 'boolean' },\n                        trustedRoot: { type: 'boolean' },\n                        signatureValid: { type: 'boolean' },\n                        signatureAlgorithm: { type: ['string', 'null'], enum: ['rsa-sha256', 'ecdsa-sha256', null] },\n                        timestampPresent: { type: 'boolean' },\n                        timestampValid: { type: 'boolean' },\n                        timestampTime: { type: ['string', 'null'] },\n                        tsaSubject: { type: ['string', 'null'] },\n                        revocationChecked: { type: 'boolean' },\n                        revocationStatus: { type: 'string', enum: ['unknown', 'good', 'revoked'] },\n                        revocationSource: { type: 'string', enum: ['embedded', 'online', 'none'] },\n                        revocationMethod: { type: ['string', 'null'], enum: ['ocsp', 'crl', null] },\n                        revocationRevokedAt: { type: ['string', 'null'] },\n                        notes: { type: 'array', items: { type: 'string' } },\n                    },\n                },\n            },\n        },\n    };\n}\n\nfunction batchSchema(): JsonSchema {\n    return {\n        $schema: DRAFT,\n        $id: id('batch'),\n        title: 'pdfnative-cli batch output',\n        description: 'JSON emitted by `pdfnative batch --format json`.',\n        type: 'object',\n        required: ['total', 'succeeded', 'failed', 'results'],\n        additionalProperties: false,\n        properties: {\n            total: { type: 'integer', minimum: 0 },\n            succeeded: { type: 'integer', minimum: 0 },\n            failed: { type: 'integer', minimum: 0 },\n            results: {\n                type: 'array',\n                items: {\n                    type: 'object',\n                    required: ['input', 'output', 'ok', 'error'],\n                    additionalProperties: false,\n                    properties: {\n                        input: { type: 'string' },\n                        output: { type: 'string' },\n                        ok: { type: 'boolean' },\n                        error: { type: ['string', 'null'] },\n                    },\n                },\n            },\n        },\n    };\n}\n\nfunction annotateSchema(): JsonSchema {\n    const annotation: JsonSchema = {\n        type: 'object',\n        required: ['page', 'type', 'rect'],\n        properties: {\n            page: { type: 'integer', minimum: 1, description: '1-based target page.' },\n            type: {\n                type: 'string',\n                enum: ['text', 'highlight', 'underline', 'strikeout', 'squiggly',\n                    'square', 'circle', 'line', 'freetext'],\n            },\n            rect: {\n                type: 'array', minItems: 4, maxItems: 4, items: { type: 'number' },\n                description: '[x1, y1, x2, y2] in PDF user space (points).',\n            },\n            contents: { type: 'string' },\n            color: { description: 'PdfColor: hex \"#rrggbb\", \"r g b\", or tuple.' },\n            interiorColor: { description: 'Fill colour for square/circle.' },\n            opacity: { type: 'number', minimum: 0, maximum: 1 },\n            title: { type: 'string' },\n            modified: { type: 'string' },\n            flags: { type: 'integer' },\n            quadPoints: { type: 'array', items: { type: 'number' } },\n            borderWidth: { type: 'number' },\n            open: { type: 'boolean' },\n            icon: { type: 'string' },\n            fontSize: { type: 'number' },\n            start: { type: 'array', minItems: 2, maxItems: 2, items: { type: 'number' } },\n            end: { type: 'array', minItems: 2, maxItems: 2, items: { type: 'number' } },\n        },\n    };\n    return {\n        $schema: DRAFT,\n        $id: id('annotate'),\n        title: 'pdfnative-cli annotate input',\n        description: 'JSON accepted via --annotations by `pdfnative annotate`: an array '\n            + 'of markup annotations, each with a 1-based \"page\".',\n        oneOf: [\n            { type: 'array', items: annotation },\n            {\n                type: 'object',\n                required: ['annotations'],\n                properties: { annotations: { type: 'array', items: annotation } },\n            },\n        ],\n    };\n}\n\nfunction governVerifySchema(): JsonSchema {\n    return {\n        $schema: DRAFT,\n        $id: id('govern-verify'),\n        title: 'pdfnative-cli govern verify-issue output',\n        description: 'JSON emitted by `pdfnative govern verify-issue --format json`.',\n        type: 'object',\n        required: ['ok', 'errors', 'warnings'],\n        additionalProperties: false,\n        properties: {\n            ok: { type: 'boolean' },\n            errors: { type: 'array', items: { type: 'string' } },\n            warnings: { type: 'array', items: { type: 'string' } },\n        },\n    };\n}\n\n// --- Agent summary shapes (`--summary`) -----------------------------------\n// Compact, canonical verdicts emitted when a command is run with `--summary`.\n// Pinned here so agents can validate the minimal output independently.\n\nfunction inspectSummarySchema(): JsonSchema {\n    return {\n        $schema: DRAFT,\n        $id: id('inspect-summary'),\n        title: 'pdfnative-cli inspect summary output',\n        description: 'JSON emitted by `pdfnative inspect --summary` (minimal verdict).',\n        type: 'object',\n        required: ['pages', 'encrypted', 'signatures', 'pdfa'],\n        additionalProperties: false,\n        properties: {\n            pages: { type: 'integer', minimum: 0 },\n            encrypted: { type: 'boolean' },\n            signatures: { type: 'integer', minimum: 0 },\n            pdfa: { type: ['string', 'null'] },\n        },\n    };\n}\n\nfunction verifySummarySchema(): JsonSchema {\n    return {\n        $schema: DRAFT,\n        $id: id('verify-summary'),\n        title: 'pdfnative-cli verify summary output',\n        description: 'JSON emitted by `pdfnative verify --summary` (minimal verdict).',\n        type: 'object',\n        required: ['valid', 'signatures', 'invalid'],\n        additionalProperties: false,\n        properties: {\n            valid: { type: 'boolean' },\n            signatures: { type: 'integer', minimum: 0 },\n            invalid: { type: 'integer', minimum: 0 },\n        },\n    };\n}\n\nfunction batchSummarySchema(): JsonSchema {\n    return {\n        $schema: DRAFT,\n        $id: id('batch-summary'),\n        title: 'pdfnative-cli batch summary output',\n        description: 'JSON emitted by `pdfnative batch --summary` (minimal verdict, no per-file results).',\n        type: 'object',\n        required: ['total', 'succeeded', 'failed'],\n        additionalProperties: false,\n        properties: {\n            total: { type: 'integer', minimum: 0 },\n            succeeded: { type: 'integer', minimum: 0 },\n            failed: { type: 'integer', minimum: 0 },\n        },\n    };\n}\n\nfunction extractTextSchema(): JsonSchema {\n    return {\n        $schema: DRAFT,\n        $id: id('extract-text'),\n        title: 'pdfnative-cli extract-text output',\n        description: 'JSON emitted by `pdfnative extract-text --format json`: one entry '\n            + 'per page. NDJSON mode emits each entry on its own line.',\n        type: 'array',\n        items: {\n            type: 'object',\n            required: ['pageIndex', 'text'],\n            properties: {\n                pageIndex: { type: 'integer', minimum: 0 },\n                text: { type: 'string' },\n                runs: {\n                    type: 'array',\n                    description: 'Present with --runs.',\n                    items: {\n                        type: 'object',\n                        properties: {\n                            text: { type: 'string' },\n                            x: { type: 'number' },\n                            y: { type: 'number' },\n                            fontSize: { type: 'number' },\n                            fontName: { type: 'string' },\n                        },\n                    },\n                },\n            },\n        },\n    };\n}\n\nfunction fillSchema(): JsonSchema {\n    return {\n        $schema: DRAFT,\n        $id: id('fill'),\n        title: 'pdfnative-cli fill input',\n        description: 'JSON accepted via --data by `pdfnative fill`: a map of '\n            + 'fully-qualified field name → value (string, boolean, or string[]), '\n            + 'optionally wrapped in { \"values\": { … } }.',\n        oneOf: [\n            {\n                type: 'object',\n                additionalProperties: { type: ['string', 'boolean', 'array'], items: { type: 'string' } },\n            },\n            {\n                type: 'object',\n                required: ['values'],\n                properties: {\n                    values: {\n                        type: 'object',\n                        additionalProperties: { type: ['string', 'boolean', 'array'], items: { type: 'string' } },\n                    },\n                },\n            },\n        ],\n    };\n}\n\nfunction formExportSchema(): JsonSchema {\n    return {\n        $schema: DRAFT,\n        $id: id('form-export'),\n        title: 'pdfnative-cli fill --export output',\n        description: 'JSON emitted by `pdfnative fill --export`: a map of field name → '\n            + 'current value (string, boolean, or string[]). Re-usable directly as `fill --data`.',\n        type: 'object',\n        additionalProperties: { type: ['string', 'boolean', 'array'], items: { type: 'string' } },\n    };\n}\n\nfunction doctorSchema(): JsonSchema {\n    return {\n        $schema: DRAFT,\n        $id: id('doctor'),\n        title: 'pdfnative-cli doctor output',\n        description: 'JSON emitted by `pdfnative doctor --format json`: environment / '\n            + 'capability preflight. `ok` is false when any check has status \"error\".',\n        type: 'object',\n        required: ['ok', 'checks'],\n        additionalProperties: false,\n        properties: {\n            ok: { type: 'boolean' },\n            checks: {\n                type: 'array',\n                items: {\n                    type: 'object',\n                    required: ['name', 'status', 'value', 'detail'],\n                    properties: {\n                        name: { type: 'string' },\n                        status: { type: 'string', enum: ['ok', 'warn', 'error'] },\n                        value: { type: 'string' },\n                        detail: { type: 'string' },\n                    },\n                },\n            },\n        },\n    };\n}\n\nfunction statusSchema(): JsonSchema {\n    return {\n        $schema: DRAFT,\n        $id: id('status'),\n        title: 'pdfnative-cli agent status envelope',\n        description: 'The success envelope written to stderr under --json by the write '\n            + 'commands (render, sign, merge, split, extract, annotate, fill, encrypt, '\n            + 'decrypt, batch). Additional command-specific fields may be present.',\n        type: 'object',\n        required: ['ok', 'command'],\n        properties: {\n            ok: { type: 'boolean', const: true },\n            command: { type: 'string' },\n            dryRun: { type: 'boolean' },\n            output: { type: 'string' },\n            bytes: { type: 'integer', minimum: 0 },\n        },\n    };\n}\n\n/**\n * The CLI capability manifest — DATA (not a JSON Schema) describing every\n * command, its flags, the global flags, and the stable error codes. Emitted by\n * `schema manifest` so an AI agent can discover the CLI's tools at runtime.\n * Kept in sync with the completion metadata (single source of truth).\n */\nfunction manifestDocument(): JsonSchema {\n    return {\n        $id: `${ID_BASE}/${cliVersion()}/manifest.json`,\n        kind: 'capability-manifest',\n        name: 'pdfnative-cli',\n        version: cliVersion(),\n        contract: {\n            stdout: 'primary artifact (PDF, JSON report, text, schema, script)',\n            stderr: 'diagnostics and, under --json, the status/error envelope',\n            exitCodes: { '0': 'success', '1': 'runtime/check failure', '2': 'usage error' },\n        },\n        globalFlags: GLOBAL_FLAGS,\n        errorCodes: Object.values(ErrorCode),\n        commands: COMMANDS.map((c) => ({ name: c.name, summary: c.summary, flags: c.flags })),\n    };\n}\n\nconst BUILDERS: Readonly<Record<Subject, () => JsonSchema>> = {\n    render: renderSchema,\n    inspect: inspectSchema,\n    verify: verifySchema,\n    batch: batchSchema,\n    annotate: annotateSchema,\n    'extract-text': extractTextSchema,\n    fill: fillSchema,\n    'form-export': formExportSchema,\n    'inspect-summary': inspectSummarySchema,\n    'verify-summary': verifySummarySchema,\n    'batch-summary': batchSummarySchema,\n    'govern-verify': governVerifySchema,\n    status: statusSchema,\n    manifest: manifestDocument,\n    doctor: doctorSchema,\n};\n\nfunction isSubject(value: string): value is Subject {\n    return (SUBJECTS as readonly string[]).includes(value);\n}\n\nexport async function schema(args: ParsedArgs): Promise<void> {\n    const subject = args.positionals[0];\n\n    if (subject === undefined) {\n        // No subject → the most common need: the render input schema.\n        process.stdout.write(JSON.stringify(BUILDERS.render(), null, 2) + '\\n');\n        return Promise.resolve();\n    }\n\n    if (subject === 'list') {\n        process.stdout.write(JSON.stringify({ subjects: SUBJECTS }, null, 2) + '\\n');\n        return Promise.resolve();\n    }\n\n    if (!isSubject(subject)) {\n        throw new CliError(\n            `Unknown schema subject \"${subject}\". Valid: ${SUBJECTS.join(', ')}, list.`,\n            2,\n            ErrorCode.USAGE,\n        );\n    }\n\n    process.stdout.write(JSON.stringify(BUILDERS[subject](), null, 2) + '\\n');\n    return Promise.resolve();\n}\n","// `pdfnative doctor` — environment / capability preflight.\n//\n// A zero-dependency, offline self-check for humans (onboarding) and agents\n// (pre-flight before attempting an operation — notably `encrypt`, which needs a\n// Web Crypto CSPRNG). Reports the CLI version, Node version, Web Crypto\n// availability, the resolved `pdfnative` version, and the registered command\n// count. Text by default; `--json` emits `{ ok, checks: [{ name, status, detail }] }`.\n// Exit code 0 when all checks pass, 1 otherwise.\n\nimport { createRequire } from 'node:module';\nimport type { ParsedArgs } from '../utils/args.js';\nimport { hasFlag } from '../utils/args.js';\nimport { isJsonMode } from '../utils/agent.js';\nimport { serializeJson } from '../utils/projection.js';\nimport { cliVersion } from '../utils/version.js';\nimport { COMMANDS } from './completion.js';\n\ntype CheckStatus = 'ok' | 'warn' | 'error';\n\ninterface Check {\n    readonly name: string;\n    readonly status: CheckStatus;\n    readonly value: string;\n    readonly detail: string;\n}\n\nconst MIN_NODE_MAJOR = 20;\n\nfunction nodeCheck(): Check {\n    const raw = process.versions.node;\n    const major = Number.parseInt(raw.split('.')[0] ?? '0', 10);\n    const ok = Number.isInteger(major) && major >= MIN_NODE_MAJOR;\n    return {\n        name: 'node',\n        status: ok ? 'ok' : 'error',\n        value: `v${raw}`,\n        detail: `>= ${MIN_NODE_MAJOR} required`,\n    };\n}\n\nfunction webCryptoCheck(): Check {\n    const g = globalThis as { crypto?: { getRandomValues?: unknown; subtle?: unknown } };\n    const available = typeof g.crypto?.getRandomValues === 'function';\n    return {\n        name: 'webcrypto',\n        status: available ? 'ok' : 'error',\n        value: available ? 'available' : 'missing',\n        detail: 'CSPRNG required by `encrypt` / re-encryption',\n    };\n}\n\nfunction pdfnativeCheck(): Check {\n    try {\n        const require = createRequire(import.meta.url);\n        const pkg = require('pdfnative/package.json') as { version?: string };\n        const version = typeof pkg.version === 'string' ? pkg.version : 'unknown';\n        return { name: 'pdfnative', status: 'ok', value: version, detail: 'engine (sole runtime dependency)' };\n    } catch {\n        return { name: 'pdfnative', status: 'error', value: 'not found', detail: 'engine (sole runtime dependency)' };\n    }\n}\n\nfunction buildChecks(): Check[] {\n    return [\n        { name: 'cli', status: 'ok', value: cliVersion(), detail: 'pdfnative-cli version' },\n        nodeCheck(),\n        webCryptoCheck(),\n        pdfnativeCheck(),\n        { name: 'commands', status: 'ok', value: String(COMMANDS.length), detail: 'registered commands' },\n    ];\n}\n\nexport async function doctor(args: ParsedArgs): Promise<void> {\n    const checks = buildChecks();\n    const ok = checks.every((c) => c.status !== 'error');\n\n    const format = getFormat(args);\n    const jsonOut = format === 'json' || isJsonMode() || hasFlag(args.flags, 'json');\n\n    if (jsonOut) {\n        const pretty = hasFlag(args.flags, 'pretty') || !isJsonMode();\n        const payload = {\n            ok,\n            checks: checks.map((c) => ({ name: c.name, status: c.status, value: c.value, detail: c.detail })),\n        };\n        process.stdout.write(serializeJson(payload, pretty) + '\\n');\n    } else {\n        const lines = ['pdfnative-cli doctor', ''];\n        for (const c of checks) {\n            const mark = c.status === 'ok' ? 'ok  ' : c.status === 'warn' ? 'warn' : 'FAIL';\n            lines.push(`  ${c.name.padEnd(11)}${c.value.padEnd(14)}${mark}  (${c.detail})`);\n        }\n        lines.push('', ok ? 'All checks passed.' : 'One or more checks FAILED.');\n        process.stdout.write(lines.join('\\n') + '\\n');\n    }\n\n    if (!ok) process.exitCode = 1;\n    return Promise.resolve();\n}\n\n/** Read `--format json|text` (default text) for doctor. */\nfunction getFormat(args: ParsedArgs): string {\n    const v = args.flags['format'] ?? args.flags['f'];\n    if (typeof v === 'string') return v;\n    if (Array.isArray(v)) return v[0] ?? 'text';\n    return 'text';\n}\n","import { parseArgs, hasFlag, getStringFlag } from './utils/args.js';\r\nimport { CliError } from './utils/error.js';\r\nimport { isJsonMode, emitJsonError } from './utils/agent.js';\r\nimport { loadConfig, applyConfigDefaults } from './utils/config.js';\r\nimport { cliVersion } from './utils/version.js';\r\n\r\n// Lazy-import commands to keep startup fast for --help / --version\r\ntype CommandFn = (args: ReturnType<typeof parseArgs>) => Promise<void>;\r\n\r\nconst USAGE = `\\\r\npdfnative-cli — Official CLI for pdfnative\r\n\r\nUsage:\r\n  pdfnative <command> [options]\r\n\r\nCommands (17):\r\n\r\n Create & edit\r\n  render      Render a JSON document definition to PDF\r\n  fill        Fill / flatten / export an AcroForm PDF\r\n  annotate    Attach markup annotations to a PDF\r\n\r\n Page tree\r\n  merge       Concatenate multiple PDFs into one\r\n  split       Split a PDF into multiple PDFs (per page or range)\r\n  extract     Extract selected pages into a new PDF\r\n\r\n Security\r\n  sign        Apply a digital signature to a PDF\r\n  verify      Verify embedded PDF signatures\r\n  encrypt     Re-secure a PDF with AES-128/256 encryption\r\n  decrypt     Remove encryption from a PDF (with --password)\r\n\r\n Read & extract\r\n  inspect     Analyse a PDF (metadata, conformance, form fields, encryption)\r\n  extract-text  Extract reading-order text (text | json | ndjson)\r\n\r\n Automation & meta\r\n  batch       Render every JSON file in a directory to PDF (parallel)\r\n  doctor      Environment / capability preflight (text or --json)\r\n  schema      Print a JSON Schema / capability manifest for agents\r\n  completion  Emit a shell completion script (bash|zsh|fish|powershell)\r\n  govern      AI-governance / HITL contract (rules, policy, verify-issue)\r\n\r\nOptions:\r\n  --help,    -h   Show this help message\r\n  --version, -V   Show version (add --json for machine-readable output)\r\n\r\nGlobal options (any command):\r\n  --config <file>   Use a specific .pdfnativerc.json (default: nearest upward)\r\n  --no-config       Ignore any .pdfnativerc.json\r\n  --quiet,   -q     Suppress progress output on stderr\r\n  --no-color        Disable ANSI colour (also respects NO_COLOR)\r\n  --json            Agent mode: emit a JSON status/error envelope on stderr\r\n                    (data stays on stdout). Errors carry a stable code.\r\n  --dry-run         Validate inputs and exit without writing output (render,\r\n                    sign, batch, merge, split, extract, annotate, fill,\r\n                    encrypt, decrypt).\r\n\r\nFor autonomous/agent usage see AGENTS.md.\r\nRun \\`pdfnative <command> --help\\` for per-command options.\r\n`;\r\n\r\nconst RENDER_USAGE = `\\\r\npdfnative render — Render a JSON document definition to PDF\r\n\r\nUsage:\r\n  pdfnative render [--input <file>] [--output <out.pdf>] [options]\r\n\r\nI/O:\r\n  --input,   -i   Path to JSON input (default: stdin)\r\n  --output,  -o   Output PDF path (default: stdout)\r\n  --stream        Stream output (large documents). Single-pass; incompatible\r\n                  with TOC blocks and with header/footer templates that\r\n                  contain {pages}.\r\n  --stream-page-by-page\r\n                  Stream output chunked at PDF object boundaries. Assembles\r\n                  the full document first, so TOC blocks and {pages} ARE\r\n                  supported. Mutually exclusive with --stream.\r\n  --stream-true   True constant-memory streaming (pdfnative 1.3.0): parts are\r\n                  emitted and freed as they go, so the joined binary never\r\n                  materialises. Same constraints as --stream (no TOC, no\r\n                  {pages}); byte-identical output. Mutually exclusive with the\r\n                  other --stream* flags.\r\n  --watch         Re-render on input file change (requires --input and a\r\n                  file --output; logs to stderr; debounce 200 ms).\r\n  --template      Path to JSON template file. Stdin / --input is deep-merged\r\n                  on top (caller wins; arrays replace).\r\n\r\nVariant:\r\n  --variant       document (default) or table\r\n\r\nSmart tables (document variant; fills TableBlock fields left unset in JSON):\r\n  --table-wrap        auto (default) | always | never\r\n  --repeat-header     [true|false] repeat header row on continuation pages\r\n  --zebra             [true|false|\"R G B\"] alternate-row striping\r\n  --min-row-height    Minimum row height in points\r\n  --cell-padding      Horizontal cell padding in points\r\n                  (caption is per-table — set it in the JSON TableBlock)\r\n\r\nLayout (flags override values from --layout file):\r\n  --layout        Path to JSON layout file (PdfLayoutOptions)\r\n  --page-size     Named (a4|letter|legal|a3|tabloid|a5) or WxH in points\r\n  --margin        Uniform N or \"top,right,bottom,left\" in points\r\n  --tagged        none|pdfa1b|pdfa2b|pdfa2u|pdfa3b (PDF/A flag)\r\n  --conformance   DEPRECATED — alias for --tagged pdfa{1b|2b|3b}\r\n  --compress      Enable Flate compression (initialises Node compression)\r\n  --max-blocks    Max document blocks before pdfnative aborts (default 100000)\r\n  --lang          Comma-separated language packs (e.g. th,ja,ar,te,si,km)\r\n  --font          Register a bundled font shortcut (repeatable). The name\r\n                  doubles as the --lang code. Allowed: latin, emoji,\r\n                  color-emoji, and the 22 script codes ar, hy, bn, ru, hi, am,\r\n                  ka, el, he, ja, km, ko, my, pl, zh, si, ta, te, th, bo, tr,\r\n                  vi.\r\n\r\nHeader / Footer:\r\n  --header-left, --header-center, --header-right\r\n  --footer-left, --footer-center, --footer-right\r\n                  Each accepts a template string. {page}, {pages}, {date} are\r\n                  substituted by pdfnative.\r\n\r\nWatermark:\r\n  --watermark-text       Text watermark\r\n  --watermark-image      Image path (PNG/JPEG)\r\n  --watermark-opacity    0.0–1.0\r\n  --watermark-angle      degrees (text watermark)\r\n  --watermark-color      PdfColor (hex \"#rrggbb\", \"r g b\", …)\r\n  --watermark-font-size  points (text watermark)\r\n  --watermark-position   background | foreground\r\n\r\nEncryption (mutually exclusive with --tagged pdfa*):\r\n  --encrypt [aes-128|aes-256]\r\n                         Enable encryption (bare = aes-128)\r\n  --owner-password       (or env $PDFNATIVE_ENCRYPT_OWNER_PASS — env wins)\r\n  --user-password        (or env $PDFNATIVE_ENCRYPT_USER_PASS — env wins)\r\n  --permissions          Comma-separated: print,copy,modify,extract\r\n                         (Legacy aliases still accepted: --encrypt-algorithm,\r\n                          --encrypt-owner-pass, --encrypt-user-pass,\r\n                          --encrypt-permissions.)\r\n\r\nAttachments (PDF/A-3, repeatable):\r\n  --attachment <path>[:mime[:rel[:desc]]]\r\n                  rel = Source|Data|Alternative|Supplement|Unspecified\r\n\r\n  --help,    -h   Show this help message\r\n`;\r\n\r\nconst SIGN_USAGE = `\\\r\npdfnative sign — Apply a digital signature to a PDF\r\n\r\nUsage:\r\n  pdfnative sign [--input <file.pdf>] [--output <out.pdf>] [--key <key.pem>] [--cert <cert.pem>]\r\n\r\nI/O:\r\n  --input,   -i   Path to input PDF (default: stdin)\r\n  --output,  -o   Signed PDF output path (default: stdout)\r\n\r\nCredentials (env wins over file flags):\r\n  --key           Path to PEM private key (env: PDFNATIVE_SIGN_KEY)\r\n  --cert          Path to PEM signer certificate (env: PDFNATIVE_SIGN_CERT)\r\n  --cert-chain    Path to PEM intermediate (repeatable; env: PDFNATIVE_SIGN_CHAIN)\r\n\r\nAlgorithm:\r\n  --algorithm     rsa-sha256 (default) or ecdsa-sha256 (P-256 SEC1 keys).\r\n\r\nSigning engine:\r\n  --pure-crypto   Force pdfnative's pure-JS RSA/ECDSA signer. By default the CLI\r\n                  signs via a native, constant-time (side-channel-resistant)\r\n                  node:crypto/OpenSSL provider.\r\n\r\nSignature metadata (optional):\r\n  --reason        Reason text shown in signature panel\r\n  --name          Signer name override\r\n  --location      Signing location\r\n  --contact       Contact info\r\n  --signing-time  ISO 8601 timestamp (default: now)\r\n\r\nLong-term validation (LTV):\r\n  --timestamp <url>  RFC 3161 TSA URL for PAdES-T timestamping. NOT YET\r\n                     available — embedding a timestamp token at signing time\r\n                     requires upstream pdfnative support; the flag is reserved\r\n                     and currently errors. Timestamp VALIDATION already works\r\n                     via \\`pdfnative verify\\`.\r\n\r\nSecurity: key material is never written to logs or error messages.\r\n\r\n  --help,    -h   Show this help message\r\n`;\r\n\r\nconst VERIFY_USAGE = `\\\r\npdfnative verify — Verify CMS/PKCS#7 signatures in a PDF\r\n\r\nUsage:\r\n  pdfnative verify [--input <file.pdf>] [--trust <root.pem>]... [--strict]\r\n                   [--revocation offline|online|disabled]\r\n                   [--revocation-policy soft-fail|strict] [--format json|text]\r\n\r\nOptions:\r\n  --input,   -i        Path to input PDF (default: stdin)\r\n  --trust              PEM file with trusted root certs (repeatable;\r\n                       env: PDFNATIVE_VERIFY_TRUST). When omitted, self-signed\r\n                       roots are accepted.\r\n  --strict             Exit code 1 if any signature fails any check.\r\n  --revocation         Certificate revocation source (default: offline):\r\n                         offline   embedded OCSP/CRL from the PDF /DSS only\r\n                         online    additionally fetch via OCSP (AIA) and CRL\r\n                                   (CDP) URLs — SSRF-guarded, no redirects\r\n                         disabled  skip revocation checking entirely\r\n  --revocation-policy  How revocation affects validity (default: soft-fail):\r\n                         soft-fail  only an explicit \"revoked\" status fails\r\n                         strict     a non-\"good\" status fails the signature\r\n  --format,  -f        json (default) or text\r\n  --summary            Emit only the minimal verdict { valid, signatures, invalid }\r\n  --fields             Comma-separated dot-paths to keep (e.g. valid,signatures.signatureValid)\r\n  --pretty             Force indented JSON even under --json (agent mode is compact)\r\n  --help,    -h        Show this help message\r\n\r\nReported per signature:\r\n  - byte-range integrity (SHA-256 against CMS messageDigest)\r\n  - signer subject / issuer\r\n  - certificate chain validity\r\n  - chain root trust evaluation\r\n  - signature value cryptographic verification (RSA-SHA256 / ECDSA-SHA256)\r\n  - RFC 3161 timestamp token validation (PAdES-T)\r\n  - OCSP (RFC 6960) + CRL (RFC 5280) revocation status\r\n\r\nNote: sign-side LTV (embedding timestamps / DSS into signatures) is tracked\r\nupstream in pdfnative and is out of scope for this CLI.\r\n`;\r\n\r\nconst INSPECT_USAGE = `\\\r\npdfnative inspect — Analyse a PDF and output metadata\r\n\r\nUsage:\r\n  pdfnative inspect [--input <file.pdf>] [--format <fmt>] [options]\r\n\r\nOptions:\r\n  --input,   -i   Path to input PDF (default: stdin)\r\n  --format,  -f   json (default) or text\r\n  --verbose,  -v  Include trailerKeys, catalogKeys, objectCount,\r\n                  XMP metadata length\r\n  --pages         Per-page width/height/rotation/annotation/formField counts\r\n  --annotations   List markup / link annotations (page, subtype, contents/url)\r\n  --form-fields   List AcroForm fields (name, type, value, required/read-only)\r\n  --encryption    Report the encryption scheme (algorithm, revision, opened-as)\r\n  --password      Password for an encrypted PDF (env: PDFNATIVE_PASSWORD)\r\n  --pdfua         Include a PDF/UA (ISO 14289-1) structural validation report\r\n                  (valid + errors + warnings)\r\n  --check         Assert a property; repeatable; AND semantics; exits 1 on\r\n                  failure. Values: pdfa | signed | encrypted | pdfua\r\n  --summary       Emit only the minimal verdict { pages, encrypted, signatures, pdfa }\r\n  --fields        Comma-separated dot-paths to keep (e.g. pageCount,metadata.title)\r\n  --pretty        Force indented JSON even under --json (agent mode is compact)\r\n  --help,    -h   Show this help message\r\n`;\r\n\r\nconst BATCH_USAGE = `\\\r\npdfnative batch — Render every JSON file in a directory to PDF\r\n\r\nUsage:\r\n  pdfnative batch --input-dir <dir> --output-dir <dir> [render options]\r\n\r\nOptions:\r\n  --input-dir        Directory of *.json document definitions (required)\r\n  --output-dir       Directory for the rendered *.pdf files (created if absent)\r\n  --concurrency      Maximum parallel renders (default: 4)\r\n  --fail-fast        Stop at the first failure (default: render all, then report)\r\n  --format,  -f      Summary format: text (default) or json\r\n  --summary          Emit only the minimal verdict { total, succeeded, failed }\r\n  --fields           Comma-separated dot-paths to keep (e.g. total,failed)\r\n  --pretty           Force indented JSON even under --json (agent mode is compact)\r\n  --help,    -h      Show this help message\r\n\r\nAll other flags (--variant, --layout, --page-size, --tagged, --compress,\r\nsmart-table flags, …) are forwarded to each render. Per-file --input/--output\r\nare managed automatically. Exit code 1 if any file fails.\r\n`;\r\n\r\nconst MERGE_USAGE = `\\\r\npdfnative merge — Concatenate multiple PDFs into one\r\n\r\nUsage:\r\n  pdfnative merge <in1.pdf> <in2.pdf> [...] [--output <out.pdf>] [options]\r\n  pdfnative merge --input a.pdf --input b.pdf --output out.pdf\r\n\r\nInputs are given as positional paths and/or repeated --input flags (2–50\r\nsources, applied in order). Output defaults to stdout.\r\n\r\nOptions:\r\n  --output,  -o         Output PDF path (default: stdout)\r\n  --drop-annotations    Drop ALL annotations (default keeps self-contained URI\r\n                        links; cross-page GoTo links and widgets are always\r\n                        dropped)\r\n  --max-output-size     Max assembled size in bytes (default 256 MiB; 0/none to\r\n                        disable the OOM guard — not recommended for untrusted\r\n                        input)\r\n  --password            Password for encrypted source PDFs (env: PDFNATIVE_PASSWORD).\r\n                        A SINGLE password is applied to EVERY source; merging\r\n                        encrypted sources that use different passwords fails\r\n                        (E_PASSWORD).\r\n  --encrypt [aes-128|aes-256]\r\n                        Re-encrypt the output (bare = aes-128). Needs\r\n                        --owner-password\r\n  --owner-password      Owner password for --encrypt (env: PDFNATIVE_ENCRYPT_OWNER_PASS)\r\n  --user-password       User password for --encrypt (env: PDFNATIVE_ENCRYPT_USER_PASS)\r\n  --permissions         Comma-separated: print, copy, modify, extract\r\n  --stream              Constant-memory streaming output (--chunk-size N bytes)\r\n  --dry-run             Validate + read all sources without writing output\r\n  --help,    -h         Show this help message\r\n\r\nNote: the page-tree rebuild drops signatures and form fields (any page-tree\r\nedit invalidates a signature's /ByteRange). Encrypted sources are supported\r\nvia --password (pdfnative 1.6.0).\r\n`;\r\n\r\nconst SPLIT_USAGE = `\\\r\npdfnative split — Split one PDF into multiple PDFs\r\n\r\nUsage:\r\n  pdfnative split --input in.pdf --output-dir out/ [--pages \"1-3,4-6,7\"]\r\n\r\nWith --pages, each comma-separated segment becomes one output document; without\r\nit, every page becomes its own single-page PDF.\r\n\r\nOptions:\r\n  --input,   -i         Input PDF path (default: stdin)\r\n  --output-dir          Directory for the output PDFs (created if absent, required)\r\n  --pages               1-based selector, one output per segment (e.g. \"1-3,4-6,7\")\r\n  --prefix              Output filename prefix (default: input basename or \"part\")\r\n  --drop-annotations    Drop ALL annotations (see merge)\r\n  --max-output-size     Max size per emitted PDF in bytes (default 256 MiB)\r\n  --password            Password for an encrypted source (env: PDFNATIVE_PASSWORD)\r\n  --encrypt [aes-128|aes-256]\r\n                        Re-encrypt each output (needs --owner-password)\r\n  --owner-password      Owner password for --encrypt (env: PDFNATIVE_ENCRYPT_OWNER_PASS)\r\n  --user-password       User password for --encrypt (env: PDFNATIVE_ENCRYPT_USER_PASS)\r\n  --permissions         Comma-separated: print, copy, modify, extract\r\n  --stream              Constant-memory streaming output (--chunk-size N bytes)\r\n  --dry-run             Validate without writing output\r\n  --help,    -h         Show this help message\r\n\r\nOutput files are named <prefix>-<n>.pdf (zero-padded). Signatures/forms are\r\ndropped; encrypted sources are supported via --password.\r\n`;\r\n\r\nconst EXTRACT_USAGE = `\\\r\npdfnative extract — Extract selected pages into a new PDF\r\n\r\nUsage:\r\n  pdfnative extract --input in.pdf --pages \"1,3,5-7\" [--output out.pdf]\r\n\r\nOptions:\r\n  --input,   -i         Input PDF path (default: stdin)\r\n  --output,  -o         Output PDF path (default: stdout)\r\n  --pages               1-based selector (required). Order is preserved and\r\n                        pages may repeat, e.g. \"3,1,1,5-7\"\r\n  --drop-annotations    Drop ALL annotations (see merge)\r\n  --max-output-size     Max assembled size in bytes (default 256 MiB)\r\n  --password            Password for an encrypted source (env: PDFNATIVE_PASSWORD)\r\n  --encrypt [aes-128|aes-256]\r\n                        Re-encrypt the output (needs --owner-password)\r\n  --owner-password      Owner password for --encrypt (env: PDFNATIVE_ENCRYPT_OWNER_PASS)\r\n  --user-password       User password for --encrypt (env: PDFNATIVE_ENCRYPT_USER_PASS)\r\n  --permissions         Comma-separated: print, copy, modify, extract\r\n  --stream              Constant-memory streaming output (--chunk-size N bytes)\r\n  --dry-run             Validate without writing output\r\n  --help,    -h         Show this help message\r\n\r\nSignatures/forms are dropped; encrypted sources are supported via --password.\r\n`;\r\n\r\nconst EXTRACT_TEXT_USAGE = `\\\r\npdfnative extract-text — Extract reading-order Unicode text from a PDF\r\n\r\nUsage:\r\n  pdfnative extract-text --input in.pdf [--format text|json|ndjson] [options]\r\n\r\nBuilt for agents / RAG: emits per-page text in reading order. No OCR —\r\nimage-only pages yield empty text.\r\n\r\nOptions:\r\n  --input,   -i   Input PDF path (default: stdin)\r\n  --format,  -f   text (default) | json | ndjson (one JSON object per page)\r\n  --pages         1-based selector to limit pages (e.g. \"1,3,5-7\")\r\n  --runs          Include positioned text runs { text, x, y, fontSize, fontName }\r\n  --password      Password for an encrypted PDF (env: PDFNATIVE_PASSWORD)\r\n  --max-length    Hard cap on total characters (default 16000000; 0/none off)\r\n  --summary       (json) Emit only { pages, characters }\r\n  --fields        (json) Comma-separated dot-paths to keep\r\n  --pretty        Force indented JSON even under --json\r\n  --help,    -h   Show this help message\r\n\r\nIn text mode, pages are separated by a form-feed (\\\\f) character.\r\n`;\r\n\r\nconst FILL_USAGE = `\\\r\npdfnative fill — Fill and/or flatten an AcroForm PDF\r\n\r\nUsage:\r\n  pdfnative fill --input form.pdf --data values.json [--output out.pdf] [--flatten]\r\n  pdfnative fill --input form.pdf --flatten --output flat.pdf\r\n  pdfnative fill --input form.pdf --export [--output values.json]\r\n\r\n--data is a JSON object mapping fully-qualified field name → value (string,\r\nboolean, or string[] for multi-select listboxes), or { \"values\": { … } }.\r\nDiscover field names with \\`pdfnative inspect --form-fields\\`, or dump the current\r\nvalues as a ready-to-edit --data map with --export (read → edit → fill).\r\n\r\nOptions:\r\n  --input,   -i        Input PDF path (default: stdin)\r\n  --output,  -o        Output PDF / values path (default: stdout)\r\n  --data               Path to the values JSON (required unless --flatten/--export)\r\n  --flatten            Also flatten after filling (or flatten existing values\r\n                       when --data is omitted)\r\n  --export             Read-only: emit current field values as a --data-shaped\r\n                       JSON map (ignores --data/--flatten)\r\n  --force              Flatten even if a signed signature field is present\r\n  --on-unknown         Behaviour for unknown field names: throw (default)|ignore\r\n  --need-appearances   Allow non-WinAnsi values by setting /NeedAppearances\r\n  --password           Password for an encrypted PDF (env: PDFNATIVE_PASSWORD)\r\n  --dry-run            Validate + enumerate fields without writing output\r\n  --help,    -h        Show this help message\r\n\r\nThe update is incremental, so an existing signature stays valid for its\r\nrevision. Signature fields cannot be filled.\r\n`;\r\n\r\nconst ENCRYPT_USAGE = `\\\r\npdfnative encrypt — Re-secure a PDF with AES-128/256 encryption\r\n\r\nUsage:\r\n  pdfnative encrypt --input in.pdf --owner-password <pass> [--output out.pdf]\r\n\r\nRebuilds the document from its page tree (like merge), so signatures and form\r\nfields are dropped. Requires a Web Crypto CSPRNG; RC4 is never emitted.\r\n\r\nOptions:\r\n  --input,   -i        Input PDF path (default: stdin)\r\n  --output,  -o        Output PDF path (default: stdout)\r\n  --owner-password     Owner password — REQUIRED (env: PDFNATIVE_ENCRYPT_OWNER_PASS)\r\n  --user-password      User (open) password (env: PDFNATIVE_ENCRYPT_USER_PASS)\r\n  --algorithm          aes-128 (default) | aes-256\r\n  --permissions        Comma-separated: print, copy, modify, extract\r\n  --password           Open an already-encrypted source (password rotation;\r\n                       env: PDFNATIVE_PASSWORD)\r\n  --drop-annotations   Drop ALL annotations (default keeps URI links)\r\n  --max-output-size    Max assembled size in bytes (default 256 MiB)\r\n  --stream             Constant-memory streaming output (--chunk-size N bytes)\r\n  --dry-run            Validate without writing output\r\n  --help,    -h        Show this help message\r\n\r\nPasswords are read from env (winning over flags) and never logged.\r\n`;\r\n\r\nconst DECRYPT_USAGE = `\\\r\npdfnative decrypt — Remove encryption from a PDF\r\n\r\nUsage:\r\n  pdfnative decrypt --input enc.pdf --password <pass> [--output out.pdf]\r\n\r\nEmits a plaintext copy. Rebuilds the page tree (like merge), so signatures and\r\nform fields are dropped.\r\n\r\nOptions:\r\n  --input,   -i        Input PDF path (default: stdin)\r\n  --output,  -o        Output PDF path (default: stdout)\r\n  --password           Document password (env: PDFNATIVE_PASSWORD)\r\n  --drop-annotations   Drop ALL annotations (default keeps URI links)\r\n  --max-output-size    Max assembled size in bytes (default 256 MiB)\r\n  --stream             Constant-memory streaming output (--chunk-size N bytes)\r\n  --dry-run            Validate without writing output\r\n  --help,    -h        Show this help message\r\n`;\r\n\r\nconst DOCTOR_USAGE = `\\\r\npdfnative doctor — Environment / capability preflight\r\n\r\nUsage:\r\n  pdfnative doctor [--format json|text] [--json]\r\n\r\nReports the CLI version, Node version, Web Crypto (CSPRNG) availability — which\r\n\\`encrypt\\` requires — the resolved pdfnative version, and the registered command\r\ncount. Fully offline. Exit code 0 when all checks pass, 1 otherwise.\r\n\r\nOptions:\r\n  --format,  -f   text (default) or json\r\n  --json          Global agent mode also selects JSON output\r\n  --pretty        Force indented JSON even under --json\r\n  --help,    -h   Show this help message\r\n`;\r\n\r\nconst ANNOTATE_USAGE = `\\\r\npdfnative annotate — Attach markup annotations to a PDF\r\n\r\nUsage:\r\n  pdfnative annotate --input in.pdf --annotations notes.json [--output out.pdf]\r\n\r\nThe annotations file is a JSON array (or { \"annotations\": [...] }). Each entry\r\nis a markup annotation plus a 1-based \"page\":\r\n\r\n  [\r\n    { \"page\": 1, \"type\": \"highlight\", \"rect\": [72,700,520,716],\r\n      \"color\": \"#ffd400\", \"contents\": \"Review this\" },\r\n    { \"page\": 1, \"type\": \"text\", \"rect\": [540,700,560,720],\r\n      \"icon\": \"Comment\", \"contents\": \"A sticky note\" }\r\n  ]\r\n\r\nTypes: text, highlight, underline, strikeout, squiggly, square, circle, line,\r\nfreetext. All need \"rect\": [x1,y1,x2,y2]; \"line\" also needs \"start\"/\"end\".\r\n\r\nOptions:\r\n  --input,   -i         Input PDF path (default: stdin)\r\n  --output,  -o         Output PDF path (default: stdout)\r\n  --annotations         Path to the annotations JSON (required)\r\n  --dry-run             Validate inputs without writing output\r\n  --help,    -h         Show this help message\r\n\r\nThe document is updated with an incremental save, so the original bytes — and\r\nany existing signature — are preserved.\r\n`;\r\n\r\nconst GOVERN_USAGE = `\\\r\npdfnative govern — AI-governance / Human-in-the-Loop (HITL) contract\r\n\r\nUsage:\r\n  pdfnative govern rules                 Print the human/agent protocol\r\n  pdfnative govern policy                Print the machine-readable policy (JSON)\r\n  pdfnative govern verify-issue <draft>  Validate an issue/PR draft\r\n\r\npdfnative's governance model makes AI agents DRAFTSMEN, never autonomous\r\nsubmitters: no runtime dependencies, a local reproduction for every bug, and a\r\nmandatory human review before anything is submitted under a human identity.\r\n\r\nverify-issue exits 1 when the draft proposes an external dependency or omits a\r\nreproduction code block. A passing check is necessary but NOT sufficient — the\r\nhuman review gate always applies.\r\n\r\nOptions (verify-issue):\r\n  --input,   -i   Draft path (alternative to the positional argument; stdin if -)\r\n  --format,  -f   json (report on stdout) or text (default)\r\n  --pretty        Force indented JSON even under --json\r\n  --help,    -h   Show this help message\r\n`;\r\n\r\nconst SCHEMA_USAGE = `\\\r\npdfnative schema — Print a JSON Schema for a CLI input/output shape\r\n\r\nUsage:\r\n  pdfnative schema [subject]\r\n\r\nSubjects:\r\n  render          Input for \\`render\\` (document or table variant) — default\r\n  inspect         Output of \\`inspect --format json\\`\r\n  verify          Output of \\`verify --format json\\`\r\n  batch           Output of \\`batch --format json\\`\r\n  annotate        Input for \\`annotate\\` (--annotations JSON)\r\n  extract-text    Output of \\`extract-text --format json\\`\r\n  fill            Input for \\`fill\\` (--data JSON)\r\n  form-export     Output of \\`fill --export\\`\r\n  inspect-summary Output of \\`inspect --summary\\`\r\n  verify-summary  Output of \\`verify --summary\\`\r\n  batch-summary   Output of \\`batch --summary\\`\r\n  govern-verify   Output of \\`govern verify-issue --format json\\`\r\n  status          Agent success envelope (write commands, --json)\r\n  manifest        Machine-readable capability manifest (commands, flags, codes)\r\n  doctor          Output of \\`doctor --format json\\`\r\n  list            Print the available subjects as JSON\r\n\r\nWith no subject, the \\`render\\` input schema is printed. Schemas are JSON Schema\r\nDraft 2020-12 and carry a versioned \\\\$id, so agents can self-validate input\r\nbefore invoking the CLI.\r\n`;\r\n\r\nconst COMPLETION_USAGE = `\\\r\npdfnative completion — Emit a shell completion script\r\n\r\nUsage:\r\n  pdfnative completion <bash|zsh|fish|powershell>\r\n\r\nInstall (examples):\r\n  pdfnative completion bash > /etc/bash_completion.d/pdfnative\r\n  pdfnative completion zsh  > \"\\${fpath[1]}/_pdfnative\"\r\n  pdfnative completion fish > ~/.config/fish/completions/pdfnative.fish\r\n  pdfnative completion powershell >> $PROFILE\r\n`;\r\n\r\nasync function loadCommand(name: string): Promise<CommandFn> {\r\n    switch (name) {\r\n        case 'render': {\r\n            const m = await import('./commands/render.js');\r\n            return m.render;\r\n        }\r\n        case 'sign': {\r\n            const m = await import('./commands/sign.js');\r\n            return m.sign;\r\n        }\r\n        case 'verify': {\r\n            const m = await import('./commands/verify.js');\r\n            return m.verify;\r\n        }\r\n        case 'inspect': {\r\n            const m = await import('./commands/inspect.js');\r\n            return m.inspect;\r\n        }\r\n        case 'merge': {\r\n            const m = await import('./commands/merge.js');\r\n            return m.merge;\r\n        }\r\n        case 'split': {\r\n            const m = await import('./commands/split.js');\r\n            return m.split;\r\n        }\r\n        case 'extract': {\r\n            const m = await import('./commands/extract.js');\r\n            return m.extract;\r\n        }\r\n        case 'extract-text': {\r\n            const m = await import('./commands/extract-text.js');\r\n            return m.extractTextCmd;\r\n        }\r\n        case 'fill': {\r\n            const m = await import('./commands/fill.js');\r\n            return m.fill;\r\n        }\r\n        case 'encrypt': {\r\n            const m = await import('./commands/encrypt.js');\r\n            return m.encrypt;\r\n        }\r\n        case 'decrypt': {\r\n            const m = await import('./commands/decrypt.js');\r\n            return m.decrypt;\r\n        }\r\n        case 'annotate': {\r\n            const m = await import('./commands/annotate.js');\r\n            return m.annotate;\r\n        }\r\n        case 'govern': {\r\n            const m = await import('./commands/govern.js');\r\n            return m.govern;\r\n        }\r\n        case 'batch': {\r\n            const m = await import('./commands/batch.js');\r\n            return m.batch;\r\n        }\r\n        case 'completion': {\r\n            const m = await import('./commands/completion.js');\r\n            return m.completion;\r\n        }\r\n        case 'schema': {\r\n            const m = await import('./commands/schema.js');\r\n            return m.schema;\r\n        }\r\n        case 'doctor': {\r\n            const m = await import('./commands/doctor.js');\r\n            return m.doctor;\r\n        }\r\n        default:\r\n            return Promise.reject(\r\n                new CliError(`Unknown command: ${name}. Run pdfnative --help for usage.`, 1),\r\n            );\r\n    }\r\n}\r\n\r\n// The command being dispatched, captured for the agent JSON error envelope.\r\nlet activeCommand: string | null = null;\r\n\r\nasync function main(): Promise<void> {\r\n    const argv = process.argv.slice(2);\r\n    const args = parseArgs(argv);\r\n\r\n    // Global output flags (recognised anywhere in argv).\r\n    if (hasFlag(args.flags, 'no-color') || process.env['NO_COLOR'] !== undefined) {\r\n        process.env['NO_COLOR'] = '1';\r\n    }\r\n    if (hasFlag(args.flags, 'quiet', 'q')) {\r\n        process.env['PDFNATIVE_QUIET'] = '1';\r\n    }\r\n    if (hasFlag(args.flags, 'json')) {\r\n        process.env['PDFNATIVE_JSON'] = '1';\r\n    }\r\n    if (hasFlag(args.flags, 'dry-run')) {\r\n        process.env['PDFNATIVE_DRY_RUN'] = '1';\r\n    }\r\n\r\n    if (hasFlag(args.flags, 'help', 'h') && args.positionals.length === 0) {\r\n        process.stdout.write(USAGE);\r\n        process.exit(0);\r\n    }\r\n\r\n    if (hasFlag(args.flags, 'version', 'V')) {\r\n        const version = cliVersion();\r\n        if (hasFlag(args.flags, 'json')) {\r\n            process.stdout.write(JSON.stringify({ name: 'pdfnative-cli', version }) + '\\n');\r\n        } else {\r\n            process.stdout.write(version + '\\n');\r\n        }\r\n        process.exit(0);\r\n    }\r\n\r\n    const commandName = args.positionals[0];\r\n\r\n    if (commandName === undefined) {\r\n        process.stdout.write(USAGE);\r\n        process.exit(0);\r\n    }\r\n\r\n    activeCommand = commandName;\r\n\r\n    if (hasFlag(args.flags, 'help', 'h')) {\r\n        switch (commandName) {\r\n            case 'render': process.stdout.write(RENDER_USAGE); break;\r\n            case 'sign':   process.stdout.write(SIGN_USAGE);   break;\r\n            case 'verify': process.stdout.write(VERIFY_USAGE); break;\r\n            case 'inspect': process.stdout.write(INSPECT_USAGE); break;\r\n            case 'merge': process.stdout.write(MERGE_USAGE); break;\r\n            case 'split': process.stdout.write(SPLIT_USAGE); break;\r\n            case 'extract': process.stdout.write(EXTRACT_USAGE); break;\r\n            case 'extract-text': process.stdout.write(EXTRACT_TEXT_USAGE); break;\r\n            case 'fill': process.stdout.write(FILL_USAGE); break;\r\n            case 'encrypt': process.stdout.write(ENCRYPT_USAGE); break;\r\n            case 'decrypt': process.stdout.write(DECRYPT_USAGE); break;\r\n            case 'annotate': process.stdout.write(ANNOTATE_USAGE); break;\r\n            case 'govern': process.stdout.write(GOVERN_USAGE); break;\r\n            case 'batch': process.stdout.write(BATCH_USAGE); break;\r\n            case 'schema': process.stdout.write(SCHEMA_USAGE); break;\r\n            case 'completion': process.stdout.write(COMPLETION_USAGE); break;\r\n            case 'doctor': process.stdout.write(DOCTOR_USAGE); break;\r\n            default:\r\n                process.stderr.write(`Unknown command: ${commandName}. Run pdfnative --help for usage.\\n`);\r\n                process.exit(1);\r\n        }\r\n        process.exit(0);\r\n    }\r\n\r\n    // Strip ONLY the first occurrence of the command name from argv.\r\n    let stripped = false;\r\n    const rest = argv.filter((tok) => {\r\n        if (!stripped && tok === commandName) {\r\n            stripped = true;\r\n            return false;\r\n        }\r\n        return true;\r\n    });\r\n\r\n    const commandArgs = parseArgs(rest);\r\n\r\n    // Apply `.pdfnativerc.json` defaults (unless --no-config). CLI flags win.\r\n    let effectiveArgs = commandArgs;\r\n    if (!hasFlag(commandArgs.flags, 'no-config')) {\r\n        const configPath = getStringFlag(commandArgs.flags, 'config');\r\n        const defaults = loadConfig(commandName, configPath);\r\n        effectiveArgs = applyConfigDefaults(commandArgs, defaults);\r\n    }\r\n\r\n    const command = await loadCommand(commandName);\r\n    await command(effectiveArgs);\r\n}\r\n\r\nmain().catch((e: unknown) => {\r\n    // Agent mode: a single JSON error envelope on stderr, with a stable code.\r\n    if (isJsonMode()) {\r\n        emitJsonError(activeCommand, e);\r\n        if (process.env['PDFNATIVE_DEBUG'] === '1' && e instanceof Error) {\r\n            process.stderr.write((e.stack ?? e.message) + '\\n');\r\n        }\r\n        process.exit(e instanceof CliError ? e.exitCode : 1);\r\n    }\r\n    if (e instanceof CliError) {\r\n        if (e.message.length > 0) {\r\n            process.stderr.write(e.message + '\\n');\r\n        }\r\n        process.exit(e.exitCode);\r\n    }\r\n    const message = e instanceof Error ? e.message : String(e);\r\n    if (process.env['PDFNATIVE_DEBUG'] === '1' && e instanceof Error) {\r\n        process.stderr.write((e.stack ?? e.message) + '\\n');\r\n    }\r\n    process.stderr.write(`Error: ${message}\\n`);\r\n    process.exit(1);\r\n});\r\n","// `.pdfnativerc.json` configuration file support.\r\n//\r\n// Provides default flag values, discovered by walking up from the current\r\n// working directory. Precedence (highest first):\r\n//\r\n//     explicit CLI flag  >  environment variable  >  config file  >  built-in\r\n//\r\n// Config only fills flags the user did NOT pass on the command line, so an\r\n// explicit flag always wins. Environment variables are read inside each\r\n// command independently, so they continue to take precedence over a value a\r\n// command would otherwise read from an injected flag.\r\n//\r\n// File shape — flag names map to values; a top-level key whose name matches a\r\n// command and whose value is an object is treated as a command-scoped section:\r\n//\r\n//     {\r\n//       \"no-color\": true,\r\n//       \"render\": { \"page-size\": \"letter\", \"compress\": true },\r\n//       \"verify\": { \"revocation\": \"online\", \"revocation-policy\": \"strict\" }\r\n//     }\r\n\r\nimport { readFileSync, existsSync } from 'node:fs';\r\nimport { dirname, join, resolve } from 'node:path';\r\nimport type { ParsedArgs } from './args.js';\r\nimport { validatePath } from './io.js';\r\nimport { CliError } from './error.js';\r\n\r\nconst CONFIG_FILENAME = '.pdfnativerc.json';\r\nconst CONFIG_SIZE_LIMIT = 1024 * 1024; // 1 MB — config files are small.\r\nconst KNOWN_COMMANDS = ['render', 'sign', 'verify', 'inspect', 'batch'];\r\n\r\ntype ConfigValue = string | boolean | number | readonly (string | number)[];\r\ntype ConfigDefaults = Record<string, string | boolean | string[]>;\r\n\r\n/** Locate the nearest `.pdfnativerc.json` by walking up from `startDir`. */\r\nfunction findConfigFile(startDir: string): string | null {\r\n    let dir = resolve(startDir);\r\n    // Bounded walk to the filesystem root.\r\n    for (;;) {\r\n        const candidate = join(dir, CONFIG_FILENAME);\r\n        if (existsSync(candidate)) return candidate;\r\n        const parent = dirname(dir);\r\n        if (parent === dir) return null;\r\n        dir = parent;\r\n    }\r\n}\r\n\r\nfunction coerce(value: ConfigValue): string | boolean | string[] | null {\r\n    if (typeof value === 'string' || typeof value === 'boolean') return value;\r\n    if (typeof value === 'number') return String(value);\r\n    if (Array.isArray(value)) {\r\n        return value.map((v) => (typeof v === 'number' ? String(v) : v)) as string[];\r\n    }\r\n    return null;\r\n}\r\n\r\n/**\r\n * Load configuration defaults for `commandName`.\r\n *\r\n * @param commandName  The command being run (selects its scoped section).\r\n * @param explicitPath Optional `--config` override; when set, discovery is skipped.\r\n * @param cwd          Directory to start discovery from (default: process cwd).\r\n * @returns A flat map of flag defaults (global section merged under the\r\n *          command section, command wins), or an empty object when no config\r\n *          is found.\r\n */\r\nexport function loadConfig(\r\n    commandName: string,\r\n    explicitPath: string | undefined,\r\n    cwd: string = process.cwd(),\r\n): ConfigDefaults {\r\n    let path: string | null;\r\n    if (explicitPath !== undefined) {\r\n        validatePath(explicitPath);\r\n        path = resolve(explicitPath);\r\n        if (!existsSync(path)) {\r\n            throw new CliError(`Config file not found: ${explicitPath}`, 2);\r\n        }\r\n    } else {\r\n        path = findConfigFile(cwd);\r\n    }\r\n    if (path === null) return {};\r\n\r\n    let parsed: unknown;\r\n    try {\r\n        const raw = readFileSync(path);\r\n        if (raw.length > CONFIG_SIZE_LIMIT) {\r\n            throw new CliError(`Config file exceeds the 1 MB limit: ${path}`, 2);\r\n        }\r\n        parsed = JSON.parse(raw.toString('utf8'));\r\n    } catch (e) {\r\n        if (e instanceof CliError) throw e;\r\n        throw new CliError(`Failed to parse config file ${path}: invalid JSON.`, 2);\r\n    }\r\n    if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed)) {\r\n        throw new CliError(`Config file ${path} must contain a JSON object.`, 2);\r\n    }\r\n\r\n    const global: ConfigDefaults = {};\r\n    const scoped: ConfigDefaults = {};\r\n    for (const [key, value] of Object.entries(parsed as Record<string, unknown>)) {\r\n        if (\r\n            KNOWN_COMMANDS.includes(key)\r\n            && value !== null\r\n            && typeof value === 'object'\r\n            && !Array.isArray(value)\r\n        ) {\r\n            if (key !== commandName) continue;\r\n            for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\r\n                const c = coerce(v as ConfigValue);\r\n                if (c !== null) scoped[k] = c;\r\n            }\r\n            continue;\r\n        }\r\n        const c = coerce(value as ConfigValue);\r\n        if (c !== null) global[key] = c;\r\n    }\r\n    // Command-scoped values win over global ones.\r\n    return { ...global, ...scoped };\r\n}\r\n\r\n/**\r\n * Fill flags absent from `args` with config defaults. CLI flags always win;\r\n * a flag the user passed (even as a boolean) is never overwritten.\r\n */\r\nexport function applyConfigDefaults(args: ParsedArgs, defaults: ConfigDefaults): ParsedArgs {\r\n    const merged: Record<string, string | boolean | readonly string[]> = { ...args.flags };\r\n    for (const [key, value] of Object.entries(defaults)) {\r\n        if (merged[key] === undefined) merged[key] = value;\r\n    }\r\n    return { flags: merged, positionals: args.positionals };\r\n}\r\n"]}