@peerbit/native-backbone 0.1.4 → 0.2.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 (44) hide show
  1. package/README.md +31 -0
  2. package/dist/src/durability/codec.d.ts +86 -0
  3. package/dist/src/durability/codec.d.ts.map +1 -0
  4. package/dist/src/durability/codec.js +365 -0
  5. package/dist/src/durability/codec.js.map +1 -0
  6. package/dist/src/durability/lease.d.ts +59 -0
  7. package/dist/src/durability/lease.d.ts.map +1 -0
  8. package/dist/src/durability/lease.js +48 -0
  9. package/dist/src/durability/lease.js.map +1 -0
  10. package/dist/src/durability/memory-storage.d.ts +37 -0
  11. package/dist/src/durability/memory-storage.d.ts.map +1 -0
  12. package/dist/src/durability/memory-storage.js +436 -0
  13. package/dist/src/durability/memory-storage.js.map +1 -0
  14. package/dist/src/durability/node-lease.d.ts +14 -0
  15. package/dist/src/durability/node-lease.d.ts.map +1 -0
  16. package/dist/src/durability/node-lease.js +214 -0
  17. package/dist/src/durability/node-lease.js.map +1 -0
  18. package/dist/src/durability/node-storage.d.ts +76 -0
  19. package/dist/src/durability/node-storage.d.ts.map +1 -0
  20. package/dist/src/durability/node-storage.js +1813 -0
  21. package/dist/src/durability/node-storage.js.map +1 -0
  22. package/dist/src/durability/storage.d.ts +224 -0
  23. package/dist/src/durability/storage.d.ts.map +1 -0
  24. package/dist/src/durability/storage.js +343 -0
  25. package/dist/src/durability/storage.js.map +1 -0
  26. package/dist/src/index.d.ts +93 -15
  27. package/dist/src/index.d.ts.map +1 -1
  28. package/dist/src/index.js +717 -199
  29. package/dist/src/index.js.map +1 -1
  30. package/dist/wasm/README.md +31 -0
  31. package/dist/wasm/native_backbone.d.ts +131 -115
  32. package/dist/wasm/native_backbone.js +96 -0
  33. package/dist/wasm/native_backbone_bg.wasm +0 -0
  34. package/dist/wasm/native_backbone_bg.wasm.d.ts +119 -115
  35. package/package.json +4 -3
  36. package/src/durability/codec.ts +683 -0
  37. package/src/durability/lease.ts +87 -0
  38. package/src/durability/memory-storage.ts +593 -0
  39. package/src/durability/node-lease.ts +293 -0
  40. package/src/durability/node-storage.ts +2798 -0
  41. package/src/durability/storage.ts +682 -0
  42. package/src/durability.rs +1872 -0
  43. package/src/index.ts +1392 -735
  44. package/src/lib.rs +1 -0
package/README.md CHANGED
@@ -25,3 +25,34 @@ Buffered helpers also install a bounded checkpoint policy by default. When the
25
25
  coordinate journal reaches the checkpoint threshold, the adapter writes a compact
26
26
  snapshot and removes the replay WAL. This keeps high-throughput strict-native
27
27
  document writes from trading append speed for unbounded restart replay cost.
28
+
29
+ The coordinate WAL supports clean stop/restart. It is not the recovery authority
30
+ for a crash-atomic append across blocks, graph state, heads, coordinates,
31
+ documents, and signer facts.
32
+
33
+ ## Local durability transaction primitives
34
+
35
+ The package also exposes the first, intentionally unwired building blocks for
36
+ the proposed local crash-safe transaction protocol. This is an on-disk recovery
37
+ format for one program directory; it is not a peer-to-peer wire protocol.
38
+
39
+ - a versioned, checksummed native journal codec that distinguishes a
40
+ structurally incomplete final frame from complete corruption;
41
+ - transaction-private block staging and typed strict-barrier receipts;
42
+ - immutable checkpoint generations with an A/B manifest switch; and
43
+ - a Node directory lease backed by an OS-held LevelDB lock and a persistent
44
+ fencing epoch.
45
+
46
+ These APIs do not change current append or open behavior. The Node filesystem
47
+ adapter owns its official Rust codec and crash-released directory lease, and is
48
+ the first supported strict physical backend on filesystems that support file and
49
+ directory sync. Its first open creates a synced genesis only in an otherwise
50
+ empty program directory; a nonempty legacy directory fails with
51
+ `NativeDurabilityMigrationRequiredError` and is never adopted implicitly.
52
+
53
+ Phase one retains the full journal and pins genesis as its scan base while newer
54
+ A/B checkpoints prove staging coverage. Journal compaction is deliberately
55
+ deferred until a later phase can switch the journal generation and its scan base
56
+ together. Memory storage is a non-crash-safe reference adapter, and OPFS remains
57
+ unsupported until its lifetime lease and worker-termination barriers have a
58
+ dedicated conformance gate.
@@ -0,0 +1,86 @@
1
+ import type { NativeDurabilityJournalClassification, NativeDurabilityJournalClassifier } from "./storage.js";
2
+ export declare const NATIVE_DURABILITY_JOURNAL_FORMAT_VERSION: 1;
3
+ export declare const NATIVE_DURABILITY_JOURNAL_MAX_U64: bigint;
4
+ export declare const NATIVE_DURABILITY_JOURNAL_MAX_BODY_LENGTH: number;
5
+ export declare const NATIVE_DURABILITY_JOURNAL_MAX_PROGRAM_ID_LENGTH = 4096;
6
+ export declare const NATIVE_DURABILITY_JOURNAL_MAX_TRANSACTION_ID_LENGTH = 1024;
7
+ export declare const NATIVE_DURABILITY_JOURNAL_MAX_WRITER_OWNER_ID_LENGTH = 1024;
8
+ export declare const NATIVE_DURABILITY_JOURNAL_MAX_WRITER_DOMAIN_ID_LENGTH = 1024;
9
+ export declare const NATIVE_DURABILITY_JOURNAL_CODEC_BRAND: unique symbol;
10
+ export declare enum NativeDurabilityPhase {
11
+ DurablePrepared = 1,
12
+ NativeApplied = 2,
13
+ Published = 3,
14
+ Committed = 4,
15
+ CleanupPending = 5,
16
+ Clean = 6
17
+ }
18
+ export declare enum NativeDurabilityOperationKind {
19
+ Append = 1,
20
+ Batch = 2,
21
+ Document = 3,
22
+ Receive = 4,
23
+ Repair = 5
24
+ }
25
+ export type NativeDurabilityJournalRecord = {
26
+ recordLsn: bigint;
27
+ txSequence: bigint;
28
+ writerEpoch: bigint;
29
+ writerOwnerId: string;
30
+ writerDomainId: string;
31
+ phase: NativeDurabilityPhase;
32
+ operationKind: NativeDurabilityOperationKind;
33
+ programId: Uint8Array;
34
+ transactionId: string;
35
+ planDigest: Uint8Array;
36
+ payload: Uint8Array;
37
+ };
38
+ export type NativeDurabilityCheckpointTransactionState = Pick<NativeDurabilityJournalRecord, "txSequence" | "transactionId" | "phase" | "operationKind" | "planDigest">;
39
+ export type NativeDurabilityJournalValidationContext = {
40
+ checkpointLsn: bigint;
41
+ checkpointTxSequenceHighwater: bigint;
42
+ expectedProgramId: Uint8Array;
43
+ expectedWriterDomainId: string;
44
+ checkpointWriterEpoch: bigint;
45
+ checkpointWriterOwnerId?: string;
46
+ currentWriterEpoch: bigint;
47
+ currentWriterOwnerId: string;
48
+ retainedTransactions?: readonly NativeDurabilityCheckpointTransactionState[];
49
+ };
50
+ export type NativeDurabilityIncompleteTailReason = "short-header" | "short-body" | "short-trailer";
51
+ export type NativeDurabilityJournalScan = {
52
+ records: NativeDurabilityJournalRecord[];
53
+ validLength: number;
54
+ incompleteTailOffset?: number;
55
+ incompleteTailReason?: NativeDurabilityIncompleteTailReason;
56
+ lastRecordLsn: bigint;
57
+ };
58
+ export type NativeDurabilityJournalErrorCode = "ERR_NATIVE_DURABILITY_JOURNAL_INPUT" | `ERR_NATIVE_DURABILITY_JOURNAL_${string}`;
59
+ export declare class NativeDurabilityJournalCodecError extends Error {
60
+ readonly code: NativeDurabilityJournalErrorCode;
61
+ readonly byteOffset?: number | undefined;
62
+ readonly cause?: unknown | undefined;
63
+ constructor(code: NativeDurabilityJournalErrorCode, message: string, byteOffset?: number | undefined, cause?: unknown | undefined);
64
+ }
65
+ export declare class NativeDurabilityJournalInputError extends NativeDurabilityJournalCodecError {
66
+ readonly field: string;
67
+ constructor(field: string, message: string);
68
+ }
69
+ export declare class NativeDurabilityJournalCorruptionError extends NativeDurabilityJournalCodecError {
70
+ constructor(code: NativeDurabilityJournalErrorCode, message: string, byteOffset?: number, cause?: unknown);
71
+ }
72
+ export declare class NativeDurabilityJournalCodec implements NativeDurabilityJournalClassifier {
73
+ private readonly native;
74
+ readonly formatVersion: 1;
75
+ readonly [NATIVE_DURABILITY_JOURNAL_CODEC_BRAND]: true;
76
+ private readonly validationContext;
77
+ private constructor();
78
+ static create(context: NativeDurabilityJournalValidationContext): Promise<NativeDurabilityJournalCodec>;
79
+ get context(): NativeDurabilityJournalValidationContext;
80
+ encode(record: NativeDurabilityJournalRecord): Uint8Array;
81
+ scan(bytes: Uint8Array, context?: NativeDurabilityJournalValidationContext): NativeDurabilityJournalScan;
82
+ classify(bytes: Uint8Array): NativeDurabilityJournalClassification;
83
+ }
84
+ export declare const isNativeDurabilityJournalCodec: (value: unknown) => value is NativeDurabilityJournalCodec;
85
+ export declare const createNativeDurabilityJournalCodec: (context: NativeDurabilityJournalValidationContext) => Promise<NativeDurabilityJournalCodec>;
86
+ //# sourceMappingURL=codec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../../src/durability/codec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,365 @@
1
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
2
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
3
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
4
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
5
+ });
6
+ }
7
+ return path;
8
+ };
9
+ export const NATIVE_DURABILITY_JOURNAL_FORMAT_VERSION = 1;
10
+ export const NATIVE_DURABILITY_JOURNAL_MAX_U64 = (1n << 64n) - 1n;
11
+ export const NATIVE_DURABILITY_JOURNAL_MAX_BODY_LENGTH = 64 * 1024 * 1024;
12
+ export const NATIVE_DURABILITY_JOURNAL_MAX_PROGRAM_ID_LENGTH = 4096;
13
+ export const NATIVE_DURABILITY_JOURNAL_MAX_TRANSACTION_ID_LENGTH = 1024;
14
+ export const NATIVE_DURABILITY_JOURNAL_MAX_WRITER_OWNER_ID_LENGTH = 1024;
15
+ export const NATIVE_DURABILITY_JOURNAL_MAX_WRITER_DOMAIN_ID_LENGTH = 1024;
16
+ export const NATIVE_DURABILITY_JOURNAL_CODEC_BRAND = Symbol.for("@peerbit/native-backbone/native-durability-journal-codec/v1");
17
+ export var NativeDurabilityPhase;
18
+ (function (NativeDurabilityPhase) {
19
+ NativeDurabilityPhase[NativeDurabilityPhase["DurablePrepared"] = 1] = "DurablePrepared";
20
+ NativeDurabilityPhase[NativeDurabilityPhase["NativeApplied"] = 2] = "NativeApplied";
21
+ NativeDurabilityPhase[NativeDurabilityPhase["Published"] = 3] = "Published";
22
+ NativeDurabilityPhase[NativeDurabilityPhase["Committed"] = 4] = "Committed";
23
+ NativeDurabilityPhase[NativeDurabilityPhase["CleanupPending"] = 5] = "CleanupPending";
24
+ NativeDurabilityPhase[NativeDurabilityPhase["Clean"] = 6] = "Clean";
25
+ })(NativeDurabilityPhase || (NativeDurabilityPhase = {}));
26
+ export var NativeDurabilityOperationKind;
27
+ (function (NativeDurabilityOperationKind) {
28
+ NativeDurabilityOperationKind[NativeDurabilityOperationKind["Append"] = 1] = "Append";
29
+ NativeDurabilityOperationKind[NativeDurabilityOperationKind["Batch"] = 2] = "Batch";
30
+ NativeDurabilityOperationKind[NativeDurabilityOperationKind["Document"] = 3] = "Document";
31
+ NativeDurabilityOperationKind[NativeDurabilityOperationKind["Receive"] = 4] = "Receive";
32
+ NativeDurabilityOperationKind[NativeDurabilityOperationKind["Repair"] = 5] = "Repair";
33
+ })(NativeDurabilityOperationKind || (NativeDurabilityOperationKind = {}));
34
+ export class NativeDurabilityJournalCodecError extends Error {
35
+ code;
36
+ byteOffset;
37
+ cause;
38
+ constructor(code, message, byteOffset, cause) {
39
+ super(message);
40
+ this.code = code;
41
+ this.byteOffset = byteOffset;
42
+ this.cause = cause;
43
+ this.name = "NativeDurabilityJournalCodecError";
44
+ }
45
+ }
46
+ export class NativeDurabilityJournalInputError extends NativeDurabilityJournalCodecError {
47
+ field;
48
+ constructor(field, message) {
49
+ super("ERR_NATIVE_DURABILITY_JOURNAL_INPUT", message);
50
+ this.field = field;
51
+ this.name = "NativeDurabilityJournalInputError";
52
+ }
53
+ }
54
+ export class NativeDurabilityJournalCorruptionError extends NativeDurabilityJournalCodecError {
55
+ constructor(code, message, byteOffset, cause) {
56
+ super(code, message, byteOffset, cause);
57
+ this.name = "NativeDurabilityJournalCorruptionError";
58
+ }
59
+ }
60
+ let wasmModulePromise;
61
+ let wasmInitialization;
62
+ const nativeDurabilityJournalCodecConstructionToken = Symbol();
63
+ const trustedNativeDurabilityJournalCodecs = new WeakSet();
64
+ const loadWasm = async () => {
65
+ const wasmModulePath = "../../wasm/native_backbone.js";
66
+ wasmModulePromise ??= import(__rewriteRelativeImportExtension(
67
+ /* @vite-ignore */ wasmModulePath));
68
+ wasmInitialization ??= wasmModulePromise.then(async (wasm) => {
69
+ const processLike = globalThis;
70
+ if (processLike.process?.versions?.node) {
71
+ const fsPromises = "fs/promises";
72
+ const { readFile } = (await import(__rewriteRelativeImportExtension(
73
+ /* @vite-ignore */ fsPromises)));
74
+ const bytes = await readFile(new URL("../../wasm/native_backbone_bg.wasm", import.meta.url));
75
+ wasm.initSync({ module: bytes });
76
+ }
77
+ else {
78
+ await wasm.default({
79
+ module_or_path: new URL("../../wasm/native_backbone_bg.wasm", import.meta.url),
80
+ });
81
+ }
82
+ return wasm;
83
+ });
84
+ return wasmInitialization;
85
+ };
86
+ let textEncoder;
87
+ const utf8ByteLength = (value) => {
88
+ textEncoder ??= new TextEncoder();
89
+ return textEncoder.encode(value).byteLength;
90
+ };
91
+ const assertU64 = (value, field, options = {}) => {
92
+ if (typeof value !== "bigint" ||
93
+ value < 0n ||
94
+ value > NATIVE_DURABILITY_JOURNAL_MAX_U64 ||
95
+ (options.nonzero === true && value === 0n)) {
96
+ throw new NativeDurabilityJournalInputError(field, `${field} must be ${options.nonzero ? "a non-zero" : "an"} unsigned 64-bit bigint`);
97
+ }
98
+ };
99
+ const assertBytes = (value, field, options = {}) => {
100
+ if (!(value instanceof Uint8Array)) {
101
+ throw new NativeDurabilityJournalInputError(field, `${field} must be Uint8Array`);
102
+ }
103
+ if (options.exact != null && value.byteLength !== options.exact) {
104
+ throw new NativeDurabilityJournalInputError(field, `${field} must contain exactly ${options.exact} bytes`);
105
+ }
106
+ if (options.min != null && value.byteLength < options.min) {
107
+ throw new NativeDurabilityJournalInputError(field, `${field} must contain at least ${options.min} bytes`);
108
+ }
109
+ if (options.max != null && value.byteLength > options.max) {
110
+ throw new NativeDurabilityJournalInputError(field, `${field} exceeds ${options.max} bytes`);
111
+ }
112
+ };
113
+ const assertBoundedString = (value, field, maxBytes) => {
114
+ if (typeof value !== "string" || value.length === 0) {
115
+ throw new NativeDurabilityJournalInputError(field, `${field} must not be empty`);
116
+ }
117
+ const byteLength = utf8ByteLength(value);
118
+ if (byteLength > maxBytes) {
119
+ throw new NativeDurabilityJournalInputError(field, `${field} exceeds ${maxBytes} UTF-8 bytes`);
120
+ }
121
+ };
122
+ const assertPhase = (value, field) => {
123
+ if (!Number.isInteger(value) || value < 1 || value > 6) {
124
+ throw new NativeDurabilityJournalInputError(field, `${field} is invalid`);
125
+ }
126
+ };
127
+ const assertOperationKind = (value, field) => {
128
+ if (!Number.isInteger(value) || value < 1 || value > 5) {
129
+ throw new NativeDurabilityJournalInputError(field, `${field} is invalid`);
130
+ }
131
+ };
132
+ const assertRecord = (record) => {
133
+ assertU64(record.recordLsn, "recordLsn", { nonzero: true });
134
+ assertU64(record.txSequence, "txSequence", { nonzero: true });
135
+ assertU64(record.writerEpoch, "writerEpoch", { nonzero: true });
136
+ assertBoundedString(record.writerOwnerId, "writerOwnerId", NATIVE_DURABILITY_JOURNAL_MAX_WRITER_OWNER_ID_LENGTH);
137
+ assertBoundedString(record.writerDomainId, "writerDomainId", NATIVE_DURABILITY_JOURNAL_MAX_WRITER_DOMAIN_ID_LENGTH);
138
+ assertPhase(record.phase, "phase");
139
+ assertOperationKind(record.operationKind, "operationKind");
140
+ assertBytes(record.programId, "programId", {
141
+ min: 1,
142
+ max: NATIVE_DURABILITY_JOURNAL_MAX_PROGRAM_ID_LENGTH,
143
+ });
144
+ assertBoundedString(record.transactionId, "transactionId", NATIVE_DURABILITY_JOURNAL_MAX_TRANSACTION_ID_LENGTH);
145
+ assertBytes(record.planDigest, "planDigest", { exact: 32 });
146
+ assertBytes(record.payload, "payload", {
147
+ max: NATIVE_DURABILITY_JOURNAL_MAX_BODY_LENGTH,
148
+ });
149
+ };
150
+ const assertContext = (context) => {
151
+ assertU64(context.checkpointLsn, "checkpointLsn");
152
+ assertU64(context.checkpointTxSequenceHighwater, "checkpointTxSequenceHighwater");
153
+ assertBytes(context.expectedProgramId, "expectedProgramId", {
154
+ min: 1,
155
+ max: NATIVE_DURABILITY_JOURNAL_MAX_PROGRAM_ID_LENGTH,
156
+ });
157
+ assertBoundedString(context.expectedWriterDomainId, "expectedWriterDomainId", NATIVE_DURABILITY_JOURNAL_MAX_WRITER_DOMAIN_ID_LENGTH);
158
+ assertU64(context.checkpointWriterEpoch, "checkpointWriterEpoch");
159
+ assertU64(context.currentWriterEpoch, "currentWriterEpoch", { nonzero: true });
160
+ if (context.checkpointWriterEpoch > context.currentWriterEpoch) {
161
+ throw new NativeDurabilityJournalInputError("checkpointWriterEpoch", "checkpointWriterEpoch must not exceed currentWriterEpoch");
162
+ }
163
+ if (context.checkpointWriterEpoch > 0n && context.checkpointWriterOwnerId == null) {
164
+ throw new NativeDurabilityJournalInputError("checkpointWriterOwnerId", "checkpointWriterOwnerId is required for a non-genesis checkpoint epoch");
165
+ }
166
+ if (context.checkpointWriterOwnerId != null) {
167
+ assertBoundedString(context.checkpointWriterOwnerId, "checkpointWriterOwnerId", NATIVE_DURABILITY_JOURNAL_MAX_WRITER_OWNER_ID_LENGTH);
168
+ }
169
+ assertBoundedString(context.currentWriterOwnerId, "currentWriterOwnerId", NATIVE_DURABILITY_JOURNAL_MAX_WRITER_OWNER_ID_LENGTH);
170
+ for (const [index, retained] of (context.retainedTransactions ?? []).entries()) {
171
+ assertU64(retained.txSequence, `retainedTransactions[${index}].txSequence`, {
172
+ nonzero: true,
173
+ });
174
+ if (retained.txSequence > context.checkpointTxSequenceHighwater) {
175
+ throw new NativeDurabilityJournalInputError(`retainedTransactions[${index}].txSequence`, "retained transaction sequence exceeds checkpoint highwater");
176
+ }
177
+ assertBoundedString(retained.transactionId, `retainedTransactions[${index}].transactionId`, NATIVE_DURABILITY_JOURNAL_MAX_TRANSACTION_ID_LENGTH);
178
+ assertPhase(retained.phase, `retainedTransactions[${index}].phase`);
179
+ assertOperationKind(retained.operationKind, `retainedTransactions[${index}].operationKind`);
180
+ assertBytes(retained.planDigest, `retainedTransactions[${index}].planDigest`, {
181
+ exact: 32,
182
+ });
183
+ }
184
+ };
185
+ const copyContext = (context) => ({
186
+ ...context,
187
+ expectedProgramId: new Uint8Array(context.expectedProgramId),
188
+ retainedTransactions: (context.retainedTransactions ?? []).map((retained) => ({
189
+ ...retained,
190
+ planDigest: new Uint8Array(retained.planDigest),
191
+ })),
192
+ });
193
+ const parseDecimalU64 = (value, field) => {
194
+ if (typeof value !== "string" || !/^(0|[1-9][0-9]*)$/.test(value)) {
195
+ throw new NativeDurabilityJournalCorruptionError("ERR_NATIVE_DURABILITY_JOURNAL_INVALID_DECIMAL_U64", `${field} is not a canonical decimal u64`);
196
+ }
197
+ const parsed = BigInt(value);
198
+ if (parsed > NATIVE_DURABILITY_JOURNAL_MAX_U64) {
199
+ throw new NativeDurabilityJournalCorruptionError("ERR_NATIVE_DURABILITY_JOURNAL_INVALID_DECIMAL_U64", `${field} exceeds u64`);
200
+ }
201
+ return parsed;
202
+ };
203
+ const parseSafeOffset = (value, field, maximum) => {
204
+ if (typeof value !== "number" ||
205
+ !Number.isSafeInteger(value) ||
206
+ value < 0 ||
207
+ value > maximum) {
208
+ throw new NativeDurabilityJournalCorruptionError("ERR_NATIVE_DURABILITY_JOURNAL_INVALID_SCAN_ROW", `${field} is not a safe byte offset`);
209
+ }
210
+ return value;
211
+ };
212
+ const bytesFromRow = (value, field) => {
213
+ if (!(value instanceof Uint8Array)) {
214
+ throw new NativeDurabilityJournalCorruptionError("ERR_NATIVE_DURABILITY_JOURNAL_INVALID_SCAN_ROW", `${field} is not bytes`);
215
+ }
216
+ return new Uint8Array(value);
217
+ };
218
+ const stringFromRow = (value, field) => {
219
+ if (typeof value !== "string") {
220
+ throw new NativeDurabilityJournalCorruptionError("ERR_NATIVE_DURABILITY_JOURNAL_INVALID_SCAN_ROW", `${field} is not a string`);
221
+ }
222
+ return value;
223
+ };
224
+ const enumFromRow = (value, field, min, max) => {
225
+ if (typeof value !== "number" || !Number.isInteger(value) || value < min || value > max) {
226
+ throw new NativeDurabilityJournalCorruptionError("ERR_NATIVE_DURABILITY_JOURNAL_INVALID_SCAN_ROW", `${field} is invalid`);
227
+ }
228
+ return value;
229
+ };
230
+ const errorFromWasm = (error, kind) => {
231
+ if (Array.isArray(error) && typeof error[0] === "string" && typeof error[1] === "string") {
232
+ const offset = typeof error[2] === "number" && Number.isSafeInteger(error[2])
233
+ ? error[2]
234
+ : undefined;
235
+ if (kind === "corruption") {
236
+ return new NativeDurabilityJournalCorruptionError(error[0], error[1], offset, error);
237
+ }
238
+ return new NativeDurabilityJournalCodecError(error[0], error[1], offset, error);
239
+ }
240
+ return kind === "corruption"
241
+ ? new NativeDurabilityJournalCorruptionError("ERR_NATIVE_DURABILITY_JOURNAL_WASM", "Native durability journal codec failed", undefined, error)
242
+ : new NativeDurabilityJournalCodecError("ERR_NATIVE_DURABILITY_JOURNAL_WASM", "Native durability journal codec failed", undefined, error);
243
+ };
244
+ const parseScan = (raw, byteLength) => {
245
+ if (!Array.isArray(raw) || raw.length !== 5 || !Array.isArray(raw[4])) {
246
+ throw new NativeDurabilityJournalCorruptionError("ERR_NATIVE_DURABILITY_JOURNAL_INVALID_SCAN_ROW", "Native durability journal scan result is malformed");
247
+ }
248
+ const validLength = parseSafeOffset(raw[0], "validLength", byteLength);
249
+ const incompleteTailOffset = raw[1] == null
250
+ ? undefined
251
+ : parseSafeOffset(raw[1], "incompleteTailOffset", byteLength);
252
+ const reasonCode = enumFromRow(raw[2], "incompleteTailReason", 0, 3);
253
+ const incompleteTailReason = reasonCode === 0
254
+ ? undefined
255
+ : reasonCode === 1
256
+ ? "short-header"
257
+ : reasonCode === 2
258
+ ? "short-body"
259
+ : "short-trailer";
260
+ if ((incompleteTailOffset == null) !== (incompleteTailReason == null)) {
261
+ throw new NativeDurabilityJournalCorruptionError("ERR_NATIVE_DURABILITY_JOURNAL_INVALID_SCAN_ROW", "Incomplete-tail offset and reason disagree");
262
+ }
263
+ const records = raw[4].map((unknownRow, index) => {
264
+ if (!Array.isArray(unknownRow) || unknownRow.length !== 11) {
265
+ throw new NativeDurabilityJournalCorruptionError("ERR_NATIVE_DURABILITY_JOURNAL_INVALID_SCAN_ROW", `Journal record row ${index} is malformed`);
266
+ }
267
+ const row = unknownRow;
268
+ return {
269
+ recordLsn: parseDecimalU64(row[0], `records[${index}].recordLsn`),
270
+ txSequence: parseDecimalU64(row[1], `records[${index}].txSequence`),
271
+ writerEpoch: parseDecimalU64(row[2], `records[${index}].writerEpoch`),
272
+ writerOwnerId: stringFromRow(row[3], `records[${index}].writerOwnerId`),
273
+ writerDomainId: stringFromRow(row[4], `records[${index}].writerDomainId`),
274
+ phase: enumFromRow(row[5], `records[${index}].phase`, 1, 6),
275
+ operationKind: enumFromRow(row[6], `records[${index}].operationKind`, 1, 5),
276
+ programId: bytesFromRow(row[7], `records[${index}].programId`),
277
+ transactionId: stringFromRow(row[8], `records[${index}].transactionId`),
278
+ planDigest: bytesFromRow(row[9], `records[${index}].planDigest`),
279
+ payload: bytesFromRow(row[10], `records[${index}].payload`),
280
+ };
281
+ });
282
+ return {
283
+ records,
284
+ validLength,
285
+ incompleteTailOffset,
286
+ incompleteTailReason,
287
+ lastRecordLsn: parseDecimalU64(raw[3], "lastRecordLsn"),
288
+ };
289
+ };
290
+ export class NativeDurabilityJournalCodec {
291
+ native;
292
+ formatVersion = NATIVE_DURABILITY_JOURNAL_FORMAT_VERSION;
293
+ [NATIVE_DURABILITY_JOURNAL_CODEC_BRAND] = true;
294
+ validationContext;
295
+ constructor(constructionToken, native, context) {
296
+ this.native = native;
297
+ if (constructionToken !== nativeDurabilityJournalCodecConstructionToken) {
298
+ throw new TypeError("NativeDurabilityJournalCodec must be created by createNativeDurabilityJournalCodec");
299
+ }
300
+ assertContext(context);
301
+ this.validationContext = copyContext(context);
302
+ }
303
+ static async create(context) {
304
+ assertContext(context);
305
+ // Snapshot before the first await so caller mutation cannot change the
306
+ // validation authority while the Wasm module is loading.
307
+ const validationContext = copyContext(context);
308
+ const wasm = await loadWasm();
309
+ const codec = new NativeDurabilityJournalCodec(nativeDurabilityJournalCodecConstructionToken, new wasm.NativeDurabilityJournalCodec(), validationContext);
310
+ trustedNativeDurabilityJournalCodecs.add(codec);
311
+ return codec;
312
+ }
313
+ get context() {
314
+ return copyContext(this.validationContext);
315
+ }
316
+ encode(record) {
317
+ assertRecord(record);
318
+ try {
319
+ return new Uint8Array(this.native.encodeFrame(record.recordLsn.toString(), record.txSequence.toString(), record.writerEpoch.toString(), record.writerOwnerId, record.writerDomainId, record.phase, record.operationKind, record.programId, record.transactionId, record.planDigest, record.payload));
320
+ }
321
+ catch (error) {
322
+ throw errorFromWasm(error, "input");
323
+ }
324
+ }
325
+ scan(bytes, context = this.validationContext) {
326
+ assertBytes(bytes, "journalBytes");
327
+ assertContext(context);
328
+ const retainedTransactions = (context.retainedTransactions ?? []).map((retained) => [
329
+ retained.txSequence.toString(),
330
+ retained.transactionId,
331
+ retained.phase,
332
+ retained.operationKind,
333
+ retained.planDigest,
334
+ ]);
335
+ try {
336
+ return parseScan(this.native.scan(bytes, context.checkpointLsn.toString(), context.checkpointTxSequenceHighwater.toString(), context.expectedProgramId, context.expectedWriterDomainId, context.checkpointWriterEpoch.toString(), context.checkpointWriterOwnerId, context.currentWriterEpoch.toString(), context.currentWriterOwnerId, retainedTransactions), bytes.byteLength);
337
+ }
338
+ catch (error) {
339
+ if (error instanceof NativeDurabilityJournalCodecError)
340
+ throw error;
341
+ throw errorFromWasm(error, "corruption");
342
+ }
343
+ }
344
+ classify(bytes) {
345
+ const scan = this.scan(bytes);
346
+ if (scan.incompleteTailOffset != null && scan.incompleteTailReason != null) {
347
+ return {
348
+ kind: "incomplete-tail",
349
+ validLength: scan.validLength,
350
+ lastRecordLsn: scan.lastRecordLsn,
351
+ reason: scan.incompleteTailReason,
352
+ };
353
+ }
354
+ return {
355
+ kind: "complete",
356
+ validLength: scan.validLength,
357
+ lastRecordLsn: scan.lastRecordLsn,
358
+ };
359
+ }
360
+ }
361
+ export const isNativeDurabilityJournalCodec = (value) => (typeof value === "object" || typeof value === "function") &&
362
+ value !== null &&
363
+ trustedNativeDurabilityJournalCodecs.has(value);
364
+ export const createNativeDurabilityJournalCodec = async (context) => NativeDurabilityJournalCodec.create(context);
365
+ //# sourceMappingURL=codec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec.js","sourceRoot":"","sources":["../../../src/durability/codec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ export type NativeDurabilityFence = Readonly<{
2
+ epoch: bigint;
3
+ ownerId: string;
4
+ domainId: string;
5
+ }>;
6
+ export declare const NATIVE_DURABILITY_MAX_U64: bigint;
7
+ export declare const NATIVE_DURABILITY_MAX_WRITER_ID_BYTES = 1024;
8
+ /**
9
+ * Exclusive ownership capability for one native durability directory.
10
+ *
11
+ * Implementations keep the underlying ownership primitive alive until
12
+ * `close()` completes. Storage writers must wrap the complete asynchronous
13
+ * mutation and its barrier in `runWhileHeld()` and persist the accompanying
14
+ * fence with their records. `assertHeld()` is diagnostic only; it is not a
15
+ * lifecycle guard for an operation that later awaits I/O.
16
+ */
17
+ export interface NativeDurabilityLease {
18
+ readonly fence: NativeDurabilityFence;
19
+ assertHeld(): Promise<void>;
20
+ /**
21
+ * Keep the lease alive for the complete asynchronous operation. `close()`
22
+ * starts rejecting new operations immediately and waits for operations that
23
+ * already entered this guard before releasing the underlying OS lock.
24
+ */
25
+ runWhileHeld<T>(operation: () => Promise<T>): Promise<T>;
26
+ close(): Promise<void>;
27
+ }
28
+ export declare class NativeDurabilityLeaseUnavailableError extends Error {
29
+ readonly directory: string;
30
+ readonly code = "NATIVE_DURABILITY_LEASE_UNAVAILABLE";
31
+ constructor(directory: string, options?: {
32
+ cause?: unknown;
33
+ });
34
+ }
35
+ export declare class NativeDurabilityLeaseClosedError extends Error {
36
+ readonly fence: NativeDurabilityFence;
37
+ readonly code = "NATIVE_DURABILITY_LEASE_CLOSED";
38
+ constructor(fence: NativeDurabilityFence);
39
+ }
40
+ export declare class NativeDurabilityLeaseStateError extends Error {
41
+ readonly directory: string;
42
+ readonly code = "NATIVE_DURABILITY_LEASE_STATE_INVALID";
43
+ constructor(directory: string, message: string, options?: {
44
+ cause?: unknown;
45
+ });
46
+ }
47
+ export declare class NativeDurabilityLeaseDirectorySyncError extends Error {
48
+ readonly directory: string;
49
+ readonly code = "NATIVE_DURABILITY_LEASE_DIRECTORY_SYNC_FAILED";
50
+ constructor(directory: string, options?: {
51
+ cause?: unknown;
52
+ });
53
+ }
54
+ export declare class NativeDurabilityFenceExhaustedError extends Error {
55
+ readonly directory: string;
56
+ readonly code = "NATIVE_DURABILITY_FENCE_EXHAUSTED";
57
+ constructor(directory: string);
58
+ }
59
+ //# sourceMappingURL=lease.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lease.d.ts","sourceRoot":"","sources":["../../../src/durability/lease.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CACjB,CAAC,CAAC;AAEH,eAAO,MAAM,yBAAyB,QAAmB,CAAC;AAC1D,eAAO,MAAM,qCAAqC,OAAO,CAAC;AAE1D;;;;;;;;GAQG;AACH,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC;IACtC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B;;;;OAIG;IACH,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACzD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED,qBAAa,qCAAsC,SAAQ,KAAK;IAI9D,QAAQ,CAAC,SAAS,EAAE,MAAM;IAH3B,QAAQ,CAAC,IAAI,yCAAyC;gBAG5C,SAAS,EAAE,MAAM,EAC1B,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAK9B;AAED,qBAAa,gCAAiC,SAAQ,KAAK;IAG9C,QAAQ,CAAC,KAAK,EAAE,qBAAqB;IAFjD,QAAQ,CAAC,IAAI,oCAAoC;gBAE5B,KAAK,EAAE,qBAAqB;CAIjD;AAED,qBAAa,+BAAgC,SAAQ,KAAK;IAIxD,QAAQ,CAAC,SAAS,EAAE,MAAM;IAH3B,QAAQ,CAAC,IAAI,2CAA2C;gBAG9C,SAAS,EAAE,MAAM,EAC1B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAK9B;AAED,qBAAa,uCAAwC,SAAQ,KAAK;IAIhE,QAAQ,CAAC,SAAS,EAAE,MAAM;IAH3B,QAAQ,CAAC,IAAI,mDAAmD;gBAGtD,SAAS,EAAE,MAAM,EAC1B,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAQ9B;AAED,qBAAa,mCAAoC,SAAQ,KAAK;IAGjD,QAAQ,CAAC,SAAS,EAAE,MAAM;IAFtC,QAAQ,CAAC,IAAI,uCAAuC;gBAE/B,SAAS,EAAE,MAAM;CAItC"}
@@ -0,0 +1,48 @@
1
+ export const NATIVE_DURABILITY_MAX_U64 = (1n << 64n) - 1n;
2
+ export const NATIVE_DURABILITY_MAX_WRITER_ID_BYTES = 1024;
3
+ export class NativeDurabilityLeaseUnavailableError extends Error {
4
+ directory;
5
+ code = "NATIVE_DURABILITY_LEASE_UNAVAILABLE";
6
+ constructor(directory, options) {
7
+ super(`Native durability directory is already open: ${directory}`, options);
8
+ this.directory = directory;
9
+ this.name = "NativeDurabilityLeaseUnavailableError";
10
+ }
11
+ }
12
+ export class NativeDurabilityLeaseClosedError extends Error {
13
+ fence;
14
+ code = "NATIVE_DURABILITY_LEASE_CLOSED";
15
+ constructor(fence) {
16
+ super(`Native durability lease is no longer held: ${fence.domainId}`);
17
+ this.fence = fence;
18
+ this.name = "NativeDurabilityLeaseClosedError";
19
+ }
20
+ }
21
+ export class NativeDurabilityLeaseStateError extends Error {
22
+ directory;
23
+ code = "NATIVE_DURABILITY_LEASE_STATE_INVALID";
24
+ constructor(directory, message, options) {
25
+ super(message, options);
26
+ this.directory = directory;
27
+ this.name = "NativeDurabilityLeaseStateError";
28
+ }
29
+ }
30
+ export class NativeDurabilityLeaseDirectorySyncError extends Error {
31
+ directory;
32
+ code = "NATIVE_DURABILITY_LEASE_DIRECTORY_SYNC_FAILED";
33
+ constructor(directory, options) {
34
+ super(`Native durability requires directory fsync support: ${directory}`, options);
35
+ this.directory = directory;
36
+ this.name = "NativeDurabilityLeaseDirectorySyncError";
37
+ }
38
+ }
39
+ export class NativeDurabilityFenceExhaustedError extends Error {
40
+ directory;
41
+ code = "NATIVE_DURABILITY_FENCE_EXHAUSTED";
42
+ constructor(directory) {
43
+ super(`Native durability fence epoch is exhausted: ${directory}`);
44
+ this.directory = directory;
45
+ this.name = "NativeDurabilityFenceExhaustedError";
46
+ }
47
+ }
48
+ //# sourceMappingURL=lease.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lease.js","sourceRoot":"","sources":["../../../src/durability/lease.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;AAC1D,MAAM,CAAC,MAAM,qCAAqC,GAAG,IAAI,CAAC;AAuB1D,MAAM,OAAO,qCAAsC,SAAQ,KAAK;IAIrD;IAHD,IAAI,GAAG,qCAAqC,CAAC;IAEtD,YACU,SAAiB,EAC1B,OAA6B;QAE7B,KAAK,CAAC,gDAAgD,SAAS,EAAE,EAAE,OAAO,CAAC,CAAC;QAHnE,cAAS,GAAT,SAAS,CAAQ;QAI1B,IAAI,CAAC,IAAI,GAAG,uCAAuC,CAAC;IACrD,CAAC;CACD;AAED,MAAM,OAAO,gCAAiC,SAAQ,KAAK;IAGrC;IAFZ,IAAI,GAAG,gCAAgC,CAAC;IAEjD,YAAqB,KAA4B;QAChD,KAAK,CAAC,8CAA8C,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QADlD,UAAK,GAAL,KAAK,CAAuB;QAEhD,IAAI,CAAC,IAAI,GAAG,kCAAkC,CAAC;IAChD,CAAC;CACD;AAED,MAAM,OAAO,+BAAgC,SAAQ,KAAK;IAI/C;IAHD,IAAI,GAAG,uCAAuC,CAAC;IAExD,YACU,SAAiB,EAC1B,OAAe,EACf,OAA6B;QAE7B,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAJf,cAAS,GAAT,SAAS,CAAQ;QAK1B,IAAI,CAAC,IAAI,GAAG,iCAAiC,CAAC;IAC/C,CAAC;CACD;AAED,MAAM,OAAO,uCAAwC,SAAQ,KAAK;IAIvD;IAHD,IAAI,GAAG,+CAA+C,CAAC;IAEhE,YACU,SAAiB,EAC1B,OAA6B;QAE7B,KAAK,CACJ,uDAAuD,SAAS,EAAE,EAClE,OAAO,CACP,CAAC;QANO,cAAS,GAAT,SAAS,CAAQ;QAO1B,IAAI,CAAC,IAAI,GAAG,yCAAyC,CAAC;IACvD,CAAC;CACD;AAED,MAAM,OAAO,mCAAoC,SAAQ,KAAK;IAGxC;IAFZ,IAAI,GAAG,mCAAmC,CAAC;IAEpD,YAAqB,SAAiB;QACrC,KAAK,CAAC,+CAA+C,SAAS,EAAE,CAAC,CAAC;QAD9C,cAAS,GAAT,SAAS,CAAQ;QAErC,IAAI,CAAC,IAAI,GAAG,qCAAqC,CAAC;IACnD,CAAC;CACD"}