@appforge-ci/core 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/dist/agent-readiness.d.ts +11 -3
  2. package/dist/agent-readiness.d.ts.map +1 -1
  3. package/dist/agent-readiness.js +15 -5
  4. package/dist/agent-readiness.js.map +1 -1
  5. package/dist/agent-readiness.test.js +34 -10
  6. package/dist/agent-readiness.test.js.map +1 -1
  7. package/dist/api-client.d.ts +39 -1
  8. package/dist/api-client.d.ts.map +1 -1
  9. package/dist/api-client.js +52 -0
  10. package/dist/api-client.js.map +1 -1
  11. package/dist/appforge-verify.test.d.ts +2 -0
  12. package/dist/appforge-verify.test.d.ts.map +1 -0
  13. package/dist/appforge-verify.test.js +958 -0
  14. package/dist/appforge-verify.test.js.map +1 -0
  15. package/dist/attestation-keys.d.ts +20 -0
  16. package/dist/attestation-keys.d.ts.map +1 -0
  17. package/dist/attestation-keys.js +27 -0
  18. package/dist/attestation-keys.js.map +1 -0
  19. package/dist/attestation-keys.test.d.ts +2 -0
  20. package/dist/attestation-keys.test.d.ts.map +1 -0
  21. package/dist/attestation-keys.test.js +45 -0
  22. package/dist/attestation-keys.test.js.map +1 -0
  23. package/dist/attestation-signing.d.ts +226 -0
  24. package/dist/attestation-signing.d.ts.map +1 -0
  25. package/dist/attestation-signing.js +276 -0
  26. package/dist/attestation-signing.js.map +1 -0
  27. package/dist/attestation-signing.test.d.ts +2 -0
  28. package/dist/attestation-signing.test.d.ts.map +1 -0
  29. package/dist/attestation-signing.test.js +250 -0
  30. package/dist/attestation-signing.test.js.map +1 -0
  31. package/dist/attestation-workerd.test.d.ts +2 -0
  32. package/dist/attestation-workerd.test.d.ts.map +1 -0
  33. package/dist/attestation-workerd.test.js +183 -0
  34. package/dist/attestation-workerd.test.js.map +1 -0
  35. package/dist/attestation.d.ts +169 -22
  36. package/dist/attestation.d.ts.map +1 -1
  37. package/dist/attestation.js +42 -16
  38. package/dist/attestation.js.map +1 -1
  39. package/dist/build-vpn.d.ts +11 -1
  40. package/dist/build-vpn.d.ts.map +1 -1
  41. package/dist/build-vpn.js +27 -0
  42. package/dist/build-vpn.js.map +1 -1
  43. package/dist/fleet-vpn.d.ts +64 -0
  44. package/dist/fleet-vpn.d.ts.map +1 -0
  45. package/dist/fleet-vpn.js +88 -0
  46. package/dist/fleet-vpn.js.map +1 -0
  47. package/dist/fleet-vpn.test.d.ts +2 -0
  48. package/dist/fleet-vpn.test.d.ts.map +1 -0
  49. package/dist/fleet-vpn.test.js +69 -0
  50. package/dist/fleet-vpn.test.js.map +1 -0
  51. package/dist/index.d.ts +6 -0
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +6 -0
  54. package/dist/index.js.map +1 -1
  55. package/dist/schemas-repo-url.test.d.ts +2 -0
  56. package/dist/schemas-repo-url.test.d.ts.map +1 -0
  57. package/dist/schemas-repo-url.test.js +67 -0
  58. package/dist/schemas-repo-url.test.js.map +1 -0
  59. package/dist/schemas.d.ts +18 -0
  60. package/dist/schemas.d.ts.map +1 -1
  61. package/dist/schemas.js +56 -10
  62. package/dist/schemas.js.map +1 -1
  63. package/dist/ssh-deploy-key.d.ts +59 -0
  64. package/dist/ssh-deploy-key.d.ts.map +1 -0
  65. package/dist/ssh-deploy-key.js +124 -0
  66. package/dist/ssh-deploy-key.js.map +1 -0
  67. package/dist/ssh-deploy-key.test.d.ts +2 -0
  68. package/dist/ssh-deploy-key.test.d.ts.map +1 -0
  69. package/dist/ssh-deploy-key.test.js +117 -0
  70. package/dist/ssh-deploy-key.test.js.map +1 -0
  71. package/dist/types.d.ts +57 -2
  72. package/dist/types.d.ts.map +1 -1
  73. package/dist/types.js +0 -5
  74. package/dist/types.js.map +1 -1
  75. package/dist/vpn-attestation-workerd.test.d.ts +2 -0
  76. package/dist/vpn-attestation-workerd.test.d.ts.map +1 -0
  77. package/dist/vpn-attestation-workerd.test.js +184 -0
  78. package/dist/vpn-attestation-workerd.test.js.map +1 -0
  79. package/dist/vpn-attestation.d.ts +1015 -0
  80. package/dist/vpn-attestation.d.ts.map +1 -0
  81. package/dist/vpn-attestation.js +963 -0
  82. package/dist/vpn-attestation.js.map +1 -0
  83. package/dist/vpn-attestation.test.d.ts +2 -0
  84. package/dist/vpn-attestation.test.d.ts.map +1 -0
  85. package/dist/vpn-attestation.test.js +613 -0
  86. package/dist/vpn-attestation.test.js.map +1 -0
  87. package/dist/vpn-egress-presets.d.ts +1 -1
  88. package/dist/vpn-egress-presets.d.ts.map +1 -1
  89. package/dist/vpn-egress-presets.js +2 -2
  90. package/dist/vpn-egress-presets.js.map +1 -1
  91. package/dist/vpn-sandbox.d.ts +67 -0
  92. package/dist/vpn-sandbox.d.ts.map +1 -0
  93. package/dist/vpn-sandbox.js +22 -0
  94. package/dist/vpn-sandbox.js.map +1 -0
  95. package/dist/vpn-sandbox.test.d.ts +2 -0
  96. package/dist/vpn-sandbox.test.d.ts.map +1 -0
  97. package/dist/vpn-sandbox.test.js +34 -0
  98. package/dist/vpn-sandbox.test.js.map +1 -0
  99. package/dist/vpn-ssh.d.ts +93 -0
  100. package/dist/vpn-ssh.d.ts.map +1 -1
  101. package/dist/vpn-ssh.js +213 -1
  102. package/dist/vpn-ssh.js.map +1 -1
  103. package/dist/vpn-ssh.test.js +200 -1
  104. package/dist/vpn-ssh.test.js.map +1 -1
  105. package/package.json +1 -1
@@ -0,0 +1,183 @@
1
+ import { test } from "node:test";
2
+ import assert from "node:assert/strict";
3
+ import { spawn } from "node:child_process";
4
+ import { mkdtempSync, rmSync, writeFileSync } from "node:fs";
5
+ import { createRequire } from "node:module";
6
+ import { createServer } from "node:net";
7
+ import { tmpdir } from "node:os";
8
+ import { join } from "node:path";
9
+ import { fileURLToPath } from "node:url";
10
+ /**
11
+ * Ed25519 signing and verification in the real Workers runtime (workerd, the
12
+ * engine production runs on), not only in Node. PR-J only had this from the
13
+ * documentation; this runs the actual signing module inside workerd, with the
14
+ * compatibility date apps/admin-api deploys with.
15
+ *
16
+ * What it proves, in workerd: WebCrypto `Ed25519` import of a PKCS#8 key (the
17
+ * form `ATTESTATION_SIGNING_KEY` takes), public-key derivation through JWK
18
+ * export (how the signer learns its own key id), signing, verification, and
19
+ * that the bytes equal the pinned vectors an independent Node implementation
20
+ * produced (Ed25519 is deterministic, so any runtime must agree exactly).
21
+ *
22
+ * The workerd binary and esbuild are not direct dependencies: they come with
23
+ * `wrangler` (a root devDependency) and are resolved from there, so the
24
+ * lockfile does not change. workerd is run directly rather than through
25
+ * Miniflare, whose 5.x alpha configuration API is still moving. If they cannot
26
+ * be loaded this skips locally, and FAILS when CI is set, so the check cannot
27
+ * silently disappear from the pipeline.
28
+ */
29
+ const COMPAT_DATE = "2025-04-01"; // apps/admin-api/wrangler.jsonc
30
+ async function loadTooling() {
31
+ try {
32
+ const req = createRequire(import.meta.url);
33
+ const fromWrangler = createRequire(req.resolve("wrangler/package.json"));
34
+ const workerdMod = (await import(fromWrangler.resolve("workerd")));
35
+ const esbuild = (await import(fromWrangler.resolve("esbuild")));
36
+ const build = esbuild.build ?? esbuild.default?.build;
37
+ if (!build || typeof workerdMod.default !== "string")
38
+ return "workerd or esbuild did not expose the expected entry points";
39
+ return { workerd: workerdMod.default, build };
40
+ }
41
+ catch (err) {
42
+ return `wrangler's workerd/esbuild could not be loaded (${err instanceof Error ? err.message : String(err)})`;
43
+ }
44
+ }
45
+ function freePort() {
46
+ return new Promise((resolve, reject) => {
47
+ const srv = createServer();
48
+ srv.once("error", reject);
49
+ srv.listen(0, "127.0.0.1", () => {
50
+ const { port } = srv.address();
51
+ srv.close(() => resolve(port));
52
+ });
53
+ });
54
+ }
55
+ const WORKER_ENTRY = `
56
+ import { ed25519KeyId, ed25519SeedToPkcs8, bytesToBase64, auditCheckpointStatement, signAuditCheckpoint, createEd25519Signer, verifyEd25519, hexToBytes, bytesToHex } from ${JSON.stringify(fileURLToPath(new URL("./attestation.ts", import.meta.url)))};
57
+ import { ATTESTATION_DOMAIN, buildAttestationKeySet, loadAttestationSigner, signWithDomain, verifyAuditCheckpoint, verifyWithDomain } from ${JSON.stringify(fileURLToPath(new URL("./attestation-signing.ts", import.meta.url)))};
58
+
59
+ export default {
60
+ async fetch() {
61
+ const out = {};
62
+ // The same deterministic test key the Node tests pin (derived from a label, never a production key).
63
+ const seed = new Uint8Array(await crypto.subtle.digest("SHA-256", new TextEncoder().encode("appforge-test-vector-seed-v1")));
64
+ const pkcs8 = ed25519SeedToPkcs8(seed);
65
+ const secret = bytesToBase64(pkcs8);
66
+
67
+ // RFC 8032 test vector 1: the runtime's Ed25519 is the standard algorithm.
68
+ const rfcSigner = await createEd25519Signer("k", ed25519SeedToPkcs8(hexToBytes("9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60")));
69
+ const rfcSig = await rfcSigner.sign(new Uint8Array());
70
+ out.rfc8032 = bytesToHex(rfcSig) === "e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b"
71
+ && (await verifyEd25519(hexToBytes("d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a"), new Uint8Array(), rfcSig));
72
+
73
+ // Derive the public key from the PKCS#8 secret exactly as the production signer does (JWK export), and publish it.
74
+ const probe = await loadAttestationSigner(secret, [], new Date("2026-10-02T00:00:00Z"));
75
+ out.unpublishedKeyId = probe.state === "unpublished" ? probe.keyId : probe.state;
76
+ const pub = await crypto.subtle.importKey("pkcs8", pkcs8, { name: "Ed25519" }, true, ["sign"]);
77
+ const jwk = await crypto.subtle.exportKey("jwk", pub);
78
+ const x = jwk.x.replace(/-/g, "+").replace(/_/g, "/");
79
+ const entry = { kid: probe.keyId, alg: "Ed25519", publicKey: x + "=".repeat((4 - (x.length % 4)) % 4), notBefore: "2026-01-01T00:00:00Z", status: "active" };
80
+
81
+ const state = await loadAttestationSigner(secret, [entry], new Date("2026-10-02T00:00:00Z"));
82
+ out.state = state.state;
83
+ out.keyId = state.keyId;
84
+ const keys = await buildAttestationKeySet([entry]);
85
+ out.keySetOk = keys.ok;
86
+
87
+ const stmt = auditCheckpointStatement({ orgId: "org_acme", seq: 7, hash: "ab".repeat(32), issuedAt: "2026-10-02T14:03:50Z" });
88
+ out.checkpointSignature = await signAuditCheckpoint(state.signer, stmt);
89
+ out.checkpointVerifies = (await verifyAuditCheckpoint(keys.keys, { orgId: "org_acme", seq: 7, hash: "ab".repeat(32), issuedAt: "2026-10-02T14:03:50Z", keyId: state.keyId, signature: out.checkpointSignature })).ok;
90
+ out.tamperRejected = (await verifyAuditCheckpoint(keys.keys, { orgId: "org_acme", seq: 8, hash: "ab".repeat(32), issuedAt: "2026-10-02T14:03:50Z", keyId: state.keyId, signature: out.checkpointSignature })).ok === false;
91
+
92
+ const doc = { issuedAt: "2026-10-02T14:03:50Z", subject: { buildId: "bld_1", orgId: "org_acme" } };
93
+ out.attestationSignature = await signWithDomain(state.signer, ATTESTATION_DOMAIN, doc);
94
+ out.attestationVerifies = (await verifyWithDomain(keys.keys, { domain: ATTESTATION_DOMAIN, value: doc, keyId: state.keyId, signature: out.attestationSignature, issuedAt: doc.issuedAt })).ok;
95
+
96
+ // A non-Ed25519 / garbage secret is refused in this runtime too.
97
+ out.garbageRefused = (await loadAttestationSigner("AAAA", [entry])).state === "invalid";
98
+ return Response.json(out);
99
+ },
100
+ };
101
+ `;
102
+ test("Ed25519 signing, key derivation and verification work in workerd and match the pinned vectors", async (t) => {
103
+ const tooling = await loadTooling();
104
+ if (typeof tooling === "string") {
105
+ if (process.env.CI)
106
+ assert.fail(tooling);
107
+ t.skip(tooling);
108
+ return;
109
+ }
110
+ const built = await tooling.build({
111
+ stdin: { contents: WORKER_ENTRY, resolveDir: fileURLToPath(new URL(".", import.meta.url)), sourcefile: "worker-entry.js", loader: "js" },
112
+ bundle: true,
113
+ format: "esm",
114
+ platform: "neutral",
115
+ target: "es2022",
116
+ write: false,
117
+ logLevel: "silent",
118
+ // The sources import each other with ".js" specifiers that name their ".ts" files (NodeNext style).
119
+ plugins: [
120
+ {
121
+ name: "ts-js-specifiers",
122
+ setup(b) {
123
+ const src = fileURLToPath(new URL(".", import.meta.url));
124
+ b.onResolve({ filter: /^\.\.?\/.*\.js$/ }, (args) => {
125
+ if (!args.resolveDir.startsWith(src.replace(/\/$/, "")))
126
+ return undefined; // only this package's own sources (zod etc. resolve normally)
127
+ return { path: fileURLToPath(new URL(args.path.replace(/\.js$/, ".ts"), `file://${args.resolveDir}/`)) };
128
+ });
129
+ },
130
+ },
131
+ ],
132
+ });
133
+ const dir = mkdtempSync(join(tmpdir(), "appforge-workerd-"));
134
+ let child;
135
+ try {
136
+ writeFileSync(join(dir, "worker.mjs"), built.outputFiles[0].text);
137
+ const port = await freePort();
138
+ writeFileSync(join(dir, "config.capnp"), `using Workerd = import "/workerd/workerd.capnp";
139
+ const config :Workerd.Config = (
140
+ services = [(name = "main", worker = .w)],
141
+ sockets = [(name = "http", address = "127.0.0.1:${port}", http = (), service = "main")]
142
+ );
143
+ const w :Workerd.Worker = (
144
+ modules = [(name = "worker", esModule = embed "worker.mjs")],
145
+ compatibilityDate = "${COMPAT_DATE}",
146
+ );
147
+ `);
148
+ child = spawn(tooling.workerd, ["serve", "config.capnp"], { cwd: dir, stdio: ["ignore", "pipe", "pipe"] });
149
+ let log = "";
150
+ child.stdout?.on("data", (d) => (log += d.toString()));
151
+ child.stderr?.on("data", (d) => (log += d.toString()));
152
+ let res;
153
+ for (let i = 0; i < 100 && !res; i++) {
154
+ try {
155
+ res = await fetch(`http://127.0.0.1:${port}/`);
156
+ }
157
+ catch {
158
+ if (child.exitCode !== null)
159
+ assert.fail(`workerd exited early: ${log}`);
160
+ await new Promise((r) => setTimeout(r, 100));
161
+ }
162
+ }
163
+ assert.ok(res, `workerd never answered: ${log}`);
164
+ assert.equal(res.status, 200, log);
165
+ const out = (await res.json());
166
+ assert.equal(out.rfc8032, true, "RFC 8032 vector 1 reproduces in workerd");
167
+ assert.equal(out.state, "ready");
168
+ assert.equal(out.keyId, "fa0e09426c7aabe2", "public-key derivation (JWK export) in workerd yields the same key id as Node");
169
+ assert.equal(out.unpublishedKeyId, "fa0e09426c7aabe2");
170
+ assert.equal(out.keySetOk, true);
171
+ assert.equal(out.checkpointSignature, "WaJ3iUH1znI8fEAV3o/zvtO6LaP9VIpOTcuuzE0PVqFb/DHJ636nUZXal7I1qME9CJcxGiQMb9S28CsmLHO5DQ==", "byte-identical to the signature Node produces");
172
+ assert.equal(out.attestationSignature, "5SPJuifSVWrD32lYkGeUQUGi9WZ9IP4axfjWSj0kDmaz3J9UUiBN99/zApL0zCtXr8cxnDRaSLwcAQuphHfvBA==");
173
+ assert.equal(out.checkpointVerifies, true);
174
+ assert.equal(out.attestationVerifies, true);
175
+ assert.equal(out.tamperRejected, true);
176
+ assert.equal(out.garbageRefused, true);
177
+ }
178
+ finally {
179
+ child?.kill("SIGKILL");
180
+ rmSync(dir, { recursive: true, force: true });
181
+ }
182
+ });
183
+ //# sourceMappingURL=attestation-workerd.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attestation-workerd.test.js","sourceRoot":"","sources":["../src/attestation-workerd.test.ts"],"names":[],"mappings":"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"}
@@ -73,19 +73,53 @@ export declare const auditVpnEventDataSchema: z.ZodObject<{
73
73
  detail: string | null;
74
74
  }>;
75
75
  /**
76
- * What a chain entry's `payload` column holds. Extended by later PRs with
77
- * further `kind`s (`attestation`, `gap`, ...); a verifier must reject a
78
- * kind it does not know rather than skip it.
76
+ * A chain entry that registers a per-build attestation (PR-M): "this exact document, by this key (or by none),
77
+ * was issued". `docSha256` is the sha256 of the document's canonical JSON, which is what ties the entry to the
78
+ * signed document; the offline verifier requires the entry right after the document's own chain head to carry
79
+ * the document's hash and build id. `keyId` is null for an attestation issued while signing was unavailable.
80
+ */
81
+ export declare const auditAttestationDataSchema: z.ZodObject<{
82
+ buildId: z.ZodString;
83
+ docSha256: z.ZodString;
84
+ keyId: z.ZodNullable<z.ZodString>;
85
+ completeness: z.ZodEnum<["full", "partial", "server_observed_only"]>;
86
+ }, "strict", z.ZodTypeAny, {
87
+ buildId: string;
88
+ docSha256: string;
89
+ keyId: string | null;
90
+ completeness: "full" | "partial" | "server_observed_only";
91
+ }, {
92
+ buildId: string;
93
+ docSha256: string;
94
+ keyId: string | null;
95
+ completeness: "full" | "partial" | "server_observed_only";
96
+ }>;
97
+ export type AuditAttestationData = z.infer<typeof auditAttestationDataSchema>;
98
+ /**
99
+ * A chain entry that records evidence which was expected and is missing, so the absence itself is part of the
100
+ * tamper-evident history (PR-M: a regulated build whose agent never reported).
101
+ */
102
+ export declare const auditGapDataSchema: z.ZodObject<{
103
+ buildId: z.ZodString;
104
+ reason: z.ZodString;
105
+ detail: z.ZodString;
106
+ }, "strict", z.ZodTypeAny, {
107
+ buildId: string;
108
+ detail: string;
109
+ reason: string;
110
+ }, {
111
+ buildId: string;
112
+ detail: string;
113
+ reason: string;
114
+ }>;
115
+ export type AuditGapData = z.infer<typeof auditGapDataSchema>;
116
+ /**
117
+ * What a chain entry's `payload` column holds. The known `kind`s are `vpn_event`, `attestation` and `gap`;
118
+ * a verifier must reject a kind it does not know rather than skip it, and `scripts/appforge-verify.mjs`
119
+ * (KNOWN_KINDS) is kept to this list by a test.
79
120
  */
80
121
  export declare const auditEntryPayloadSchema: z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{
81
- v: z.ZodLiteral<1>;
82
- seq: z.ZodNumber;
83
- orgId: z.ZodString;
84
122
  kind: z.ZodLiteral<"vpn_event">;
85
- /** `VpnEvent.id` */
86
- ref: z.ZodString;
87
- /** When the source event was recorded (UTC). */
88
- at: z.ZodString;
89
123
  data: z.ZodObject<{
90
124
  type: z.ZodString;
91
125
  tunnelId: z.ZodNullable<z.ZodString>;
@@ -105,13 +139,31 @@ export declare const auditEntryPayloadSchema: z.ZodDiscriminatedUnion<"kind", [z
105
139
  agentId: string | null;
106
140
  detail: string | null;
107
141
  }>;
142
+ v: z.ZodLiteral<1>;
143
+ seq: z.ZodNumber;
144
+ orgId: z.ZodString;
145
+ /** The source row's id (`VpnEvent.id`), or the attestation / gap id this entry registers. */
146
+ ref: z.ZodString;
147
+ /** When the source event was recorded (UTC). */
148
+ at: z.ZodString;
108
149
  }, "strict", z.ZodTypeAny, {
109
- orgId: string;
110
- at: string;
111
150
  kind: "vpn_event";
151
+ at: string;
152
+ orgId: string;
153
+ data: {
154
+ type: string;
155
+ tunnelId: string | null;
156
+ buildId: string | null;
157
+ agentId: string | null;
158
+ detail: string | null;
159
+ };
112
160
  v: 1;
113
161
  seq: number;
114
162
  ref: string;
163
+ }, {
164
+ kind: "vpn_event";
165
+ at: string;
166
+ orgId: string;
115
167
  data: {
116
168
  type: string;
117
169
  tunnelId: string | null;
@@ -119,23 +171,111 @@ export declare const auditEntryPayloadSchema: z.ZodDiscriminatedUnion<"kind", [z
119
171
  agentId: string | null;
120
172
  detail: string | null;
121
173
  };
174
+ v: 1;
175
+ seq: number;
176
+ ref: string;
177
+ }>, z.ZodObject<{
178
+ kind: z.ZodLiteral<"attestation">;
179
+ data: z.ZodObject<{
180
+ buildId: z.ZodString;
181
+ docSha256: z.ZodString;
182
+ keyId: z.ZodNullable<z.ZodString>;
183
+ completeness: z.ZodEnum<["full", "partial", "server_observed_only"]>;
184
+ }, "strict", z.ZodTypeAny, {
185
+ buildId: string;
186
+ docSha256: string;
187
+ keyId: string | null;
188
+ completeness: "full" | "partial" | "server_observed_only";
189
+ }, {
190
+ buildId: string;
191
+ docSha256: string;
192
+ keyId: string | null;
193
+ completeness: "full" | "partial" | "server_observed_only";
194
+ }>;
195
+ v: z.ZodLiteral<1>;
196
+ seq: z.ZodNumber;
197
+ orgId: z.ZodString;
198
+ /** The source row's id (`VpnEvent.id`), or the attestation / gap id this entry registers. */
199
+ ref: z.ZodString;
200
+ /** When the source event was recorded (UTC). */
201
+ at: z.ZodString;
202
+ }, "strict", z.ZodTypeAny, {
203
+ kind: "attestation";
204
+ at: string;
205
+ orgId: string;
206
+ data: {
207
+ buildId: string;
208
+ docSha256: string;
209
+ keyId: string | null;
210
+ completeness: "full" | "partial" | "server_observed_only";
211
+ };
212
+ v: 1;
213
+ seq: number;
214
+ ref: string;
122
215
  }, {
216
+ kind: "attestation";
217
+ at: string;
123
218
  orgId: string;
219
+ data: {
220
+ buildId: string;
221
+ docSha256: string;
222
+ keyId: string | null;
223
+ completeness: "full" | "partial" | "server_observed_only";
224
+ };
225
+ v: 1;
226
+ seq: number;
227
+ ref: string;
228
+ }>, z.ZodObject<{
229
+ kind: z.ZodLiteral<"gap">;
230
+ data: z.ZodObject<{
231
+ buildId: z.ZodString;
232
+ reason: z.ZodString;
233
+ detail: z.ZodString;
234
+ }, "strict", z.ZodTypeAny, {
235
+ buildId: string;
236
+ detail: string;
237
+ reason: string;
238
+ }, {
239
+ buildId: string;
240
+ detail: string;
241
+ reason: string;
242
+ }>;
243
+ v: z.ZodLiteral<1>;
244
+ seq: z.ZodNumber;
245
+ orgId: z.ZodString;
246
+ /** The source row's id (`VpnEvent.id`), or the attestation / gap id this entry registers. */
247
+ ref: z.ZodString;
248
+ /** When the source event was recorded (UTC). */
249
+ at: z.ZodString;
250
+ }, "strict", z.ZodTypeAny, {
251
+ kind: "gap";
124
252
  at: string;
125
- kind: "vpn_event";
253
+ orgId: string;
254
+ data: {
255
+ buildId: string;
256
+ detail: string;
257
+ reason: string;
258
+ };
126
259
  v: 1;
127
260
  seq: number;
128
261
  ref: string;
262
+ }, {
263
+ kind: "gap";
264
+ at: string;
265
+ orgId: string;
129
266
  data: {
130
- type: string;
131
- tunnelId: string | null;
132
- buildId: string | null;
133
- agentId: string | null;
134
- detail: string | null;
267
+ buildId: string;
268
+ detail: string;
269
+ reason: string;
135
270
  };
271
+ v: 1;
272
+ seq: number;
273
+ ref: string;
136
274
  }>]>;
137
275
  export type AuditEntryPayload = z.infer<typeof auditEntryPayloadSchema>;
138
276
  export type AuditVpnEventData = z.infer<typeof auditVpnEventDataSchema>;
277
+ /** The chain's known entry kinds, from the schema above. */
278
+ export declare const AUDIT_ENTRY_KINDS: readonly string[];
139
279
  /** What a checkpoint signature covers: "org X's chain had head hash H at seq N when this was issued". */
140
280
  export declare const auditCheckpointStatementSchema: z.ZodObject<{
141
281
  v: z.ZodLiteral<1>;
@@ -174,17 +314,17 @@ export declare const auditCheckpointSchema: z.ZodObject<Omit<{
174
314
  signature: z.ZodString;
175
315
  }, "strict", z.ZodTypeAny, {
176
316
  orgId: string;
317
+ keyId: string;
177
318
  seq: number;
178
319
  hash: string;
179
320
  issuedAt: string;
180
- keyId: string;
181
321
  signature: string;
182
322
  }, {
183
323
  orgId: string;
324
+ keyId: string;
184
325
  seq: number;
185
326
  hash: string;
186
327
  issuedAt: string;
187
- keyId: string;
188
328
  signature: string;
189
329
  }>;
190
330
  export type AuditCheckpoint = z.infer<typeof auditCheckpointSchema>;
@@ -242,12 +382,19 @@ export declare function verifyAuditChain(input: {
242
382
  /**
243
383
  * Signs bytes with a key the database does not hold. The interface exists
244
384
  * so the sealer can issue checkpoints without knowing where the key lives;
245
- * the production implementation (a Worker secret, PR-K) is deliberately not
246
- * in this change. Implementations must be Ed25519 (RFC 8032).
385
+ * the production implementation (a Worker secret) lives in
386
+ * apps/admin-api/src/lib/audit-signing.ts. Implementations must be Ed25519 (RFC 8032).
247
387
  */
248
388
  export interface AuditSigner {
249
389
  /** Self-certifying key id: see `ed25519KeyId`. */
250
390
  readonly keyId: string;
391
+ /**
392
+ * Optional guard: why this key may not vouch for something issued at `issuedAt`
393
+ * (ISO-8601 UTC), or null if it may. Callers that stamp an `issuedAt` check it
394
+ * at that instant, right before signing, and refuse to store a signature a
395
+ * verifier would reject.
396
+ */
397
+ problemAt?(issuedAt: string): string | null;
251
398
  sign(message: Uint8Array): Promise<Uint8Array>;
252
399
  }
253
400
  /** `sha256(raw 32-byte public key)`, first 16 hex characters. A key set cannot mislabel a key because the id is recomputed from it. */
@@ -1 +1 @@
1
- {"version":3,"file":"attestation.d.ts","sourceRoot":"","sources":["../src/attestation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"attestation.d.ts","sourceRoot":"","sources":["../src/attestation.ts"],"names":[],"mappings":"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"}
@@ -157,25 +157,51 @@ export const auditVpnEventDataSchema = z
157
157
  })
158
158
  .strict();
159
159
  /**
160
- * What a chain entry's `payload` column holds. Extended by later PRs with
161
- * further `kind`s (`attestation`, `gap`, ...); a verifier must reject a
162
- * kind it does not know rather than skip it.
160
+ * A chain entry that registers a per-build attestation (PR-M): "this exact document, by this key (or by none),
161
+ * was issued". `docSha256` is the sha256 of the document's canonical JSON, which is what ties the entry to the
162
+ * signed document; the offline verifier requires the entry right after the document's own chain head to carry
163
+ * the document's hash and build id. `keyId` is null for an attestation issued while signing was unavailable.
164
+ */
165
+ export const auditAttestationDataSchema = z
166
+ .object({
167
+ buildId: z.string().min(1).max(128),
168
+ docSha256: hex64,
169
+ keyId: z.string().min(1).max(64).nullable(),
170
+ completeness: z.enum(["full", "partial", "server_observed_only"]),
171
+ })
172
+ .strict();
173
+ /**
174
+ * A chain entry that records evidence which was expected and is missing, so the absence itself is part of the
175
+ * tamper-evident history (PR-M: a regulated build whose agent never reported).
176
+ */
177
+ export const auditGapDataSchema = z
178
+ .object({
179
+ buildId: z.string().min(1).max(128),
180
+ reason: z.string().min(1).max(64),
181
+ detail: z.string().max(500),
182
+ })
183
+ .strict();
184
+ const auditEntryEnvelope = {
185
+ v: z.literal(1),
186
+ seq: z.number().int().min(1),
187
+ orgId: z.string().min(1),
188
+ /** The source row's id (`VpnEvent.id`), or the attestation / gap id this entry registers. */
189
+ ref: z.string().min(1),
190
+ /** When the source event was recorded (UTC). */
191
+ at: isoUtc,
192
+ };
193
+ /**
194
+ * What a chain entry's `payload` column holds. The known `kind`s are `vpn_event`, `attestation` and `gap`;
195
+ * a verifier must reject a kind it does not know rather than skip it, and `scripts/appforge-verify.mjs`
196
+ * (KNOWN_KINDS) is kept to this list by a test.
163
197
  */
164
198
  export const auditEntryPayloadSchema = z.discriminatedUnion("kind", [
165
- z
166
- .object({
167
- v: z.literal(1),
168
- seq: z.number().int().min(1),
169
- orgId: z.string().min(1),
170
- kind: z.literal("vpn_event"),
171
- /** `VpnEvent.id` */
172
- ref: z.string().min(1),
173
- /** When the source event was recorded (UTC). */
174
- at: isoUtc,
175
- data: auditVpnEventDataSchema,
176
- })
177
- .strict(),
199
+ z.object({ ...auditEntryEnvelope, kind: z.literal("vpn_event"), data: auditVpnEventDataSchema }).strict(),
200
+ z.object({ ...auditEntryEnvelope, kind: z.literal("attestation"), data: auditAttestationDataSchema }).strict(),
201
+ z.object({ ...auditEntryEnvelope, kind: z.literal("gap"), data: auditGapDataSchema }).strict(),
178
202
  ]);
203
+ /** The chain's known entry kinds, from the schema above. */
204
+ export const AUDIT_ENTRY_KINDS = auditEntryPayloadSchema.options.map((o) => o.shape.kind.value);
179
205
  /** What a checkpoint signature covers: "org X's chain had head hash H at seq N when this was issued". */
180
206
  export const auditCheckpointStatementSchema = z
181
207
  .object({
@@ -1 +1 @@
1
- {"version":3,"file":"attestation.js","sourceRoot":"","sources":["../src/attestation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"attestation.js","sourceRoot":"","sources":["../src/attestation.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { BuildVpnStatus } from "./types.js";
1
+ import type { BuildAttestationStatus, BuildVpnStatus } from "./types.js";
2
2
  /**
3
3
  * One-line, human-readable summary of `Build.vpn`, shared by the dashboard's
4
4
  * Network panel and `appforge build show` so they never disagree.
@@ -7,4 +7,14 @@ import type { BuildVpnStatus } from "./types.js";
7
7
  * "No VPN"
8
8
  */
9
9
  export declare function describeBuildVpn(vpn: BuildVpnStatus | undefined): string;
10
+ /**
11
+ * One-line, human-readable state of a build's attestation, shared by the dashboard and `appforge build show`. Says plainly when it
12
+ * is not (yet) evidence: pending, degraded, unsigned, or recording a violation.
13
+ * "Evidence: complete, signed, all controls enforced"
14
+ * "Evidence: complete, signed, 2 control violations recorded"
15
+ * "Evidence: DEGRADED (the agent did not report), signed: server-observed facts only"
16
+ * "Evidence: complete, NOT SIGNED (the platform had no signing key)"
17
+ * "Evidence: pending (the build's agent has not reported yet)"
18
+ */
19
+ export declare function describeBuildAttestation(a: BuildAttestationStatus | undefined): string | null;
10
20
  //# sourceMappingURL=build-vpn.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"build-vpn.d.ts","sourceRoot":"","sources":["../src/build-vpn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,cAAc,GAAG,SAAS,GAAG,MAAM,CAUxE"}
1
+ {"version":3,"file":"build-vpn.d.ts","sourceRoot":"","sources":["../src/build-vpn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEzE;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,cAAc,GAAG,SAAS,GAAG,MAAM,CAUxE;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,sBAAsB,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAe7F"}