@mikeargento/bitgraph-player 0.5.2 → 0.7.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.
Files changed (57) hide show
  1. package/DOMAIN.md +119 -0
  2. package/README.md +25 -5
  3. package/dist/__tests__/check.test.js +3 -2
  4. package/dist/__tests__/check.test.js.map +1 -1
  5. package/dist/__tests__/domain.test.d.ts +2 -0
  6. package/dist/__tests__/domain.test.d.ts.map +1 -0
  7. package/dist/__tests__/domain.test.js +265 -0
  8. package/dist/__tests__/domain.test.js.map +1 -0
  9. package/dist/__tests__/fixtures.d.ts.map +1 -1
  10. package/dist/__tests__/fixtures.js +3 -1
  11. package/dist/__tests__/fixtures.js.map +1 -1
  12. package/dist/check.d.ts +46 -3
  13. package/dist/check.d.ts.map +1 -1
  14. package/dist/check.js +106 -13
  15. package/dist/check.js.map +1 -1
  16. package/dist/cli.js +194 -12
  17. package/dist/cli.js.map +1 -1
  18. package/dist/domain.d.ts +64 -0
  19. package/dist/domain.d.ts.map +1 -0
  20. package/dist/domain.js +212 -0
  21. package/dist/domain.js.map +1 -0
  22. package/dist/index.d.ts +5 -1
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +2 -0
  25. package/dist/index.js.map +1 -1
  26. package/dist/pin.d.ts +55 -0
  27. package/dist/pin.d.ts.map +1 -0
  28. package/dist/pin.js +126 -0
  29. package/dist/pin.js.map +1 -0
  30. package/dist/play.d.ts +6 -1
  31. package/dist/play.d.ts.map +1 -1
  32. package/dist/play.js +6 -1
  33. package/dist/play.js.map +1 -1
  34. package/dist/sig.d.ts +2 -0
  35. package/dist/sig.d.ts.map +1 -1
  36. package/dist/sig.js +1 -1
  37. package/dist/sig.js.map +1 -1
  38. package/dist/types.d.ts +7 -0
  39. package/dist/types.d.ts.map +1 -1
  40. package/dist/types.js +7 -0
  41. package/dist/types.js.map +1 -1
  42. package/dist/verdict.d.ts +1 -1
  43. package/dist/verdict.js +1 -1
  44. package/dist-web/verify.html +8 -8
  45. package/package.json +4 -3
  46. package/src/__tests__/check.test.ts +3 -2
  47. package/src/__tests__/domain.test.ts +321 -0
  48. package/src/__tests__/fixtures.ts +3 -1
  49. package/src/check.ts +162 -16
  50. package/src/cli.ts +199 -12
  51. package/src/domain.ts +245 -0
  52. package/src/index.ts +17 -1
  53. package/src/pin.ts +155 -0
  54. package/src/play.ts +6 -1
  55. package/src/sig.ts +1 -1
  56. package/src/types.ts +8 -0
  57. package/src/verdict.ts +1 -1
package/dist/cli.js CHANGED
@@ -3,7 +3,8 @@
3
3
  /**
4
4
  * bitgraph-play <rule.json> <bundle> [--out <file>] [--summary]
5
5
  * bitgraph-play init <file>... [--out <rule.json>]
6
- * bitgraph-play check <bundle-or-file>... [--json] [--out <file>]
6
+ * bitgraph-play check <bundle-or-file>... [--json] [--out <file>] [--from <domain> [--pins <dir>]]
7
+ * bitgraph-play pin [<domain>] [--forget <domain>] [--pins <dir>] [--yes]
7
8
  *
8
9
  * Evaluate: runs a bitgraph-player/1 rule against a proof bundle
9
10
  * (directory, .tar, .tar.gz, or .tgz) and writes the verdict JSON to
@@ -21,6 +22,13 @@
21
22
  * what bounds it. Human text on stdout by default; --json for the
22
23
  * bitgraph-check/1 report. Offline. See check.ts for the vocabulary.
23
24
  *
25
+ * Pin: fetches https://<domain>/.well-known/bitgraph once (the ONLY
26
+ * network access anywhere in this package, and only when invoked), shows
27
+ * the party and every key's fingerprint, and stores the bytes verbatim
28
+ * after confirmation. `check --from <domain>` then adds one three-valued
29
+ * "domain" line per recording, offline, from the stored pin: TRUE or
30
+ * UNDETERMINED, never FALSE. Format and semantics: DOMAIN.md.
31
+ *
24
32
  * Exit codes: 0 TRUE, 1 FALSE, 2 UNDETERMINED, 3 error (init: 0 or 3).
25
33
  * Diagnostics go to stderr; stdout carries the verdict (or skeleton, or
26
34
  * check report) bytes only.
@@ -33,9 +41,12 @@ import { createHash } from "node:crypto";
33
41
  import { createReadStream, existsSync, writeFileSync } from "node:fs";
34
42
  import { readFile, stat } from "node:fs/promises";
35
43
  import { basename } from "node:path";
44
+ import { createInterface } from "node:readline/promises";
36
45
  import { pipeline } from "node:stream/promises";
37
46
  import { ingestBundle, ingestEntries } from "@mikeargento/bitgraph-audit";
38
47
  import { checkIngest, renderCheckText, serializeCheckReport } from "./check.js";
48
+ import { checkDomain, diffDomainFiles, domainKeyRefs, DomainFileError, isDomainName } from "./domain.js";
49
+ import { defaultPinsDir, fetchDomainFile, forgetPin, listPins, readPin, writePin } from "./pin.js";
39
50
  import { scaffoldRule } from "./init.js";
40
51
  import { play, PlayError } from "./play.js";
41
52
  import { RuleError } from "./rule.js";
@@ -43,8 +54,12 @@ function usage() {
43
54
  process.stderr.write("usage: bitgraph-play <rule.json> <bundle> [--out <file>] [--summary]\n" +
44
55
  " bitgraph-play init <file>... [--out <rule.json>]\n" +
45
56
  " bitgraph-play check <bundle-or-file>... [--json] [--out <file>]\n" +
46
- ' "--" ends option parsing; a rule file literally named "init" or\n' +
47
- ' "check" is evaluated with: bitgraph-play -- init <bundle>\n' +
57
+ " [--from <domain> [--pins <dir>]]\n" +
58
+ " bitgraph-play pin [<domain>] [--forget <domain>] [--pins <dir>] [--yes]\n" +
59
+ ' "--" ends option parsing; a rule file literally named "init",\n' +
60
+ ' "check" or "pin" is evaluated with: bitgraph-play -- init <bundle>\n' +
61
+ " pin is the only command that touches the network; check --from\n" +
62
+ " reads the stored pin and runs offline\n" +
48
63
  " exit codes: 0 TRUE, 1 FALSE, 2 UNDETERMINED, 3 error\n");
49
64
  return 3;
50
65
  }
@@ -69,7 +84,11 @@ async function sha256HexOfFile(path) {
69
84
  return hash.digest("hex");
70
85
  }
71
86
  function parseArgs(args) {
72
- const parsed = { positional: [], summary: false, json: false };
87
+ const parsed = { positional: [], summary: false, json: false, yes: false };
88
+ const valueFor = (i) => {
89
+ const next = args[i];
90
+ return next === undefined || next.startsWith("-") ? undefined : next;
91
+ };
73
92
  for (let i = 0; i < args.length; i++) {
74
93
  const arg = args[i];
75
94
  if (arg === "--") {
@@ -78,17 +97,38 @@ function parseArgs(args) {
78
97
  break;
79
98
  }
80
99
  else if (arg === "--out") {
81
- const next = args[++i];
82
- if (next === undefined || next.startsWith("-"))
100
+ const next = valueFor(++i);
101
+ if (next === undefined)
83
102
  return undefined;
84
103
  parsed.outFile = next;
85
104
  }
105
+ else if (arg === "--from") {
106
+ const next = valueFor(++i);
107
+ if (next === undefined)
108
+ return undefined;
109
+ parsed.from = next;
110
+ }
111
+ else if (arg === "--pins") {
112
+ const next = valueFor(++i);
113
+ if (next === undefined)
114
+ return undefined;
115
+ parsed.pinsDir = next;
116
+ }
117
+ else if (arg === "--forget") {
118
+ const next = valueFor(++i);
119
+ if (next === undefined)
120
+ return undefined;
121
+ parsed.forget = next;
122
+ }
86
123
  else if (arg === "--summary") {
87
124
  parsed.summary = true;
88
125
  }
89
126
  else if (arg === "--json") {
90
127
  parsed.json = true;
91
128
  }
129
+ else if (arg === "--yes") {
130
+ parsed.yes = true;
131
+ }
92
132
  else if (arg.startsWith("-")) {
93
133
  return undefined;
94
134
  }
@@ -105,11 +145,43 @@ function parseArgs(args) {
105
145
  * `bitgraph-play check proof.json photo.jpg` works without a folder.
106
146
  */
107
147
  async function runCheck(args) {
108
- if (args.summary)
148
+ if (args.summary || args.yes || args.forget !== undefined)
149
+ return usage();
150
+ if (args.pinsDir !== undefined && args.from === undefined)
109
151
  return usage();
110
152
  const targets = args.positional;
111
153
  if (targets.length === 0)
112
154
  return usage();
155
+ // Resolve the pin before touching the bundle: a missing pin should fail
156
+ // in milliseconds, with its remedy, not after a long ingest. check
157
+ // itself NEVER fetches; the pin was the one network step, already done.
158
+ let options;
159
+ if (args.from !== undefined) {
160
+ const domain = args.from.toLowerCase();
161
+ if (!isDomainName(domain)) {
162
+ process.stderr.write(`error: not a domain name: ${args.from}\n`);
163
+ return 3;
164
+ }
165
+ const pinsDir = args.pinsDir ?? defaultPinsDir();
166
+ let pin;
167
+ try {
168
+ pin = readPin(domain, pinsDir);
169
+ }
170
+ catch (err) {
171
+ process.stderr.write(`error: the stored pin for ${domain} is malformed`);
172
+ if (err instanceof DomainFileError && err.issues[0] !== undefined) {
173
+ process.stderr.write(`: ${err.issues[0]}`);
174
+ }
175
+ process.stderr.write(`\n pin it again: bitgraph-play pin ${domain}\n`);
176
+ return 3;
177
+ }
178
+ if (pin === undefined) {
179
+ process.stderr.write(`error: no pin for ${domain}\n` +
180
+ ` pin it once (the only step that needs the network): bitgraph-play pin ${domain}\n`);
181
+ return 3;
182
+ }
183
+ options = { from: checkDomain(pin.file) };
184
+ }
113
185
  let ingest;
114
186
  try {
115
187
  const single = targets.length === 1 ? await stat(targets[0]) : undefined;
@@ -135,7 +207,7 @@ async function runCheck(args) {
135
207
  process.stderr.write(`error: cannot read bundle: ${err.message}\n`);
136
208
  return 3;
137
209
  }
138
- const report = await checkIngest(ingest);
210
+ const report = await checkIngest(ingest, options);
139
211
  const bytes = args.json ? serializeCheckReport(report) : renderCheckText(report);
140
212
  if (args.outFile !== undefined) {
141
213
  writeFileSync(args.outFile, bytes);
@@ -150,7 +222,7 @@ function looksLikeArchive(path) {
150
222
  return lower.endsWith(".tar") || lower.endsWith(".tar.gz") || lower.endsWith(".tgz");
151
223
  }
152
224
  async function runInit(args) {
153
- if (args.summary || args.json)
225
+ if (args.summary || args.json || args.from !== undefined || args.pinsDir !== undefined || args.yes || args.forget !== undefined)
154
226
  return usage();
155
227
  const files = args.positional;
156
228
  if (files.length === 0)
@@ -202,7 +274,9 @@ async function runInit(args) {
202
274
  return 0;
203
275
  }
204
276
  async function runEvaluate(args) {
205
- if (args.json || args.positional.length !== 2)
277
+ if (args.json || args.from !== undefined || args.pinsDir !== undefined || args.yes || args.forget !== undefined)
278
+ return usage();
279
+ if (args.positional.length !== 2)
206
280
  return usage();
207
281
  const [rulePath, bundlePath] = args.positional;
208
282
  let result;
@@ -233,12 +307,118 @@ async function runEvaluate(args) {
233
307
  printSummary(result.audit);
234
308
  return result.exitCode;
235
309
  }
310
+ /**
311
+ * pin: the only command in this package that touches the network, and
312
+ * only when invoked. Conversational output goes to stderr (there are no
313
+ * report bytes); the pin listing, which IS the output, goes to stdout.
314
+ */
315
+ async function runPin(args) {
316
+ if (args.summary || args.json || args.outFile !== undefined || args.from !== undefined)
317
+ return usage();
318
+ const pinsDir = args.pinsDir ?? defaultPinsDir();
319
+ if (args.forget !== undefined) {
320
+ if (args.positional.length !== 0)
321
+ return usage();
322
+ const domain = args.forget.toLowerCase();
323
+ if (!isDomainName(domain)) {
324
+ process.stderr.write(`error: not a domain name: ${args.forget}\n`);
325
+ return 3;
326
+ }
327
+ if (forgetPin(domain, pinsDir)) {
328
+ process.stderr.write(`forgot ${domain}\n`);
329
+ return 0;
330
+ }
331
+ process.stderr.write(`error: no pin for ${domain}\n`);
332
+ return 3;
333
+ }
334
+ if (args.positional.length === 0) {
335
+ const pins = listPins(pinsDir);
336
+ if (pins.length === 0) {
337
+ process.stderr.write("no pins yet\n pin a domain (the only step that needs the network): bitgraph-play pin <domain>\n");
338
+ return 0;
339
+ }
340
+ for (const pin of pins) {
341
+ process.stdout.write(pin.malformed
342
+ ? `${pin.domain} (malformed pin; pin it again or --forget it)\n`
343
+ : `${pin.domain} ${pin.party} ${pin.keyCount} key(s) pinned ${pin.pinnedAt.toISOString().slice(0, 10)}\n`);
344
+ }
345
+ return 0;
346
+ }
347
+ if (args.positional.length !== 1)
348
+ return usage();
349
+ const domain = args.positional[0].toLowerCase();
350
+ let fetched;
351
+ try {
352
+ fetched = await fetchDomainFile(domain);
353
+ }
354
+ catch (err) {
355
+ if (err instanceof DomainFileError) {
356
+ process.stderr.write(`error: the file at https://${domain}/.well-known/bitgraph is not a valid bitgraph-domain/1 file:\n`);
357
+ for (const issue of err.issues)
358
+ process.stderr.write(` - ${issue}\n`);
359
+ }
360
+ else {
361
+ process.stderr.write(`error: ${err.message}\n`);
362
+ }
363
+ return 3;
364
+ }
365
+ const refs = domainKeyRefs(fetched.file);
366
+ const nameWidth = refs.reduce((w, r) => Math.max(w, r.name.length), 4);
367
+ process.stderr.write(`\n${domain} · ${fetched.file.party}\n`);
368
+ for (const ref of refs) {
369
+ process.stderr.write(` ${ref.name.padEnd(nameWidth)} ${ref.key.alg.padEnd(7)} ${ref.fingerprint}\n`);
370
+ }
371
+ let existing;
372
+ let existingMalformed = false;
373
+ try {
374
+ existing = readPin(domain, pinsDir);
375
+ }
376
+ catch {
377
+ existingMalformed = true;
378
+ }
379
+ if (existingMalformed) {
380
+ process.stderr.write(`\nthe stored pin for ${domain} is malformed and will be replaced\n`);
381
+ }
382
+ else if (existing !== undefined) {
383
+ const diff = diffDomainFiles(existing.file, fetched.file);
384
+ const changes = [];
385
+ if (diff.partyChanged !== undefined) {
386
+ changes.push(` party: "${diff.partyChanged.before}" is now "${diff.partyChanged.after}"`);
387
+ }
388
+ for (const ref of diff.added)
389
+ changes.push(` + ${ref.name} ${ref.key.alg} ${ref.fingerprint}`);
390
+ for (const ref of diff.removed)
391
+ changes.push(` - ${ref.name} ${ref.key.alg} ${ref.fingerprint}`);
392
+ for (const ch of diff.changed)
393
+ changes.push(` ~ ${ch.name} now ${ch.after.key.alg} ${ch.after.fingerprint}`);
394
+ const pinnedOn = existing.pinnedAt.toISOString().slice(0, 10);
395
+ process.stderr.write(changes.length === 0
396
+ ? `\nunchanged since the stored pin (${pinnedOn})\n`
397
+ : `\nchanges since the stored pin (${pinnedOn}):\n${changes.join("\n")}\n`);
398
+ }
399
+ if (!args.yes) {
400
+ if (!process.stdin.isTTY) {
401
+ process.stderr.write("\nerror: not a terminal; pass --yes to pin non-interactively\n");
402
+ return 3;
403
+ }
404
+ const rl = createInterface({ input: process.stdin, output: process.stderr });
405
+ const answer = (await rl.question(`\npin ${refs.length} key(s) for ${domain}? [y/N] `)).trim().toLowerCase();
406
+ rl.close();
407
+ if (answer !== "y" && answer !== "yes") {
408
+ process.stderr.write("not pinned\n");
409
+ return 3;
410
+ }
411
+ }
412
+ const path = writePin(domain, fetched.bytes, pinsDir);
413
+ process.stderr.write(`pinned: ${path}\nchecks now run offline: bitgraph-play check <export> --from ${domain}\n`);
414
+ return 0;
415
+ }
236
416
  async function main() {
237
417
  const argv = process.argv.slice(2);
238
418
  // "--" as the first token forces evaluate mode: parseArgs treats
239
419
  // everything after it as positional, so a rule file literally named
240
- // "init" or "check" is reachable as `bitgraph-play -- init <bundle>`.
241
- const subcommand = argv[0] === "init" || argv[0] === "check" ? argv[0] : undefined;
420
+ // "init", "check" or "pin" is reachable as `bitgraph-play -- init <bundle>`.
421
+ const subcommand = argv[0] === "init" || argv[0] === "check" || argv[0] === "pin" ? argv[0] : undefined;
242
422
  if (subcommand !== undefined && existsSync(subcommand)) {
243
423
  // Both readings are plausible here; a silent pick would hand a
244
424
  // 0.1.1 caller a skeleton with exit 0 where the published contract
@@ -255,6 +435,8 @@ async function main() {
255
435
  return runInit(parsed);
256
436
  if (subcommand === "check")
257
437
  return runCheck(parsed);
438
+ if (subcommand === "pin")
439
+ return runPin(parsed);
258
440
  return runEvaluate(parsed);
259
441
  }
260
442
  main().then((code) => {
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import type { CheckDomain } from "./check.js";
2
+ import type { TrustedKey } from "./sig.js";
3
+ export declare const DOMAIN_FILE_VERSION = "bitgraph-domain/1";
4
+ export declare const DOMAIN_WELL_KNOWN_PATH = "/.well-known/bitgraph";
5
+ export declare const DOMAIN_FILE_MAX_BYTES = 65536;
6
+ export interface DomainFile {
7
+ version: "bitgraph-domain/1";
8
+ /** Lowercase hostname; the binding. Must equal the domain the reader asked for. */
9
+ domain: string;
10
+ /** The name the domain gives itself. Display only. */
11
+ party: string;
12
+ /** SPEC §9.1 trusted-key bodies, named. */
13
+ keys: Record<string, TrustedKey>;
14
+ }
15
+ export declare class DomainFileError extends Error {
16
+ readonly issues: readonly string[];
17
+ constructor(issues: string[]);
18
+ }
19
+ export declare function isDomainName(s: string): boolean;
20
+ /**
21
+ * Parse and validate a bitgraph-domain/1 file. Strict: unknown fields are
22
+ * errors (additions are a new format version), and key material that does
23
+ * not decode is refused here rather than stored, so a pin can never hold
24
+ * keys that silently match nothing. Throws DomainFileError with every
25
+ * issue found.
26
+ */
27
+ export declare function parseDomainFile(input: Uint8Array | string, expectedDomain?: string): DomainFile;
28
+ /**
29
+ * Lowercase hex SHA-256 of the decoded publicKey bytes. For es256 this is
30
+ * exactly the actor keyId (hex SHA-256 of the SPKI DER). Undefined when
31
+ * the material does not decode, which parseDomainFile refuses anyway.
32
+ */
33
+ export declare function keyFingerprint(key: TrustedKey): string | undefined;
34
+ export interface DomainKeyRef {
35
+ name: string;
36
+ key: TrustedKey;
37
+ fingerprint: string;
38
+ }
39
+ /** Every key with its derived fingerprint, name order. */
40
+ export declare function domainKeyRefs(file: DomainFile): DomainKeyRef[];
41
+ export interface DomainDiff {
42
+ partyChanged?: {
43
+ before: string;
44
+ after: string;
45
+ };
46
+ added: DomainKeyRef[];
47
+ removed: DomainKeyRef[];
48
+ changed: {
49
+ name: string;
50
+ before: DomainKeyRef;
51
+ after: DomainKeyRef;
52
+ }[];
53
+ unchanged: number;
54
+ }
55
+ /** What a re-pin would change, for showing before asking. */
56
+ export declare function diffDomainFiles(before: DomainFile, after: DomainFile): DomainDiff;
57
+ /**
58
+ * The check-report adapter: what `check --from` consults per recording.
59
+ * Defined as an interface in check.ts so the check module (which also
60
+ * builds verify.html) never imports the crypto this module uses; the CLI
61
+ * hands the report builder this object.
62
+ */
63
+ export declare function checkDomain(file: DomainFile): CheckDomain;
64
+ //# sourceMappingURL=domain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../src/domain.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAG3C,eAAO,MAAM,mBAAmB,sBAAsB,CAAC;AACvD,eAAO,MAAM,sBAAsB,0BAA0B,CAAC;AAC9D,eAAO,MAAM,qBAAqB,QAAS,CAAC;AAE5C,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,mBAAmB,CAAC;IAC7B,mFAAmF;IACnF,MAAM,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CAClC;AAED,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;gBACvB,MAAM,EAAE,MAAM,EAAE;CAK7B;AAUD,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAE/C;AAMD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,UAAU,CAgF/F;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAIlE;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,UAAU,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,0DAA0D;AAC1D,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY,EAAE,CAQ9D;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACjD,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,YAAY,CAAC;QAAC,KAAK,EAAE,YAAY,CAAA;KAAE,EAAE,CAAC;IACvE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,6DAA6D;AAC7D,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,UAAU,CAgBjF;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,CA8BzD"}
package/dist/domain.js ADDED
@@ -0,0 +1,212 @@
1
+ // Copyright (c) 2024-2026 Mike Argento. Licensed under the MIT License. See LICENSE.
2
+ /**
3
+ * BitGraph Domain: a party's own domain publishing the keys that record
4
+ * for it. The file (`bitgraph-domain/1`) is served at
5
+ * `https://<domain>/.well-known/bitgraph` and is the party speaking for
6
+ * itself, never BitGraph speaking about the party: parsing enforces
7
+ * well-formedness only, and adopting the statement is the reader's act
8
+ * (see pin.ts). The format is DOMAIN.md; evaluation semantics (SPEC.md
9
+ * sections 1 through 9) are untouched by everything in this module.
10
+ *
11
+ * The file shares SPEC section 9.1's trusted-key grammar, so an entry
12
+ * pastes into a format 2 rule's `trustedKeys` unchanged, and a key's
13
+ * fingerprint is the lowercase hex SHA-256 of the decoded key bytes,
14
+ * which for es256 is exactly the `keyId` actor proofs carry. Fingerprints
15
+ * are always derived here and never read from the file, so a domain
16
+ * cannot claim a key it does not show.
17
+ */
18
+ import { createHash } from "node:crypto";
19
+ import { decodeDigestBytes } from "./rule.js";
20
+ import { decodeB64Strict, keyObjectFor, parseSigFile, verifySigFile } from "./sig.js";
21
+ export const DOMAIN_FILE_VERSION = "bitgraph-domain/1";
22
+ export const DOMAIN_WELL_KNOWN_PATH = "/.well-known/bitgraph";
23
+ export const DOMAIN_FILE_MAX_BYTES = 65_536;
24
+ export class DomainFileError extends Error {
25
+ issues;
26
+ constructor(issues) {
27
+ super(issues[0] ?? "invalid domain file");
28
+ this.name = "DomainFileError";
29
+ this.issues = issues;
30
+ }
31
+ }
32
+ /**
33
+ * Lowercase registrable hostname: dot-separated LDH labels, at least two,
34
+ * no scheme, no port, no path. Also the safety property the pin store
35
+ * rests on: a name this grammar accepts contains no path separators.
36
+ */
37
+ const LABEL = "[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?";
38
+ const DOMAIN_RE = new RegExp(`^${LABEL}(?:\\.${LABEL})+$`);
39
+ export function isDomainName(s) {
40
+ return s.length > 0 && s.length <= 253 && DOMAIN_RE.test(s);
41
+ }
42
+ function isPlainObject(v) {
43
+ return typeof v === "object" && v !== null && !Array.isArray(v);
44
+ }
45
+ /**
46
+ * Parse and validate a bitgraph-domain/1 file. Strict: unknown fields are
47
+ * errors (additions are a new format version), and key material that does
48
+ * not decode is refused here rather than stored, so a pin can never hold
49
+ * keys that silently match nothing. Throws DomainFileError with every
50
+ * issue found.
51
+ */
52
+ export function parseDomainFile(input, expectedDomain) {
53
+ const issues = [];
54
+ const text = typeof input === "string" ? input : Buffer.from(input).toString("utf8");
55
+ if (typeof input !== "string" && input.length > DOMAIN_FILE_MAX_BYTES) {
56
+ throw new DomainFileError([`file is ${input.length} bytes; the cap is ${DOMAIN_FILE_MAX_BYTES}`]);
57
+ }
58
+ let raw;
59
+ try {
60
+ raw = JSON.parse(text);
61
+ }
62
+ catch (err) {
63
+ throw new DomainFileError([`not JSON: ${err.message}`]);
64
+ }
65
+ if (!isPlainObject(raw))
66
+ throw new DomainFileError(["not a JSON object"]);
67
+ for (const k of Object.keys(raw)) {
68
+ if (!["version", "domain", "party", "keys"].includes(k)) {
69
+ issues.push(`unknown field "${k}" (additions are a new format version)`);
70
+ }
71
+ }
72
+ if (raw["version"] !== DOMAIN_FILE_VERSION) {
73
+ issues.push(`"version" must be exactly "${DOMAIN_FILE_VERSION}"`);
74
+ }
75
+ const domain = raw["domain"];
76
+ if (typeof domain !== "string" || !isDomainName(domain)) {
77
+ issues.push(`"domain" must be a lowercase hostname (no scheme, no port, no path)`);
78
+ }
79
+ else if (expectedDomain !== undefined && domain !== expectedDomain) {
80
+ issues.push(`the file names domain "${domain}" but was requested for "${expectedDomain}"; refusing to store one party's file under another party's name`);
81
+ }
82
+ const party = raw["party"];
83
+ if (typeof party !== "string" || party.trim().length === 0) {
84
+ issues.push(`"party" is required: the name the domain gives itself`);
85
+ }
86
+ const keys = Object.create(null);
87
+ const rawKeys = raw["keys"];
88
+ if (!isPlainObject(rawKeys) || Object.keys(rawKeys).length === 0) {
89
+ issues.push(`"keys" must be an object naming at least one key`);
90
+ }
91
+ else {
92
+ for (const [name, entry] of Object.entries(rawKeys)) {
93
+ const where = `keys.${name}`;
94
+ if (!/^[A-Za-z0-9_.-]+$/.test(name) || /^[0-9]+$/.test(name)) {
95
+ issues.push(`${where}: key name must match [A-Za-z0-9_.-]+ with at least one non-digit`);
96
+ continue;
97
+ }
98
+ if (!isPlainObject(entry)) {
99
+ issues.push(`${where}: must be an object`);
100
+ continue;
101
+ }
102
+ for (const k of Object.keys(entry)) {
103
+ if (k !== "alg" && k !== "publicKey")
104
+ issues.push(`${where}: unknown field "${k}"`);
105
+ }
106
+ const alg = entry["alg"];
107
+ const publicKey = entry["publicKey"];
108
+ if (alg !== "ed25519" && alg !== "es256") {
109
+ issues.push(`${where}: "alg" must be "ed25519" or "es256"`);
110
+ continue;
111
+ }
112
+ if (typeof publicKey !== "string" || publicKey.length === 0) {
113
+ issues.push(`${where}: "publicKey" is required and must be a non-empty string`);
114
+ continue;
115
+ }
116
+ const key = { alg, publicKey };
117
+ if (keyObjectFor(key) === undefined) {
118
+ issues.push(`${where}: key material does not decode as ${alg} (${alg === "es256" ? "SPKI DER for P-256" : "raw 32-byte key"}, standard base64)`);
119
+ continue;
120
+ }
121
+ keys[name] = key;
122
+ }
123
+ }
124
+ if (issues.length > 0)
125
+ throw new DomainFileError(issues);
126
+ return { version: DOMAIN_FILE_VERSION, domain: domain, party: party.trim(), keys };
127
+ }
128
+ /**
129
+ * Lowercase hex SHA-256 of the decoded publicKey bytes. For es256 this is
130
+ * exactly the actor keyId (hex SHA-256 of the SPKI DER). Undefined when
131
+ * the material does not decode, which parseDomainFile refuses anyway.
132
+ */
133
+ export function keyFingerprint(key) {
134
+ const material = decodeB64Strict(key.publicKey);
135
+ if (material === undefined)
136
+ return undefined;
137
+ return createHash("sha256").update(material).digest("hex");
138
+ }
139
+ /** Every key with its derived fingerprint, name order. */
140
+ export function domainKeyRefs(file) {
141
+ const refs = [];
142
+ for (const name of Object.keys(file.keys).sort()) {
143
+ const key = file.keys[name];
144
+ const fingerprint = keyFingerprint(key);
145
+ if (fingerprint !== undefined)
146
+ refs.push({ name, key, fingerprint });
147
+ }
148
+ return refs;
149
+ }
150
+ /** What a re-pin would change, for showing before asking. */
151
+ export function diffDomainFiles(before, after) {
152
+ const beforeRefs = new Map(domainKeyRefs(before).map((r) => [r.name, r]));
153
+ const afterRefs = new Map(domainKeyRefs(after).map((r) => [r.name, r]));
154
+ const diff = { added: [], removed: [], changed: [], unchanged: 0 };
155
+ if (before.party !== after.party)
156
+ diff.partyChanged = { before: before.party, after: after.party };
157
+ for (const [name, ref] of afterRefs) {
158
+ const prior = beforeRefs.get(name);
159
+ if (prior === undefined)
160
+ diff.added.push(ref);
161
+ else if (prior.key.alg !== ref.key.alg || prior.key.publicKey !== ref.key.publicKey) {
162
+ diff.changed.push({ name, before: prior, after: ref });
163
+ }
164
+ else
165
+ diff.unchanged += 1;
166
+ }
167
+ for (const [name, ref] of beforeRefs) {
168
+ if (!afterRefs.has(name))
169
+ diff.removed.push(ref);
170
+ }
171
+ return diff;
172
+ }
173
+ /**
174
+ * The check-report adapter: what `check --from` consults per recording.
175
+ * Defined as an interface in check.ts so the check module (which also
176
+ * builds verify.html) never imports the crypto this module uses; the CLI
177
+ * hands the report builder this object.
178
+ */
179
+ export function checkDomain(file) {
180
+ const actorNames = new Map();
181
+ for (const ref of domainKeyRefs(file)) {
182
+ if (ref.key.alg !== "es256")
183
+ continue;
184
+ if (!actorNames.has(ref.fingerprint))
185
+ actorNames.set(ref.fingerprint, ref.name);
186
+ }
187
+ const sigKeys = domainKeyRefs(file)
188
+ .map((ref) => ({ name: ref.name, key: ref.key, keyObject: keyObjectFor(ref.key) }))
189
+ .filter((k) => k.keyObject !== undefined);
190
+ return {
191
+ domain: file.domain,
192
+ party: file.party,
193
+ keyCount: Object.keys(file.keys).length,
194
+ actorKeyName: (keyId) => actorNames.get(keyId.toLowerCase()),
195
+ signatureKeyName: (targetSha256Hex, evidence) => {
196
+ // Deterministic: candidates in ascending content-hash order, keys in
197
+ // name order; the first verifying pair decides (SPEC §9.4 discipline).
198
+ for (const sha256Hex of [...evidence.keys()].sort()) {
199
+ const sig = parseSigFile(evidence.get(sha256Hex));
200
+ if (sig === undefined)
201
+ continue;
202
+ for (const k of sigKeys) {
203
+ if (verifySigFile(sig, k.key, k.keyObject, targetSha256Hex, decodeDigestBytes)) {
204
+ return k.name;
205
+ }
206
+ }
207
+ }
208
+ return undefined;
209
+ },
210
+ };
211
+ }
212
+ //# sourceMappingURL=domain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain.js","sourceRoot":"","sources":["../src/domain.ts"],"names":[],"mappings":"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"}