@probemesh/sdk 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +160 -0
- package/dist/chunk-257Y7LN2.js +827 -0
- package/dist/chunk-257Y7LN2.js.map +1 -0
- package/dist/chunk-2ASMVLG4.js +56 -0
- package/dist/chunk-2ASMVLG4.js.map +1 -0
- package/dist/chunk-2KWGHJYP.js +285 -0
- package/dist/chunk-2KWGHJYP.js.map +1 -0
- package/dist/chunk-3H7UGVI6.js +1117 -0
- package/dist/chunk-3H7UGVI6.js.map +1 -0
- package/dist/chunk-5Q3PDYIA.js +657 -0
- package/dist/chunk-5Q3PDYIA.js.map +1 -0
- package/dist/chunk-CXZOO3U4.js +550 -0
- package/dist/chunk-CXZOO3U4.js.map +1 -0
- package/dist/chunk-FRFBK4SY.js +270 -0
- package/dist/chunk-FRFBK4SY.js.map +1 -0
- package/dist/chunk-HJK52QJF.js +994 -0
- package/dist/chunk-HJK52QJF.js.map +1 -0
- package/dist/chunk-HNBDX7IU.js +705 -0
- package/dist/chunk-HNBDX7IU.js.map +1 -0
- package/dist/chunk-NYTV263W.js +116 -0
- package/dist/chunk-NYTV263W.js.map +1 -0
- package/dist/chunk-PXG54XOG.js +595 -0
- package/dist/chunk-PXG54XOG.js.map +1 -0
- package/dist/chunk-TDOBAMYM.js +607 -0
- package/dist/chunk-TDOBAMYM.js.map +1 -0
- package/dist/chunk-TV42EZSI.js +2157 -0
- package/dist/chunk-TV42EZSI.js.map +1 -0
- package/dist/chunk-UU2ZG7P7.js +408 -0
- package/dist/chunk-UU2ZG7P7.js.map +1 -0
- package/dist/chunk-WKN7QOCA.js +977 -0
- package/dist/chunk-WKN7QOCA.js.map +1 -0
- package/dist/chunk-ZJOLPBJJ.js +1091 -0
- package/dist/chunk-ZJOLPBJJ.js.map +1 -0
- package/dist/cli/audit-trail-export.cjs +1193 -0
- package/dist/cli/audit-trail-export.cjs.map +1 -0
- package/dist/cli/audit-trail-export.d.cts +1 -0
- package/dist/cli/audit-trail-export.d.ts +1 -0
- package/dist/cli/audit-trail-export.js +24 -0
- package/dist/cli/audit-trail-export.js.map +1 -0
- package/dist/cli/catalog-check.cjs +2687 -0
- package/dist/cli/catalog-check.cjs.map +1 -0
- package/dist/cli/catalog-check.d.cts +1 -0
- package/dist/cli/catalog-check.d.ts +1 -0
- package/dist/cli/catalog-check.js +26 -0
- package/dist/cli/catalog-check.js.map +1 -0
- package/dist/cli/probemesh-init.cjs +1049 -0
- package/dist/cli/probemesh-init.cjs.map +1 -0
- package/dist/cli/probemesh-init.d.cts +1 -0
- package/dist/cli/probemesh-init.d.ts +1 -0
- package/dist/cli/probemesh-init.js +22 -0
- package/dist/cli/probemesh-init.js.map +1 -0
- package/dist/cli/provider-conformance.cjs +6180 -0
- package/dist/cli/provider-conformance.cjs.map +1 -0
- package/dist/cli/provider-conformance.d.cts +1 -0
- package/dist/cli/provider-conformance.d.ts +1 -0
- package/dist/cli/provider-conformance.js +29 -0
- package/dist/cli/provider-conformance.js.map +1 -0
- package/dist/cli/provider-dossier-check.cjs +2978 -0
- package/dist/cli/provider-dossier-check.cjs.map +1 -0
- package/dist/cli/provider-dossier-check.d.cts +1 -0
- package/dist/cli/provider-dossier-check.d.ts +1 -0
- package/dist/cli/provider-dossier-check.js +27 -0
- package/dist/cli/provider-dossier-check.js.map +1 -0
- package/dist/cli/provider-dossier.cjs +1753 -0
- package/dist/cli/provider-dossier.cjs.map +1 -0
- package/dist/cli/provider-dossier.d.cts +1 -0
- package/dist/cli/provider-dossier.d.ts +1 -0
- package/dist/cli/provider-dossier.js +26 -0
- package/dist/cli/provider-dossier.js.map +1 -0
- package/dist/cli/x402-accept.cjs +6009 -0
- package/dist/cli/x402-accept.cjs.map +1 -0
- package/dist/cli/x402-accept.d.cts +1 -0
- package/dist/cli/x402-accept.d.ts +1 -0
- package/dist/cli/x402-accept.js +28 -0
- package/dist/cli/x402-accept.js.map +1 -0
- package/dist/index.cjs +13671 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +2026 -0
- package/dist/index.d.ts +2026 -0
- package/dist/index.js +2560 -0
- package/dist/index.js.map +1 -0
- package/package.json +111 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cli/auditTrailExportCli.ts","../../src/cli/configLoader.ts","../../src/auditTrailBundle.ts","../../src/callAuditArtifact.ts","../../src/errors.ts","../../src/protocols/x402Redaction.ts","../../src/cli/audit-trail-export.ts"],"sourcesContent":["import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname, resolve } from \"node:path\";\n\nimport { loadCliConfigDefault } from \"./configLoader\";\n\nimport {\n createProbeMeshAuditTrailBundle,\n formatProbeMeshAuditTrailBundle,\n} from \"../auditTrailBundle\";\nimport type {\n ProbeMeshAuditTrailBundle,\n ProbeMeshAuditTrailBundleFormat,\n ProbeMeshAuditTrailBundleOptions,\n} from \"../auditTrailBundle\";\nimport type {\n ProbeMeshCallAuditArtifact,\n} from \"../callAuditArtifact\";\n\nexport interface ProbeMeshAuditTrailExportCliSkip {\n skip: true;\n reason: string;\n details?: unknown;\n}\n\nexport interface ProbeMeshAuditTrailExportCliOutputs {\n json?: string;\n markdown?: string;\n}\n\nexport interface ProbeMeshAuditTrailExportCliBundle\n extends Omit<ProbeMeshAuditTrailBundleOptions, \"artifacts\"> {\n format?: ProbeMeshAuditTrailBundleFormat;\n}\n\nexport interface ProbeMeshAuditTrailExportCliConfig {\n artifacts?: ProbeMeshCallAuditArtifact[];\n artifactFiles?: string[];\n bundle?: ProbeMeshAuditTrailExportCliBundle;\n outputs?: ProbeMeshAuditTrailExportCliOutputs;\n}\n\nexport type ProbeMeshAuditTrailExportCliConfigExport =\n | ProbeMeshAuditTrailExportCliConfig\n | ProbeMeshAuditTrailExportCliSkip;\n\nexport type ProbeMeshAuditTrailExportCliConfigFactory = (\n context: ProbeMeshAuditTrailExportCliConfigContext,\n) =>\n | ProbeMeshAuditTrailExportCliConfigExport\n | Promise<ProbeMeshAuditTrailExportCliConfigExport>;\n\nexport interface ProbeMeshAuditTrailExportCliConfigContext {\n argv: string[];\n cwd: string;\n}\n\nexport interface ProbeMeshAuditTrailExportCliOptions {\n argv?: string[];\n cwd?: string;\n}\n\nexport interface ProbeMeshAuditTrailExportCliResult {\n exitCode: 0 | 1 | 2;\n skipped: boolean;\n skip?: ProbeMeshAuditTrailExportCliSkip;\n bundle?: ProbeMeshAuditTrailBundle;\n stdout: string;\n stderr?: string;\n artifactPaths?: ProbeMeshAuditTrailExportCliOutputs;\n}\n\ninterface ParsedCliArgs {\n configPath?: string;\n format?: ProbeMeshAuditTrailBundleFormat;\n outJson?: string;\n outMarkdown?: string;\n bundleId?: string;\n generatedAt?: string;\n help?: boolean;\n}\n\nconst USAGE =\n \"Usage: probemesh-audit-trail-export --config <path> [--format markdown|json] [--out-json <path>] [--out-md <path>] [--bundle-id <text>] [--generated-at <iso>]\";\n\nexport async function runProbeMeshAuditTrailExportCli(\n options: ProbeMeshAuditTrailExportCliOptions = {},\n): Promise<ProbeMeshAuditTrailExportCliResult> {\n const argv = options.argv ?? [];\n const cwd = options.cwd ?? process.cwd();\n\n try {\n const parsedArgs = parseCliArgs(argv);\n\n if (parsedArgs.help) {\n return {\n exitCode: 0,\n skipped: true,\n stdout: `${USAGE}\\n`,\n };\n }\n\n if (!parsedArgs.configPath) {\n return cliFailure(\"--config <path> is required.\");\n }\n\n const configExport = await loadCliConfig(parsedArgs.configPath, {\n argv,\n cwd,\n });\n\n if (isCliSkip(configExport)) {\n return {\n exitCode: 0,\n skipped: true,\n skip: configExport,\n stdout: `ProbeMesh audit trail export skipped: ${configExport.reason}\\n`,\n };\n }\n\n assertCliConfig(configExport);\n\n const artifacts = await loadArtifacts({\n cwd,\n inlineArtifacts: configExport.artifacts,\n artifactFiles: configExport.artifactFiles,\n });\n const bundle = createProbeMeshAuditTrailBundle({\n artifacts,\n bundleId: parsedArgs.bundleId ?? configExport.bundle?.bundleId,\n generatedAt: parsedArgs.generatedAt ?? configExport.bundle?.generatedAt,\n forbiddenOutputValues: configExport.bundle?.forbiddenOutputValues,\n });\n const selectedFormat =\n parsedArgs.format ?? configExport.bundle?.format ?? \"markdown\";\n const stdout = formatProbeMeshAuditTrailBundle(bundle, {\n format: selectedFormat,\n });\n const artifactPaths = await writeArtifacts({\n cwd,\n bundle,\n outputs: {\n json: parsedArgs.outJson ?? configExport.outputs?.json,\n markdown: parsedArgs.outMarkdown ?? configExport.outputs?.markdown,\n },\n });\n\n return {\n exitCode: bundle.status === \"complete\" ? 0 : 1,\n skipped: false,\n bundle,\n stdout,\n artifactPaths,\n };\n } catch (error) {\n return cliFailure(\n error instanceof Error\n ? error.message\n : \"Unknown audit trail export CLI failure.\",\n );\n }\n}\n\nfunction parseCliArgs(argv: string[]): ParsedCliArgs {\n const parsedArgs: ParsedCliArgs = {};\n\n for (let index = 0; index < argv.length; index += 1) {\n const arg = argv[index];\n\n if (arg === \"--\") {\n continue;\n }\n\n if (arg === \"--help\" || arg === \"-h\") {\n parsedArgs.help = true;\n continue;\n }\n\n if (arg === \"--config\") {\n parsedArgs.configPath = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--format\") {\n const format = requireValue(argv, index, arg);\n\n if (format !== \"markdown\" && format !== \"json\") {\n throw new Error(\"--format must be markdown or json.\");\n }\n\n parsedArgs.format = format;\n index += 1;\n continue;\n }\n\n if (arg === \"--out-json\") {\n parsedArgs.outJson = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--out-md\") {\n parsedArgs.outMarkdown = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--bundle-id\") {\n parsedArgs.bundleId = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n if (arg === \"--generated-at\") {\n parsedArgs.generatedAt = requireValue(argv, index, arg);\n index += 1;\n continue;\n }\n\n throw new Error(`Unknown argument \"${arg}\".`);\n }\n\n return parsedArgs;\n}\n\nfunction requireValue(argv: string[], index: number, flag: string) {\n const value = argv[index + 1];\n\n if (!value || value.startsWith(\"--\")) {\n throw new Error(`${flag} requires a value.`);\n }\n\n return value;\n}\n\nasync function loadCliConfig(\n configPath: string,\n context: ProbeMeshAuditTrailExportCliConfigContext,\n): Promise<ProbeMeshAuditTrailExportCliConfigExport> {\n const configExport = await loadCliConfigDefault(configPath, context.cwd);\n\n if (typeof configExport === \"function\") {\n return (configExport as ProbeMeshAuditTrailExportCliConfigFactory)(context);\n }\n\n return configExport as ProbeMeshAuditTrailExportCliConfigExport;\n}\n\nfunction isCliSkip(\n value: unknown,\n): value is ProbeMeshAuditTrailExportCliSkip {\n return (\n !!value &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n (value as Partial<ProbeMeshAuditTrailExportCliSkip>).skip === true &&\n typeof (value as Partial<ProbeMeshAuditTrailExportCliSkip>).reason ===\n \"string\"\n );\n}\n\nfunction assertCliConfig(\n value: unknown,\n): asserts value is ProbeMeshAuditTrailExportCliConfig {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new Error(\"Audit trail export CLI config must export an object.\");\n }\n\n const config = value as Partial<ProbeMeshAuditTrailExportCliConfig>;\n\n if (config.artifacts !== undefined && !Array.isArray(config.artifacts)) {\n throw new Error(\"Audit trail export CLI artifacts must be an array.\");\n }\n\n if (\n config.artifactFiles !== undefined &&\n (!Array.isArray(config.artifactFiles) ||\n config.artifactFiles.some((artifactFile) => typeof artifactFile !== \"string\"))\n ) {\n throw new Error(\"Audit trail export CLI artifactFiles must be an array of strings.\");\n }\n\n if (config.bundle !== undefined) {\n assertBundleConfig(config.bundle);\n }\n\n const outputs = config.outputs;\n\n if (\n outputs !== undefined &&\n (!outputs ||\n typeof outputs !== \"object\" ||\n Array.isArray(outputs) ||\n (outputs.json !== undefined && typeof outputs.json !== \"string\") ||\n (outputs.markdown !== undefined && typeof outputs.markdown !== \"string\"))\n ) {\n throw new Error(\"Audit trail export CLI outputs must contain string paths.\");\n }\n}\n\nfunction assertBundleConfig(value: unknown) {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new Error(\"Audit trail export CLI bundle config must be an object.\");\n }\n\n const bundle = value as Partial<ProbeMeshAuditTrailExportCliBundle>;\n\n if (bundle.bundleId !== undefined && typeof bundle.bundleId !== \"string\") {\n throw new Error(\"Audit trail export CLI bundleId must be a string.\");\n }\n\n if (bundle.generatedAt !== undefined && typeof bundle.generatedAt !== \"string\") {\n throw new Error(\"Audit trail export CLI generatedAt must be a string.\");\n }\n\n if (\n bundle.forbiddenOutputValues !== undefined &&\n (!Array.isArray(bundle.forbiddenOutputValues) ||\n bundle.forbiddenOutputValues.some((value) => typeof value !== \"string\"))\n ) {\n throw new Error(\n \"Audit trail export CLI forbiddenOutputValues must be an array of strings.\",\n );\n }\n\n if (\n bundle.format !== undefined &&\n bundle.format !== \"markdown\" &&\n bundle.format !== \"json\"\n ) {\n throw new Error(\"Audit trail export CLI bundle format must be markdown or json.\");\n }\n}\n\nasync function loadArtifacts(options: {\n cwd: string;\n inlineArtifacts?: ProbeMeshCallAuditArtifact[];\n artifactFiles?: string[];\n}) {\n const artifacts: ProbeMeshCallAuditArtifact[] = [\n ...(options.inlineArtifacts ?? []),\n ];\n\n for (const artifactFile of options.artifactFiles ?? []) {\n const loadedArtifacts = await loadArtifactFile(options.cwd, artifactFile);\n artifacts.push(...loadedArtifacts);\n }\n\n return artifacts;\n}\n\nasync function loadArtifactFile(cwd: string, artifactFile: string) {\n const artifactPath = resolve(cwd, artifactFile);\n const body = await readFile(artifactPath, \"utf8\");\n let parsed: unknown;\n\n try {\n parsed = JSON.parse(body);\n } catch (error) {\n throw new Error(\n `Invalid audit artifact JSON in \"${artifactFile}\": ${\n error instanceof Error ? error.message : \"parse failed\"\n }`,\n );\n }\n\n if (Array.isArray(parsed)) {\n return parsed as ProbeMeshCallAuditArtifact[];\n }\n\n if (parsed && typeof parsed === \"object\") {\n return [parsed as ProbeMeshCallAuditArtifact];\n }\n\n throw new Error(\n `Audit artifact file \"${artifactFile}\" must contain an artifact object or artifact array.`,\n );\n}\n\nasync function writeArtifacts(options: {\n cwd: string;\n bundle: ProbeMeshAuditTrailBundle;\n outputs: ProbeMeshAuditTrailExportCliOutputs;\n}) {\n const artifactPaths: ProbeMeshAuditTrailExportCliOutputs = {};\n\n if (options.outputs.json) {\n const outputPath = resolve(options.cwd, options.outputs.json);\n await writeArtifact(\n outputPath,\n formatProbeMeshAuditTrailBundle(options.bundle, {\n format: \"json\",\n }),\n );\n artifactPaths.json = outputPath;\n }\n\n if (options.outputs.markdown) {\n const outputPath = resolve(options.cwd, options.outputs.markdown);\n await writeArtifact(\n outputPath,\n formatProbeMeshAuditTrailBundle(options.bundle, {\n format: \"markdown\",\n }),\n );\n artifactPaths.markdown = outputPath;\n }\n\n return artifactPaths;\n}\n\nasync function writeArtifact(outputPath: string, body: string) {\n await mkdir(dirname(outputPath), {\n recursive: true,\n });\n await writeFile(outputPath, body, \"utf8\");\n}\n\nfunction cliFailure(message: string): ProbeMeshAuditTrailExportCliResult {\n return {\n exitCode: 2,\n skipped: false,\n stdout: \"\",\n stderr: `${message}\\n${USAGE}\\n`,\n };\n}\n","import { readFile } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\nexport async function loadCliConfigDefault(\n configPath: string,\n cwd: string,\n): Promise<unknown> {\n const resolvedPath = resolve(cwd, configPath);\n const moduleUrl = pathToFileURL(resolvedPath);\n\n try {\n const loadedModule = await import(/* @vite-ignore */ moduleUrl.href);\n return loadedModule.default;\n } catch (error) {\n return loadSelfContainedConfigFallback(resolvedPath, error);\n }\n}\n\nasync function loadSelfContainedConfigFallback(\n resolvedPath: string,\n importError: unknown,\n): Promise<unknown> {\n const source = await readFile(resolvedPath, \"utf8\");\n\n if (/\\bimport\\s/.test(source) || !/\\bexport\\s+default\\b/.test(source)) {\n throw importError;\n }\n\n const transformedSource = source.replace(\n /\\bexport\\s+default\\b/,\n \"const __probemeshDefault =\",\n );\n\n try {\n const factory = new Function(\n `${transformedSource}\\nreturn __probemeshDefault;`,\n ) as () => unknown;\n return factory();\n } catch {\n throw importError;\n }\n}\n","import { createHash } from \"node:crypto\";\n\nimport {\n assertProbeMeshCallAuditArtifact,\n validateProbeMeshCallAuditArtifact,\n} from \"./callAuditArtifact\";\nimport { ProbeMeshError } from \"./errors\";\nimport { redactX402Secrets } from \"./protocols/x402Redaction\";\nimport type {\n ProbeMeshCallAuditArtifact,\n} from \"./callAuditArtifact\";\n\nexport const PROBEMESH_AUDIT_TRAIL_BUNDLE_SCHEMA_VERSION =\n \"probemesh.audit-trail.v1\" as const;\n\nexport type ProbeMeshAuditTrailBundleStatus = \"complete\" | \"incomplete\";\n\nexport type ProbeMeshAuditTrailBundleFormat = \"json\" | \"markdown\";\n\nexport interface ProbeMeshAuditTrailBundleOptions {\n artifacts: ProbeMeshCallAuditArtifact[];\n generatedAt?: string;\n bundleId?: string;\n forbiddenOutputValues?: string[];\n}\n\nexport interface ProbeMeshAuditTrailBundleSummary {\n totalCalls: number;\n completedCalls: number;\n failedCalls: number;\n providers: string[];\n capabilities: string[];\n receiptTypes: string[];\n policyBundleIds: string[];\n unsafePaymentEvidenceCalls: number;\n retrySafeFailures: number;\n uncoveredPolicyFailures: number;\n}\n\nexport interface ProbeMeshAuditTrailBundleHashes {\n artifacts: string;\n summary: string;\n bundle: string;\n}\n\nexport interface ProbeMeshAuditTrailBundle {\n schemaVersion: typeof PROBEMESH_AUDIT_TRAIL_BUNDLE_SCHEMA_VERSION;\n bundleId: string;\n generatedAt: string;\n status: ProbeMeshAuditTrailBundleStatus;\n hashAlgorithm: \"sha256\";\n hashes: ProbeMeshAuditTrailBundleHashes;\n summary: ProbeMeshAuditTrailBundleSummary;\n artifacts: ProbeMeshCallAuditArtifact[];\n}\n\nexport interface ProbeMeshAuditTrailBundleValidationError {\n path: string;\n message: string;\n}\n\nexport interface ProbeMeshAuditTrailBundleValidationResult {\n valid: boolean;\n errors: ProbeMeshAuditTrailBundleValidationError[];\n}\n\nexport interface ProbeMeshAuditTrailCollector {\n onArtifact(artifact: ProbeMeshCallAuditArtifact): void;\n getArtifacts(): ProbeMeshCallAuditArtifact[];\n clear(): void;\n createBundle(\n options?: Omit<ProbeMeshAuditTrailBundleOptions, \"artifacts\">,\n ): ProbeMeshAuditTrailBundle;\n}\n\nexport function createProbeMeshAuditTrailCollector(): ProbeMeshAuditTrailCollector {\n const artifacts: ProbeMeshCallAuditArtifact[] = [];\n\n return {\n onArtifact(artifact) {\n assertProbeMeshCallAuditArtifact(artifact);\n artifacts.push(cloneSerializable(artifact));\n },\n getArtifacts() {\n return cloneSerializable(artifacts);\n },\n clear() {\n artifacts.length = 0;\n },\n createBundle(options = {}) {\n return createProbeMeshAuditTrailBundle({\n ...options,\n artifacts,\n });\n },\n };\n}\n\nexport function createProbeMeshAuditTrailBundle(\n options: ProbeMeshAuditTrailBundleOptions,\n): ProbeMeshAuditTrailBundle {\n assertBundleOptions(options);\n\n for (const [index, artifact] of options.artifacts.entries()) {\n const validation = validateProbeMeshCallAuditArtifact(artifact);\n\n if (!validation.valid) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `Invalid ProbeMesh call audit artifact at index ${index}: ${formatValidationErrors(\n validation.errors,\n )}`,\n });\n }\n }\n\n const artifacts = sanitizeBundleOutput(\n options.artifacts,\n options.forbiddenOutputValues ?? [],\n );\n const summary = summarizeArtifacts(artifacts);\n const hashesWithoutBundle: ProbeMeshAuditTrailBundleHashes = {\n artifacts: hashStableJson(artifacts),\n summary: hashStableJson(summary),\n bundle: \"\",\n };\n const bundleBase: ProbeMeshAuditTrailBundle = {\n schemaVersion: PROBEMESH_AUDIT_TRAIL_BUNDLE_SCHEMA_VERSION,\n bundleId:\n options.bundleId ??\n `audit_trail_${hashStableJson({\n artifacts: hashesWithoutBundle.artifacts,\n summary: hashesWithoutBundle.summary,\n }).slice(0, 16)}`,\n generatedAt: options.generatedAt ?? new Date().toISOString(),\n status: artifacts.length > 0 ? \"complete\" : \"incomplete\",\n hashAlgorithm: \"sha256\",\n hashes: hashesWithoutBundle,\n summary,\n artifacts,\n };\n const bundle: ProbeMeshAuditTrailBundle = {\n ...bundleBase,\n hashes: {\n ...hashesWithoutBundle,\n bundle: hashBundleContent(bundleBase),\n },\n };\n\n assertProbeMeshAuditTrailBundle(bundle);\n\n return bundle;\n}\n\nexport function summarizeProbeMeshAuditTrailBundle(\n bundleOrArtifacts: ProbeMeshAuditTrailBundle | ProbeMeshCallAuditArtifact[],\n): ProbeMeshAuditTrailBundleSummary {\n return Array.isArray(bundleOrArtifacts)\n ? summarizeArtifacts(bundleOrArtifacts)\n : cloneSerializable(bundleOrArtifacts.summary);\n}\n\nexport function validateProbeMeshAuditTrailBundle(\n bundle: unknown,\n): ProbeMeshAuditTrailBundleValidationResult {\n const errors: ProbeMeshAuditTrailBundleValidationError[] = [];\n\n if (!isRecord(bundle)) {\n return {\n valid: false,\n errors: [\n {\n path: \"$\",\n message: \"ProbeMesh audit trail bundle must be an object.\",\n },\n ],\n };\n }\n\n if (bundle.schemaVersion !== PROBEMESH_AUDIT_TRAIL_BUNDLE_SCHEMA_VERSION) {\n errors.push({\n path: \"schemaVersion\",\n message: `schemaVersion must be \"${PROBEMESH_AUDIT_TRAIL_BUNDLE_SCHEMA_VERSION}\".`,\n });\n }\n\n validateNonEmptyString(bundle.bundleId, \"bundleId\", errors);\n validateIsoTimestamp(bundle.generatedAt, \"generatedAt\", errors);\n\n if (bundle.status !== \"complete\" && bundle.status !== \"incomplete\") {\n errors.push({\n path: \"status\",\n message: 'status must be \"complete\" or \"incomplete\".',\n });\n }\n\n if (bundle.hashAlgorithm !== \"sha256\") {\n errors.push({\n path: \"hashAlgorithm\",\n message: 'hashAlgorithm must be \"sha256\".',\n });\n }\n\n validateHashes(bundle.hashes, errors);\n validateSummary(bundle.summary, errors);\n\n if (!Array.isArray(bundle.artifacts)) {\n errors.push({\n path: \"artifacts\",\n message: \"artifacts must be an array.\",\n });\n } else {\n bundle.artifacts.forEach((artifact, index) => {\n const validation = validateProbeMeshCallAuditArtifact(artifact);\n\n for (const artifactError of validation.errors) {\n errors.push({\n path: `artifacts.${index}.${artifactError.path}`,\n message: artifactError.message,\n });\n }\n });\n }\n\n if (errors.length === 0) {\n const typedBundle = bundle as unknown as ProbeMeshAuditTrailBundle;\n\n pushHashMismatch(\n errors,\n \"hashes.artifacts\",\n typedBundle.hashes.artifacts,\n hashStableJson(typedBundle.artifacts),\n );\n pushHashMismatch(\n errors,\n \"hashes.summary\",\n typedBundle.hashes.summary,\n hashStableJson(typedBundle.summary),\n );\n pushHashMismatch(\n errors,\n \"hashes.bundle\",\n typedBundle.hashes.bundle,\n hashBundleContent(typedBundle),\n );\n\n const expectedSummary = summarizeArtifacts(typedBundle.artifacts);\n\n if (stableStringify(typedBundle.summary) !== stableStringify(expectedSummary)) {\n errors.push({\n path: \"summary\",\n message: \"summary does not match bundle artifacts.\",\n });\n }\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n\nexport function assertProbeMeshAuditTrailBundle(\n bundle: unknown,\n): asserts bundle is ProbeMeshAuditTrailBundle {\n const result = validateProbeMeshAuditTrailBundle(bundle);\n\n if (result.valid) {\n return;\n }\n\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `Invalid ProbeMesh audit trail bundle: ${formatValidationErrors(\n result.errors,\n )}`,\n });\n}\n\nexport function formatProbeMeshAuditTrailBundle(\n bundle: ProbeMeshAuditTrailBundle,\n options: {\n format?: ProbeMeshAuditTrailBundleFormat;\n } = {},\n) {\n assertProbeMeshAuditTrailBundle(bundle);\n\n if ((options.format ?? \"json\") === \"markdown\") {\n return formatBundleMarkdown(bundle);\n }\n\n return JSON.stringify(bundle, null, 2);\n}\n\nfunction assertBundleOptions(\n options: ProbeMeshAuditTrailBundleOptions,\n): asserts options is ProbeMeshAuditTrailBundleOptions {\n if (!isRecord(options)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"ProbeMesh audit trail bundle options must be an object.\",\n });\n }\n\n if (!Array.isArray(options.artifacts)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"ProbeMesh audit trail bundle artifacts must be an array.\",\n });\n }\n\n if (\n options.generatedAt !== undefined &&\n (typeof options.generatedAt !== \"string\" ||\n Number.isNaN(Date.parse(options.generatedAt)))\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"ProbeMesh audit trail bundle generatedAt must be an ISO timestamp.\",\n });\n }\n\n if (\n options.bundleId !== undefined &&\n (typeof options.bundleId !== \"string\" || options.bundleId.length === 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"ProbeMesh audit trail bundleId must be a non-empty string.\",\n });\n }\n\n if (\n options.forbiddenOutputValues !== undefined &&\n (!Array.isArray(options.forbiddenOutputValues) ||\n options.forbiddenOutputValues.some((value) => typeof value !== \"string\"))\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"ProbeMesh audit trail bundle forbiddenOutputValues must be an array of strings.\",\n });\n }\n}\n\nfunction summarizeArtifacts(\n artifacts: ProbeMeshCallAuditArtifact[],\n): ProbeMeshAuditTrailBundleSummary {\n const providers: string[] = [];\n const capabilities: string[] = [];\n const receiptTypes: string[] = [];\n const policyBundleIds: string[] = [];\n let unsafePaymentEvidenceCalls = 0;\n let retrySafeFailures = 0;\n let uncoveredPolicyFailures = 0;\n\n for (const artifact of artifacts) {\n pushUnique(providers, artifact.call.providerId);\n pushUnique(capabilities, artifact.call.capability);\n\n for (const receiptType of artifact.evidence.receiptSummary.types) {\n pushUnique(receiptTypes, receiptType);\n }\n\n const attestationBundleId = artifact.evidence.route?.attestation?.bundleId;\n pushUnique(policyBundleIds, attestationBundleId);\n\n if (\n artifact.evidence.safety?.moneyMayHaveMoved === true ||\n artifact.evidence.receiptSummary.hasPaymentProof\n ) {\n unsafePaymentEvidenceCalls += 1;\n }\n\n if (\n artifact.status === \"failed\" &&\n artifact.evidence.retrySafety?.safeToAutoRetry === true\n ) {\n retrySafeFailures += 1;\n }\n\n if (\n artifact.status === \"failed\" &&\n artifact.evidence.route?.explanation?.attempts.some(\n (attempt) => attempt.reason === \"skipped_policy_bundle_uncovered\",\n ) === true\n ) {\n uncoveredPolicyFailures += 1;\n }\n }\n\n return {\n totalCalls: artifacts.length,\n completedCalls: artifacts.filter((artifact) => artifact.status === \"completed\")\n .length,\n failedCalls: artifacts.filter((artifact) => artifact.status === \"failed\")\n .length,\n providers,\n capabilities,\n receiptTypes,\n policyBundleIds,\n unsafePaymentEvidenceCalls,\n retrySafeFailures,\n uncoveredPolicyFailures,\n };\n}\n\nfunction validateHashes(\n hashes: unknown,\n errors: ProbeMeshAuditTrailBundleValidationError[],\n) {\n if (!isRecord(hashes)) {\n errors.push({\n path: \"hashes\",\n message: \"hashes must be an object.\",\n });\n return;\n }\n\n for (const key of [\"artifacts\", \"summary\", \"bundle\"]) {\n validateSha256String(hashes[key], `hashes.${key}`, errors);\n }\n}\n\nfunction validateSummary(\n summary: unknown,\n errors: ProbeMeshAuditTrailBundleValidationError[],\n) {\n if (!isRecord(summary)) {\n errors.push({\n path: \"summary\",\n message: \"summary must be an object.\",\n });\n return;\n }\n\n for (const key of [\n \"totalCalls\",\n \"completedCalls\",\n \"failedCalls\",\n \"unsafePaymentEvidenceCalls\",\n \"retrySafeFailures\",\n \"uncoveredPolicyFailures\",\n ]) {\n if (\n typeof summary[key] !== \"number\" ||\n !Number.isFinite(summary[key]) ||\n summary[key] < 0\n ) {\n errors.push({\n path: `summary.${key}`,\n message: `summary.${key} must be a non-negative finite number.`,\n });\n }\n }\n\n validateStringArray(summary.providers, \"summary.providers\", errors);\n validateStringArray(summary.capabilities, \"summary.capabilities\", errors);\n validateStringArray(summary.receiptTypes, \"summary.receiptTypes\", errors);\n validateStringArray(summary.policyBundleIds, \"summary.policyBundleIds\", errors);\n}\n\nfunction hashBundleContent(bundle: ProbeMeshAuditTrailBundle) {\n return hashStableJson({\n ...bundle,\n hashes: {\n ...bundle.hashes,\n bundle: \"\",\n },\n });\n}\n\nfunction pushHashMismatch(\n errors: ProbeMeshAuditTrailBundleValidationError[],\n path: string,\n expected: string,\n actual: string,\n) {\n if (expected === actual) {\n return;\n }\n\n errors.push({\n path,\n message: `${path} does not match bundle content.`,\n });\n}\n\nfunction hashStableJson(value: unknown) {\n return createHash(\"sha256\").update(stableStringify(value)).digest(\"hex\");\n}\n\nfunction stableStringify(value: unknown): string {\n return JSON.stringify(sortSerializable(value));\n}\n\nfunction sortSerializable(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(sortSerializable);\n }\n\n if (!isRecord(value)) {\n return value;\n }\n\n return Object.fromEntries(\n Object.keys(value)\n .sort()\n .filter((key) => value[key] !== undefined)\n .map((key) => [key, sortSerializable(value[key])]),\n );\n}\n\nfunction sanitizeBundleOutput<T>(value: T, forbiddenOutputValues: string[]) {\n const forbiddenValues = forbiddenOutputValues.filter((entry) => entry.length > 0);\n\n return redactX402Secrets(\n replaceForbiddenValues(cloneSerializable(value), forbiddenValues),\n ) as T;\n}\n\nfunction replaceForbiddenValues(\n value: unknown,\n forbiddenValues: string[],\n): unknown {\n if (typeof value === \"string\") {\n return forbiddenValues.reduce(\n (current, forbidden) => current.split(forbidden).join(\"[REDACTED]\"),\n value,\n );\n }\n\n if (value === null || typeof value !== \"object\" || value instanceof Date) {\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map((entry) => replaceForbiddenValues(entry, forbiddenValues));\n }\n\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [\n key,\n replaceForbiddenValues(entry, forbiddenValues),\n ]),\n );\n}\n\nfunction cloneSerializable<T>(value: T): T {\n if (value === undefined) {\n return value;\n }\n\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nfunction formatBundleMarkdown(bundle: ProbeMeshAuditTrailBundle) {\n return [\n `# ProbeMesh Audit Trail Bundle`,\n ``,\n `Status: ${bundle.status}`,\n `Schema: ${bundle.schemaVersion}`,\n `Bundle ID: ${bundle.bundleId}`,\n `Generated: ${bundle.generatedAt}`,\n ``,\n `## Summary`,\n `- Total calls: ${bundle.summary.totalCalls}`,\n `- Completed: ${bundle.summary.completedCalls}`,\n `- Failed: ${bundle.summary.failedCalls}`,\n `- Providers: ${formatInlineList(bundle.summary.providers)}`,\n `- Capabilities: ${formatInlineList(bundle.summary.capabilities)}`,\n `- Receipt types: ${formatInlineList(bundle.summary.receiptTypes)}`,\n `- Policy bundles: ${formatInlineList(bundle.summary.policyBundleIds)}`,\n `- Unsafe payment evidence calls: ${bundle.summary.unsafePaymentEvidenceCalls}`,\n `- Retry-safe failures: ${bundle.summary.retrySafeFailures}`,\n `- Uncovered policy failures: ${bundle.summary.uncoveredPolicyFailures}`,\n ``,\n `## Artifacts`,\n ...bundle.artifacts.map(\n (artifact) =>\n `- ${artifact.call.callId ?? artifact.artifactId}: ${artifact.status} / ${artifact.call.capability} / ${artifact.call.providerId ?? \"none\"}`,\n ),\n ``,\n `## Hashes`,\n `- Bundle: ${bundle.hashes.bundle}`,\n `- Artifacts: ${bundle.hashes.artifacts}`,\n `- Summary: ${bundle.hashes.summary}`,\n ].join(\"\\n\");\n}\n\nfunction formatInlineList(values: string[]) {\n return values.length === 0 ? \"none\" : values.join(\", \");\n}\n\nfunction pushUnique(values: string[], value: string | undefined) {\n if (value && !values.includes(value)) {\n values.push(value);\n }\n}\n\nfunction validateSha256String(\n value: unknown,\n path: string,\n errors: ProbeMeshAuditTrailBundleValidationError[],\n) {\n if (typeof value !== \"string\" || !/^[a-f0-9]{64}$/.test(value)) {\n errors.push({\n path,\n message: `${path} must be a sha256 hex string.`,\n });\n }\n}\n\nfunction validateNonEmptyString(\n value: unknown,\n path: string,\n errors: ProbeMeshAuditTrailBundleValidationError[],\n) {\n if (typeof value !== \"string\" || value.length === 0) {\n errors.push({\n path,\n message: `${path} must be a non-empty string.`,\n });\n }\n}\n\nfunction validateIsoTimestamp(\n value: unknown,\n path: string,\n errors: ProbeMeshAuditTrailBundleValidationError[],\n) {\n if (typeof value !== \"string\" || Number.isNaN(Date.parse(value))) {\n errors.push({\n path,\n message: `${path} must be an ISO timestamp.`,\n });\n }\n}\n\nfunction validateStringArray(\n value: unknown,\n path: string,\n errors: ProbeMeshAuditTrailBundleValidationError[],\n) {\n if (\n !Array.isArray(value) ||\n value.some((entry) => typeof entry !== \"string\" || entry.length === 0)\n ) {\n errors.push({\n path,\n message: `${path} must be an array of non-empty strings.`,\n });\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction formatValidationErrors(errors: Array<{ path: string; message: string }>) {\n return errors.map((error) => `${error.path}: ${error.message}`).join(\"; \");\n}\n","import { createHash } from \"node:crypto\";\n\nimport { ProbeMeshError, isProbeMeshError } from \"./errors\";\nimport { redactX402Secrets } from \"./protocols/x402Redaction\";\nimport type {\n CallStatus,\n Cost,\n ProbeMeshAttemptMetadata,\n ProbeMeshCallRequest,\n ProbeMeshCallResponse,\n ProbeMeshCallSafety,\n ProbeMeshCallTimeline,\n ProbeMeshErrorCode,\n ProbeMeshRetrySafety,\n ProbeMeshRouteMetadata,\n ProbeMeshTimelineEventType,\n ReceiptRef,\n} from \"./types\";\n\nexport const PROBEMESH_CALL_AUDIT_ARTIFACT_SCHEMA_VERSION =\n \"probemesh.call-audit.v1\" as const;\n\nexport type ProbeMeshCallAuditArtifactStatus = \"completed\" | \"failed\";\n\nexport type ProbeMeshCallAuditArtifactFormat = \"json\" | \"markdown\";\n\nexport interface ProbeMeshCallAuditArtifactOptions {\n request: ProbeMeshCallRequest;\n response?: ProbeMeshCallResponse;\n error?: ProbeMeshError;\n generatedAt?: string;\n artifactId?: string;\n forbiddenOutputValues?: string[];\n timeline?: ProbeMeshCallTimeline;\n retrySafety?: ProbeMeshRetrySafety;\n attempt?: ProbeMeshAttemptMetadata;\n route?: ProbeMeshRouteMetadata;\n}\n\nexport interface ProbeMeshCallAuditArtifactHashes {\n request: string;\n route: string;\n timeline: string;\n receipts: string;\n safety: string;\n retrySafety: string;\n artifact: string;\n}\n\nexport interface ProbeMeshCallAuditArtifactReceiptSummary {\n total: number;\n types: string[];\n providers: string[];\n byType: Record<string, number>;\n hasPaymentProof: boolean;\n hasSettlementConfirmation: boolean;\n hasProviderDelivery: boolean;\n}\n\nexport interface ProbeMeshCallAuditArtifactTimelineEvent {\n type: ProbeMeshTimelineEventType;\n timestamp: string;\n provider?: string;\n status?: CallStatus;\n errorCode?: ProbeMeshErrorCode;\n receiptType?: string;\n attestationBundleId?: string;\n}\n\nexport interface ProbeMeshCallAuditArtifactTimelineSummary {\n routeId?: string;\n eventTypes: ProbeMeshTimelineEventType[];\n events: ProbeMeshCallAuditArtifactTimelineEvent[];\n}\n\nexport interface ProbeMeshCallAuditArtifactCallSummary {\n callId?: string;\n capability: string;\n status: ProbeMeshCallAuditArtifactStatus;\n providerId?: string;\n errorCode?: ProbeMeshErrorCode;\n cost?: Cost;\n latencyMs?: number;\n attempt?: ProbeMeshAttemptMetadata;\n}\n\nexport interface ProbeMeshCallAuditArtifactRequestProof {\n requestHash: string;\n idempotencyKey?: string;\n}\n\nexport interface ProbeMeshCallAuditArtifactEvidence {\n receiptSummary: ProbeMeshCallAuditArtifactReceiptSummary;\n receiptRefs: ReceiptRef[];\n safety?: ProbeMeshCallSafety;\n retrySafety?: ProbeMeshRetrySafety;\n route?: ProbeMeshRouteMetadata;\n timeline: ProbeMeshCallAuditArtifactTimelineSummary;\n}\n\nexport interface ProbeMeshCallAuditArtifact {\n schemaVersion: typeof PROBEMESH_CALL_AUDIT_ARTIFACT_SCHEMA_VERSION;\n artifactId: string;\n generatedAt: string;\n status: ProbeMeshCallAuditArtifactStatus;\n hashAlgorithm: \"sha256\";\n hashes: ProbeMeshCallAuditArtifactHashes;\n call: ProbeMeshCallAuditArtifactCallSummary;\n request: ProbeMeshCallAuditArtifactRequestProof;\n evidence: ProbeMeshCallAuditArtifactEvidence;\n}\n\nexport interface ProbeMeshCallAuditArtifactValidationError {\n path: string;\n message: string;\n}\n\nexport interface ProbeMeshCallAuditArtifactValidationResult {\n valid: boolean;\n errors: ProbeMeshCallAuditArtifactValidationError[];\n}\n\nexport function createProbeMeshCallAuditArtifact(\n options: ProbeMeshCallAuditArtifactOptions,\n): ProbeMeshCallAuditArtifact {\n assertAuditArtifactOptions(options);\n\n const requestHash = hashStableJson(options.request);\n const status: ProbeMeshCallAuditArtifactStatus = options.response\n ? \"completed\"\n : \"failed\";\n const callId = options.response?.callId ?? options.error?.callId;\n const capability =\n options.response?.capability ?? options.error?.capability ?? options.request.capability;\n const receiptRefs = cloneSerializable(\n options.response?.receiptRefs ?? options.error?.receiptRefs ?? [],\n );\n const safety = cloneSerializable(\n options.response?.safety ?? options.error?.safety,\n );\n const retrySafety = cloneSerializable(\n options.retrySafety ??\n options.response?.retrySafety ??\n options.error?.retrySafety,\n );\n const attempt = cloneSerializable(\n options.attempt ?? options.response?.attempt ?? options.error?.attempt,\n );\n const route = cloneSerializable(\n options.route ?? options.response?.route ?? options.error?.route,\n );\n const timeline = cloneSerializable(\n options.timeline ?? options.response?.timeline ?? options.error?.timeline,\n );\n const timelineSummary = summarizeTimeline(timeline);\n const baseContent = sanitizeAuditOutput(\n {\n schemaVersion: PROBEMESH_CALL_AUDIT_ARTIFACT_SCHEMA_VERSION,\n artifactId:\n options.artifactId ??\n `call_audit_${callId ?? requestHash.slice(0, 16)}`,\n generatedAt: options.generatedAt ?? new Date().toISOString(),\n status,\n hashAlgorithm: \"sha256\" as const,\n call: {\n callId,\n capability,\n status,\n providerId: options.response?.provider.id ?? options.error?.provider,\n errorCode: options.error?.code,\n cost: cloneSerializable(options.response?.cost),\n latencyMs: options.response?.latencyMs,\n attempt,\n },\n request: {\n requestHash,\n idempotencyKey: options.request.idempotencyKey,\n },\n evidence: {\n receiptSummary: summarizeAuditReceipts(receiptRefs),\n receiptRefs,\n safety,\n retrySafety,\n route,\n timeline: timelineSummary,\n },\n },\n options.forbiddenOutputValues ?? [],\n );\n const hashesWithoutArtifact: ProbeMeshCallAuditArtifactHashes = {\n request: requestHash,\n route: hashStableJson(baseContent.evidence.route ?? null),\n timeline: hashStableJson(baseContent.evidence.timeline),\n receipts: hashStableJson(baseContent.evidence.receiptRefs),\n safety: hashStableJson(baseContent.evidence.safety ?? null),\n retrySafety: hashStableJson(baseContent.evidence.retrySafety ?? null),\n artifact: \"\",\n };\n const artifact: ProbeMeshCallAuditArtifact = {\n ...baseContent,\n hashes: {\n ...hashesWithoutArtifact,\n artifact: hashArtifactContent({\n ...baseContent,\n hashes: hashesWithoutArtifact,\n }),\n },\n };\n\n assertProbeMeshCallAuditArtifact(artifact);\n\n return artifact;\n}\n\nexport function validateProbeMeshCallAuditArtifact(\n artifact: unknown,\n): ProbeMeshCallAuditArtifactValidationResult {\n const errors: ProbeMeshCallAuditArtifactValidationError[] = [];\n\n if (!isRecord(artifact)) {\n return {\n valid: false,\n errors: [\n {\n path: \"$\",\n message: \"ProbeMesh call audit artifact must be an object.\",\n },\n ],\n };\n }\n\n if (artifact.schemaVersion !== PROBEMESH_CALL_AUDIT_ARTIFACT_SCHEMA_VERSION) {\n errors.push({\n path: \"schemaVersion\",\n message: `schemaVersion must be \"${PROBEMESH_CALL_AUDIT_ARTIFACT_SCHEMA_VERSION}\".`,\n });\n }\n\n validateNonEmptyString(artifact.artifactId, \"artifactId\", errors);\n validateIsoTimestamp(artifact.generatedAt, \"generatedAt\", errors);\n\n if (artifact.status !== \"completed\" && artifact.status !== \"failed\") {\n errors.push({\n path: \"status\",\n message: 'status must be \"completed\" or \"failed\".',\n });\n }\n\n if (artifact.hashAlgorithm !== \"sha256\") {\n errors.push({\n path: \"hashAlgorithm\",\n message: 'hashAlgorithm must be \"sha256\".',\n });\n }\n\n validateHashes(artifact.hashes, errors);\n validateCallSummary(artifact.call, artifact.status, errors);\n validateRequestProof(artifact.request, artifact.hashes, errors);\n validateEvidence(artifact.evidence, errors);\n\n if (errors.length === 0) {\n const typedArtifact = artifact as unknown as ProbeMeshCallAuditArtifact;\n\n pushHashMismatch(\n errors,\n \"hashes.route\",\n typedArtifact.hashes.route,\n hashStableJson(typedArtifact.evidence.route ?? null),\n );\n pushHashMismatch(\n errors,\n \"hashes.timeline\",\n typedArtifact.hashes.timeline,\n hashStableJson(typedArtifact.evidence.timeline),\n );\n pushHashMismatch(\n errors,\n \"hashes.receipts\",\n typedArtifact.hashes.receipts,\n hashStableJson(typedArtifact.evidence.receiptRefs),\n );\n pushHashMismatch(\n errors,\n \"hashes.safety\",\n typedArtifact.hashes.safety,\n hashStableJson(typedArtifact.evidence.safety ?? null),\n );\n pushHashMismatch(\n errors,\n \"hashes.retrySafety\",\n typedArtifact.hashes.retrySafety,\n hashStableJson(typedArtifact.evidence.retrySafety ?? null),\n );\n pushHashMismatch(\n errors,\n \"hashes.artifact\",\n typedArtifact.hashes.artifact,\n hashArtifactContent(typedArtifact),\n );\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n\nexport function assertProbeMeshCallAuditArtifact(\n artifact: unknown,\n): asserts artifact is ProbeMeshCallAuditArtifact {\n const result = validateProbeMeshCallAuditArtifact(artifact);\n\n if (result.valid) {\n return;\n }\n\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: `Invalid ProbeMesh call audit artifact: ${formatValidationErrors(\n result.errors,\n )}`,\n });\n}\n\nexport function formatProbeMeshCallAuditArtifact(\n artifact: ProbeMeshCallAuditArtifact,\n options: {\n format?: ProbeMeshCallAuditArtifactFormat;\n } = {},\n) {\n assertProbeMeshCallAuditArtifact(artifact);\n\n if ((options.format ?? \"json\") === \"markdown\") {\n return formatAuditArtifactMarkdown(artifact);\n }\n\n return JSON.stringify(artifact, null, 2);\n}\n\nfunction assertAuditArtifactOptions(\n options: ProbeMeshCallAuditArtifactOptions,\n): asserts options is ProbeMeshCallAuditArtifactOptions {\n if (!isRecord(options)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"ProbeMesh call audit artifact options must be an object.\",\n });\n }\n\n if (!isRecord(options.request)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"ProbeMesh call audit artifact request must be an object.\",\n });\n }\n\n if (\n typeof options.request.capability !== \"string\" ||\n options.request.capability.length === 0\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"ProbeMesh call audit artifact request capability is required.\",\n });\n }\n\n if (!(\"input\" in options.request)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"ProbeMesh call audit artifact request input is required for hashing.\",\n });\n }\n\n if (\n (options.response === undefined && options.error === undefined) ||\n (options.response !== undefined && options.error !== undefined)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"ProbeMesh call audit artifact requires exactly one response or error.\",\n });\n }\n\n if (options.error !== undefined && !isProbeMeshError(options.error)) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"ProbeMesh call audit artifact error must be a ProbeMeshError.\",\n });\n }\n\n if (\n options.generatedAt !== undefined &&\n (typeof options.generatedAt !== \"string\" ||\n Number.isNaN(Date.parse(options.generatedAt)))\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"ProbeMesh call audit artifact generatedAt must be an ISO timestamp.\",\n });\n }\n\n if (\n options.artifactId !== undefined &&\n (typeof options.artifactId !== \"string\" || options.artifactId.length === 0)\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message: \"ProbeMesh call audit artifact artifactId must be a non-empty string.\",\n });\n }\n\n if (\n options.forbiddenOutputValues !== undefined &&\n (!Array.isArray(options.forbiddenOutputValues) ||\n options.forbiddenOutputValues.some((value) => typeof value !== \"string\"))\n ) {\n throw new ProbeMeshError({\n code: \"invalid_request\",\n message:\n \"ProbeMesh call audit artifact forbiddenOutputValues must be an array of strings.\",\n });\n }\n}\n\nfunction summarizeAuditReceipts(\n receiptRefs: ReceiptRef[],\n): ProbeMeshCallAuditArtifactReceiptSummary {\n const types: string[] = [];\n const providers: string[] = [];\n const byType: Record<string, number> = {};\n\n for (const receiptRef of receiptRefs) {\n if (!types.includes(receiptRef.type)) {\n types.push(receiptRef.type);\n }\n\n if (!providers.includes(receiptRef.provider)) {\n providers.push(receiptRef.provider);\n }\n\n byType[receiptRef.type] = (byType[receiptRef.type] ?? 0) + 1;\n }\n\n return {\n total: receiptRefs.length,\n types,\n providers,\n byType,\n hasPaymentProof: receiptRefs.some(\n (receiptRef) => receiptRef.type === \"payment_proof\",\n ),\n hasSettlementConfirmation: receiptRefs.some(\n (receiptRef) => receiptRef.type === \"settlement_confirmation\",\n ),\n hasProviderDelivery: receiptRefs.some(\n (receiptRef) => receiptRef.type === \"provider_delivery\",\n ),\n };\n}\n\nfunction summarizeTimeline(\n timeline: ProbeMeshCallTimeline | undefined,\n): ProbeMeshCallAuditArtifactTimelineSummary {\n if (!timeline) {\n return {\n eventTypes: [],\n events: [],\n };\n }\n\n return {\n routeId: timeline.routeId,\n eventTypes: timeline.events.map((event) => event.type),\n events: timeline.events.map((event) => ({\n type: event.type,\n timestamp: event.timestamp,\n provider: event.provider,\n status: event.status,\n errorCode: event.errorCode,\n receiptType: event.receiptRef?.type,\n attestationBundleId: event.attestation?.bundleId,\n })),\n };\n}\n\nfunction validateHashes(\n hashes: unknown,\n errors: ProbeMeshCallAuditArtifactValidationError[],\n) {\n if (!isRecord(hashes)) {\n errors.push({\n path: \"hashes\",\n message: \"hashes must be an object.\",\n });\n return;\n }\n\n for (const key of [\n \"request\",\n \"route\",\n \"timeline\",\n \"receipts\",\n \"safety\",\n \"retrySafety\",\n \"artifact\",\n ]) {\n validateSha256String(hashes[key], `hashes.${key}`, errors);\n }\n}\n\nfunction validateCallSummary(\n call: unknown,\n status: unknown,\n errors: ProbeMeshCallAuditArtifactValidationError[],\n) {\n if (!isRecord(call)) {\n errors.push({\n path: \"call\",\n message: \"call must be an object.\",\n });\n return;\n }\n\n validateNonEmptyString(call.capability, \"call.capability\", errors);\n\n if (call.status !== status) {\n errors.push({\n path: \"call.status\",\n message: \"call.status must match artifact status.\",\n });\n }\n\n if (call.callId !== undefined) {\n validateNonEmptyString(call.callId, \"call.callId\", errors);\n }\n\n if (call.providerId !== undefined) {\n validateNonEmptyString(call.providerId, \"call.providerId\", errors);\n }\n\n if (\n call.errorCode !== undefined &&\n (typeof call.errorCode !== \"string\" || call.errorCode.length === 0)\n ) {\n errors.push({\n path: \"call.errorCode\",\n message: \"call.errorCode must be a non-empty string when provided.\",\n });\n }\n\n if (\n call.latencyMs !== undefined &&\n (typeof call.latencyMs !== \"number\" ||\n !Number.isFinite(call.latencyMs) ||\n call.latencyMs < 0)\n ) {\n errors.push({\n path: \"call.latencyMs\",\n message: \"call.latencyMs must be a non-negative finite number.\",\n });\n }\n}\n\nfunction validateRequestProof(\n request: unknown,\n hashes: unknown,\n errors: ProbeMeshCallAuditArtifactValidationError[],\n) {\n if (!isRecord(request)) {\n errors.push({\n path: \"request\",\n message: \"request must be an object.\",\n });\n return;\n }\n\n validateSha256String(request.requestHash, \"request.requestHash\", errors);\n\n if (isRecord(hashes) && hashes.request !== request.requestHash) {\n errors.push({\n path: \"hashes.request\",\n message: \"hashes.request must equal request.requestHash.\",\n });\n }\n\n if (request.idempotencyKey !== undefined) {\n validateNonEmptyString(\n request.idempotencyKey,\n \"request.idempotencyKey\",\n errors,\n );\n }\n}\n\nfunction validateEvidence(\n evidence: unknown,\n errors: ProbeMeshCallAuditArtifactValidationError[],\n) {\n if (!isRecord(evidence)) {\n errors.push({\n path: \"evidence\",\n message: \"evidence must be an object.\",\n });\n return;\n }\n\n validateReceiptSummary(evidence.receiptSummary, errors);\n validateReceiptRefs(evidence.receiptRefs, errors);\n validateTimelineSummary(evidence.timeline, errors);\n}\n\nfunction validateReceiptSummary(\n summary: unknown,\n errors: ProbeMeshCallAuditArtifactValidationError[],\n) {\n if (!isRecord(summary)) {\n errors.push({\n path: \"evidence.receiptSummary\",\n message: \"evidence.receiptSummary must be an object.\",\n });\n return;\n }\n\n if (typeof summary.total !== \"number\" || !Number.isFinite(summary.total)) {\n errors.push({\n path: \"evidence.receiptSummary.total\",\n message: \"evidence.receiptSummary.total must be a number.\",\n });\n }\n\n validateStringArray(summary.types, \"evidence.receiptSummary.types\", errors);\n validateStringArray(\n summary.providers,\n \"evidence.receiptSummary.providers\",\n errors,\n );\n\n if (!isRecord(summary.byType)) {\n errors.push({\n path: \"evidence.receiptSummary.byType\",\n message: \"evidence.receiptSummary.byType must be an object.\",\n });\n }\n\n for (const key of [\n \"hasPaymentProof\",\n \"hasSettlementConfirmation\",\n \"hasProviderDelivery\",\n ]) {\n if (typeof summary[key] !== \"boolean\") {\n errors.push({\n path: `evidence.receiptSummary.${key}`,\n message: `evidence.receiptSummary.${key} must be a boolean.`,\n });\n }\n }\n}\n\nfunction validateReceiptRefs(\n receiptRefs: unknown,\n errors: ProbeMeshCallAuditArtifactValidationError[],\n) {\n if (!Array.isArray(receiptRefs)) {\n errors.push({\n path: \"evidence.receiptRefs\",\n message: \"evidence.receiptRefs must be an array.\",\n });\n return;\n }\n\n receiptRefs.forEach((receiptRef, index) => {\n if (!isRecord(receiptRef)) {\n errors.push({\n path: `evidence.receiptRefs.${index}`,\n message: \"receipt ref must be an object.\",\n });\n return;\n }\n\n for (const key of [\"type\", \"provider\", \"status\", \"ref\", \"timestamp\"]) {\n validateNonEmptyString(\n receiptRef[key],\n `evidence.receiptRefs.${index}.${key}`,\n errors,\n );\n }\n });\n}\n\nfunction validateTimelineSummary(\n timeline: unknown,\n errors: ProbeMeshCallAuditArtifactValidationError[],\n) {\n if (!isRecord(timeline)) {\n errors.push({\n path: \"evidence.timeline\",\n message: \"evidence.timeline must be an object.\",\n });\n return;\n }\n\n if (timeline.routeId !== undefined) {\n validateNonEmptyString(timeline.routeId, \"evidence.timeline.routeId\", errors);\n }\n\n validateStringArray(\n timeline.eventTypes,\n \"evidence.timeline.eventTypes\",\n errors,\n );\n\n if (!Array.isArray(timeline.events)) {\n errors.push({\n path: \"evidence.timeline.events\",\n message: \"evidence.timeline.events must be an array.\",\n });\n return;\n }\n\n timeline.events.forEach((event, index) => {\n if (!isRecord(event)) {\n errors.push({\n path: `evidence.timeline.events.${index}`,\n message: \"timeline event must be an object.\",\n });\n return;\n }\n\n validateNonEmptyString(\n event.type,\n `evidence.timeline.events.${index}.type`,\n errors,\n );\n validateIsoTimestamp(\n event.timestamp,\n `evidence.timeline.events.${index}.timestamp`,\n errors,\n );\n });\n}\n\nfunction hashArtifactContent(artifact: ProbeMeshCallAuditArtifact) {\n return hashStableJson({\n ...artifact,\n hashes: {\n ...artifact.hashes,\n artifact: \"\",\n },\n });\n}\n\nfunction pushHashMismatch(\n errors: ProbeMeshCallAuditArtifactValidationError[],\n path: string,\n expected: string,\n actual: string,\n) {\n if (expected === actual) {\n return;\n }\n\n errors.push({\n path,\n message: `${path} does not match artifact content.`,\n });\n}\n\nfunction hashStableJson(value: unknown) {\n return createHash(\"sha256\").update(stableStringify(value)).digest(\"hex\");\n}\n\nfunction stableStringify(value: unknown): string {\n return JSON.stringify(sortSerializable(value));\n}\n\nfunction sortSerializable(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(sortSerializable);\n }\n\n if (!isRecord(value)) {\n return value;\n }\n\n return Object.fromEntries(\n Object.keys(value)\n .sort()\n .filter((key) => value[key] !== undefined)\n .map((key) => [key, sortSerializable(value[key])]),\n );\n}\n\nfunction sanitizeAuditOutput<T>(value: T, forbiddenOutputValues: string[]) {\n const forbiddenValues = forbiddenOutputValues.filter((entry) => entry.length > 0);\n\n return redactX402Secrets(\n replaceForbiddenValues(cloneSerializable(value), forbiddenValues),\n ) as T;\n}\n\nfunction replaceForbiddenValues(\n value: unknown,\n forbiddenValues: string[],\n): unknown {\n if (typeof value === \"string\") {\n return forbiddenValues.reduce(\n (current, forbidden) => current.split(forbidden).join(\"[REDACTED]\"),\n value,\n );\n }\n\n if (value === null || typeof value !== \"object\" || value instanceof Date) {\n return value;\n }\n\n if (Array.isArray(value)) {\n return value.map((entry) => replaceForbiddenValues(entry, forbiddenValues));\n }\n\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [\n key,\n replaceForbiddenValues(entry, forbiddenValues),\n ]),\n );\n}\n\nfunction cloneSerializable<T>(value: T): T {\n if (value === undefined) {\n return value;\n }\n\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nfunction formatAuditArtifactMarkdown(artifact: ProbeMeshCallAuditArtifact) {\n const attestation = artifact.evidence.route?.attestation;\n\n return [\n `# ProbeMesh Call Audit Artifact`,\n ``,\n `Status: ${artifact.status}`,\n `Schema: ${artifact.schemaVersion}`,\n `Artifact ID: ${artifact.artifactId}`,\n `Generated: ${artifact.generatedAt}`,\n ``,\n `## Call`,\n `- Call ID: ${artifact.call.callId ?? \"none\"}`,\n `- Capability: ${artifact.call.capability}`,\n `- Provider: ${artifact.call.providerId ?? \"none\"}`,\n `- Error code: ${artifact.call.errorCode ?? \"none\"}`,\n `- Cost USD: ${artifact.call.cost?.amountUsd ?? \"none\"}`,\n `- Request hash: ${artifact.request.requestHash}`,\n ``,\n `## Evidence`,\n `- Receipts: ${artifact.evidence.receiptSummary.total}`,\n `- Receipt types: ${formatInlineList(artifact.evidence.receiptSummary.types)}`,\n `- Payment proof: ${String(artifact.evidence.receiptSummary.hasPaymentProof)}`,\n `- Settlement confirmation: ${String(\n artifact.evidence.receiptSummary.hasSettlementConfirmation,\n )}`,\n `- Provider delivery: ${String(\n artifact.evidence.receiptSummary.hasProviderDelivery,\n )}`,\n `- Money may have moved: ${String(\n artifact.evidence.safety?.moneyMayHaveMoved ?? false,\n )}`,\n `- Retry safe: ${String(\n artifact.evidence.retrySafety?.safeToAutoRetry ?? false,\n )}`,\n `- Route stop: ${\n artifact.evidence.route?.explanation?.stopReason ?? \"none\"\n }`,\n `- Bundle: ${attestation?.bundleId ?? \"none\"}`,\n `- Bundle verified: ${String(attestation?.runtimeVerified ?? false)}`,\n `- Timeline events: ${formatInlineList(\n artifact.evidence.timeline.eventTypes,\n )}`,\n ``,\n `## Hashes`,\n `- Artifact: ${artifact.hashes.artifact}`,\n `- Route: ${artifact.hashes.route}`,\n `- Timeline: ${artifact.hashes.timeline}`,\n `- Receipts: ${artifact.hashes.receipts}`,\n ].join(\"\\n\");\n}\n\nfunction formatInlineList(values: string[]) {\n return values.length === 0 ? \"none\" : values.join(\", \");\n}\n\nfunction validateSha256String(\n value: unknown,\n path: string,\n errors: ProbeMeshCallAuditArtifactValidationError[],\n) {\n if (typeof value !== \"string\" || !/^[a-f0-9]{64}$/.test(value)) {\n errors.push({\n path,\n message: `${path} must be a sha256 hex string.`,\n });\n }\n}\n\nfunction validateNonEmptyString(\n value: unknown,\n path: string,\n errors: ProbeMeshCallAuditArtifactValidationError[],\n) {\n if (typeof value !== \"string\" || value.length === 0) {\n errors.push({\n path,\n message: `${path} must be a non-empty string.`,\n });\n }\n}\n\nfunction validateIsoTimestamp(\n value: unknown,\n path: string,\n errors: ProbeMeshCallAuditArtifactValidationError[],\n) {\n if (typeof value !== \"string\" || Number.isNaN(Date.parse(value))) {\n errors.push({\n path,\n message: `${path} must be an ISO timestamp.`,\n });\n }\n}\n\nfunction validateStringArray(\n value: unknown,\n path: string,\n errors: ProbeMeshCallAuditArtifactValidationError[],\n) {\n if (\n !Array.isArray(value) ||\n value.some((entry) => typeof entry !== \"string\" || entry.length === 0)\n ) {\n errors.push({\n path,\n message: `${path} must be an array of non-empty strings.`,\n });\n }\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction formatValidationErrors(errors: ProbeMeshCallAuditArtifactValidationError[]) {\n return errors.map((error) => `${error.path}: ${error.message}`).join(\"; \");\n}\n","import type {\n CallStatus,\n ProbeMeshAttemptMetadata,\n ProbeMeshCallTimeline,\n ProbeMeshCallSafety,\n ProbeMeshErrorCode,\n ProbeMeshRetrySafety,\n ProbeMeshRouteMetadata,\n ReceiptRef,\n} from \"./types\";\n\nexport interface ProbeMeshErrorOptions {\n code: ProbeMeshErrorCode;\n message: string;\n capability?: string;\n provider?: string;\n callId?: string;\n receiptRefs?: ReceiptRef[];\n safety?: ProbeMeshCallSafety;\n timeline?: ProbeMeshCallTimeline;\n retrySafety?: ProbeMeshRetrySafety;\n attempt?: ProbeMeshAttemptMetadata;\n route?: ProbeMeshRouteMetadata;\n cause?: unknown;\n}\n\nexport class ProbeMeshError extends Error {\n readonly code: ProbeMeshErrorCode;\n readonly status: CallStatus = \"failed\";\n readonly capability?: string;\n readonly provider?: string;\n readonly callId?: string;\n readonly receiptRefs?: ReceiptRef[];\n readonly safety?: ProbeMeshCallSafety;\n readonly timeline?: ProbeMeshCallTimeline;\n readonly retrySafety?: ProbeMeshRetrySafety;\n readonly attempt?: ProbeMeshAttemptMetadata;\n readonly route?: ProbeMeshRouteMetadata;\n readonly cause?: unknown;\n\n constructor(options: ProbeMeshErrorOptions) {\n super(options.message);\n this.name = \"ProbeMeshError\";\n this.code = options.code;\n this.capability = options.capability;\n this.provider = options.provider;\n this.callId = options.callId;\n this.receiptRefs = options.receiptRefs;\n this.safety = options.safety;\n this.timeline = options.timeline;\n this.retrySafety = options.retrySafety;\n this.attempt = options.attempt;\n this.route = options.route;\n this.cause = options.cause;\n }\n\n toJSON() {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n status: this.status,\n capability: this.capability,\n provider: this.provider,\n callId: this.callId,\n receiptRefs: this.receiptRefs,\n safety: this.safety,\n timeline: this.timeline,\n retrySafety: this.retrySafety,\n attempt: this.attempt,\n route: this.route,\n };\n }\n}\n\nexport function isProbeMeshError(error: unknown): error is ProbeMeshError {\n return error instanceof ProbeMeshError;\n}\n","export interface X402SecretRedactionOptions {\n replacement?: string;\n maxDepth?: number;\n}\n\nconst DEFAULT_REPLACEMENT = \"[REDACTED]\";\nconst DEFAULT_MAX_DEPTH = 12;\nconst PRIVATE_KEY_PATTERN = /\\b0x[a-fA-F0-9]{64}\\b/g;\nconst HEX_SIGNATURE_PATTERN = /\\b0x[a-fA-F0-9]{130}\\b/g;\nconst SECRET_FIELD_NAMES = new Set([\n \"api-key\",\n \"apikey\",\n \"authorization\",\n \"bearer\",\n \"payment-required\",\n \"payment-response\",\n \"payment-signature\",\n \"privatekey\",\n \"signature\",\n \"x-api-key\",\n]);\n\nexport function redactX402Secrets<T>(\n value: T,\n options: X402SecretRedactionOptions = {},\n): T {\n const replacement = options.replacement ?? DEFAULT_REPLACEMENT;\n const maxDepth = options.maxDepth ?? DEFAULT_MAX_DEPTH;\n const seen = new WeakSet<object>();\n\n return redactValue(value, {\n replacement,\n maxDepth,\n depth: 0,\n seen,\n key: undefined,\n }) as T;\n}\n\nfunction redactValue(\n value: unknown,\n context: {\n replacement: string;\n maxDepth: number;\n depth: number;\n seen: WeakSet<object>;\n key: string | undefined;\n },\n): unknown {\n if (context.key && shouldRedactKey(context.key)) {\n return context.replacement;\n }\n\n if (typeof value === \"string\") {\n return redactString(value, context.replacement);\n }\n\n if (\n value === null ||\n typeof value !== \"object\" ||\n value instanceof Date\n ) {\n return value;\n }\n\n if (context.depth >= context.maxDepth) {\n return \"[MaxDepth]\";\n }\n\n if (context.seen.has(value)) {\n return \"[Circular]\";\n }\n\n context.seen.add(value);\n\n if (Array.isArray(value)) {\n return value.map((entry) =>\n redactValue(entry, {\n ...context,\n depth: context.depth + 1,\n key: undefined,\n }),\n );\n }\n\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [\n key,\n redactValue(entry, {\n ...context,\n depth: context.depth + 1,\n key,\n }),\n ]),\n );\n}\n\nfunction shouldRedactKey(key: string) {\n const normalized = key.toLowerCase().replace(/_/g, \"-\");\n\n return (\n SECRET_FIELD_NAMES.has(normalized) ||\n normalized.includes(\"private-key\") ||\n normalized.includes(\"privatekey\") ||\n normalized.includes(\"payment-signature\") ||\n normalized.includes(\"payment-response\") ||\n normalized.includes(\"payment-required\") ||\n normalized.includes(\"api-key\")\n );\n}\n\nfunction redactString(value: string, replacement: string) {\n return value\n .replace(PRIVATE_KEY_PATTERN, replacement)\n .replace(HEX_SIGNATURE_PATTERN, replacement);\n}\n","#!/usr/bin/env node\nimport { runProbeMeshAuditTrailExportCli } from \"./auditTrailExportCli\";\n\nvoid main();\n\nasync function main() {\n const result = await runProbeMeshAuditTrailExportCli({\n argv: process.argv.slice(2),\n cwd: process.cwd(),\n });\n\n if (result.stdout) {\n process.stdout.write(result.stdout);\n }\n\n if (result.stderr) {\n process.stderr.write(result.stderr);\n }\n\n process.exitCode = result.exitCode;\n}\n"],"mappings":"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","names":["import_promises","import_node_path","import_node_crypto","hashStableJson","isRecord","validateNonEmptyString","validateIsoTimestamp","validateHashes","pushHashMismatch","hashStableJson","stableStringify","validateSha256String","validateStringArray","sortSerializable","value"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
runProbeMeshAuditTrailExportCli
|
|
4
|
+
} from "../chunk-HNBDX7IU.js";
|
|
5
|
+
import "../chunk-5Q3PDYIA.js";
|
|
6
|
+
import "../chunk-NYTV263W.js";
|
|
7
|
+
import "../chunk-2ASMVLG4.js";
|
|
8
|
+
|
|
9
|
+
// src/cli/audit-trail-export.ts
|
|
10
|
+
void main();
|
|
11
|
+
async function main() {
|
|
12
|
+
const result = await runProbeMeshAuditTrailExportCli({
|
|
13
|
+
argv: process.argv.slice(2),
|
|
14
|
+
cwd: process.cwd()
|
|
15
|
+
});
|
|
16
|
+
if (result.stdout) {
|
|
17
|
+
process.stdout.write(result.stdout);
|
|
18
|
+
}
|
|
19
|
+
if (result.stderr) {
|
|
20
|
+
process.stderr.write(result.stderr);
|
|
21
|
+
}
|
|
22
|
+
process.exitCode = result.exitCode;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=audit-trail-export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cli/audit-trail-export.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { runProbeMeshAuditTrailExportCli } from \"./auditTrailExportCli\";\n\nvoid main();\n\nasync function main() {\n const result = await runProbeMeshAuditTrailExportCli({\n argv: process.argv.slice(2),\n cwd: process.cwd(),\n });\n\n if (result.stdout) {\n process.stdout.write(result.stdout);\n }\n\n if (result.stderr) {\n process.stderr.write(result.stderr);\n }\n\n process.exitCode = result.exitCode;\n}\n"],"mappings":";;;;;;;;;AAGA,KAAK,KAAK;AAEV,eAAe,OAAO;AACpB,QAAM,SAAS,MAAM,gCAAgC;AAAA,IACnD,MAAM,QAAQ,KAAK,MAAM,CAAC;AAAA,IAC1B,KAAK,QAAQ,IAAI;AAAA,EACnB,CAAC;AAED,MAAI,OAAO,QAAQ;AACjB,YAAQ,OAAO,MAAM,OAAO,MAAM;AAAA,EACpC;AAEA,MAAI,OAAO,QAAQ;AACjB,YAAQ,OAAO,MAAM,OAAO,MAAM;AAAA,EACpC;AAEA,UAAQ,WAAW,OAAO;AAC5B;","names":[]}
|