@peerbit/shared-log 13.2.32 → 13.2.34

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.
@@ -0,0 +1,16 @@
1
+ import { type PublicSignKey } from "@peerbit/crypto";
2
+ /**
3
+ * Derive the token echoed by V2 data frames. Delivery recipients are unsigned,
4
+ * so the receiver's nonce alone is not a destination binding. Folding both
5
+ * authenticated identities and signed transport sessions into the 32-byte
6
+ * field prevents a copied request nonce from creating an interchangeable
7
+ * stream for another receiver.
8
+ */
9
+ export declare const deriveReplicationInfoV2ReceiverBinding: (properties: {
10
+ receiverChallenge: Uint8Array;
11
+ receiver: PublicSignKey;
12
+ receiverTransportSession: bigint;
13
+ sender: PublicSignKey;
14
+ senderTransportSession: bigint;
15
+ }) => Uint8Array;
16
+ //# sourceMappingURL=replication-info-v2-binding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replication-info-v2-binding.d.ts","sourceRoot":"","sources":["../../src/replication-info-v2-binding.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAc,MAAM,iBAAiB,CAAC;AAmBjE;;;;;;GAMG;AACH,eAAO,MAAM,sCAAsC,GAAI,YAAY;IAClE,iBAAiB,EAAE,UAAU,CAAC;IAC9B,QAAQ,EAAE,aAAa,CAAC;IACxB,wBAAwB,EAAE,MAAM,CAAC;IACjC,MAAM,EAAE,aAAa,CAAC;IACtB,sBAAsB,EAAE,MAAM,CAAC;CAC/B,KAAG,UAUF,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { serialize } from "@dao-xyz/borsh";
2
+ import { sha256Sync } from "@peerbit/crypto";
3
+ import { concat, fromString } from "uint8arrays";
4
+ const RECEIVER_BINDING_DOMAIN = fromString("peerbit/shared-log/replication-info-v2/receiver-binding/v1");
5
+ const lengthPrefixed = (bytes) => {
6
+ const length = new Uint8Array(4);
7
+ new DataView(length.buffer).setUint32(0, bytes.byteLength, true);
8
+ return concat([length, bytes]);
9
+ };
10
+ const u64LittleEndian = (value) => {
11
+ const bytes = new Uint8Array(8);
12
+ new DataView(bytes.buffer).setBigUint64(0, value, true);
13
+ return bytes;
14
+ };
15
+ /**
16
+ * Derive the token echoed by V2 data frames. Delivery recipients are unsigned,
17
+ * so the receiver's nonce alone is not a destination binding. Folding both
18
+ * authenticated identities and signed transport sessions into the 32-byte
19
+ * field prevents a copied request nonce from creating an interchangeable
20
+ * stream for another receiver.
21
+ */
22
+ export const deriveReplicationInfoV2ReceiverBinding = (properties) => sha256Sync(concat([
23
+ lengthPrefixed(RECEIVER_BINDING_DOMAIN),
24
+ lengthPrefixed(properties.receiverChallenge),
25
+ lengthPrefixed(serialize(properties.receiver)),
26
+ u64LittleEndian(properties.receiverTransportSession),
27
+ lengthPrefixed(serialize(properties.sender)),
28
+ u64LittleEndian(properties.senderTransportSession),
29
+ ]));
30
+ //# sourceMappingURL=replication-info-v2-binding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replication-info-v2-binding.js","sourceRoot":"","sources":["../../src/replication-info-v2-binding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAsB,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,uBAAuB,GAAG,UAAU,CACzC,4DAA4D,CAC5D,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,KAAiB,EAAc,EAAE;IACxD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACjE,OAAO,MAAM,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAChC,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,KAAa,EAAc,EAAE;IACrD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAChC,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACxD,OAAO,KAAK,CAAC;AACd,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,sCAAsC,GAAG,CAAC,UAMtD,EAAc,EAAE,CAChB,UAAU,CACT,MAAM,CAAC;IACN,cAAc,CAAC,uBAAuB,CAAC;IACvC,cAAc,CAAC,UAAU,CAAC,iBAAiB,CAAC;IAC5C,cAAc,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC9C,eAAe,CAAC,UAAU,CAAC,wBAAwB,CAAC;IACpD,cAAc,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC5C,eAAe,CAAC,UAAU,CAAC,sBAAsB,CAAC;CAClD,CAAC,CACF,CAAC"}
@@ -0,0 +1,250 @@
1
+ import { type PublicSignKey } from "@peerbit/crypto";
2
+ import { AddedReplicationSegmentMessage, AllReplicatingSegmentsMessage, type ReplicationInfoV2Message, RequestReplicationInfoV2Message, StoppedReplicating } from "./replication.js";
3
+ type LegacyReplicationInfoMessage = AllReplicatingSegmentsMessage | AddedReplicationSegmentMessage | StoppedReplicating;
4
+ export type ReplicationInfoV2ReceivePhase = "awaiting-full" | "active" | "resync";
5
+ type LocalCapabilityReady = {
6
+ peerHash: string;
7
+ receiveEpoch: object | null;
8
+ receiverTransportSession: bigint;
9
+ /**
10
+ * The local capability envelope and the later RequestV2 envelope use the
11
+ * same millisecond clock. The sender deliberately requires the request to
12
+ * be strictly newer, so never construct it in this captured millisecond.
13
+ */
14
+ requestNotBeforeMs: number;
15
+ advertisement?: ReplicationInfoV2LocalCapabilityAdvertisement;
16
+ };
17
+ type LocalCapabilityReadyProperties = {
18
+ peerHash: string;
19
+ peerSession: object;
20
+ receiveEpoch: object | null;
21
+ receiverTransportSession: bigint;
22
+ requestNotBeforeMs: number;
23
+ };
24
+ export type ReplicationInfoV2LocalCapabilityAdvertisementHandle = {
25
+ firstAttempt: Promise<void>;
26
+ releaseLegacyBarrier(): void;
27
+ };
28
+ export type ReplicationInfoV2LocalCapabilityContext = {
29
+ peerHash: string;
30
+ target: PublicSignKey;
31
+ lifecycleSignal: AbortSignal;
32
+ legacyBarrierReleased: boolean;
33
+ };
34
+ export type ReplicationInfoV2LocalCapabilityAdvertisement = {
35
+ peerHash: string;
36
+ target: PublicSignKey;
37
+ peerSession: object;
38
+ receiveEpoch: object | null;
39
+ lifecycleSignal: AbortSignal;
40
+ onLifecycleAbort: () => void;
41
+ controller: AbortController;
42
+ context: ReplicationInfoV2LocalCapabilityContext;
43
+ attempts: number;
44
+ ready: boolean;
45
+ acknowledgedReady?: LocalCapabilityReady;
46
+ receiverTransportSession?: bigint;
47
+ timer?: ReturnType<typeof setTimeout>;
48
+ inFlight?: Promise<void>;
49
+ firstAttempt?: Promise<void>;
50
+ };
51
+ export type ReplicationInfoV2LocalCapabilityRefresh = {
52
+ receiverTransportSession: bigint;
53
+ requestNotBeforeMs: number;
54
+ };
55
+ export type ReplicationInfoV2ReceiveState = {
56
+ peerHash: string;
57
+ target: PublicSignKey;
58
+ peerSession: object;
59
+ receiveEpoch: object | null;
60
+ capabilities: number;
61
+ capabilityTimestamp: bigint;
62
+ senderTransportSession: bigint;
63
+ receiverTransportSession?: bigint;
64
+ receiverRequestChallenge: Uint8Array;
65
+ receiverBinding?: Uint8Array;
66
+ senderEpoch?: Uint8Array;
67
+ lastSequence?: bigint;
68
+ phase: ReplicationInfoV2ReceivePhase;
69
+ version: number;
70
+ controller: AbortController;
71
+ requestTimer?: ReturnType<typeof setTimeout>;
72
+ requestInFlight?: Promise<void>;
73
+ requestAttempts: number;
74
+ requestsSinceCapabilityRefresh: number;
75
+ requestParked: boolean;
76
+ capabilityRefreshRequired: boolean;
77
+ legacyFallbackTimer?: ReturnType<typeof setTimeout>;
78
+ legacyFallbackFingerprint?: Uint8Array;
79
+ legacyFallbackTimestamp?: bigint;
80
+ legacyFallbackAmbiguous: boolean;
81
+ lastCommittedTransportTimestamp?: bigint;
82
+ recentCommittedPayloads: Array<{
83
+ fingerprint: Uint8Array;
84
+ transportTimestamp: bigint;
85
+ }>;
86
+ lastLegacyObservationTimestamp?: bigint;
87
+ lastLegacyObservationFingerprint?: Uint8Array;
88
+ lastLegacyObservationAmbiguous: boolean;
89
+ reservedAdmission?: ReplicationInfoV2ReceiveAdmission;
90
+ };
91
+ export type ReplicationInfoV2ReceiveAdmission = {
92
+ state: ReplicationInfoV2ReceiveState;
93
+ version: number;
94
+ receiveEpoch: object | null;
95
+ message: ReplicationInfoV2Message;
96
+ kind: "full" | "added" | "stopped";
97
+ payloadFingerprint: Uint8Array;
98
+ transportTimestamp: bigint;
99
+ committed: boolean;
100
+ resyncAfterRelease?: boolean;
101
+ };
102
+ export type ReplicationInfoV2ReceiveDeps = {
103
+ getSelfKey: () => PublicSignKey;
104
+ getReceiverTransportSession: () => bigint;
105
+ isClosed: () => boolean;
106
+ isPeerSessionCurrent: (peerHash: string, peerSession: object) => boolean;
107
+ isReceiveEpochCurrent: (peerHash: string, receiveEpoch: object | null) => boolean;
108
+ isPeerStateCurrent: (peerHash: string, peerSession: object, receiveEpoch: object | null) => boolean;
109
+ isSenderTransportSessionCurrent: (peerHash: string, senderTransportSession: bigint) => boolean;
110
+ sendRequest: (request: RequestReplicationInfoV2Message, target: PublicSignKey, signal: AbortSignal) => Promise<void>;
111
+ refreshLocalCapability: (properties: {
112
+ peerHash: string;
113
+ target: PublicSignKey;
114
+ peerSession: object;
115
+ receiveEpoch: object | null;
116
+ signal: AbortSignal;
117
+ }) => Promise<ReplicationInfoV2LocalCapabilityRefresh | undefined>;
118
+ onRequestError?: (error: unknown) => void;
119
+ onLocalCapabilityError?: (error: unknown) => void;
120
+ now?: () => number;
121
+ requestRetryMs?: number;
122
+ maxRequestRetryMs?: number;
123
+ requestMaxAttempts?: number;
124
+ legacyFallbackDelayMs?: number;
125
+ };
126
+ /**
127
+ * Authenticated receive grants and sender-authoritative ordering for
128
+ * replication-info V2. State is bounded to one entry per subscribed peer and
129
+ * is always scoped to the exact PeerSession object.
130
+ */
131
+ export declare class ReplicationInfoV2ReceiveCoordinator {
132
+ private readonly deps;
133
+ _receiveStates: Map<string, ReplicationInfoV2ReceiveState>;
134
+ _cutoverPeerSessions: WeakSet<object>;
135
+ _localCapabilityReadyBySession: WeakMap<object, LocalCapabilityReady>;
136
+ _localCapabilityContextBySession: WeakMap<object, ReplicationInfoV2LocalCapabilityContext>;
137
+ _localCapabilityAdvertisementsByPeer: Map<string, ReplicationInfoV2LocalCapabilityAdvertisement>;
138
+ _reservedAdmissionsByPeer: Map<string, ReplicationInfoV2ReceiveAdmission>;
139
+ private readonly now;
140
+ private readonly requestRetryMs;
141
+ private readonly maxRequestRetryMs;
142
+ private readonly requestMaxAttempts;
143
+ private readonly legacyFallbackDelayMs;
144
+ constructor(deps: ReplicationInfoV2ReceiveDeps);
145
+ resetForOpen(): void;
146
+ clearForClose(): void;
147
+ clearPeer(peerHash: string, expectedSession?: object): void;
148
+ /** Revoke an unauthenticated or downgraded capability generation. */
149
+ revokePeerCapability(peerHash: string, reopenLegacy?: boolean): void;
150
+ private clearState;
151
+ private clearLocalCapabilityAdvertisement;
152
+ private isLocalCapabilityAdvertisementOwnerCurrent;
153
+ private isLocalCapabilityAdvertisementGenerationCurrent;
154
+ private isLocalCapabilityAdvertisementReadyOpen;
155
+ private localCapabilityRetryDelay;
156
+ private armLocalCapabilityAdvertisement;
157
+ private runLocalCapabilityAdvertisement;
158
+ /**
159
+ * Start local authenticated-apply advertisement independently of the legacy
160
+ * join path. ACK and legacy publication are a two-phase barrier: the first
161
+ * attempt always settles independently, while readiness is promoted only
162
+ * after the host releases the legacy barrier. Failed attempts leave one
163
+ * exact-session worker retrying with capped exponential backoff.
164
+ */
165
+ advertiseLocalCapability(properties: {
166
+ target: PublicSignKey;
167
+ peerSession: object;
168
+ receiveEpoch: object | null;
169
+ signal: AbortSignal;
170
+ }): ReplicationInfoV2LocalCapabilityAdvertisementHandle;
171
+ private releaseLocalCapabilityLegacyBarrier;
172
+ private promoteLocalCapabilityAdvertisement;
173
+ /**
174
+ * Re-advertise one exact current recovery epoch from the stable membership
175
+ * context captured during opening. The opening handle owns barrier release;
176
+ * recovery never bypasses a legacy snapshot or role publication still in
177
+ * progress.
178
+ */
179
+ reAdvertiseLocalCapabilityForRecovery(properties: {
180
+ peerHash: string;
181
+ peerSession: object;
182
+ receiveEpoch: object | null;
183
+ }): boolean;
184
+ /** Record success of this session's ACKed local APPLY advertisement. */
185
+ markLocalCapabilityReady(properties: LocalCapabilityReadyProperties): boolean;
186
+ private recordLocalCapabilityReady;
187
+ /**
188
+ * Promote one signed capability generation after the opening barrier has
189
+ * committed. Repeated same-session advertisements refresh freshness only;
190
+ * they never reset sequence state.
191
+ */
192
+ observeCapability(properties: {
193
+ peerHash: string;
194
+ target: PublicSignKey;
195
+ peerSession: object;
196
+ receiveEpoch: object | null;
197
+ capabilities: number;
198
+ senderTransportSession: bigint;
199
+ capabilityTimestamp: bigint;
200
+ }): boolean;
201
+ private bindLocalCapability;
202
+ /** Require a fresh capability-bound grant and authoritative Full. */
203
+ advanceRecovery(properties: {
204
+ peerHash: string;
205
+ peerSession: object;
206
+ receiveEpoch: object | null;
207
+ }): boolean;
208
+ private transitionToResync;
209
+ isLegacyCutover(peerSession: object | null): boolean;
210
+ prepare(message: ReplicationInfoV2Message, properties: {
211
+ from: PublicSignKey;
212
+ peerSession: object;
213
+ receiveEpoch: object | null;
214
+ senderTransportSession: bigint;
215
+ transportTimestamp: bigint;
216
+ }): ReplicationInfoV2ReceiveAdmission | undefined;
217
+ /** Reserve at most one decoded V2 frame per peer ahead of the apply lane. */
218
+ reserve(message: ReplicationInfoV2Message, properties: {
219
+ from: PublicSignKey;
220
+ peerSession: object;
221
+ receiveEpoch: object | null;
222
+ senderTransportSession: bigint;
223
+ transportTimestamp: bigint;
224
+ }): ReplicationInfoV2ReceiveAdmission | undefined;
225
+ release(admission: ReplicationInfoV2ReceiveAdmission): void;
226
+ /**
227
+ * B9 can lose its sender grant while keeping the topic session open. Its
228
+ * unmatched legacy sidecar is the compatibility signal to re-handshake; a
229
+ * matching V2 payload before or after the legacy copy suppresses the timer.
230
+ */
231
+ noteLegacyAnnouncement(properties: {
232
+ peerHash: string;
233
+ peerSession: object;
234
+ receiveEpoch: object | null;
235
+ senderTransportSession: bigint;
236
+ transportTimestamp: bigint;
237
+ message: LegacyReplicationInfoMessage;
238
+ }): boolean;
239
+ private clearLegacyFallback;
240
+ isAdmissionCurrent(admission: ReplicationInfoV2ReceiveAdmission): boolean;
241
+ commit(admission: ReplicationInfoV2ReceiveAdmission): boolean;
242
+ requireFullAfterFailure(admission: ReplicationInfoV2ReceiveAdmission): boolean;
243
+ private isStateCurrent;
244
+ private armRequest;
245
+ private requestRetryDelay;
246
+ private refreshGrant;
247
+ private runRequest;
248
+ }
249
+ export {};
250
+ //# sourceMappingURL=replication-info-v2-receive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replication-info-v2-receive.d.ts","sourceRoot":"","sources":["../../src/replication-info-v2-receive.ts"],"names":[],"mappings":"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"}