@bjornpagen/bumbledb-log 0.20.0 → 0.20.2

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 (76) hide show
  1. package/dist/braids.d.ts +28 -0
  2. package/dist/braids.d.ts.map +1 -0
  3. package/{src/braids.ts → dist/braids.js} +22 -29
  4. package/dist/braids.js.map +1 -0
  5. package/dist/bytes.d.ts +26 -0
  6. package/dist/bytes.d.ts.map +1 -0
  7. package/dist/bytes.js +86 -0
  8. package/dist/bytes.js.map +1 -0
  9. package/dist/chain.d.ts +56 -0
  10. package/dist/chain.d.ts.map +1 -0
  11. package/dist/chain.js +137 -0
  12. package/dist/chain.js.map +1 -0
  13. package/dist/codec.d.ts +71 -0
  14. package/dist/codec.d.ts.map +1 -0
  15. package/dist/codec.js +179 -0
  16. package/dist/codec.js.map +1 -0
  17. package/dist/descriptor.d.ts +61 -0
  18. package/dist/descriptor.d.ts.map +1 -0
  19. package/dist/descriptor.js +160 -0
  20. package/dist/descriptor.js.map +1 -0
  21. package/dist/errors.d.ts +202 -0
  22. package/dist/errors.d.ts.map +1 -0
  23. package/dist/errors.js +122 -0
  24. package/dist/errors.js.map +1 -0
  25. package/dist/index.d.ts +34 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +24 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/keys.d.ts +52 -0
  30. package/dist/keys.d.ts.map +1 -0
  31. package/dist/keys.js +166 -0
  32. package/dist/keys.js.map +1 -0
  33. package/dist/manifest.d.ts +42 -0
  34. package/dist/manifest.d.ts.map +1 -0
  35. package/dist/manifest.js +116 -0
  36. package/dist/manifest.js.map +1 -0
  37. package/dist/replica.d.ts +154 -0
  38. package/dist/replica.d.ts.map +1 -0
  39. package/dist/replica.js +820 -0
  40. package/dist/replica.js.map +1 -0
  41. package/dist/store-s3.d.ts +31 -0
  42. package/dist/store-s3.d.ts.map +1 -0
  43. package/dist/store-s3.js +299 -0
  44. package/dist/store-s3.js.map +1 -0
  45. package/dist/store.d.ts +129 -0
  46. package/dist/store.d.ts.map +1 -0
  47. package/dist/store.js +577 -0
  48. package/dist/store.js.map +1 -0
  49. package/dist/tenants.d.ts +56 -0
  50. package/dist/tenants.d.ts.map +1 -0
  51. package/dist/tenants.js +333 -0
  52. package/dist/tenants.js.map +1 -0
  53. package/dist/tilde-family.json +21 -0
  54. package/dist/vector.d.ts +31 -0
  55. package/dist/vector.d.ts.map +1 -0
  56. package/dist/vector.js +87 -0
  57. package/dist/vector.js.map +1 -0
  58. package/dist/writer.d.ts +106 -0
  59. package/dist/writer.d.ts.map +1 -0
  60. package/dist/writer.js +677 -0
  61. package/dist/writer.js.map +1 -0
  62. package/package.json +12 -7
  63. package/src/bytes.ts +0 -115
  64. package/src/chain.ts +0 -181
  65. package/src/codec.ts +0 -252
  66. package/src/descriptor.ts +0 -240
  67. package/src/errors.ts +0 -309
  68. package/src/index.ts +0 -57
  69. package/src/keys.ts +0 -218
  70. package/src/manifest.ts +0 -161
  71. package/src/replica.ts +0 -1061
  72. package/src/store-s3.ts +0 -377
  73. package/src/store.ts +0 -727
  74. package/src/tenants.ts +0 -414
  75. package/src/vector.ts +0 -103
  76. package/src/writer.ts +0 -977
@@ -0,0 +1,154 @@
1
+ /**
2
+ * The replica: a local store that is a materialized view of the
3
+ * braids' prefixes, plus the loop that keeps it current. Disposable by
4
+ * construction — the sidecar is a floor cache with one wholeness
5
+ * check; recovery IS the catch-up loop (L10). Generation is a total
6
+ * function of the chain: Settled sums the vector, Pending is that sum
7
+ * plus one. A replica that finds no manifest refuses; only a writer
8
+ * births a store.
9
+ */
10
+ import type { Db, Schema, SchemaRelations, WriteOutcome } from "@bjornpagen/bumbledb";
11
+ import type { Digest32 } from "./bytes.js";
12
+ import type { Chain, ChainEntry, Pending } from "./chain.js";
13
+ import type { Op } from "./codec.js";
14
+ import type { Braid, Descriptor } from "./descriptor.js";
15
+ import type { Generation } from "./keys.js";
16
+ import type { CheckpointFacts } from "./manifest.js";
17
+ import type { Etag, ObjectStore } from "./store.js";
18
+ declare const ZERO_HASH: Digest32;
19
+ type ReplicaState = {
20
+ readonly tag: "bootstrapped";
21
+ } | {
22
+ readonly tag: "checkpoint-seeded";
23
+ readonly catalog: Digest32;
24
+ } | {
25
+ readonly tag: "sidecar-resumed";
26
+ readonly floor: ReadonlyMap<Braid, Generation>;
27
+ };
28
+ type RefreshOutcome = {
29
+ readonly tag: "advanced";
30
+ readonly vector: ReadonlyMap<Braid, Generation>;
31
+ } | {
32
+ readonly tag: "wedged";
33
+ readonly braid: Braid;
34
+ readonly cause: string;
35
+ } | {
36
+ readonly tag: "reseed";
37
+ readonly cause: string;
38
+ } | {
39
+ readonly tag: "refused";
40
+ readonly detail: string;
41
+ };
42
+ /** The full waitFor sum: a wedged braid the target needs is an
43
+ * outcome, never an infinite poll. */
44
+ type Waited = {
45
+ readonly tag: "reached";
46
+ readonly vector: ReadonlyMap<Braid, Generation>;
47
+ } | {
48
+ readonly tag: "wedged";
49
+ readonly braid: Braid;
50
+ readonly cause: string;
51
+ } | {
52
+ readonly tag: "refused";
53
+ readonly detail: string;
54
+ };
55
+ interface OpenReplicaOptions<Rels extends SchemaRelations> {
56
+ readonly store: ObjectStore;
57
+ readonly prefix: string;
58
+ readonly dir: string;
59
+ readonly theory: Schema<Rels>;
60
+ }
61
+ interface Replica<Rels extends SchemaRelations> extends AsyncDisposable {
62
+ readonly db: Db<Rels>;
63
+ readonly vector: ReadonlyMap<Braid, Generation>;
64
+ refresh(braid?: Braid): Promise<ReadonlyMap<Braid, Generation>>;
65
+ waitFor(vector: ReadonlyMap<Braid, Generation>): Promise<Waited>;
66
+ }
67
+ interface Core<Rels extends SchemaRelations> {
68
+ readonly store: ObjectStore;
69
+ readonly prefix: string;
70
+ readonly dir: string;
71
+ readonly theory: Schema<Rels>;
72
+ readonly descriptor: Descriptor;
73
+ db: Db<Rels>;
74
+ /** Settled|Pending. Generation is chainGeneration(this.chain) — a
75
+ * total function of the sum. There is no pending Option beside the
76
+ * vector and no 0|1 addend a reader can skip (§30). */
77
+ chain: Chain;
78
+ manifestEtag: Etag | null;
79
+ checkpoint: CheckpointFacts | null;
80
+ checkpointDigest: Digest32 | null;
81
+ passes: number;
82
+ closed: boolean;
83
+ storeName: string;
84
+ gate: Promise<unknown>;
85
+ wedged: Map<Braid, string>;
86
+ provenance: ReplicaState;
87
+ }
88
+ declare function coreOf<Rels extends SchemaRelations>(replica: Replica<Rels>): Core<Rels>;
89
+ /** One asynchronous door per replica: refreshes, commits, and disposal serialize. */
90
+ declare function withGate<Rels extends SchemaRelations, R>(core: Core<Rels>, body: () => Promise<R>): Promise<R>;
91
+ declare function entriesOf<Rels extends SchemaRelations>(core: Core<Rels>): Map<Braid, ChainEntry>;
92
+ declare function chainEntry<Rels extends SchemaRelations>(core: Core<Rels>, braid: Braid): ChainEntry;
93
+ declare function generationOf<Rels extends SchemaRelations>(core: Core<Rels>): bigint;
94
+ /** Pending-arm payload: recorded ops and the batch header's timestamp
95
+ * ride on the batch, not a third Option beside the vector. Wire
96
+ * Pending is {braid,gen,bytes}; ops/ts are the in-memory fields of
97
+ * that arm (§30) — null on a batch adopted as bytes the seat has not
98
+ * decoded. */
99
+ type HeldBatch = Pending & {
100
+ readonly ops: readonly Op[] | null;
101
+ readonly ts: bigint | null;
102
+ };
103
+ declare function holdPending<Rels extends SchemaRelations>(core: Core<Rels>, batch: Pending, ops: readonly Op[] | null, ts: bigint | null): void;
104
+ declare function pendingOf<Rels extends SchemaRelations>(core: Core<Rels>): HeldBatch | null;
105
+ declare function persistSidecar<Rels extends SchemaRelations>(core: Core<Rels>): Promise<void>;
106
+ declare function clearPending<Rels extends SchemaRelations>(core: Core<Rels>): Promise<void>;
107
+ /** One `db.write` applying ops in listed order, rows in listed order.
108
+ * The positional row → named fact lift is the engine's `factOf` —
109
+ * closed-ref handles included. */
110
+ declare function applyOps<Rels extends SchemaRelations>(core: Core<Rels>, ops: readonly Op[]): WriteOutcome<Rels, number>;
111
+ /**
112
+ * The published checkpoint vector is the one floor: a slot at or
113
+ * below it is retired, and a create must not touch the store.
114
+ */
115
+ declare function belowFloor<Rels extends SchemaRelations>(core: Core<Rels>, braid: Braid, slot: Generation): boolean;
116
+ /**
117
+ * Classification of a pending batch against occupant, store
118
+ * generation, and the floor. BelowFloor is published (`Clear`) — the
119
+ * slot is already in the trusted history, not a candidate to re-judge.
120
+ */
121
+ type PendingFold = {
122
+ readonly tag: "ours";
123
+ } | {
124
+ readonly tag: "theirs-unapplied";
125
+ } | {
126
+ readonly tag: "theirs-applied";
127
+ } | {
128
+ readonly tag: "absent-unapplied";
129
+ } | {
130
+ readonly tag: "absent-applied";
131
+ } | {
132
+ readonly tag: "below-floor";
133
+ } | {
134
+ readonly tag: "phantom";
135
+ };
136
+ declare function foldPending(sum: bigint, generation: bigint, occupant: Uint8Array | null, pendingBytes: Uint8Array, covered: boolean): PendingFold;
137
+ /** The disposable law: the directory is cache, never truth. The local
138
+ * LMDB path rotates because the engine has no close verb — the old
139
+ * environment is left for GC while the fresh pull takes a new path.
140
+ * initializeStore writes Settled, so the open-identity is
141
+ * chainGeneration(core.chain) — there is no addend a reader can skip. */
142
+ declare function discardAndReopen<Rels extends SchemaRelations>(core: Core<Rels>): Promise<void>;
143
+ /**
144
+ * Re-addresses an applied-but-unpublished batch at the braid's current
145
+ * tip: fresh slot, `prev` citing the new predecessor, timestamp
146
+ * re-clamped — the ops are exactly the recorded ops the re-judgment
147
+ * just accepted. Publication itself retries on the next commit (60).
148
+ */
149
+ declare function readdressPending<Rels extends SchemaRelations>(core: Core<Rels>, ops: readonly Op[], writerId: bigint): Promise<void>;
150
+ declare function maxBigint(a: bigint, b: bigint): bigint;
151
+ declare function openReplica<Rels extends SchemaRelations>(options: OpenReplicaOptions<Rels>): Promise<Replica<Rels>>;
152
+ export type { Core, OpenReplicaOptions, RefreshOutcome, Replica, Waited };
153
+ export { applyOps, belowFloor, chainEntry, clearPending, coreOf, discardAndReopen, entriesOf, foldPending, generationOf, holdPending, maxBigint, openReplica, pendingOf, persistSidecar, readdressPending, withGate, ZERO_HASH };
154
+ //# sourceMappingURL=replica.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replica.d.ts","sourceRoot":"","sources":["../src/replica.ts"],"names":[],"mappings":"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"}