@peerbit/shared-log 13.2.24 → 13.2.26

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 (81) hide show
  1. package/dist/src/checked-prune.d.ts +12 -0
  2. package/dist/src/checked-prune.d.ts.map +1 -1
  3. package/dist/src/checked-prune.js +33 -0
  4. package/dist/src/checked-prune.js.map +1 -1
  5. package/dist/src/coordinate-persistence.d.ts +211 -0
  6. package/dist/src/coordinate-persistence.d.ts.map +1 -0
  7. package/dist/src/coordinate-persistence.js +1133 -0
  8. package/dist/src/coordinate-persistence.js.map +1 -0
  9. package/dist/src/errors.d.ts +1 -0
  10. package/dist/src/errors.d.ts.map +1 -1
  11. package/dist/src/errors.js +19 -0
  12. package/dist/src/errors.js.map +1 -1
  13. package/dist/src/index.d.ts +127 -133
  14. package/dist/src/index.d.ts.map +1 -1
  15. package/dist/src/index.js +1400 -4269
  16. package/dist/src/index.js.map +1 -1
  17. package/dist/src/instance-lifecycle.d.ts +117 -0
  18. package/dist/src/instance-lifecycle.d.ts.map +1 -0
  19. package/dist/src/instance-lifecycle.js +254 -0
  20. package/dist/src/instance-lifecycle.js.map +1 -0
  21. package/dist/src/join-warmup.d.ts +86 -0
  22. package/dist/src/join-warmup.d.ts.map +1 -0
  23. package/dist/src/join-warmup.js +351 -0
  24. package/dist/src/join-warmup.js.map +1 -0
  25. package/dist/src/native-write-through-block-store.d.ts +123 -0
  26. package/dist/src/native-write-through-block-store.d.ts.map +1 -0
  27. package/dist/src/native-write-through-block-store.js +989 -0
  28. package/dist/src/native-write-through-block-store.js.map +1 -0
  29. package/dist/src/peer-session.d.ts +117 -0
  30. package/dist/src/peer-session.d.ts.map +1 -0
  31. package/dist/src/peer-session.js +259 -0
  32. package/dist/src/peer-session.js.map +1 -0
  33. package/dist/src/replication-announcement.d.ts +116 -0
  34. package/dist/src/replication-announcement.d.ts.map +1 -0
  35. package/dist/src/replication-announcement.js +515 -0
  36. package/dist/src/replication-announcement.js.map +1 -0
  37. package/dist/src/replicator-liveness.d.ts +59 -0
  38. package/dist/src/replicator-liveness.d.ts.map +1 -0
  39. package/dist/src/replicator-liveness.js +304 -0
  40. package/dist/src/replicator-liveness.js.map +1 -0
  41. package/dist/src/sync/dispatch-lifecycle.d.ts +48 -0
  42. package/dist/src/sync/dispatch-lifecycle.d.ts.map +1 -0
  43. package/dist/src/sync/dispatch-lifecycle.js +141 -0
  44. package/dist/src/sync/dispatch-lifecycle.js.map +1 -0
  45. package/dist/src/sync/factory.d.ts +29 -0
  46. package/dist/src/sync/factory.d.ts.map +1 -0
  47. package/dist/src/sync/factory.js +87 -0
  48. package/dist/src/sync/factory.js.map +1 -0
  49. package/dist/src/sync/pending-sync-store.d.ts +105 -0
  50. package/dist/src/sync/pending-sync-store.d.ts.map +1 -0
  51. package/dist/src/sync/pending-sync-store.js +877 -0
  52. package/dist/src/sync/pending-sync-store.js.map +1 -0
  53. package/dist/src/sync/rateless-iblt.d.ts +4 -1
  54. package/dist/src/sync/rateless-iblt.d.ts.map +1 -1
  55. package/dist/src/sync/rateless-iblt.js +102 -106
  56. package/dist/src/sync/rateless-iblt.js.map +1 -1
  57. package/dist/src/sync/simple.d.ts +10 -41
  58. package/dist/src/sync/simple.d.ts.map +1 -1
  59. package/dist/src/sync/simple.js +259 -952
  60. package/dist/src/sync/simple.js.map +1 -1
  61. package/dist/src/sync/sync-peer-state.d.ts +16 -0
  62. package/dist/src/sync/sync-peer-state.d.ts.map +1 -0
  63. package/dist/src/sync/sync-peer-state.js +82 -0
  64. package/dist/src/sync/sync-peer-state.js.map +1 -0
  65. package/package.json +12 -12
  66. package/src/checked-prune.ts +35 -0
  67. package/src/coordinate-persistence.ts +1796 -0
  68. package/src/errors.ts +21 -0
  69. package/src/index.ts +4014 -7858
  70. package/src/instance-lifecycle.ts +351 -0
  71. package/src/join-warmup.ts +507 -0
  72. package/src/native-write-through-block-store.ts +1170 -0
  73. package/src/peer-session.ts +336 -0
  74. package/src/replication-announcement.ts +744 -0
  75. package/src/replicator-liveness.ts +439 -0
  76. package/src/sync/dispatch-lifecycle.ts +230 -0
  77. package/src/sync/factory.ts +154 -0
  78. package/src/sync/pending-sync-store.ts +1085 -0
  79. package/src/sync/rateless-iblt.ts +122 -132
  80. package/src/sync/simple.ts +334 -1144
  81. package/src/sync/sync-peer-state.ts +107 -0
@@ -0,0 +1,351 @@
1
+ const JOIN_WARMUP_SEND_SPACING_MS = 250;
2
+ /**
3
+ * One WarmupSession per join-warmup attempt window for a target. The
4
+ * instance IS the legacy opaque generation token — always compared by
5
+ * identity, never inspected — now carrying diagnostics. Rotation points are
6
+ * unchanged: created on demand, dropped at cancelJoinWarmupTarget so the
7
+ * next touch mints a fresh identity. Deliberately NOT hosted on
8
+ * PeerSession: warmup windows rotate independently of subscription epochs
9
+ * (poison and committed removals leave the subscription session alone), and
10
+ * a warmup target may have no session at all — auto-creating one as a
11
+ * warmup side effect would flip `isCurrent(peer, null)` from true to false
12
+ * at every receive-admission seat.
13
+ */
14
+ export class WarmupSession {
15
+ target;
16
+ createdAt = Date.now(); // diagnostics only
17
+ constructor(target) {
18
+ this.target = target;
19
+ }
20
+ }
21
+ export class JoinWarmupCoordinator {
22
+ deps;
23
+ _warmupSessionsByTarget;
24
+ _joinWarmupSendStateByTarget;
25
+ _joinWarmupRetryTimersByTarget;
26
+ _joinWarmupScheduledRetriesByTarget;
27
+ _repairSweepWarmupSessionByTarget;
28
+ constructor(deps) {
29
+ this.deps = deps;
30
+ this.reset();
31
+ }
32
+ reset() {
33
+ this._warmupSessionsByTarget = new Map();
34
+ this._joinWarmupSendStateByTarget = new Map();
35
+ this._joinWarmupRetryTimersByTarget = new Map();
36
+ this._joinWarmupScheduledRetriesByTarget = new Map();
37
+ this._repairSweepWarmupSessionByTarget = new Map();
38
+ }
39
+ ensureWarmupSession(target) {
40
+ let session = this._warmupSessionsByTarget.get(target);
41
+ if (!session) {
42
+ session = new WarmupSession(target);
43
+ this._warmupSessionsByTarget.set(target, session);
44
+ }
45
+ return session;
46
+ }
47
+ clearRepairSweepWarmupSessions() {
48
+ this._repairSweepWarmupSessionByTarget.clear();
49
+ }
50
+ trackJoinWarmupTimer(target, timer) {
51
+ let timers = this._joinWarmupRetryTimersByTarget.get(target);
52
+ if (!timers) {
53
+ timers = new Set();
54
+ this._joinWarmupRetryTimersByTarget.set(target, timers);
55
+ }
56
+ timers.add(timer);
57
+ this.deps.getRepairRetryTimers().add(timer.handle);
58
+ }
59
+ untrackJoinWarmupTimer(target, timer) {
60
+ this.deps.getRepairRetryTimers().delete(timer.handle);
61
+ const timers = this._joinWarmupRetryTimersByTarget.get(target);
62
+ if (!timers) {
63
+ return;
64
+ }
65
+ timers.delete(timer);
66
+ if (timers.size === 0) {
67
+ this._joinWarmupRetryTimersByTarget.delete(target);
68
+ }
69
+ }
70
+ cancelJoinWarmupTimers(target) {
71
+ const timers = this._joinWarmupRetryTimersByTarget.get(target);
72
+ if (!timers) {
73
+ return;
74
+ }
75
+ for (const timer of [...timers]) {
76
+ clearTimeout(timer.handle);
77
+ timer.resolve?.();
78
+ this.untrackJoinWarmupTimer(target, timer);
79
+ }
80
+ }
81
+ cancelJoinWarmupTarget(target) {
82
+ this._warmupSessionsByTarget.delete(target);
83
+ this.deps.onTargetCancelled(target);
84
+ this._repairSweepWarmupSessionByTarget.delete(target);
85
+ this.cancelJoinWarmupTimers(target);
86
+ this._joinWarmupScheduledRetriesByTarget.delete(target);
87
+ const state = this._joinWarmupSendStateByTarget.get(target);
88
+ if (!state) {
89
+ return;
90
+ }
91
+ state.bypassKnownPeerHints = false;
92
+ state.entries.clear();
93
+ state.pending = false;
94
+ if (!state.running) {
95
+ this._joinWarmupSendStateByTarget.delete(target);
96
+ }
97
+ }
98
+ cancelAllJoinWarmupTargets() {
99
+ const targets = new Set([
100
+ ...this._warmupSessionsByTarget.keys(),
101
+ ...this._joinWarmupRetryTimersByTarget.keys(),
102
+ ...this._joinWarmupScheduledRetriesByTarget.keys(),
103
+ ...this._joinWarmupSendStateByTarget.keys(),
104
+ ]);
105
+ for (const target of targets) {
106
+ this.cancelJoinWarmupTarget(target);
107
+ }
108
+ }
109
+ async sleepJoinWarmupTracked(target, delayMs, repairLifecycleController) {
110
+ if (delayMs <= 0) {
111
+ return;
112
+ }
113
+ await new Promise((resolve) => {
114
+ let settled = false;
115
+ let trackedTimer;
116
+ const settle = () => {
117
+ if (settled) {
118
+ return;
119
+ }
120
+ settled = true;
121
+ if (repairLifecycleController ===
122
+ this.deps.getCurrentLifecycleController()) {
123
+ this.untrackJoinWarmupTimer(target, trackedTimer);
124
+ }
125
+ resolve();
126
+ };
127
+ const handle = setTimeout(settle, delayMs);
128
+ handle.unref?.();
129
+ trackedTimer = { handle, resolve: settle };
130
+ this.trackJoinWarmupTimer(target, trackedTimer);
131
+ });
132
+ }
133
+ scheduleJoinWarmupRetries(target, session, delaysMs, entries, bypassKnownPeerHints, repairLifecycleController = this.deps.getCurrentLifecycleController()) {
134
+ if (!this.deps.isLifecycleActive(repairLifecycleController) ||
135
+ this._warmupSessionsByTarget.get(target) !== session) {
136
+ return;
137
+ }
138
+ let scheduled = this._joinWarmupScheduledRetriesByTarget.get(target);
139
+ if (scheduled?.session !== session) {
140
+ this.cancelJoinWarmupTimers(target);
141
+ this._joinWarmupScheduledRetriesByTarget.delete(target);
142
+ scheduled = undefined;
143
+ }
144
+ if (!scheduled) {
145
+ scheduled = {
146
+ session,
147
+ slotsByDelay: new Map(),
148
+ };
149
+ this._joinWarmupScheduledRetriesByTarget.set(target, scheduled);
150
+ }
151
+ const delays = [...new Set(delaysMs)];
152
+ const batch = {
153
+ bypassKnownPeerHints,
154
+ entries: new Map(entries),
155
+ remainingAttempts: delays.length,
156
+ };
157
+ const now = Date.now();
158
+ for (const delayMs of delays) {
159
+ let slot = scheduled.slotsByDelay.get(delayMs);
160
+ if (!slot) {
161
+ slot = { cohorts: [], head: 0 };
162
+ scheduled.slotsByDelay.set(delayMs, slot);
163
+ }
164
+ const tail = slot.cohorts.at(-1);
165
+ const dueAt = Math.max(tail?.dueAt ?? 0, now + delayMs);
166
+ if (tail?.dueAt === dueAt) {
167
+ tail.batches.push(batch);
168
+ }
169
+ else {
170
+ slot.cohorts.push({
171
+ batches: [batch],
172
+ dueAt,
173
+ });
174
+ }
175
+ this.armJoinWarmupRetrySlot(target, scheduled, delayMs, slot, repairLifecycleController);
176
+ }
177
+ }
178
+ armJoinWarmupRetrySlot(target, scheduled, delayMs, slot, repairLifecycleController) {
179
+ if (!this.deps.isLifecycleActive(repairLifecycleController)) {
180
+ return;
181
+ }
182
+ const nextDueAt = slot.cohorts[slot.head]?.dueAt;
183
+ if (nextDueAt == null) {
184
+ return;
185
+ }
186
+ if (slot.timer && slot.timerDueAt === nextDueAt) {
187
+ return;
188
+ }
189
+ if (slot.timer) {
190
+ clearTimeout(slot.timer.handle);
191
+ this.untrackJoinWarmupTimer(target, slot.timer);
192
+ }
193
+ let trackedTimer;
194
+ const handle = setTimeout(() => {
195
+ if (!this.deps.isLifecycleActive(repairLifecycleController)) {
196
+ return;
197
+ }
198
+ this.untrackJoinWarmupTimer(target, trackedTimer);
199
+ if (slot.timer !== trackedTimer) {
200
+ return;
201
+ }
202
+ slot.timer = undefined;
203
+ slot.timerDueAt = undefined;
204
+ const current = this._joinWarmupScheduledRetriesByTarget.get(target);
205
+ if (current !== scheduled ||
206
+ current.slotsByDelay.get(delayMs) !== slot) {
207
+ return;
208
+ }
209
+ const dueEntries = new Map();
210
+ let bypassKnownPeerHints = false;
211
+ const now = Date.now();
212
+ while (slot.head < slot.cohorts.length &&
213
+ slot.cohorts[slot.head].dueAt <= now) {
214
+ const cohort = slot.cohorts[slot.head++];
215
+ for (const batch of cohort.batches) {
216
+ for (const [hash, entry] of batch.entries) {
217
+ dueEntries.set(hash, entry);
218
+ }
219
+ bypassKnownPeerHints ||= batch.bypassKnownPeerHints;
220
+ batch.remainingAttempts -= 1;
221
+ if (batch.remainingAttempts === 0) {
222
+ batch.entries.clear();
223
+ }
224
+ }
225
+ cohort.batches.length = 0;
226
+ }
227
+ if (dueEntries.size > 0 &&
228
+ !this.deps.isClosed() &&
229
+ this._warmupSessionsByTarget.get(target) === scheduled.session) {
230
+ this.queueJoinWarmupSend(target, scheduled.session, dueEntries, bypassKnownPeerHints, repairLifecycleController);
231
+ }
232
+ if (slot.head === slot.cohorts.length) {
233
+ current.slotsByDelay.delete(delayMs);
234
+ if (current.slotsByDelay.size === 0) {
235
+ this._joinWarmupScheduledRetriesByTarget.delete(target);
236
+ }
237
+ return;
238
+ }
239
+ if (slot.head >= 1_024 && slot.head * 2 >= slot.cohorts.length) {
240
+ slot.cohorts = slot.cohorts.slice(slot.head);
241
+ slot.head = 0;
242
+ }
243
+ this.armJoinWarmupRetrySlot(target, current, delayMs, slot, repairLifecycleController);
244
+ }, Math.max(0, nextDueAt - Date.now()));
245
+ handle.unref?.();
246
+ trackedTimer = { handle };
247
+ slot.timer = trackedTimer;
248
+ slot.timerDueAt = nextDueAt;
249
+ this.trackJoinWarmupTimer(target, trackedTimer);
250
+ }
251
+ queueJoinWarmupSend(target, session, entries, bypassKnownPeerHints, repairLifecycleController = this.deps.getCurrentLifecycleController()) {
252
+ if (!this.deps.isLifecycleActive(repairLifecycleController) ||
253
+ this._warmupSessionsByTarget.get(target) !== session) {
254
+ return;
255
+ }
256
+ let state = this._joinWarmupSendStateByTarget.get(target);
257
+ if (!state) {
258
+ state = {
259
+ bypassKnownPeerHints: false,
260
+ entries: new Map(),
261
+ session,
262
+ lastCompletedAt: Number.NEGATIVE_INFINITY,
263
+ pending: false,
264
+ running: false,
265
+ };
266
+ this._joinWarmupSendStateByTarget.set(target, state);
267
+ }
268
+ else if (state.session !== session) {
269
+ state.bypassKnownPeerHints = false;
270
+ state.entries.clear();
271
+ state.pending = false;
272
+ }
273
+ for (const [hash, entry] of entries) {
274
+ state.entries.set(hash, entry);
275
+ }
276
+ state.bypassKnownPeerHints ||= bypassKnownPeerHints;
277
+ state.session = session;
278
+ state.pending = true;
279
+ if (state.running) {
280
+ return;
281
+ }
282
+ void this.drainJoinWarmupSends(target, state, repairLifecycleController).catch((error) => {
283
+ if (this.deps.isLifecycleActive(repairLifecycleController)) {
284
+ this.deps.logError(error);
285
+ }
286
+ });
287
+ }
288
+ async drainJoinWarmupSends(target, state, repairLifecycleController) {
289
+ if (state.running ||
290
+ !this.deps.isLifecycleActive(repairLifecycleController)) {
291
+ return;
292
+ }
293
+ state.running = true;
294
+ try {
295
+ while (state.pending) {
296
+ if (!this.deps.isLifecycleActive(repairLifecycleController)) {
297
+ return;
298
+ }
299
+ state.pending = false;
300
+ const session = state.session;
301
+ const entries = new Map(state.entries);
302
+ state.entries.clear();
303
+ const bypassKnownPeerHints = state.bypassKnownPeerHints;
304
+ state.bypassKnownPeerHints = false;
305
+ const spacingMs = Math.max(0, state.lastCompletedAt + JOIN_WARMUP_SEND_SPACING_MS - Date.now());
306
+ await this.sleepJoinWarmupTracked(target, spacingMs, repairLifecycleController);
307
+ if (!this.deps.isLifecycleActive(repairLifecycleController) ||
308
+ state.session !== session ||
309
+ this._warmupSessionsByTarget.get(target) !== session) {
310
+ continue;
311
+ }
312
+ if (entries.size === 0) {
313
+ continue;
314
+ }
315
+ this.deps.bumpSimpleFallbackPasses();
316
+ try {
317
+ await this.deps.sendEntriesSimple(target, entries, {
318
+ bypassKnownPeers: bypassKnownPeerHints,
319
+ bypassRecentKnownPeers: bypassKnownPeerHints,
320
+ isStillCurrent: () => this.deps.isLifecycleActive(repairLifecycleController),
321
+ signal: repairLifecycleController.signal,
322
+ });
323
+ }
324
+ catch (error) {
325
+ if (this.deps.isLifecycleActive(repairLifecycleController)) {
326
+ this.deps.logError(error);
327
+ }
328
+ }
329
+ finally {
330
+ if (this.deps.isLifecycleActive(repairLifecycleController)) {
331
+ state.lastCompletedAt = Date.now();
332
+ }
333
+ }
334
+ }
335
+ }
336
+ finally {
337
+ state.running = false;
338
+ if (this._joinWarmupSendStateByTarget.get(target) === state) {
339
+ const currentRepairLifecycleController = this.deps.getCurrentLifecycleController();
340
+ if (state.pending &&
341
+ this.deps.isLifecycleActive(currentRepairLifecycleController)) {
342
+ void this.drainJoinWarmupSends(target, state, currentRepairLifecycleController).catch((error) => this.deps.logError(error));
343
+ }
344
+ else if (!this._warmupSessionsByTarget.has(target)) {
345
+ this._joinWarmupSendStateByTarget.delete(target);
346
+ }
347
+ }
348
+ }
349
+ }
350
+ }
351
+ //# sourceMappingURL=join-warmup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"join-warmup.js","sourceRoot":"","sources":["../../src/join-warmup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,123 @@
1
+ import type { AnyBlockStore } from "@peerbit/blocks";
2
+ import type { NativePeerbitBackbone } from "@peerbit/native-backbone";
3
+ import { NativeDurableCommitError } from "./errors.js";
4
+ /** The native backbone's in-wasm-memory block store. */
5
+ type NativeBackboneBlocks = NativePeerbitBackbone["blocks"];
6
+ /**
7
+ * Write-through block store bridging the native backbone's in-wasm-memory block
8
+ * store to a durable per-program {@link AnyBlockStore}.
9
+ *
10
+ * WHY: when the native backbone is active the log's entry blocks live only in
11
+ * the native wasm block map (`NativeBackboneBlockStore.persisted() === false`).
12
+ * On a restart that map is empty, so the native graph cannot reload heads the
13
+ * durable heads index still lists ("Failed to load entry from head"). This
14
+ * wrapper mirrors every write into the same durable `blocks` sublevel the
15
+ * non-native path uses. On a native miss, reads fall through to durable storage
16
+ * and lazily repopulate the wasm map so the native graph can walk the DAG again.
17
+ *
18
+ * The native store stays the authoritative hot store the native graph reads
19
+ * from: reads hit native first and only fall back to durable (repopulating
20
+ * native on a hit so subsequent native-graph reads succeed).
21
+ *
22
+ * METHOD SURFACE (see #1006): `RemoteBlocks` and the log feature-detect the
23
+ * optional batch methods (`putMany`/`putKnown`/`putKnownMany`/
24
+ * `putKnownManyColumns`/`rmMany`). To keep the receive-fusion / columnar fast
25
+ * paths engaged this wrapper preserves the native store's optional write
26
+ * methods — including `putKnownManyColumns`, which `AnyBlockStore` does not have
27
+ * — and delegates each. It adds only local durability/trim coordination hooks
28
+ * consumed by `RemoteBlocks` and the log; protocol/native-handle capabilities
29
+ * such as `getBlockResponsePayload`/`getNativeLogBlockStoreHandle` stay absent,
30
+ * so their optional-chained probes keep the existing fallback behavior.
31
+ */
32
+ export declare class NativeBackboneWriteThroughBlockStore {
33
+ private readonly native;
34
+ private readonly durable;
35
+ constructor(native: NativeBackboneBlocks, durable: AnyBlockStore);
36
+ private readonly pendingDurableWrites;
37
+ private nativeDurableCommitFailure?;
38
+ private stopCompleted;
39
+ private readonly nativeDeleteTombstones;
40
+ private nativeDeleteEpoch;
41
+ private readonly nativeBlockWriteGenerations;
42
+ private readonly pendingNativeDeleteCleanup;
43
+ private readonly stagedNativeDeleteCleanups;
44
+ private nextNativeDeleteCleanupToken;
45
+ private nativeDeleteCleanupRunning;
46
+ private nextNativeCommitOwnershipToken;
47
+ private readonly nativeCommitOwnerships;
48
+ private readonly nativeCommitOwnershipsByCid;
49
+ getNativeDurableCommitFailure(): NativeDurableCommitError | undefined;
50
+ private recordNativeDurableCommitFailure;
51
+ private throwIfNativeDurableCommitFailed;
52
+ throwIfDurableWritesFailed(): void;
53
+ private commitDurableMutation;
54
+ private beginNativeDelete;
55
+ private endNativeDelete;
56
+ private isNativeDeletePending;
57
+ private noteNativeBlockWrite;
58
+ private beginNativeCommitOwnership;
59
+ private releaseNativeCommitOwnership;
60
+ acknowledgeNativeCommitOwnership(token: unknown): void;
61
+ private enqueueNativeDeleteCleanup;
62
+ private releaseStagedNativeDeleteCleanup;
63
+ private discardStagedNativeDeleteCleanups;
64
+ beginNativeDeleteCleanup(cids: string[]): number | undefined;
65
+ cancelNativeDeleteCleanup(cleanupToken: unknown): void;
66
+ private waitForNativeDeleteCleanup;
67
+ private waitForTrackedDurableWrites;
68
+ private retryNativeDeleteCleanup;
69
+ private trackDurable;
70
+ private trackAwaitedDurable;
71
+ private drainDurable;
72
+ start(): Promise<void>;
73
+ stop(): Promise<void>;
74
+ status(): import("@peerbit/any-store-interface").MaybePromise<"opening" | "closed" | "open" | "closing">;
75
+ waitFor(): Promise<string[]>;
76
+ waitForDurableWrites(): Promise<void>;
77
+ mirrorToDurable(cid: string, bytes: Uint8Array, options?: {
78
+ nativeTrimmed?: boolean;
79
+ }): Promise<unknown>;
80
+ mirrorManyToDurable(blocks: Array<readonly [cid: string, bytes: Uint8Array]>, options?: {
81
+ nativeTrimmedCids?: ReadonlySet<string>;
82
+ }): Promise<unknown>;
83
+ rollbackFailedNativeCommits(cids: string[], restoreNativeCids?: string[], ownershipToken?: unknown): Promise<void>;
84
+ /**
85
+ * Compensate a native prepare that failed before its durable mirror began.
86
+ * Durable presence proves a same-CID acknowledged owner; an active ownership
87
+ * token proves a concurrent mirror. Only an unowned, non-durable hot block is
88
+ * exclusively attributable to the failed prepare and safe to remove.
89
+ */
90
+ rollbackUnmirroredNativeCommits(cids: string[], restoreNativeCids?: string[]): Promise<void>;
91
+ put(data: Uint8Array | {
92
+ block: {
93
+ bytes: Uint8Array;
94
+ };
95
+ cid: string;
96
+ }): Promise<string>;
97
+ putMany(blocks: Array<Uint8Array | {
98
+ block: {
99
+ bytes: Uint8Array;
100
+ };
101
+ cid: string;
102
+ }>): Promise<string[]>;
103
+ putKnown(cid: string, bytes: Uint8Array): Promise<string>;
104
+ putKnownMany(blocks: Array<readonly [cid: string, bytes: Uint8Array]>): Promise<string[]>;
105
+ putKnownManyColumns(cids: string[], bytes: Uint8Array[]): string[];
106
+ get(cid: string, _options?: unknown): Promise<Uint8Array | undefined>;
107
+ getMany(cids: string[]): Promise<Array<Uint8Array | undefined>>;
108
+ has(cid: string): Promise<boolean>;
109
+ hasMany(cids: string[]): Promise<boolean[]>;
110
+ rm(cid: string): Promise<void>;
111
+ del(cid: string): Promise<void>;
112
+ rmMany(cids: string[]): Promise<number>;
113
+ rmManyAfterNativeDelete(cids: string[], cleanupToken?: unknown): Promise<void>;
114
+ /** Finish committed trim GC before its durable recovery intent is retired. */
115
+ completeCommittedNativeDeleteCleanup(cids: string[], options?: {
116
+ reconstructMissing?: boolean;
117
+ }): Promise<void>;
118
+ iterator(): AsyncGenerator<[string, Uint8Array], void, void>;
119
+ size(): Promise<number>;
120
+ persisted(): boolean;
121
+ }
122
+ export {};
123
+ //# sourceMappingURL=native-write-through-block-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-write-through-block-store.d.ts","sourceRoot":"","sources":["../../src/native-write-through-block-store.ts"],"names":[],"mappings":"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"}