@opendatalabs/personal-server-ts-core 1.32.0 → 1.33.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/dist/additions/first-added.d.ts +203 -0
- package/dist/additions/first-added.d.ts.map +1 -0
- package/dist/additions/first-added.js +647 -0
- package/dist/additions/first-added.js.map +1 -0
- package/dist/additions/index.d.ts +6 -0
- package/dist/additions/index.d.ts.map +1 -0
- package/dist/additions/index.js +6 -0
- package/dist/additions/index.js.map +1 -0
- package/dist/additions/ledger-store.d.ts +69 -0
- package/dist/additions/ledger-store.d.ts.map +1 -0
- package/dist/additions/ledger-store.js +343 -0
- package/dist/additions/ledger-store.js.map +1 -0
- package/dist/additions/record-rules.d.ts +54 -0
- package/dist/additions/record-rules.d.ts.map +1 -0
- package/dist/additions/record-rules.js +191 -0
- package/dist/additions/record-rules.js.map +1 -0
- package/dist/additions/scope-lock.d.ts +14 -0
- package/dist/additions/scope-lock.d.ts.map +1 -0
- package/dist/additions/scope-lock.js +32 -0
- package/dist/additions/scope-lock.js.map +1 -0
- package/dist/additions/summary.d.ts +48 -0
- package/dist/additions/summary.d.ts.map +1 -0
- package/dist/additions/summary.js +101 -0
- package/dist/additions/summary.js.map +1 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +26 -0
- package/dist/api/index.js.map +1 -1
- package/dist/contracts/data.d.ts +19 -1
- package/dist/contracts/data.d.ts.map +1 -1
- package/dist/contracts/data.js +95 -23
- package/dist/contracts/data.js.map +1 -1
- package/dist/ports/index.d.ts +11 -0
- package/dist/ports/index.d.ts.map +1 -1
- package/dist/ports/index.js.map +1 -1
- package/dist/sync/workers/download.d.ts.map +1 -1
- package/dist/sync/workers/download.js +19 -0
- package/dist/sync/workers/download.js.map +1 -1
- package/dist/test-utils/memory-storage.d.ts.map +1 -1
- package/dist/test-utils/memory-storage.js +47 -9
- package/dist/test-utils/memory-storage.js.map +1 -1
- package/package.json +5 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"first-added.js","sourceRoot":"","sources":["../../src/additions/first-added.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/additions/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/additions/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Keeps a scope's first-seen sidecar current. See `first-added.ts` for the
|
|
3
|
+
* ledger itself; this module is the only code that reads and writes it.
|
|
4
|
+
*
|
|
5
|
+
* The sidecar is a cache derived from the scope's stored versions, so every
|
|
6
|
+
* failure here is survivable: a missing or unreadable sidecar is rebuilt from
|
|
7
|
+
* the retained versions the next time the owner asks for it.
|
|
8
|
+
*
|
|
9
|
+
* Cost rules:
|
|
10
|
+
* - The WRITE path (`recordStoredVersion`: JSON ingest, binary ingest, sync
|
|
11
|
+
* download) never reads a stored envelope. It folds ONLY the version
|
|
12
|
+
* already in memory: into an existing sidecar, or into a new one when it
|
|
13
|
+
* is the scope's only version; otherwise it leaves the sidecar absent.
|
|
14
|
+
* Whatever it did not cover stays visible to the owner's read: the
|
|
15
|
+
* ledger's `through` marker only advances over versions that were folded.
|
|
16
|
+
* - The owner's `/additions` read (`ensureScopeLedger`) does all the
|
|
17
|
+
* catching up and rebuilding. It folds ONE version at a time, at most the
|
|
18
|
+
* newest `REBUILD_VERSION_LIMIT` versions and `REBUILD_BYTE_BUDGET` bytes
|
|
19
|
+
* of envelopes (index `sizeBytes`), oldest folded first, yielding to the
|
|
20
|
+
* event loop between versions. A scope whose rules track nothing is not
|
|
21
|
+
* read at all.
|
|
22
|
+
* - Negative outcomes (too large, nothing readable) are persisted as a ledger
|
|
23
|
+
* with a `skipped` reason, so they are not retried on every request. A
|
|
24
|
+
* single unreadable version is remembered in the ledger's `retry` list and
|
|
25
|
+
* read again at most once per hour; in between nothing is read.
|
|
26
|
+
*
|
|
27
|
+
* Guarantee, in order of strength:
|
|
28
|
+
* 1. Updates and deletions of one scope are serialized inside this process
|
|
29
|
+
* (`withScopeLock`), and after a write the sidecar is removed again if the
|
|
30
|
+
* scope has no versions left, so a delete racing a rebuild leaves nothing.
|
|
31
|
+
* 2. Across processes sharing one data directory a fold can still be lost.
|
|
32
|
+
* A lost version newer than the sidecar's `through` marker is repaired by
|
|
33
|
+
* the next `/additions` read.
|
|
34
|
+
* 3. A lost version at or before `through` is repaired only by a rebuild
|
|
35
|
+
* (delete the sidecar, or reimport).
|
|
36
|
+
* 4. A sidecar whose `latest` version no longer exists (it was deleted) is
|
|
37
|
+
* discarded and rebuilt.
|
|
38
|
+
*/
|
|
39
|
+
import type { DataStoragePort } from "../ports/index.js";
|
|
40
|
+
import { type ScopeFirstSeenLedger, type VersionToFold } from "./first-added.js";
|
|
41
|
+
/** Most recent retained versions considered when a sidecar is rebuilt or caught up. */
|
|
42
|
+
export declare const REBUILD_VERSION_LIMIT = 200;
|
|
43
|
+
/** Envelope bytes (from the index) read for one scope in one rebuild or catch-up. */
|
|
44
|
+
export declare const REBUILD_BYTE_BUDGET: number;
|
|
45
|
+
export interface LedgerStoreOptions {
|
|
46
|
+
/** Override `REBUILD_BYTE_BUDGET`. */
|
|
47
|
+
byteBudget?: number;
|
|
48
|
+
/**
|
|
49
|
+
* The caller's clock, used to space the retries of unreadable versions.
|
|
50
|
+
* Defaults to the current time.
|
|
51
|
+
*/
|
|
52
|
+
now?: Date;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Fold a version that was just stored AND indexed into the scope's sidecar.
|
|
56
|
+
* Best-effort and cheap: any failure is swallowed (the write that triggered
|
|
57
|
+
* it stays successful), and it never rebuilds. `data` is the envelope data
|
|
58
|
+
* already in memory, so the previous version is never re-read.
|
|
59
|
+
*/
|
|
60
|
+
export declare function recordStoredVersion(storage: DataStoragePort, version: VersionToFold): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* The scope's ledger for a read: the stored sidecar (caught up with any newer
|
|
63
|
+
* retained version it missed), or a bounded rebuild from the retained versions
|
|
64
|
+
* that is persisted when the storage can hold it. Null when the scope has no
|
|
65
|
+
* version. This is the one place a read path may parse stored envelopes, and
|
|
66
|
+
* only when the sidecar is absent, stale or behind.
|
|
67
|
+
*/
|
|
68
|
+
export declare function ensureScopeLedger(storage: DataStoragePort, scope: string, options?: LedgerStoreOptions): Promise<ScopeFirstSeenLedger | null>;
|
|
69
|
+
//# sourceMappingURL=ledger-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ledger-store.d.ts","sourceRoot":"","sources":["../../src/additions/ledger-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EAML,KAAK,oBAAoB,EACzB,KAAK,aAAa,EACnB,MAAM,kBAAkB,CAAC;AAI1B,uFAAuF;AACvF,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,qFAAqF;AACrF,eAAO,MAAM,mBAAmB,QAAoB,CAAC;AAErD,MAAM,WAAW,kBAAkB;IACjC,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAoRD;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CA0Cf;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,eAAe,EACxB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAkCtC"}
|
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Keeps a scope's first-seen sidecar current. See `first-added.ts` for the
|
|
3
|
+
* ledger itself; this module is the only code that reads and writes it.
|
|
4
|
+
*
|
|
5
|
+
* The sidecar is a cache derived from the scope's stored versions, so every
|
|
6
|
+
* failure here is survivable: a missing or unreadable sidecar is rebuilt from
|
|
7
|
+
* the retained versions the next time the owner asks for it.
|
|
8
|
+
*
|
|
9
|
+
* Cost rules:
|
|
10
|
+
* - The WRITE path (`recordStoredVersion`: JSON ingest, binary ingest, sync
|
|
11
|
+
* download) never reads a stored envelope. It folds ONLY the version
|
|
12
|
+
* already in memory: into an existing sidecar, or into a new one when it
|
|
13
|
+
* is the scope's only version; otherwise it leaves the sidecar absent.
|
|
14
|
+
* Whatever it did not cover stays visible to the owner's read: the
|
|
15
|
+
* ledger's `through` marker only advances over versions that were folded.
|
|
16
|
+
* - The owner's `/additions` read (`ensureScopeLedger`) does all the
|
|
17
|
+
* catching up and rebuilding. It folds ONE version at a time, at most the
|
|
18
|
+
* newest `REBUILD_VERSION_LIMIT` versions and `REBUILD_BYTE_BUDGET` bytes
|
|
19
|
+
* of envelopes (index `sizeBytes`), oldest folded first, yielding to the
|
|
20
|
+
* event loop between versions. A scope whose rules track nothing is not
|
|
21
|
+
* read at all.
|
|
22
|
+
* - Negative outcomes (too large, nothing readable) are persisted as a ledger
|
|
23
|
+
* with a `skipped` reason, so they are not retried on every request. A
|
|
24
|
+
* single unreadable version is remembered in the ledger's `retry` list and
|
|
25
|
+
* read again at most once per hour; in between nothing is read.
|
|
26
|
+
*
|
|
27
|
+
* Guarantee, in order of strength:
|
|
28
|
+
* 1. Updates and deletions of one scope are serialized inside this process
|
|
29
|
+
* (`withScopeLock`), and after a write the sidecar is removed again if the
|
|
30
|
+
* scope has no versions left, so a delete racing a rebuild leaves nothing.
|
|
31
|
+
* 2. Across processes sharing one data directory a fold can still be lost.
|
|
32
|
+
* A lost version newer than the sidecar's `through` marker is repaired by
|
|
33
|
+
* the next `/additions` read.
|
|
34
|
+
* 3. A lost version at or before `through` is repaired only by a rebuild
|
|
35
|
+
* (delete the sidecar, or reimport).
|
|
36
|
+
* 4. A sidecar whose `latest` version no longer exists (it was deleted) is
|
|
37
|
+
* discarded and rebuilt.
|
|
38
|
+
*/
|
|
39
|
+
import { LedgerFold, MAX_RETRY_VERSIONS, RETRY_UNREADABLE_MS, readScopeFirstSeenLedger, yieldToEventLoop, } from "./first-added.js";
|
|
40
|
+
import { memoryRecordRulesFor } from "./record-rules.js";
|
|
41
|
+
import { withScopeLock } from "./scope-lock.js";
|
|
42
|
+
/** Most recent retained versions considered when a sidecar is rebuilt or caught up. */
|
|
43
|
+
export const REBUILD_VERSION_LIMIT = 200;
|
|
44
|
+
/** Envelope bytes (from the index) read for one scope in one rebuild or catch-up. */
|
|
45
|
+
export const REBUILD_BYTE_BUDGET = 256 * 1024 * 1024;
|
|
46
|
+
function isRecord(value) {
|
|
47
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
48
|
+
}
|
|
49
|
+
/** A scope whose rules track nothing: no envelope has to be read to fold it. */
|
|
50
|
+
function readsNothing(scope) {
|
|
51
|
+
return memoryRecordRulesFor(scope)?.length === 0;
|
|
52
|
+
}
|
|
53
|
+
/** The envelope data as stored (never the read-time view), or null if unreadable. */
|
|
54
|
+
async function readVersionData(storage, scope, collectedAt) {
|
|
55
|
+
if (readsNothing(scope))
|
|
56
|
+
return { scope, collectedAt, data: {} };
|
|
57
|
+
try {
|
|
58
|
+
// Called as methods of `storage`, never detached, to keep `this` bound.
|
|
59
|
+
const envelope = storage.readStoredEnvelope
|
|
60
|
+
? await storage.readStoredEnvelope(scope, collectedAt)
|
|
61
|
+
: await storage.readEnvelope(scope, collectedAt);
|
|
62
|
+
if (!isRecord(envelope.data))
|
|
63
|
+
return null;
|
|
64
|
+
return { scope, collectedAt, data: envelope.data };
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/** Retained versions, newest first by instant. */
|
|
71
|
+
function retainedVersions(storage, scope) {
|
|
72
|
+
return storage
|
|
73
|
+
.listVersions(scope, { limit: REBUILD_VERSION_LIMIT })
|
|
74
|
+
.filter((entry) => !Number.isNaN(Date.parse(entry.collectedAt)))
|
|
75
|
+
.sort((a, b) => Date.parse(b.collectedAt) - Date.parse(a.collectedAt) ||
|
|
76
|
+
(a.collectedAt < b.collectedAt
|
|
77
|
+
? 1
|
|
78
|
+
: a.collectedAt > b.collectedAt
|
|
79
|
+
? -1
|
|
80
|
+
: 0));
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* The newest prefix of `entries` (newest first) whose index sizes fit the
|
|
84
|
+
* budget. A scope that reads nothing is never limited.
|
|
85
|
+
*/
|
|
86
|
+
function withinBudget(scope, entries, budget) {
|
|
87
|
+
if (readsNothing(scope))
|
|
88
|
+
return [...entries];
|
|
89
|
+
const selected = [];
|
|
90
|
+
let used = 0;
|
|
91
|
+
for (const entry of entries) {
|
|
92
|
+
used += Math.max(0, entry.sizeBytes ?? 0);
|
|
93
|
+
if (used > budget)
|
|
94
|
+
break;
|
|
95
|
+
selected.push(entry);
|
|
96
|
+
}
|
|
97
|
+
return selected;
|
|
98
|
+
}
|
|
99
|
+
async function readStoredLedger(storage, scope) {
|
|
100
|
+
if (!storage.readFirstSeenLedger)
|
|
101
|
+
return null;
|
|
102
|
+
try {
|
|
103
|
+
const ledger = readScopeFirstSeenLedger(await storage.readFirstSeenLedger(scope));
|
|
104
|
+
return ledger !== null && ledger.scope === scope ? ledger : null;
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
// An unreadable sidecar is rebuilt, never trusted and never fatal.
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/** Remove the sidecar of a scope that no longer has any version. */
|
|
112
|
+
async function dropIfScopeEmpty(storage, scope) {
|
|
113
|
+
if (storage.findEntry({ scope }))
|
|
114
|
+
return false;
|
|
115
|
+
await storage.deleteFirstSeenLedger?.(scope);
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
118
|
+
/** Whether the version the ledger calls its `latest` is still stored (a direct lookup, not a window). */
|
|
119
|
+
function latestStillStored(storage, ledger) {
|
|
120
|
+
return (storage.findEntry({ scope: ledger.scope, at: ledger.latest.collectedAt })
|
|
121
|
+
?.collectedAt === ledger.latest.collectedAt);
|
|
122
|
+
}
|
|
123
|
+
function isMarker(ledger) {
|
|
124
|
+
return ledger.skipped === "too_large" || ledger.skipped === "unreadable";
|
|
125
|
+
}
|
|
126
|
+
function newerThan(retained, ledger) {
|
|
127
|
+
const throughMs = Date.parse(ledger.through);
|
|
128
|
+
return retained.filter((entry) => Date.parse(entry.collectedAt) > throughMs);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Fold `entries` (newest first) into `fold`, oldest first, one envelope at a
|
|
132
|
+
* time. Returns how many were folded and the entries that could not be read.
|
|
133
|
+
*/
|
|
134
|
+
async function foldEntries(storage, scope, entries, fold) {
|
|
135
|
+
let folded = 0;
|
|
136
|
+
const failed = [];
|
|
137
|
+
for (const entry of [...entries].reverse()) {
|
|
138
|
+
const version = await readVersionData(storage, scope, entry.collectedAt);
|
|
139
|
+
if (version) {
|
|
140
|
+
await fold.add(version);
|
|
141
|
+
folded += 1;
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
failed.push(entry);
|
|
145
|
+
}
|
|
146
|
+
await yieldToEventLoop();
|
|
147
|
+
}
|
|
148
|
+
return { folded, failed };
|
|
149
|
+
}
|
|
150
|
+
/** The retry record for versions that could not be read, or null when there are none. */
|
|
151
|
+
function retryOf(failed, now) {
|
|
152
|
+
if (failed.length === 0)
|
|
153
|
+
return null;
|
|
154
|
+
return {
|
|
155
|
+
versions: failed
|
|
156
|
+
.slice(0, MAX_RETRY_VERSIONS)
|
|
157
|
+
.map((entry) => entry.collectedAt),
|
|
158
|
+
attemptedAt: now.toISOString(),
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Rebuild a ledger from the scope's retained versions (see the cost rules in
|
|
163
|
+
* the header). `partial` marks a ledger that covers only part of the
|
|
164
|
+
* history, so its baseline is the oldest version actually folded.
|
|
165
|
+
*/
|
|
166
|
+
async function rebuild(storage, scope, retained, budget, now) {
|
|
167
|
+
if (retained.length === 0)
|
|
168
|
+
return null;
|
|
169
|
+
const selected = withinBudget(scope, retained, budget);
|
|
170
|
+
const fold = new LedgerFold(null, scope);
|
|
171
|
+
const { folded, failed } = await foldEntries(storage, scope, selected, fold);
|
|
172
|
+
if (folded === 0) {
|
|
173
|
+
// Persisted so the next request does not repeat the failed work.
|
|
174
|
+
return {
|
|
175
|
+
version: 3,
|
|
176
|
+
scope,
|
|
177
|
+
baseline: null,
|
|
178
|
+
current: null,
|
|
179
|
+
latest: { collectedAt: retained[0].collectedAt, total: 0 },
|
|
180
|
+
through: retained[0].collectedAt,
|
|
181
|
+
skipped: selected.length === 0 ? "too_large" : "unreadable",
|
|
182
|
+
records: {},
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
const total = storage.countVersions(scope);
|
|
186
|
+
return fold.finish({
|
|
187
|
+
partial: folded < total,
|
|
188
|
+
through: retained[0].collectedAt,
|
|
189
|
+
retry: retryOf(failed, now),
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Catch a ledger up for the owner's read. New versions (newer than `through`)
|
|
194
|
+
* are folded; a version that cannot be read is remembered in `retry` and
|
|
195
|
+
* tried again at most once per `RETRY_UNREADABLE_MS`. When nothing is new and
|
|
196
|
+
* no retry is due, nothing is read at all.
|
|
197
|
+
*/
|
|
198
|
+
async function catchUp(storage, ledger, retained, budget, now) {
|
|
199
|
+
const newer = newerThan(retained, ledger);
|
|
200
|
+
const selected = withinBudget(ledger.scope, newer, budget);
|
|
201
|
+
// Unreadable versions still stored; the deleted ones are forgotten.
|
|
202
|
+
const pending = (ledger.retry?.versions ?? []).filter((version) => retained.some((entry) => entry.collectedAt === version));
|
|
203
|
+
const due = ledger.retry !== undefined &&
|
|
204
|
+
pending.length > 0 &&
|
|
205
|
+
now.getTime() - Date.parse(ledger.retry.attemptedAt) >= RETRY_UNREADABLE_MS;
|
|
206
|
+
const retryEntries = due
|
|
207
|
+
? withinBudget(ledger.scope, retained.filter((entry) => pending.includes(entry.collectedAt)), budget)
|
|
208
|
+
: [];
|
|
209
|
+
const forgotten = pending.length !== (ledger.retry?.versions.length ?? 0);
|
|
210
|
+
if (selected.length === 0 && retryEntries.length === 0 && !forgotten) {
|
|
211
|
+
return ledger;
|
|
212
|
+
}
|
|
213
|
+
const fold = new LedgerFold(ledger);
|
|
214
|
+
const failedNew = selected.length > 0
|
|
215
|
+
? (await foldEntries(storage, ledger.scope, selected, fold)).failed
|
|
216
|
+
: [];
|
|
217
|
+
const failedRetry = retryEntries.length > 0
|
|
218
|
+
? (await foldEntries(storage, ledger.scope, retryEntries, fold)).failed
|
|
219
|
+
: [];
|
|
220
|
+
const stillFailing = due
|
|
221
|
+
? failedRetry.map((entry) => entry.collectedAt)
|
|
222
|
+
: pending;
|
|
223
|
+
const versions = [
|
|
224
|
+
...stillFailing,
|
|
225
|
+
...failedNew.map((entry) => entry.collectedAt),
|
|
226
|
+
].slice(0, MAX_RETRY_VERSIONS);
|
|
227
|
+
const attempted = due || failedNew.length > 0;
|
|
228
|
+
const retry = versions.length === 0
|
|
229
|
+
? null
|
|
230
|
+
: {
|
|
231
|
+
versions,
|
|
232
|
+
attemptedAt: attempted
|
|
233
|
+
? now.toISOString()
|
|
234
|
+
: ledger.retry.attemptedAt,
|
|
235
|
+
};
|
|
236
|
+
// Only a window cut (more versions than the index window shows) or the
|
|
237
|
+
// byte budget leaves new versions unfolded.
|
|
238
|
+
const beyond = storage.listVersions(ledger.scope, {
|
|
239
|
+
limit: 1,
|
|
240
|
+
offset: retained.length,
|
|
241
|
+
})[0];
|
|
242
|
+
const windowCut = beyond !== undefined &&
|
|
243
|
+
Date.parse(beyond.collectedAt) > Date.parse(ledger.through);
|
|
244
|
+
return ((await fold.finish({
|
|
245
|
+
partial: windowCut || selected.length < newer.length,
|
|
246
|
+
through: selected.length > 0 ? retained[0].collectedAt : ledger.through,
|
|
247
|
+
retry,
|
|
248
|
+
})) ?? ledger);
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Fold a version that was just stored AND indexed into the scope's sidecar.
|
|
252
|
+
* Best-effort and cheap: any failure is swallowed (the write that triggered
|
|
253
|
+
* it stays successful), and it never rebuilds. `data` is the envelope data
|
|
254
|
+
* already in memory, so the previous version is never re-read.
|
|
255
|
+
*/
|
|
256
|
+
export async function recordStoredVersion(storage, version) {
|
|
257
|
+
if (!storage.readFirstSeenLedger || !storage.writeFirstSeenLedger)
|
|
258
|
+
return;
|
|
259
|
+
try {
|
|
260
|
+
await withScopeLock(version.scope, async () => {
|
|
261
|
+
const retained = retainedVersions(storage, version.scope);
|
|
262
|
+
let existing = await readStoredLedger(storage, version.scope);
|
|
263
|
+
if (existing && !latestStillStored(storage, existing)) {
|
|
264
|
+
// Its newest version is gone: what it reports is stale.
|
|
265
|
+
await storage.deleteFirstSeenLedger?.(version.scope);
|
|
266
|
+
existing = null;
|
|
267
|
+
}
|
|
268
|
+
const others = retained.filter((entry) => entry.collectedAt !== version.collectedAt);
|
|
269
|
+
let through = version.collectedAt;
|
|
270
|
+
if (existing) {
|
|
271
|
+
// A failed or oversized rebuild is retried by the owner's read.
|
|
272
|
+
if (isMarker(existing))
|
|
273
|
+
return;
|
|
274
|
+
const throughMs = Date.parse(existing.through);
|
|
275
|
+
const unfolded = others.some((entry) => Date.parse(entry.collectedAt) > throughMs);
|
|
276
|
+
// Versions this write did not fold keep the marker where it was.
|
|
277
|
+
through =
|
|
278
|
+
unfolded || Date.parse(version.collectedAt) < throughMs
|
|
279
|
+
? existing.through
|
|
280
|
+
: version.collectedAt;
|
|
281
|
+
}
|
|
282
|
+
else if (others.length > 0) {
|
|
283
|
+
// Older versions exist but no sidecar: leave it for `/additions` to
|
|
284
|
+
// build, so a write never reads history.
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
const fold = new LedgerFold(existing, version.scope);
|
|
288
|
+
await fold.add(version);
|
|
289
|
+
const next = await fold.finish({ through });
|
|
290
|
+
if (!next)
|
|
291
|
+
return;
|
|
292
|
+
await storage.writeFirstSeenLedger(version.scope, next);
|
|
293
|
+
await dropIfScopeEmpty(storage, version.scope);
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
catch {
|
|
297
|
+
// Derived data: rebuilt from the retained versions when next needed.
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* The scope's ledger for a read: the stored sidecar (caught up with any newer
|
|
302
|
+
* retained version it missed), or a bounded rebuild from the retained versions
|
|
303
|
+
* that is persisted when the storage can hold it. Null when the scope has no
|
|
304
|
+
* version. This is the one place a read path may parse stored envelopes, and
|
|
305
|
+
* only when the sidecar is absent, stale or behind.
|
|
306
|
+
*/
|
|
307
|
+
export async function ensureScopeLedger(storage, scope, options = {}) {
|
|
308
|
+
const budget = options.byteBudget ?? REBUILD_BYTE_BUDGET;
|
|
309
|
+
const now = options.now ?? new Date();
|
|
310
|
+
return withScopeLock(scope, async () => {
|
|
311
|
+
try {
|
|
312
|
+
const retained = retainedVersions(storage, scope);
|
|
313
|
+
if (retained.length === 0) {
|
|
314
|
+
await storage.deleteFirstSeenLedger?.(scope);
|
|
315
|
+
return null;
|
|
316
|
+
}
|
|
317
|
+
let existing = await readStoredLedger(storage, scope);
|
|
318
|
+
if (existing &&
|
|
319
|
+
(!latestStillStored(storage, existing) ||
|
|
320
|
+
(isMarker(existing) && newerThan(retained, existing).length > 0))) {
|
|
321
|
+
existing = null;
|
|
322
|
+
}
|
|
323
|
+
const ledger = existing
|
|
324
|
+
? await catchUp(storage, existing, retained, budget, now)
|
|
325
|
+
: await rebuild(storage, scope, retained, budget, now);
|
|
326
|
+
if (ledger && ledger !== existing && storage.writeFirstSeenLedger) {
|
|
327
|
+
try {
|
|
328
|
+
await storage.writeFirstSeenLedger(scope, ledger);
|
|
329
|
+
if (await dropIfScopeEmpty(storage, scope))
|
|
330
|
+
return null;
|
|
331
|
+
}
|
|
332
|
+
catch {
|
|
333
|
+
// Served from memory; the next read rebuilds it again.
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
return ledger;
|
|
337
|
+
}
|
|
338
|
+
catch {
|
|
339
|
+
return null;
|
|
340
|
+
}
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
//# sourceMappingURL=ledger-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ledger-store.js","sourceRoot":"","sources":["../../src/additions/ledger-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/** One collection of a scope whose items are memory records. */
|
|
2
|
+
export interface MemoryRecordRule {
|
|
3
|
+
/** Canonical collection name; also the prefix of every record key. Top-level key in a legacy body. */
|
|
4
|
+
collection: string;
|
|
5
|
+
/**
|
|
6
|
+
* Other names the same collection is stored under: PDPP stream names or
|
|
7
|
+
* alternate legacy keys. In the stored PDPP rows form `{ records: [...] }`
|
|
8
|
+
* a scope's rows belong to the rule whose collection or alias is the
|
|
9
|
+
* scope's dataset name (the part after the first dot).
|
|
10
|
+
*/
|
|
11
|
+
aliases?: readonly string[];
|
|
12
|
+
/**
|
|
13
|
+
* LEGACY keyed form: fields tried in order for the record's identity.
|
|
14
|
+
* Dotted paths allowed. Empty = the collection is counted but not tracked.
|
|
15
|
+
*/
|
|
16
|
+
idFields: readonly string[];
|
|
17
|
+
/**
|
|
18
|
+
* ROWS form (stored PDPP `{ records: [...] }`): fields tried in order for
|
|
19
|
+
* the identity. Each is chosen so the legacy projection binding copies the
|
|
20
|
+
* value unchanged into the matching `idFields` field, so one record has
|
|
21
|
+
* the same key in both forms (proved per binding in
|
|
22
|
+
* `record-rules.parity.test.ts`). Empty = counted but not tracked.
|
|
23
|
+
*/
|
|
24
|
+
rowIdFields: readonly string[];
|
|
25
|
+
/** Rows form: keep a row only when this field equals this value (a stream that feeds several collections). */
|
|
26
|
+
streamFilter?: {
|
|
27
|
+
field: string;
|
|
28
|
+
equals: string;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* The scope is one record (a profile): counted as 1 when its body has any
|
|
32
|
+
* content (legacy form) or once per row (rows form), never tracked.
|
|
33
|
+
*/
|
|
34
|
+
singleton?: true;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Scope -> its record collections. The server's `total` must agree with what
|
|
38
|
+
* the owner app counts, so a scope the app counts is never given an empty
|
|
39
|
+
* list; where identity is not provably stable it is counted but not tracked.
|
|
40
|
+
* An empty list means the owner app also counts 0 for the scope.
|
|
41
|
+
*
|
|
42
|
+
* Both stored forms of a scope must produce the same keys, so each rule names
|
|
43
|
+
* the id field per form. Where the projection binding keeps no field that is
|
|
44
|
+
* equal in both forms (linkedin.experience, linkedin.education: the legacy
|
|
45
|
+
* body drops the row id), the collection is untracked in both forms and only
|
|
46
|
+
* counts toward the total.
|
|
47
|
+
*
|
|
48
|
+
* Changing a rule's `collection` or id fields re-keys that scope's ledger, so
|
|
49
|
+
* its records would be dated as new until its sidecar is rebuilt.
|
|
50
|
+
*/
|
|
51
|
+
export declare const MEMORY_RECORD_RULES: Readonly<Record<string, readonly MemoryRecordRule[]>>;
|
|
52
|
+
/** The rules for a scope, or null when the scope has no entry (generic default applies). */
|
|
53
|
+
export declare function memoryRecordRulesFor(scope: string): readonly MemoryRecordRule[] | null;
|
|
54
|
+
//# sourceMappingURL=record-rules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-rules.d.ts","sourceRoot":"","sources":["../../src/additions/record-rules.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,MAAM,WAAW,gBAAgB;IAC/B,sGAAsG;IACtG,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B;;;OAGG;IACH,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B;;;;;;OAMG;IACH,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,8GAA8G;IAC9G,YAAY,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACjD;;;OAGG;IACH,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAiCD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CACxC,MAAM,CAAC,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAC,CAqJ5C,CAAC;AAEF,4FAA4F;AAC5F,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,GACZ,SAAS,gBAAgB,EAAE,GAAG,IAAI,CAKpC"}
|