@loomwork/ui-lineage 0.0.0-stage → 0.1.1

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 (88) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +8 -0
  3. package/README.md +471 -2
  4. package/dist/conformance.d.ts +4 -0
  5. package/dist/conformance.d.ts.map +1 -0
  6. package/dist/conformance.js +143 -0
  7. package/dist/conformance.js.map +1 -0
  8. package/dist/derive.d.ts +15 -0
  9. package/dist/derive.d.ts.map +1 -0
  10. package/dist/derive.js +35 -0
  11. package/dist/derive.js.map +1 -0
  12. package/dist/esm/conformance.js +140 -0
  13. package/dist/esm/conformance.js.map +1 -0
  14. package/dist/esm/derive.js +29 -0
  15. package/dist/esm/derive.js.map +1 -0
  16. package/dist/esm/events.js +101 -0
  17. package/dist/esm/events.js.map +1 -0
  18. package/dist/esm/index.js +12 -0
  19. package/dist/esm/index.js.map +1 -0
  20. package/dist/esm/lineage.js +1376 -0
  21. package/dist/esm/lineage.js.map +1 -0
  22. package/dist/esm/retention.js +73 -0
  23. package/dist/esm/retention.js.map +1 -0
  24. package/dist/esm/rootsFor.js +49 -0
  25. package/dist/esm/rootsFor.js.map +1 -0
  26. package/dist/esm/seen.js +733 -0
  27. package/dist/esm/seen.js.map +1 -0
  28. package/dist/esm/seenCrypto.js +197 -0
  29. package/dist/esm/seenCrypto.js.map +1 -0
  30. package/dist/esm/seenGc.js +122 -0
  31. package/dist/esm/seenGc.js.map +1 -0
  32. package/dist/esm/state.js +185 -0
  33. package/dist/esm/state.js.map +1 -0
  34. package/dist/esm/store.js +172 -0
  35. package/dist/esm/store.js.map +1 -0
  36. package/dist/events.d.ts +781 -0
  37. package/dist/events.d.ts.map +1 -0
  38. package/dist/events.js +106 -0
  39. package/dist/events.js.map +1 -0
  40. package/dist/index.d.ts +23 -0
  41. package/dist/index.d.ts.map +1 -0
  42. package/dist/index.js +60 -0
  43. package/dist/index.js.map +1 -0
  44. package/dist/lineage.d.ts +394 -0
  45. package/dist/lineage.d.ts.map +1 -0
  46. package/dist/lineage.js +1383 -0
  47. package/dist/lineage.js.map +1 -0
  48. package/dist/retention.d.ts +45 -0
  49. package/dist/retention.d.ts.map +1 -0
  50. package/dist/retention.js +78 -0
  51. package/dist/retention.js.map +1 -0
  52. package/dist/rootsFor.d.ts +33 -0
  53. package/dist/rootsFor.d.ts.map +1 -0
  54. package/dist/rootsFor.js +52 -0
  55. package/dist/rootsFor.js.map +1 -0
  56. package/dist/seen.d.ts +375 -0
  57. package/dist/seen.d.ts.map +1 -0
  58. package/dist/seen.js +739 -0
  59. package/dist/seen.js.map +1 -0
  60. package/dist/seenCrypto.d.ts +72 -0
  61. package/dist/seenCrypto.d.ts.map +1 -0
  62. package/dist/seenCrypto.js +210 -0
  63. package/dist/seenCrypto.js.map +1 -0
  64. package/dist/seenGc.d.ts +73 -0
  65. package/dist/seenGc.d.ts.map +1 -0
  66. package/dist/seenGc.js +126 -0
  67. package/dist/seenGc.js.map +1 -0
  68. package/dist/state.d.ts +66 -0
  69. package/dist/state.d.ts.map +1 -0
  70. package/dist/state.js +190 -0
  71. package/dist/state.js.map +1 -0
  72. package/dist/store.d.ts +93 -0
  73. package/dist/store.d.ts.map +1 -0
  74. package/dist/store.js +177 -0
  75. package/dist/store.js.map +1 -0
  76. package/package.json +60 -3
  77. package/src/conformance.ts +148 -0
  78. package/src/derive.ts +57 -0
  79. package/src/events.ts +125 -0
  80. package/src/index.ts +79 -0
  81. package/src/lineage.ts +1655 -0
  82. package/src/retention.ts +118 -0
  83. package/src/rootsFor.ts +75 -0
  84. package/src/seen.ts +965 -0
  85. package/src/seenCrypto.ts +271 -0
  86. package/src/seenGc.ts +233 -0
  87. package/src/state.ts +268 -0
  88. package/src/store.ts +274 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seen.js","sourceRoot":"","sources":["../../src/seen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,197 @@
1
+ import { createCipheriv, createDecipheriv, createHmac, hkdfSync, randomBytes } from "node:crypto";
2
+ /** Reference in-memory key store (tests / ephemeral apps): NOT durable. */
3
+ export class InMemorySeenKeyStore {
4
+ durable = false;
5
+ keys = new Map();
6
+ destroyed = new Set();
7
+ async getOrCreate(subjectId) {
8
+ if (this.destroyed.has(subjectId))
9
+ throw new Error(`the key for "${subjectId}" was destroyed; it cannot be recreated`);
10
+ let key = this.keys.get(subjectId);
11
+ if (key === undefined) {
12
+ key = new Uint8Array(randomBytes(32));
13
+ this.keys.set(subjectId, key);
14
+ }
15
+ return new Uint8Array(key); // a copy: a caller cannot mutate (or retain a handle on) the stored key
16
+ }
17
+ async get(subjectId) {
18
+ const key = this.keys.get(subjectId);
19
+ return key === undefined ? null : new Uint8Array(key);
20
+ }
21
+ async destroy(subjectId) {
22
+ this.keys.get(subjectId)?.fill(0); // zeroize, then forget
23
+ this.keys.delete(subjectId);
24
+ this.destroyed.add(subjectId);
25
+ }
26
+ }
27
+ /** The subject (unit of erasure) of a stream key. */
28
+ export const seenKeySubject = (streamKey) => `loom-ui/seen/${streamKey}`;
29
+ /** Separate encryption and MAC keys from the stored data key (HKDF-SHA256). Throws on a malformed key. */
30
+ export function deriveSeenKeys(master) {
31
+ if (!(master instanceof Uint8Array) || master.length !== 32)
32
+ throw new Error("a seen data key must be 32 bytes");
33
+ const d = (info) => Buffer.from(hkdfSync("sha256", master, Buffer.alloc(0), `loom-ui/seen/${info}/v1`, 32));
34
+ return { enc: d("enc"), mac: d("mac") };
35
+ }
36
+ /** The associated data a sealed ref is bound to. */
37
+ export const refAad = (experienceId, viewerId, sequence, entryIndex) => Buffer.from(JSON.stringify(["loom-ui/seen/ref/v1", experienceId, viewerId, sequence, entryIndex]));
38
+ /**
39
+ * Plaintext length (bytes) every sealed ref is padded to, so the ciphertext length does not reveal
40
+ * the value's size (the `bytes` of an entry lives only INSIDE the seal). Addresses longer than this
41
+ * round up to the next multiple, which a real content address never needs.
42
+ */
43
+ export const SEALED_REF_BLOCK = 256;
44
+ /** Longest content address `sealRef` accepts. Real addresses are sha256-sized; anything longer fails closed so padding never rounds up (a length leak). */
45
+ export const MAX_SEALED_ADDRESS_CHARS = 128;
46
+ /** The plaintext inside a sealed ref: the content ref and the value's measured size, padded to a constant length. */
47
+ export function sealRef(enc, aad, ref, bytes) {
48
+ if (ref.__loomContent.length > MAX_SEALED_ADDRESS_CHARS)
49
+ throw new Error(`sealRef: a content address over ${MAX_SEALED_ADDRESS_CHARS} characters is refused`);
50
+ const body = JSON.stringify({ r: ref, b: bytes });
51
+ const len = Buffer.byteLength(body, "utf-8");
52
+ const padded = Math.ceil(len / SEALED_REF_BLOCK) * SEALED_REF_BLOCK;
53
+ return sealText(enc, aad, body + " ".repeat(padded - len));
54
+ }
55
+ /** AES-256-GCM: `base64url(0x01 | iv | ciphertext | tag)`. A fresh random IV per call. */
56
+ export function sealText(enc, aad, plaintext) {
57
+ const iv = randomBytes(12);
58
+ const c = createCipheriv("aes-256-gcm", enc, iv);
59
+ c.setAAD(aad);
60
+ const ct = Buffer.concat([c.update(Buffer.from(plaintext, "utf-8")), c.final()]);
61
+ return Buffer.concat([Buffer.from([1]), iv, ct, c.getAuthTag()]).toString("base64url");
62
+ }
63
+ /** The plaintext, or `undefined` for ANY failure (wrong key, wrong AAD, tampering, malformed): fail closed. */
64
+ export function openText(enc, aad, sealed) {
65
+ try {
66
+ if (typeof sealed !== "string")
67
+ return undefined;
68
+ const raw = Buffer.from(sealed, "base64url");
69
+ if (raw.length < 1 + 12 + 16 || raw[0] !== 1)
70
+ return undefined;
71
+ const d = createDecipheriv("aes-256-gcm", enc, raw.subarray(1, 13));
72
+ d.setAAD(aad);
73
+ d.setAuthTag(raw.subarray(raw.length - 16));
74
+ return Buffer.concat([d.update(raw.subarray(13, raw.length - 16)), d.final()]).toString("utf-8");
75
+ }
76
+ catch {
77
+ return undefined;
78
+ }
79
+ }
80
+ /** `undefined` for any failure; otherwise the ref and size sealed by {@link sealRef}. */
81
+ export function openRef(enc, aad, sealed) {
82
+ const text = openText(enc, aad, sealed);
83
+ if (text === undefined)
84
+ return undefined;
85
+ try {
86
+ const v = JSON.parse(text);
87
+ const addr = v?.r?.__loomContent;
88
+ if (typeof addr !== "string" ||
89
+ addr.length === 0 ||
90
+ addr.length > 256 ||
91
+ !Number.isSafeInteger(v.b) ||
92
+ v.b < 0)
93
+ return undefined;
94
+ return { ref: { __loomContent: addr }, bytes: v.b };
95
+ }
96
+ catch {
97
+ return undefined;
98
+ }
99
+ }
100
+ /** Keyed digest: an unkeyed hash of a manifest would let anyone confirm a guessed value. */
101
+ export const keyedDigest = (mac, text) => `hmac:${createHmac("sha256", mac).update(text).digest("hex")}`;
102
+ /** The `SeenKeyStore` conformance kit: findings (a test asserts none), never throws. */
103
+ export async function checkSeenKeyStoreConformance(make) {
104
+ const findings = [];
105
+ const fail = (code, message) => findings.push({ code, severity: "error", message });
106
+ const store = await make();
107
+ const same = (a, b) => a !== null && b !== null && Buffer.compare(Buffer.from(a), Buffer.from(b)) === 0;
108
+ const cases = [
109
+ [
110
+ "an unknown subject has no key",
111
+ async () => {
112
+ if ((await store.get("k-none")) !== null)
113
+ fail("get-unknown", "get of an unknown subject was not null");
114
+ },
115
+ ],
116
+ [
117
+ "getOrCreate yields a stable 32-byte key",
118
+ async () => {
119
+ const a = await store.getOrCreate("k-a");
120
+ if (a.length !== 32)
121
+ fail("key-length", `a key is ${a.length} bytes, not 32`);
122
+ if (!same(a, await store.getOrCreate("k-a")) || !same(a, await store.get("k-a")))
123
+ fail("key-stable", "getOrCreate/get did not return one key for one subject");
124
+ },
125
+ ],
126
+ [
127
+ "subjects get independent keys",
128
+ async () => {
129
+ if (same(await store.getOrCreate("k-1"), await store.getOrCreate("k-2")))
130
+ fail("key-distinct", "two subjects share a key");
131
+ },
132
+ ],
133
+ [
134
+ "destroy erases and never resurrects",
135
+ async () => {
136
+ await store.getOrCreate("k-d");
137
+ await store.destroy("k-d");
138
+ if ((await store.get("k-d")) !== null)
139
+ fail("destroy-get", "get after destroy was not null");
140
+ let recreated = false;
141
+ try {
142
+ await store.getOrCreate("k-d");
143
+ recreated = true;
144
+ }
145
+ catch {
146
+ /* required */
147
+ }
148
+ if (recreated)
149
+ fail("destroy-resurrect", "getOrCreate after destroy created a new key");
150
+ },
151
+ ],
152
+ [
153
+ "get after destroy is null even after a prior get (no cache outlives destroy)",
154
+ async () => {
155
+ await store.getOrCreate("k-w");
156
+ await store.get("k-w"); // warm any cache
157
+ await store.get("k-w");
158
+ await store.destroy("k-w");
159
+ if ((await store.get("k-w")) !== null)
160
+ fail("destroy-cache", "get after destroy served a key from a warm cache");
161
+ },
162
+ ],
163
+ [
164
+ "concurrent getOrCreate of one new subject returns one key",
165
+ async () => {
166
+ const [a, b, c] = await Promise.all([
167
+ store.getOrCreate("k-race"),
168
+ store.getOrCreate("k-race"),
169
+ store.getOrCreate("k-race"),
170
+ ]);
171
+ if (!same(a, b) || !same(b, c))
172
+ fail("create-race", "concurrent getOrCreate returned different keys (create is not atomic)");
173
+ if (!same(a, await store.get("k-race")))
174
+ fail("create-race", "the stored key is not the one concurrent callers received");
175
+ },
176
+ ],
177
+ [
178
+ "destroy is idempotent and works on an absent subject",
179
+ async () => {
180
+ await store.destroy("k-d");
181
+ await store.destroy("k-never");
182
+ if ((await store.get("k-never")) !== null)
183
+ fail("destroy-absent", "an absent subject has a key");
184
+ },
185
+ ],
186
+ ];
187
+ for (const [name, run] of cases) {
188
+ try {
189
+ await run();
190
+ }
191
+ catch (err) {
192
+ fail("store-threw", `${name}: ${err instanceof Error ? err.message : String(err)}`);
193
+ }
194
+ }
195
+ return findings;
196
+ }
197
+ //# sourceMappingURL=seenCrypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seenCrypto.js","sourceRoot":"","sources":["../../src/seenCrypto.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,122 @@
1
+ import { UNREADABLE_EXAMPLES } from "./seen";
2
+ const no = (code, message) => ({
3
+ ok: false,
4
+ refusal: {
5
+ kind: "refused",
6
+ finding: { code, severity: "error", message },
7
+ code,
8
+ message,
9
+ },
10
+ });
11
+ /** Run one collection pass over `log`'s content store. See the header for the contract. */
12
+ export async function collectSeenGarbage(log, opts) {
13
+ if (opts?.ownsContentStore !== true)
14
+ return no("gc-ownership-unasserted", "ownsContentStore: true is required: the sweep deletes unrooted blobs");
15
+ if (!Number.isFinite(opts.graceMs) || opts.graceMs < 0)
16
+ return no("gc-grace-invalid", "graceMs must be a non-negative number of milliseconds");
17
+ const maxMarked = opts.maxMarked ?? 5_000_000;
18
+ const pageSize = opts.pageSize ?? 500;
19
+ if (!Number.isSafeInteger(maxMarked) ||
20
+ maxMarked < 1 ||
21
+ !Number.isSafeInteger(pageSize) ||
22
+ pageSize < 1)
23
+ return no("gc-options-invalid", "maxMarked and pageSize must be positive integers");
24
+ const content = log.contentStore;
25
+ if (content.listPage === undefined ||
26
+ content.deleteIfUntouchedSince === undefined ||
27
+ content.touchClock === undefined)
28
+ return no("gc-content-store-unsupported", "the ContentStore must implement listPage, deleteIfUntouchedSince and touchClock (SPI 1.3.0): without a touch time a young blob cannot be told from an orphan");
29
+ const marked = new Set();
30
+ const visit = (address) => {
31
+ marked.add(address);
32
+ if (marked.size > maxMarked)
33
+ throw new Error("maxMarked exceeded");
34
+ };
35
+ let cutoffMs;
36
+ let unreadable = {
37
+ streams: 0,
38
+ records: 0,
39
+ refs: 0,
40
+ examples: { streams: [], records: [], refs: [] },
41
+ };
42
+ try {
43
+ // The clock is read BEFORE marking: anything touched after this instant is spared, so a blob
44
+ // written while we mark (whose manifest we may have read too early to see) survives.
45
+ cutoffMs = (await content.touchClock()) - opts.graceMs;
46
+ const versions = new Map();
47
+ unreadable = await log.forEachLiveRef(visit, (experienceId, versionHash) => versions.set(`${experienceId}\u0000${versionHash}`, { experienceId, versionHash }));
48
+ if (opts.lineageRetention === undefined)
49
+ await log.lineageOf.forEachContentRef(visit);
50
+ else
51
+ for await (const a of log.lineageOf.pins(opts.lineageRetention, {
52
+ keepVersions: versions.values(),
53
+ }))
54
+ visit(a);
55
+ if (opts.extraRoots !== undefined)
56
+ for await (const a of opts.extraRoots())
57
+ visit(a);
58
+ }
59
+ catch (err) {
60
+ return no("gc-roots-unavailable", `the root set could not be established (nothing was deleted): ${err instanceof Error ? err.message : String(err)}`);
61
+ }
62
+ if (unreadable.streams + unreadable.records + unreadable.refs > 0 &&
63
+ opts.allowUnreadable !== true)
64
+ return no("gc-unreadable-record", `${unreadable.streams} stream(s), ${unreadable.records} record(s) and ${unreadable.refs} sealed ref(s) in the live window could not be read, so what they cite is unrooted (nothing was deleted). Fix or finish the upgrade and rerun, or pass allowUnreadable: true to sweep it. Offenders (first ${UNREADABLE_EXAMPLES} per kind): streams [${unreadable.examples.streams.join(", ")}], records [${unreadable.examples.records.join(", ")}], refs [${unreadable.examples.refs.join(", ")}]`);
65
+ let scanned = 0;
66
+ let deleted = 0;
67
+ let spared = 0;
68
+ try {
69
+ let cursor;
70
+ for (;;) {
71
+ const page = await content.listPage({
72
+ ...(cursor !== undefined && { cursor }),
73
+ limit: pageSize,
74
+ });
75
+ for (const entry of page.entries) {
76
+ if (marked.has(entry.address))
77
+ continue;
78
+ // 0 = unknown touch time (never orphan-eligible); at/after the cutoff = young or just touched
79
+ if (entry.touchedAt === 0 || !(entry.touchedAt < cutoffMs)) {
80
+ spared += 1;
81
+ continue;
82
+ }
83
+ scanned += 1;
84
+ if (await content.deleteIfUntouchedSince({ __loomContent: entry.address }, cutoffMs))
85
+ deleted += 1;
86
+ else
87
+ spared += 1; // touched between the listing and the delete
88
+ }
89
+ if (page.nextCursor === undefined || page.nextCursor === cursor)
90
+ break;
91
+ cursor = page.nextCursor;
92
+ }
93
+ }
94
+ catch (err) {
95
+ return no("gc-sweep-interrupted", `the sweep stopped after deleting ${deleted} blobs (safe to rerun): ${err instanceof Error ? err.message : String(err)}`);
96
+ }
97
+ return {
98
+ ok: true,
99
+ report: { marked: marked.size, scanned, deleted, spared, cutoffMs, unreadable },
100
+ };
101
+ }
102
+ /**
103
+ * The seen log's share of a shared content store's root set, for `Lineage.pins(policy, extra)`:
104
+ * the sealed value blobs of every live view and the (experience, version) each live view reads.
105
+ *
106
+ * roots: () => lineage.pins(policy, await collectSeenRoots(seenLog)) // sweepUnpinnedContent
107
+ *
108
+ * With `reclaimOrphans: { completeScan: true }` loom erases EVERYTHING in the store no root names, so
109
+ * the roots must come from every user of it (this seen log, other lineages, loom's executions). THROWS
110
+ * if anything in the live window could not be read (a root set that silently omits what it could not
111
+ * open would delete it): fix or finish the upgrade, or pass `allowUnreadable: true` to accept that.
112
+ */
113
+ export async function collectSeenRoots(log, opts = {}) {
114
+ const addresses = new Set();
115
+ const versions = new Map();
116
+ const unreadable = await log.forEachLiveRef((a) => addresses.add(a), (experienceId, versionHash) => versions.set(`${experienceId}\u0000${versionHash}`, { experienceId, versionHash }));
117
+ const n = unreadable.streams + unreadable.records + unreadable.refs;
118
+ if (n > 0 && opts.allowUnreadable !== true)
119
+ throw new Error(`collectSeenRoots: ${n} stream(s)/record(s)/sealed ref(s) in the live window could not be read, so what they cite would be unrooted (examples: ${[...unreadable.examples.streams, ...unreadable.examples.records, ...unreadable.examples.refs].slice(0, UNREADABLE_EXAMPLES).join(", ")}). Nothing was collected; pass allowUnreadable: true to sweep it anyway`);
120
+ return { keepVersions: [...versions.values()], keepAddresses: [...addresses] };
121
+ }
122
+ //# sourceMappingURL=seenGc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seenGc.js","sourceRoot":"","sources":["../../src/seenGc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,185 @@
1
+ import { MAX_TREE_DEPTH, boundSummary, treeDepth, } from "@loomwork/ui-core";
2
+ import { EXPERIENCE_BRANCHED, EXPERIENCE_COMPOSED, EXPERIENCE_PROMOTED, EXPERIENCE_REVERTED, PAYLOAD_SCHEMAS, isLineageEventType, } from "./events";
3
+ /** Most ops one version may record. A longer array is a finding before the schema ever walks it. */
4
+ export const MAX_OPS_PER_VERSION = 10_000;
5
+ /** How deep `prompt` ops may nest their `materialized` ops while being checked. */
6
+ export const MAX_OP_NESTING = 16;
7
+ /**
8
+ * Why a stored ops array must not reach the (recursive) zod `Operation` schema, or undefined when
9
+ * it may. The schema recurses through `insertNode.node` and `prompt.materialized`, so a payload
10
+ * nested past the caps would blow the stack inside `safeParse` instead of returning an issue;
11
+ * a log is untrusted input (anyone with append access to the stream wrote it).
12
+ */
13
+ function opsRefusal(ops) {
14
+ if (!Array.isArray(ops))
15
+ return undefined; // the schema reports the wrong shape
16
+ if (ops.length > MAX_OPS_PER_VERSION)
17
+ return `records ${ops.length} ops, over the ${MAX_OPS_PER_VERSION} limit`;
18
+ const stack = [];
19
+ for (const r of ops)
20
+ stack.push({ op: r?.op, nest: 1 });
21
+ let seen = 0;
22
+ for (let top = stack.pop(); top !== undefined; top = stack.pop()) {
23
+ const { op, nest } = top;
24
+ if (typeof op !== "object" || op === null)
25
+ continue;
26
+ if (++seen > MAX_OPS_PER_VERSION * 2)
27
+ return "nests too many ops";
28
+ const node = op.node;
29
+ if (node !== undefined) {
30
+ const depth = treeDepth(node);
31
+ if (depth > MAX_TREE_DEPTH)
32
+ return `an op's node nests ${depth} levels, over the ${MAX_TREE_DEPTH} limit`;
33
+ }
34
+ const inner = op.materialized;
35
+ if (Array.isArray(inner)) {
36
+ if (nest >= MAX_OP_NESTING)
37
+ return `prompt ops nest over ${MAX_OP_NESTING} levels`;
38
+ if (inner.length > MAX_OPS_PER_VERSION)
39
+ return "a prompt op materializes too many ops";
40
+ for (const i of inner)
41
+ stack.push({ op: i, nest: nest + 1 });
42
+ }
43
+ }
44
+ return undefined;
45
+ }
46
+ /**
47
+ * The WRITE-SIDE twin of the fold's payload check: why `payload` would make the line unreadable
48
+ * (`lineage-event-invalid` on every later read), or undefined when it folds. A write that fails this
49
+ * must be refused BEFORE the append — the fold stays strict, the log has no delete, and one bad event
50
+ * would brick the line for everyone. `by` marks a provenance problem (the caller gives it its own code).
51
+ */
52
+ export function payloadRefusal(type, payload) {
53
+ if (!isLineageEventType(type))
54
+ return { code: "event-payload-invalid", message: `unknown event type ${String(type)}` };
55
+ try {
56
+ const tooBig = opsRefusal(payload?.ops);
57
+ if (tooBig !== undefined)
58
+ return { code: "event-payload-invalid", message: tooBig };
59
+ const parsed = PAYLOAD_SCHEMAS[type].safeParse(payload);
60
+ if (parsed.success)
61
+ return undefined;
62
+ const issue = parsed.error.issues[0];
63
+ const inBy = parsed.error.issues.some((i) => i.path.includes("by"));
64
+ return {
65
+ code: inBy ? "provenance-invalid" : "event-payload-invalid",
66
+ message: `${inBy ? "a provenance (`by`) is invalid" : "the event payload is malformed"}: ${issue?.message ?? "invalid"}${issue ? ` at ${issue.path.join(".")}` : ""}`,
67
+ };
68
+ }
69
+ catch (err) {
70
+ return { code: "event-payload-invalid", message: errMessage(err) };
71
+ }
72
+ }
73
+ const bad = (code, message) => ({
74
+ ok: false,
75
+ finding: { code, severity: "error", message },
76
+ });
77
+ export function foldLineage(experienceId, records) {
78
+ try {
79
+ return foldChecked(experienceId, records);
80
+ }
81
+ catch (err) {
82
+ // Total by construction: whatever a hostile record does (a throwing getter, a shape the
83
+ // checks above did not anticipate) is a finding, never an exception out of every read.
84
+ return bad("lineage-event-invalid", `lineage "${experienceId}": ${errMessage(err)}`);
85
+ }
86
+ }
87
+ const errMessage = (err) => {
88
+ try {
89
+ return err instanceof Error ? err.message : String(err);
90
+ }
91
+ catch {
92
+ return "unreadable record";
93
+ }
94
+ };
95
+ function foldChecked(experienceId, records) {
96
+ const versions = new Map();
97
+ const order = [];
98
+ let head = null;
99
+ let promoted = null;
100
+ let expectedSequence = 0;
101
+ for (const rec of records) {
102
+ expectedSequence += 1;
103
+ if (typeof rec !== "object" || rec === null)
104
+ return bad("lineage-event-invalid", `lineage "${experienceId}" event #${expectedSequence}: the record is not an object`);
105
+ const where = `lineage "${experienceId}" event #${rec.sequence} (${rec.type})`;
106
+ if (rec.sequence !== expectedSequence)
107
+ return bad("lineage-sequence-gap", `${where}: expected sequence ${expectedSequence} — the log has a hole or a reorder`);
108
+ if (!isLineageEventType(rec.type))
109
+ return bad("lineage-event-unknown", `${where}: unknown type`);
110
+ const tooBig = opsRefusal(rec.payload?.ops);
111
+ if (tooBig !== undefined)
112
+ return bad("lineage-event-invalid", `${where}: ${tooBig}`);
113
+ const parsed = PAYLOAD_SCHEMAS[rec.type].safeParse(rec.payload);
114
+ if (!parsed.success)
115
+ return bad("lineage-event-invalid", `${where}: ${parsed.error.issues[0]?.message ?? "payload is malformed"}`);
116
+ const p = parsed.data;
117
+ if (p.experienceId !== experienceId)
118
+ return bad("lineage-event-foreign", `${where}: names experience "${p.experienceId}"`);
119
+ if (rec.type === EXPERIENCE_PROMOTED) {
120
+ if (!versions.has(p.versionHash))
121
+ return bad("lineage-promote-unknown", `${where}: promotes unknown version ${p.versionHash}`);
122
+ promoted = p.versionHash;
123
+ continue;
124
+ }
125
+ const v = p;
126
+ if (versions.has(v.versionHash))
127
+ return bad("lineage-version-duplicate", `${where}: version ${v.versionHash} already exists`);
128
+ if (rec.type === EXPERIENCE_BRANCHED) {
129
+ if (head !== null)
130
+ return bad("lineage-branch-midline", `${where}: only a line's first event`);
131
+ }
132
+ else if (head === null) {
133
+ if (rec.type !== EXPERIENCE_COMPOSED || v.parents.length !== 0)
134
+ return bad("lineage-genesis-invalid", `${where}: a line starts with a parentless composition`);
135
+ }
136
+ else if (v.parents.length !== 1 || v.parents[0] !== head) {
137
+ return bad("lineage-parent-mismatch", `${where}: parents ${JSON.stringify(v.parents)} are not the head ${head} it was appended on`);
138
+ }
139
+ const base = {
140
+ experienceId,
141
+ versionHash: v.versionHash,
142
+ ref: v.ref,
143
+ parents: v.parents,
144
+ sequence: rec.sequence,
145
+ at: rec.at,
146
+ by: v.by,
147
+ };
148
+ const record = rec.type === EXPERIENCE_COMPOSED
149
+ ? {
150
+ ...base,
151
+ kind: "composed",
152
+ ops: v.ops,
153
+ ...summaryOf(v.summary),
154
+ ...(v.summaryClass !== undefined && {
155
+ summaryClass: v.summaryClass,
156
+ }),
157
+ }
158
+ : rec.type === EXPERIENCE_REVERTED
159
+ ? {
160
+ ...base,
161
+ kind: "reverted",
162
+ ops: [],
163
+ revertedTo: v.revertedTo,
164
+ }
165
+ : {
166
+ ...base,
167
+ kind: "branched",
168
+ ops: [],
169
+ from: v.from,
170
+ carriedFrom: v.carriedFrom,
171
+ };
172
+ versions.set(v.versionHash, record);
173
+ order.push(v.versionHash);
174
+ head = v.versionHash;
175
+ }
176
+ return {
177
+ ok: true,
178
+ state: { experienceId, sequence: expectedSequence, versions, order, head, promoted },
179
+ };
180
+ }
181
+ const summaryOf = (raw) => {
182
+ const summary = boundSummary(raw);
183
+ return summary === undefined ? {} : { summary };
184
+ };
185
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/state.ts"],"names":[],"mappings":"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"}