@loomwork/plugin-content 0.0.0-stage → 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.
Files changed (69) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +8 -0
  3. package/README.md +92 -2
  4. package/dist/CachingContentStore.d.ts +54 -0
  5. package/dist/CachingContentStore.d.ts.map +1 -0
  6. package/dist/CachingContentStore.js +171 -0
  7. package/dist/CachingContentStore.js.map +1 -0
  8. package/dist/ContentResolvingEventStore.d.ts +70 -0
  9. package/dist/ContentResolvingEventStore.d.ts.map +1 -0
  10. package/dist/ContentResolvingEventStore.js +245 -0
  11. package/dist/ContentResolvingEventStore.js.map +1 -0
  12. package/dist/ContentStore.d.ts +186 -0
  13. package/dist/ContentStore.d.ts.map +1 -0
  14. package/dist/ContentStore.js +177 -0
  15. package/dist/ContentStore.js.map +1 -0
  16. package/dist/ContentTouchingSnapshotStore.d.ts +56 -0
  17. package/dist/ContentTouchingSnapshotStore.d.ts.map +1 -0
  18. package/dist/ContentTouchingSnapshotStore.js +85 -0
  19. package/dist/ContentTouchingSnapshotStore.js.map +1 -0
  20. package/dist/citations.d.ts +40 -0
  21. package/dist/citations.d.ts.map +1 -0
  22. package/dist/citations.js +118 -0
  23. package/dist/citations.js.map +1 -0
  24. package/dist/content.bench.d.ts +2 -0
  25. package/dist/content.bench.d.ts.map +1 -0
  26. package/dist/content.bench.js +75 -0
  27. package/dist/content.bench.js.map +1 -0
  28. package/dist/content.d.ts +40 -0
  29. package/dist/content.d.ts.map +1 -0
  30. package/dist/content.js +177 -0
  31. package/dist/content.js.map +1 -0
  32. package/dist/derive.d.ts +9 -0
  33. package/dist/derive.d.ts.map +1 -0
  34. package/dist/derive.js +40 -0
  35. package/dist/derive.js.map +1 -0
  36. package/dist/errors.d.ts +6 -0
  37. package/dist/errors.d.ts.map +1 -0
  38. package/dist/errors.js +20 -0
  39. package/dist/errors.js.map +1 -0
  40. package/dist/executionEnd.d.ts +22 -0
  41. package/dist/executionEnd.d.ts.map +1 -0
  42. package/dist/executionEnd.js +66 -0
  43. package/dist/executionEnd.js.map +1 -0
  44. package/dist/gc.d.ts +470 -0
  45. package/dist/gc.d.ts.map +1 -0
  46. package/dist/gc.js +819 -0
  47. package/dist/gc.js.map +1 -0
  48. package/dist/index.d.ts +10 -0
  49. package/dist/index.d.ts.map +1 -0
  50. package/dist/index.js +42 -0
  51. package/dist/index.js.map +1 -0
  52. package/dist/touchAround.d.ts +46 -0
  53. package/dist/touchAround.d.ts.map +1 -0
  54. package/dist/touchAround.js +98 -0
  55. package/dist/touchAround.js.map +1 -0
  56. package/package.json +58 -3
  57. package/src/CachingContentStore.ts +184 -0
  58. package/src/ContentResolvingEventStore.ts +325 -0
  59. package/src/ContentStore.ts +317 -0
  60. package/src/ContentTouchingSnapshotStore.ts +109 -0
  61. package/src/citations.ts +117 -0
  62. package/src/content.bench.ts +84 -0
  63. package/src/content.ts +191 -0
  64. package/src/derive.ts +40 -0
  65. package/src/errors.ts +19 -0
  66. package/src/executionEnd.ts +64 -0
  67. package/src/gc.ts +1213 -0
  68. package/src/index.ts +54 -0
  69. package/src/touchAround.ts +131 -0
package/dist/gc.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gc.js","sourceRoot":"","sources":["../src/gc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export { type ContentRef, collectContentRefs, contentAddress, decodeValue, encodeValue, hasContentRef, isContentRef, substituteContentRefs, } from "./content";
2
+ export { CONTENT_LIST_PAGE_DEFAULT_LIMIT, CONTENT_LIST_PAGE_MAX_LIMIT, CONTENT_STORE_SPI_VERSION, type ContentAccess, type ContentListPage, type ContentListPageOptions, type ContentPageEntry, type ContentStore, contentListPageLimit, InMemoryContentStore, type InMemoryContentStoreOptions, } from "./ContentStore";
3
+ export { CachingContentStore, type CachingContentStoreOptions } from "./CachingContentStore";
4
+ export { ContentResolvingEventStore, type ContentResolvingEventStoreOptions, } from "./ContentResolvingEventStore";
5
+ export { CONTENT_TOUCHING_SNAPSHOT_STORE, ContentTouchingSnapshotStore, type ContentTouchingSnapshotStoreOptions, isContentTouchingSnapshotStore, } from "./ContentTouchingSnapshotStore";
6
+ export type { TouchErrorHook, TouchReport } from "./touchAround";
7
+ export { ContentMissingError } from "./errors";
8
+ export { externalizePathsFromSteps } from "./derive";
9
+ export { ReclaimOrphansAckError, MIN_ORPHAN_ERASE_MARGIN_MS, ReclaimOrphansClockError, ReclaimOrphansMarginError, ReclaimOrphansSnapshotAckError, ReclaimOrphansTouchError, ArchiveStoresRequiredError, SealedArchiveScanError, SealedSnapshotScanError, pinByEventKinds, sweepUnpinnedContent, type ContentSweepOptions, type ContentSweepReport, type ReclaimOrphansAck, type SnapshotLookup, } from "./gc";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,UAAU,EACf,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,WAAW,EACX,aAAa,EACb,YAAY,EACZ,qBAAqB,GACtB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,+BAA+B,EAC/B,2BAA2B,EAC3B,yBAAyB,EACzB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,KAAK,2BAA2B,GACjC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,KAAK,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAC7F,OAAO,EACL,0BAA0B,EAC1B,KAAK,iCAAiC,GACvC,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,+BAA+B,EAC/B,4BAA4B,EAC5B,KAAK,mCAAmC,EACxC,8BAA8B,GAC/B,MAAM,gCAAgC,CAAC;AACxC,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,wBAAwB,EACxB,yBAAyB,EACzB,8BAA8B,EAC9B,wBAAwB,EACxB,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACvB,eAAe,EACf,oBAAoB,EACpB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,cAAc,GACpB,MAAM,MAAM,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sweepUnpinnedContent = exports.pinByEventKinds = exports.SealedSnapshotScanError = exports.SealedArchiveScanError = exports.ArchiveStoresRequiredError = exports.ReclaimOrphansTouchError = exports.ReclaimOrphansSnapshotAckError = exports.ReclaimOrphansMarginError = exports.ReclaimOrphansClockError = exports.MIN_ORPHAN_ERASE_MARGIN_MS = exports.ReclaimOrphansAckError = exports.externalizePathsFromSteps = exports.ContentMissingError = exports.isContentTouchingSnapshotStore = exports.ContentTouchingSnapshotStore = exports.CONTENT_TOUCHING_SNAPSHOT_STORE = exports.ContentResolvingEventStore = exports.CachingContentStore = exports.InMemoryContentStore = exports.contentListPageLimit = exports.CONTENT_STORE_SPI_VERSION = exports.CONTENT_LIST_PAGE_MAX_LIMIT = exports.CONTENT_LIST_PAGE_DEFAULT_LIMIT = exports.substituteContentRefs = exports.isContentRef = exports.hasContentRef = exports.encodeValue = exports.decodeValue = exports.contentAddress = exports.collectContentRefs = void 0;
4
+ var content_1 = require("./content");
5
+ Object.defineProperty(exports, "collectContentRefs", { enumerable: true, get: function () { return content_1.collectContentRefs; } });
6
+ Object.defineProperty(exports, "contentAddress", { enumerable: true, get: function () { return content_1.contentAddress; } });
7
+ Object.defineProperty(exports, "decodeValue", { enumerable: true, get: function () { return content_1.decodeValue; } });
8
+ Object.defineProperty(exports, "encodeValue", { enumerable: true, get: function () { return content_1.encodeValue; } });
9
+ Object.defineProperty(exports, "hasContentRef", { enumerable: true, get: function () { return content_1.hasContentRef; } });
10
+ Object.defineProperty(exports, "isContentRef", { enumerable: true, get: function () { return content_1.isContentRef; } });
11
+ Object.defineProperty(exports, "substituteContentRefs", { enumerable: true, get: function () { return content_1.substituteContentRefs; } });
12
+ var ContentStore_1 = require("./ContentStore");
13
+ Object.defineProperty(exports, "CONTENT_LIST_PAGE_DEFAULT_LIMIT", { enumerable: true, get: function () { return ContentStore_1.CONTENT_LIST_PAGE_DEFAULT_LIMIT; } });
14
+ Object.defineProperty(exports, "CONTENT_LIST_PAGE_MAX_LIMIT", { enumerable: true, get: function () { return ContentStore_1.CONTENT_LIST_PAGE_MAX_LIMIT; } });
15
+ Object.defineProperty(exports, "CONTENT_STORE_SPI_VERSION", { enumerable: true, get: function () { return ContentStore_1.CONTENT_STORE_SPI_VERSION; } });
16
+ Object.defineProperty(exports, "contentListPageLimit", { enumerable: true, get: function () { return ContentStore_1.contentListPageLimit; } });
17
+ Object.defineProperty(exports, "InMemoryContentStore", { enumerable: true, get: function () { return ContentStore_1.InMemoryContentStore; } });
18
+ var CachingContentStore_1 = require("./CachingContentStore");
19
+ Object.defineProperty(exports, "CachingContentStore", { enumerable: true, get: function () { return CachingContentStore_1.CachingContentStore; } });
20
+ var ContentResolvingEventStore_1 = require("./ContentResolvingEventStore");
21
+ Object.defineProperty(exports, "ContentResolvingEventStore", { enumerable: true, get: function () { return ContentResolvingEventStore_1.ContentResolvingEventStore; } });
22
+ var ContentTouchingSnapshotStore_1 = require("./ContentTouchingSnapshotStore");
23
+ Object.defineProperty(exports, "CONTENT_TOUCHING_SNAPSHOT_STORE", { enumerable: true, get: function () { return ContentTouchingSnapshotStore_1.CONTENT_TOUCHING_SNAPSHOT_STORE; } });
24
+ Object.defineProperty(exports, "ContentTouchingSnapshotStore", { enumerable: true, get: function () { return ContentTouchingSnapshotStore_1.ContentTouchingSnapshotStore; } });
25
+ Object.defineProperty(exports, "isContentTouchingSnapshotStore", { enumerable: true, get: function () { return ContentTouchingSnapshotStore_1.isContentTouchingSnapshotStore; } });
26
+ var errors_1 = require("./errors");
27
+ Object.defineProperty(exports, "ContentMissingError", { enumerable: true, get: function () { return errors_1.ContentMissingError; } });
28
+ var derive_1 = require("./derive");
29
+ Object.defineProperty(exports, "externalizePathsFromSteps", { enumerable: true, get: function () { return derive_1.externalizePathsFromSteps; } });
30
+ var gc_1 = require("./gc");
31
+ Object.defineProperty(exports, "ReclaimOrphansAckError", { enumerable: true, get: function () { return gc_1.ReclaimOrphansAckError; } });
32
+ Object.defineProperty(exports, "MIN_ORPHAN_ERASE_MARGIN_MS", { enumerable: true, get: function () { return gc_1.MIN_ORPHAN_ERASE_MARGIN_MS; } });
33
+ Object.defineProperty(exports, "ReclaimOrphansClockError", { enumerable: true, get: function () { return gc_1.ReclaimOrphansClockError; } });
34
+ Object.defineProperty(exports, "ReclaimOrphansMarginError", { enumerable: true, get: function () { return gc_1.ReclaimOrphansMarginError; } });
35
+ Object.defineProperty(exports, "ReclaimOrphansSnapshotAckError", { enumerable: true, get: function () { return gc_1.ReclaimOrphansSnapshotAckError; } });
36
+ Object.defineProperty(exports, "ReclaimOrphansTouchError", { enumerable: true, get: function () { return gc_1.ReclaimOrphansTouchError; } });
37
+ Object.defineProperty(exports, "ArchiveStoresRequiredError", { enumerable: true, get: function () { return gc_1.ArchiveStoresRequiredError; } });
38
+ Object.defineProperty(exports, "SealedArchiveScanError", { enumerable: true, get: function () { return gc_1.SealedArchiveScanError; } });
39
+ Object.defineProperty(exports, "SealedSnapshotScanError", { enumerable: true, get: function () { return gc_1.SealedSnapshotScanError; } });
40
+ Object.defineProperty(exports, "pinByEventKinds", { enumerable: true, get: function () { return gc_1.pinByEventKinds; } });
41
+ Object.defineProperty(exports, "sweepUnpinnedContent", { enumerable: true, get: function () { return gc_1.sweepUnpinnedContent; } });
42
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,qCASmB;AAPjB,6GAAA,kBAAkB,OAAA;AAClB,yGAAA,cAAc,OAAA;AACd,sGAAA,WAAW,OAAA;AACX,sGAAA,WAAW,OAAA;AACX,wGAAA,aAAa,OAAA;AACb,uGAAA,YAAY,OAAA;AACZ,gHAAA,qBAAqB,OAAA;AAEvB,+CAYwB;AAXtB,+HAAA,+BAA+B,OAAA;AAC/B,2HAAA,2BAA2B,OAAA;AAC3B,yHAAA,yBAAyB,OAAA;AAMzB,oHAAA,oBAAoB,OAAA;AACpB,oHAAA,oBAAoB,OAAA;AAGtB,6DAA6F;AAApF,0HAAA,mBAAmB,OAAA;AAC5B,2EAGsC;AAFpC,wIAAA,0BAA0B,OAAA;AAG5B,+EAKwC;AAJtC,+IAAA,+BAA+B,OAAA;AAC/B,4IAAA,4BAA4B,OAAA;AAE5B,8IAAA,8BAA8B,OAAA;AAGhC,mCAA+C;AAAtC,6GAAA,mBAAmB,OAAA;AAC5B,mCAAqD;AAA5C,mHAAA,yBAAyB,OAAA;AAClC,2BAgBc;AAfZ,4GAAA,sBAAsB,OAAA;AACtB,gHAAA,0BAA0B,OAAA;AAC1B,8GAAA,wBAAwB,OAAA;AACxB,+GAAA,yBAAyB,OAAA;AACzB,oHAAA,8BAA8B,OAAA;AAC9B,8GAAA,wBAAwB,OAAA;AACxB,gHAAA,0BAA0B,OAAA;AAC1B,4GAAA,sBAAsB,OAAA;AACtB,6GAAA,uBAAuB,OAAA;AACvB,qGAAA,eAAe,OAAA;AACf,0GAAA,oBAAoB,OAAA"}
@@ -0,0 +1,46 @@
1
+ import type { ContentStore } from "./ContentStore";
2
+ /** What a {@link TouchErrorHook} is told about a touch that did not do its job. */
3
+ export interface TouchReport {
4
+ /** Which touch: the one BEFORE the write (a failure there aborts it) or the one AFTER it. */
5
+ phase: "before" | "after";
6
+ /** The write the touch guards. */
7
+ operation: "append" | "appendBatch" | "appendIfUnchanged" | "copyPrefix" | "snapshotSave";
8
+ executionId?: string;
9
+ /** Every address the write cites. */
10
+ addresses: readonly string[];
11
+ /**
12
+ * The BARE refs among {@link addresses} that the store reported missing (non-empty only for a
13
+ * missing-blob report): the write cites a blob that is already gone, so the data loss has
14
+ * already happened and replay of that execution will throw `ContentMissingError`. A claim-check
15
+ * envelope's own `ref` is excluded: it may be reclaimed on a TTL by design (ADR 0055 D4).
16
+ */
17
+ missing: readonly string[];
18
+ }
19
+ /**
20
+ * Observer for touches that failed or found a cited blob gone. `err` is whatever `touch()`
21
+ * threw (the AFTER touch, which is best-effort), or a {@link ContentMissingError} naming the
22
+ * first missing address. It is called synchronously, must not throw (a throw is swallowed, so a
23
+ * broken logger cannot fail a durable write), and is never called when the touch succeeded and
24
+ * every cited blob was present.
25
+ */
26
+ export type TouchErrorHook = (err: unknown, info: TouchReport) => void;
27
+ /**
28
+ * Touch every blob the `payloads` cite around `write` (ADR 0055 D6 amendment 2): BEFORE the
29
+ * write (an error aborts it; nothing landed), and AFTER it (best-effort: the write is durable, so
30
+ * its outcome must not turn into a failure, but an error is reported through `hook`).
31
+ *
32
+ * The guarantee is D5's, not this function's: the cutoff of a sweep is
33
+ * `touchClock() - olderThanMs`, so the BEFORE touch protects a write whose touch-to-commit window
34
+ * is shorter than that margin (an erasing orphan pass enforces a minimum margin). The AFTER touch
35
+ * only extends that window for a write slower than the margin; it is not what closes the race.
36
+ *
37
+ * A non-empty `missing` result from either touch is reported through the hook, never thrown: a
38
+ * cited blob that is gone cannot be restored by failing this write, and a fork of a log with
39
+ * a reclaimed claim-check envelope is legitimate. Nothing is touched, and no walk beyond the
40
+ * payloads' own, when the store has no `touch` or the payloads cite nothing.
41
+ */
42
+ export declare function touchAround<T>(content: Pick<ContentStore, "touch">, payloads: readonly unknown[], ctx: {
43
+ operation: TouchReport["operation"];
44
+ executionId?: string | undefined;
45
+ }, hook: TouchErrorHook | undefined, write: () => Promise<T>): Promise<T>;
46
+ //# sourceMappingURL=touchAround.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"touchAround.d.ts","sourceRoot":"","sources":["../src/touchAround.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAInD,mFAAmF;AACnF,MAAM,WAAW,WAAW;IAC1B,6FAA6F;IAC7F,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC1B,kCAAkC;IAClC,SAAS,EAAE,QAAQ,GAAG,aAAa,GAAG,mBAAmB,GAAG,YAAY,GAAG,cAAc,CAAC;IAC1F,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B;;;;;OAKG;IACH,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;AA4CvE;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,WAAW,CAAC,CAAC,EACjC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,EACpC,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,GAAG,EAAE;IAAE,SAAS,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,EAC9E,IAAI,EAAE,cAAc,GAAG,SAAS,EAChC,KAAK,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACtB,OAAO,CAAC,CAAC,CAAC,CAoCZ"}
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.touchAround = touchAround;
4
+ const citations_1 = require("./citations");
5
+ const errors_1 = require("./errors");
6
+ let warnedTouch = false;
7
+ /**
8
+ * No `onTouchError` hook: a failed after-touch or a missing bare ref would be invisible, so say it
9
+ * ONCE per process (loom's other advisories are per process too, e.g. `LOOM_AGENT_RING`). Per
10
+ * process, not per instance: a failing content store fails on every write, and one warning per
11
+ * write or per store instance would flood stderr; the hook is the way to see each occurrence.
12
+ */
13
+ function warnTouchOnce(err, info) {
14
+ if (warnedTouch)
15
+ return;
16
+ warnedTouch = true;
17
+ const proc = globalThis
18
+ .process;
19
+ const what = info.missing.length > 0
20
+ ? `a cited blob is already gone (${info.missing[0]}); replay of ${info.executionId ?? "that execution"} will throw ContentMissingError`
21
+ : `the ${info.phase}-write touch failed (${err instanceof Error ? err.message : String(err)})`;
22
+ proc?.emitWarning?.(`ContentResolvingEventStore/ContentTouchingSnapshotStore (${info.operation}): ${what}. Further touch problems in this process are not repeated; pass onTouchError to observe each one.`, { code: "LOOM_CONTENT_TOUCH" });
23
+ }
24
+ function report(hook, err, info) {
25
+ try {
26
+ if (hook === undefined) {
27
+ warnTouchOnce(err, info);
28
+ return;
29
+ }
30
+ const result = hook(err, info);
31
+ // An async hook's rejection is not ours to surface, and must not become an unhandled one.
32
+ if (typeof result === "object" &&
33
+ result !== null &&
34
+ typeof result.then === "function") {
35
+ result.then(undefined, () => { });
36
+ }
37
+ }
38
+ catch {
39
+ /* an observer must never change a write's outcome */
40
+ }
41
+ }
42
+ /**
43
+ * Touch every blob the `payloads` cite around `write` (ADR 0055 D6 amendment 2): BEFORE the
44
+ * write (an error aborts it; nothing landed), and AFTER it (best-effort: the write is durable, so
45
+ * its outcome must not turn into a failure, but an error is reported through `hook`).
46
+ *
47
+ * The guarantee is D5's, not this function's: the cutoff of a sweep is
48
+ * `touchClock() - olderThanMs`, so the BEFORE touch protects a write whose touch-to-commit window
49
+ * is shorter than that margin (an erasing orphan pass enforces a minimum margin). The AFTER touch
50
+ * only extends that window for a write slower than the margin; it is not what closes the race.
51
+ *
52
+ * A non-empty `missing` result from either touch is reported through the hook, never thrown: a
53
+ * cited blob that is gone cannot be restored by failing this write, and a fork of a log with
54
+ * a reclaimed claim-check envelope is legitimate. Nothing is touched, and no walk beyond the
55
+ * payloads' own, when the store has no `touch` or the payloads cite nothing.
56
+ */
57
+ async function touchAround(content, payloads, ctx, hook, write) {
58
+ const touch = content.touch;
59
+ if (touch === undefined)
60
+ return write();
61
+ const cited = new Set();
62
+ const bare = new Set();
63
+ for (const payload of payloads) {
64
+ if (typeof payload === "object" && payload !== null) {
65
+ (0, citations_1.visitCitedAddresses)(payload, (address, inEnvelope) => {
66
+ cited.add(address);
67
+ if (!inEnvelope)
68
+ bare.add(address);
69
+ });
70
+ }
71
+ }
72
+ if (cited.size === 0)
73
+ return write();
74
+ const addresses = [...cited];
75
+ const info = (phase, missing) => ({
76
+ phase,
77
+ operation: ctx.operation,
78
+ ...(ctx.executionId !== undefined && { executionId: ctx.executionId }),
79
+ addresses,
80
+ missing,
81
+ });
82
+ const reportMissing = (phase, missing) => {
83
+ const lost = missing.filter((a) => bare.has(a));
84
+ if (lost.length > 0) {
85
+ report(hook, new errors_1.ContentMissingError(lost[0], ctx.executionId), info(phase, lost));
86
+ }
87
+ };
88
+ reportMissing("before", await touch.call(content, addresses));
89
+ const result = await write();
90
+ try {
91
+ reportMissing("after", await touch.call(content, addresses));
92
+ }
93
+ catch (err) {
94
+ report(hook, err, info("after", []));
95
+ }
96
+ return result;
97
+ }
98
+ //# sourceMappingURL=touchAround.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"touchAround.js","sourceRoot":"","sources":["../src/touchAround.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,61 @@
1
1
  {
2
2
  "name": "@loomwork/plugin-content",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.1.0",
4
+ "description": "Content-store seam for Loom (ADR 0046) — externalize large / PII payload fields out of the authoritative event log into a content-addressed side store, resolved transparently on read. Reference in-memory backend + ContentResolvingEventStore decorator. Erasure is physical (delete the bytes); absence is loud, never silent.",
5
+ "main": "./dist/index.js",
6
+ "types": "./dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "require": "./dist/index.js",
11
+ "default": "./dist/index.js"
12
+ }
13
+ },
14
+ "dependencies": {
15
+ "@loomwork/classify": "^0.1.0",
16
+ "@loomwork/core": "^0.1.0",
17
+ "@loomwork/event-runtime": "^0.1.0",
18
+ "@loomwork/snapshot-runtime": "^0.1.0"
19
+ },
20
+ "devDependencies": {
21
+ "@types/node": "^22.0.0",
22
+ "typescript": "^5.6.3",
23
+ "vitest": "^2.1.8",
24
+ "zod": "^3.23.8",
25
+ "@loomwork/conformance": "0.1.0",
26
+ "@loomwork/replay-vm": "0.1.0"
27
+ },
28
+ "license": "Apache-2.0",
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "git+https://github.com/chhetrisushil/loom.git",
32
+ "directory": "plugins/content"
33
+ },
34
+ "files": [
35
+ "dist",
36
+ "src",
37
+ "!src/**/*.test.ts",
38
+ "!src/**/*.test.tsx",
39
+ "!src/**/__tests__",
40
+ "!src/**/__fixtures__",
41
+ "!src/**/__snapshots__",
42
+ "!src/**/__golden__",
43
+ "LICENSE",
44
+ "NOTICE"
45
+ ],
46
+ "publishConfig": {
47
+ "access": "public",
48
+ "tag": "next"
49
+ },
50
+ "engines": {
51
+ "node": ">=20.0.0"
52
+ },
53
+ "scripts": {
54
+ "build": "tsc --build",
55
+ "dev": "tsc --build --watch",
56
+ "test": "vitest run",
57
+ "bench": "vitest bench --run",
58
+ "clean": "rm -rf dist tsconfig.tsbuildinfo",
59
+ "typecheck:tests": "tsc -p tsconfig.test.json"
60
+ }
6
61
  }
@@ -0,0 +1,184 @@
1
+ import type { ContentAccess, ContentStore } from "./ContentStore";
2
+ import { type ContentRef, contentAddress } from "./content";
3
+
4
+ export interface CachingContentStoreOptions {
5
+ /**
6
+ * Total cache budget in BYTES (not entries — blob sizes vary by orders of
7
+ * magnitude). A single blob larger than the budget is never admitted.
8
+ */
9
+ maxBytes: number;
10
+ }
11
+
12
+ /**
13
+ * ADR 0062 — a caching decorator for any {@link ContentStore}. Content
14
+ * addressing makes this trivially correct: a blob's address is a pure function
15
+ * of its bytes, so cached entries are immutable and valid forever — with
16
+ * exactly one edge: **`delete` evicts BEFORE forwarding**, so an erased /
17
+ * crypto-shredded blob (K10, T3) is never resurrected from a warm cache.
18
+ *
19
+ * Byte-budgeted LRU on Map insertion order (touch = delete+set, evict = first
20
+ * key) — O(1) per operation. `getMany` serves hits from cache and fetches only
21
+ * the misses (one inner `getMany` when supported). A decorator is still a
22
+ * conformant store and runs the full conformance kit.
23
+ */
24
+ export class CachingContentStore implements ContentStore {
25
+ private readonly cache = new Map<string, Uint8Array>();
26
+ private cachedBytes = 0;
27
+ readonly putStream?: NonNullable<ContentStore["putStream"]>;
28
+ readonly getMany: NonNullable<ContentStore["getMany"]>;
29
+ readonly deleteIfUntouchedSince?: NonNullable<ContentStore["deleteIfUntouchedSince"]>;
30
+ readonly listPage?: NonNullable<ContentStore["listPage"]>;
31
+ readonly touchClock?: NonNullable<ContentStore["touchClock"]>;
32
+ readonly touch?: NonNullable<ContentStore["touch"]>;
33
+
34
+ constructor(
35
+ private readonly inner: ContentStore,
36
+ private readonly options: CachingContentStoreOptions
37
+ ) {
38
+ // ADR 0143: this cache holds PLAINTEXT keyed by address, so over a sealing store a warm hit would hand a
39
+ // blob to a caller who never proved the subject (and whose fetch-hash check could not pass anyway: the
40
+ // sealing store returns plaintext for a ciphertext address). Cache the CIPHERTEXT instead: wrap the plain
41
+ // store, then seal on top (`new EncryptingContentStore(new CachingContentStore(plain, ..), ..)`).
42
+ if (inner.sealsContent === true) {
43
+ throw new TypeError(
44
+ "CachingContentStore: refusing to cache a store that seals content (sealsContent: true): a warm hit would serve plaintext without the subject check. Put the cache BELOW the sealing store."
45
+ );
46
+ }
47
+ // Forwarded uncached: the stream's bytes are consumed by the inner upload.
48
+ if (inner.putStream !== undefined) {
49
+ this.putStream = (stream, access) => inner.putStream!(stream, access);
50
+ }
51
+ // SPI 1.3.0 (ADR 0055 D5/D6): forwarded iff the inner store has them — a decorator that
52
+ // dropped them would silently make the sweep racy and `reclaimOrphans` refuse. Touch
53
+ // times are the inner store's; `put` already forwards, so a re-citation still bumps.
54
+ if (inner.deleteIfUntouchedSince !== undefined) {
55
+ this.deleteIfUntouchedSince = async (ref, cutoffMs) => {
56
+ this.evict(ref.__loomContent); // before: erasure is never served from a warm cache
57
+ const deleted = await inner.deleteIfUntouchedSince!(ref, cutoffMs);
58
+ // after: a concurrent miss may have re-admitted the bytes while the delete ran
59
+ if (deleted) this.evict(ref.__loomContent);
60
+ return deleted;
61
+ };
62
+ }
63
+ if (inner.listPage !== undefined) {
64
+ this.listPage = (opts) => inner.listPage!(opts);
65
+ }
66
+ if (inner.touchClock !== undefined) {
67
+ this.touchClock = () => inner.touchClock!();
68
+ }
69
+ // SPI 1.4.0: the touch time is the inner store's; the byte cache is untouched by it.
70
+ if (inner.touch !== undefined) {
71
+ this.touch = (addresses) => inner.touch!(addresses);
72
+ }
73
+ this.getMany = async (refs, access) => {
74
+ const results = new Array<Uint8Array | null>(refs.length);
75
+ const missIndexes: number[] = [];
76
+ const missRefs: ContentRef[] = [];
77
+ refs.forEach((ref, i) => {
78
+ const hit = this.lruTouch(ref.__loomContent);
79
+ if (hit !== undefined) {
80
+ results[i] = hit;
81
+ } else {
82
+ missIndexes.push(i);
83
+ missRefs.push(ref);
84
+ }
85
+ });
86
+ if (missRefs.length > 0) {
87
+ const fetched =
88
+ inner.getMany !== undefined
89
+ ? await inner.getMany(missRefs, access)
90
+ : await Promise.all(missRefs.map((r) => inner.get(r, access)));
91
+ fetched.forEach((bytes, j) => {
92
+ const at = missIndexes[j] as number;
93
+ if (bytes != null) {
94
+ this.verifyFetched((missRefs[j] as ContentRef).__loomContent, bytes);
95
+ this.admit((missRefs[j] as ContentRef).__loomContent, bytes);
96
+ }
97
+ results[at] = bytes ?? null;
98
+ });
99
+ }
100
+ return results;
101
+ };
102
+ }
103
+
104
+ async put(bytes: Uint8Array, access?: ContentAccess): Promise<ContentRef> {
105
+ const ref = await this.inner.put(bytes, access);
106
+ this.admit(ref.__loomContent, bytes);
107
+ return ref;
108
+ }
109
+
110
+ async get(ref: ContentRef, access?: ContentAccess): Promise<Uint8Array | null> {
111
+ const hit = this.lruTouch(ref.__loomContent);
112
+ if (hit !== undefined) return hit;
113
+ const bytes = await this.inner.get(ref, access);
114
+ if (bytes !== null) {
115
+ this.verifyFetched(ref.__loomContent, bytes);
116
+ this.admit(ref.__loomContent, bytes);
117
+ }
118
+ return bytes;
119
+ }
120
+
121
+ async delete(ref: ContentRef): Promise<void> {
122
+ // Evict FIRST — erasure must never be resurrected from cache.
123
+ this.evict(ref.__loomContent);
124
+ return this.inner.delete(ref);
125
+ }
126
+
127
+ private evict(address: string): void {
128
+ const cached = this.cache.get(address);
129
+ if (cached !== undefined) {
130
+ this.cache.delete(address);
131
+ this.cachedBytes -= cached.byteLength;
132
+ }
133
+ }
134
+
135
+ /** Cache hit with LRU touch (delete+set moves the key to the Map's tail). */
136
+ private lruTouch(address: string): Uint8Array | undefined {
137
+ const hit = this.cache.get(address);
138
+ if (hit !== undefined) {
139
+ this.cache.delete(address);
140
+ this.cache.set(address, hit);
141
+ }
142
+ return hit;
143
+ }
144
+
145
+ /**
146
+ * Audit SEC-2 — FETCHED bytes are verified against their content address
147
+ * before they are served OR cached: a buggy/compromised inner store returning
148
+ * wrong bytes for an address must neither poison the cache nor reach the
149
+ * caller (the sandbox pins scripts by hash through this store — a mispairing
150
+ * would defeat that provenance). Throws loudly on mismatch. Applies only to
151
+ * sha256-addressed refs (the ADR 0046 scheme) and only to the fetch path —
152
+ * `put` bytes came from the caller and the inner store derived the address.
153
+ */
154
+ private verifyFetched(address: string, bytes: Uint8Array): void {
155
+ if (address.startsWith("sha256:") && contentAddress(bytes) !== address) {
156
+ throw new Error(
157
+ `CachingContentStore: inner store returned bytes whose hash does not match "${address}" — refusing to cache or serve (possible corruption or poisoning)`
158
+ );
159
+ }
160
+ }
161
+
162
+ private admit(address: string, bytes: Uint8Array): void {
163
+ if (bytes.byteLength > this.options.maxBytes) return; // never admit an over-budget blob
164
+ const existing = this.cache.get(address);
165
+ if (existing !== undefined) {
166
+ this.cache.delete(address);
167
+ this.cachedBytes -= existing.byteLength;
168
+ }
169
+ this.cache.set(address, bytes);
170
+ this.cachedBytes += bytes.byteLength;
171
+ while (this.cachedBytes > this.options.maxBytes) {
172
+ const oldest = this.cache.keys().next();
173
+ if (oldest.done === true) break;
174
+ const evicted = this.cache.get(oldest.value) as Uint8Array;
175
+ this.cache.delete(oldest.value);
176
+ this.cachedBytes -= evicted.byteLength;
177
+ }
178
+ }
179
+
180
+ /** Observability for tests: current cached byte total. */
181
+ get cacheBytes(): number {
182
+ return this.cachedBytes;
183
+ }
184
+ }