@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.
- package/LICENSE +202 -0
- package/NOTICE +8 -0
- package/README.md +92 -2
- package/dist/CachingContentStore.d.ts +54 -0
- package/dist/CachingContentStore.d.ts.map +1 -0
- package/dist/CachingContentStore.js +171 -0
- package/dist/CachingContentStore.js.map +1 -0
- package/dist/ContentResolvingEventStore.d.ts +70 -0
- package/dist/ContentResolvingEventStore.d.ts.map +1 -0
- package/dist/ContentResolvingEventStore.js +245 -0
- package/dist/ContentResolvingEventStore.js.map +1 -0
- package/dist/ContentStore.d.ts +186 -0
- package/dist/ContentStore.d.ts.map +1 -0
- package/dist/ContentStore.js +177 -0
- package/dist/ContentStore.js.map +1 -0
- package/dist/ContentTouchingSnapshotStore.d.ts +56 -0
- package/dist/ContentTouchingSnapshotStore.d.ts.map +1 -0
- package/dist/ContentTouchingSnapshotStore.js +85 -0
- package/dist/ContentTouchingSnapshotStore.js.map +1 -0
- package/dist/citations.d.ts +40 -0
- package/dist/citations.d.ts.map +1 -0
- package/dist/citations.js +118 -0
- package/dist/citations.js.map +1 -0
- package/dist/content.bench.d.ts +2 -0
- package/dist/content.bench.d.ts.map +1 -0
- package/dist/content.bench.js +75 -0
- package/dist/content.bench.js.map +1 -0
- package/dist/content.d.ts +40 -0
- package/dist/content.d.ts.map +1 -0
- package/dist/content.js +177 -0
- package/dist/content.js.map +1 -0
- package/dist/derive.d.ts +9 -0
- package/dist/derive.d.ts.map +1 -0
- package/dist/derive.js +40 -0
- package/dist/derive.js.map +1 -0
- package/dist/errors.d.ts +6 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +20 -0
- package/dist/errors.js.map +1 -0
- package/dist/executionEnd.d.ts +22 -0
- package/dist/executionEnd.d.ts.map +1 -0
- package/dist/executionEnd.js +66 -0
- package/dist/executionEnd.js.map +1 -0
- package/dist/gc.d.ts +470 -0
- package/dist/gc.d.ts.map +1 -0
- package/dist/gc.js +819 -0
- package/dist/gc.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/dist/touchAround.d.ts +46 -0
- package/dist/touchAround.d.ts.map +1 -0
- package/dist/touchAround.js +98 -0
- package/dist/touchAround.js.map +1 -0
- package/package.json +58 -3
- package/src/CachingContentStore.ts +184 -0
- package/src/ContentResolvingEventStore.ts +325 -0
- package/src/ContentStore.ts +317 -0
- package/src/ContentTouchingSnapshotStore.ts +109 -0
- package/src/citations.ts +117 -0
- package/src/content.bench.ts +84 -0
- package/src/content.ts +191 -0
- package/src/derive.ts +40 -0
- package/src/errors.ts +19 -0
- package/src/executionEnd.ts +64 -0
- package/src/gc.ts +1213 -0
- package/src/index.ts +54 -0
- 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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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
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
|
+
}
|