@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.
- package/dist/src/checked-prune.d.ts +12 -0
- package/dist/src/checked-prune.d.ts.map +1 -1
- package/dist/src/checked-prune.js +33 -0
- package/dist/src/checked-prune.js.map +1 -1
- package/dist/src/coordinate-persistence.d.ts +211 -0
- package/dist/src/coordinate-persistence.d.ts.map +1 -0
- package/dist/src/coordinate-persistence.js +1133 -0
- package/dist/src/coordinate-persistence.js.map +1 -0
- package/dist/src/errors.d.ts +1 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +19 -0
- package/dist/src/errors.js.map +1 -1
- package/dist/src/index.d.ts +127 -133
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1400 -4269
- package/dist/src/index.js.map +1 -1
- package/dist/src/instance-lifecycle.d.ts +117 -0
- package/dist/src/instance-lifecycle.d.ts.map +1 -0
- package/dist/src/instance-lifecycle.js +254 -0
- package/dist/src/instance-lifecycle.js.map +1 -0
- package/dist/src/join-warmup.d.ts +86 -0
- package/dist/src/join-warmup.d.ts.map +1 -0
- package/dist/src/join-warmup.js +351 -0
- package/dist/src/join-warmup.js.map +1 -0
- package/dist/src/native-write-through-block-store.d.ts +123 -0
- package/dist/src/native-write-through-block-store.d.ts.map +1 -0
- package/dist/src/native-write-through-block-store.js +989 -0
- package/dist/src/native-write-through-block-store.js.map +1 -0
- package/dist/src/peer-session.d.ts +117 -0
- package/dist/src/peer-session.d.ts.map +1 -0
- package/dist/src/peer-session.js +259 -0
- package/dist/src/peer-session.js.map +1 -0
- package/dist/src/replication-announcement.d.ts +116 -0
- package/dist/src/replication-announcement.d.ts.map +1 -0
- package/dist/src/replication-announcement.js +515 -0
- package/dist/src/replication-announcement.js.map +1 -0
- package/dist/src/replicator-liveness.d.ts +59 -0
- package/dist/src/replicator-liveness.d.ts.map +1 -0
- package/dist/src/replicator-liveness.js +304 -0
- package/dist/src/replicator-liveness.js.map +1 -0
- package/dist/src/sync/dispatch-lifecycle.d.ts +48 -0
- package/dist/src/sync/dispatch-lifecycle.d.ts.map +1 -0
- package/dist/src/sync/dispatch-lifecycle.js +141 -0
- package/dist/src/sync/dispatch-lifecycle.js.map +1 -0
- package/dist/src/sync/factory.d.ts +29 -0
- package/dist/src/sync/factory.d.ts.map +1 -0
- package/dist/src/sync/factory.js +87 -0
- package/dist/src/sync/factory.js.map +1 -0
- package/dist/src/sync/pending-sync-store.d.ts +105 -0
- package/dist/src/sync/pending-sync-store.d.ts.map +1 -0
- package/dist/src/sync/pending-sync-store.js +877 -0
- package/dist/src/sync/pending-sync-store.js.map +1 -0
- package/dist/src/sync/rateless-iblt.d.ts +4 -1
- package/dist/src/sync/rateless-iblt.d.ts.map +1 -1
- package/dist/src/sync/rateless-iblt.js +102 -106
- package/dist/src/sync/rateless-iblt.js.map +1 -1
- package/dist/src/sync/simple.d.ts +10 -41
- package/dist/src/sync/simple.d.ts.map +1 -1
- package/dist/src/sync/simple.js +259 -952
- package/dist/src/sync/simple.js.map +1 -1
- package/dist/src/sync/sync-peer-state.d.ts +16 -0
- package/dist/src/sync/sync-peer-state.d.ts.map +1 -0
- package/dist/src/sync/sync-peer-state.js +82 -0
- package/dist/src/sync/sync-peer-state.js.map +1 -0
- package/package.json +12 -12
- package/src/checked-prune.ts +35 -0
- package/src/coordinate-persistence.ts +1796 -0
- package/src/errors.ts +21 -0
- package/src/index.ts +4014 -7858
- package/src/instance-lifecycle.ts +351 -0
- package/src/join-warmup.ts +507 -0
- package/src/native-write-through-block-store.ts +1170 -0
- package/src/peer-session.ts +336 -0
- package/src/replication-announcement.ts +744 -0
- package/src/replicator-liveness.ts +439 -0
- package/src/sync/dispatch-lifecycle.ts +230 -0
- package/src/sync/factory.ts +154 -0
- package/src/sync/pending-sync-store.ts +1085 -0
- package/src/sync/rateless-iblt.ts +122 -132
- package/src/sync/simple.ts +334 -1144
- package/src/sync/sync-peer-state.ts +107 -0
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import type { Cache } from "@peerbit/cache";
|
|
2
|
+
import type { Index } from "@peerbit/indexer-interface";
|
|
3
|
+
import type { Log } from "@peerbit/log";
|
|
4
|
+
import type { NativePeerbitBackbone } from "@peerbit/native-backbone";
|
|
5
|
+
import type { RPC } from "@peerbit/rpc";
|
|
6
|
+
import type { SharedLogNativeState } from "@peerbit/shared-log-rust";
|
|
7
|
+
import type { Numbers } from "../integers.js";
|
|
8
|
+
import type { TransportMessage } from "../message.js";
|
|
9
|
+
import type { EntryReplicated, ReplicationRangeIndexable } from "../ranges.js";
|
|
10
|
+
import type {
|
|
11
|
+
RawExchangeHeadsSender,
|
|
12
|
+
SyncOptions,
|
|
13
|
+
SynchronizerConstructor,
|
|
14
|
+
Syncronizer,
|
|
15
|
+
} from "./index.js";
|
|
16
|
+
import { RatelessIBLTSynchronizer } from "./rateless-iblt.js";
|
|
17
|
+
import { SimpleSyncronizer } from "./simple.js";
|
|
18
|
+
|
|
19
|
+
export type CreateSyncronizerProps<R extends "u32" | "u64"> = {
|
|
20
|
+
// pass-through refs (snapshotted at open() time; stable post-open)
|
|
21
|
+
numbers: Numbers<R>;
|
|
22
|
+
entryIndex: Index<EntryReplicated<R>, any>;
|
|
23
|
+
rangeIndex: Index<ReplicationRangeIndexable<R>, any>;
|
|
24
|
+
log: Log<any>;
|
|
25
|
+
rpc: RPC<TransportMessage, TransportMessage>;
|
|
26
|
+
coordinateToHash: Cache<string>;
|
|
27
|
+
// late-bound callbacks (native state fields are re-assigned across
|
|
28
|
+
// open/close and failure recovery; must be re-read per call)
|
|
29
|
+
getNativeState: () =>
|
|
30
|
+
| NativePeerbitBackbone
|
|
31
|
+
| SharedLogNativeState
|
|
32
|
+
| undefined;
|
|
33
|
+
isEntryRecentlyKnownByPeer: (
|
|
34
|
+
hash: string,
|
|
35
|
+
peer: string,
|
|
36
|
+
maxAgeMs: number,
|
|
37
|
+
) => boolean;
|
|
38
|
+
peerSupportsRawExchangeHeads: (peer: string) => boolean;
|
|
39
|
+
sendRawExchangeHeads: RawExchangeHeadsSender;
|
|
40
|
+
warn: (message: string) => void;
|
|
41
|
+
// construction-time scalars
|
|
42
|
+
compatibility?: number;
|
|
43
|
+
resolution: R;
|
|
44
|
+
sync?: SyncOptions<R>;
|
|
45
|
+
syncronizer?: SynchronizerConstructor<R>;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
export function createSyncronizer<R extends "u32" | "u64">(
|
|
49
|
+
props: CreateSyncronizerProps<R>,
|
|
50
|
+
): Syncronizer<R> {
|
|
51
|
+
const resolveHashesForSymbols = (
|
|
52
|
+
symbols: readonly bigint[] | BigUint64Array,
|
|
53
|
+
) => {
|
|
54
|
+
const nativeState = props.getNativeState();
|
|
55
|
+
if (!nativeState) {
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
if (
|
|
59
|
+
typeof BigUint64Array !== "undefined" &&
|
|
60
|
+
typeof nativeState.getEntryHashesForHashNumbersU64 === "function"
|
|
61
|
+
) {
|
|
62
|
+
return nativeState.getEntryHashesForHashNumbersU64(
|
|
63
|
+
symbols instanceof BigUint64Array
|
|
64
|
+
? symbols
|
|
65
|
+
: BigUint64Array.from(symbols),
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
return nativeState.getEntryHashesForHashNumbers(symbols);
|
|
69
|
+
};
|
|
70
|
+
const resolveHashListForSymbols = (
|
|
71
|
+
symbols: readonly bigint[] | BigUint64Array,
|
|
72
|
+
) => {
|
|
73
|
+
const nativeState = props.getNativeState();
|
|
74
|
+
if (
|
|
75
|
+
!nativeState ||
|
|
76
|
+
typeof BigUint64Array === "undefined" ||
|
|
77
|
+
typeof nativeState.getEntryHashListForHashNumbersU64 !== "function"
|
|
78
|
+
) {
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
return nativeState.getEntryHashListForHashNumbersU64(
|
|
82
|
+
symbols instanceof BigUint64Array
|
|
83
|
+
? symbols
|
|
84
|
+
: BigUint64Array.from(symbols),
|
|
85
|
+
);
|
|
86
|
+
};
|
|
87
|
+
const resolveHashNumbersInRange = (range: {
|
|
88
|
+
start1: bigint | number;
|
|
89
|
+
end1: bigint | number;
|
|
90
|
+
start2: bigint | number;
|
|
91
|
+
end2: bigint | number;
|
|
92
|
+
}) => {
|
|
93
|
+
const nativeState = props.getNativeState();
|
|
94
|
+
return (
|
|
95
|
+
nativeState?.getEntryHashNumbersInRangeU64?.(range) ??
|
|
96
|
+
nativeState?.getEntryHashNumbersInRange(range)
|
|
97
|
+
);
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
if (props.syncronizer) {
|
|
101
|
+
return new props.syncronizer({
|
|
102
|
+
numbers: props.numbers,
|
|
103
|
+
entryIndex: props.entryIndex,
|
|
104
|
+
log: props.log,
|
|
105
|
+
rangeIndex: props.rangeIndex,
|
|
106
|
+
rpc: props.rpc,
|
|
107
|
+
coordinateToHash: props.coordinateToHash,
|
|
108
|
+
resolveHashesForSymbols,
|
|
109
|
+
resolveHashListForSymbols,
|
|
110
|
+
resolveHashNumbersInRange,
|
|
111
|
+
sync: props.sync,
|
|
112
|
+
isEntryRecentlyKnownByPeer: props.isEntryRecentlyKnownByPeer,
|
|
113
|
+
peerSupportsRawExchangeHeads: props.peerSupportsRawExchangeHeads,
|
|
114
|
+
sendRawExchangeHeads: props.sendRawExchangeHeads,
|
|
115
|
+
});
|
|
116
|
+
} else {
|
|
117
|
+
if (props.compatibility && props.compatibility < 10) {
|
|
118
|
+
return new SimpleSyncronizer({
|
|
119
|
+
log: props.log,
|
|
120
|
+
rpc: props.rpc,
|
|
121
|
+
entryIndex: props.entryIndex,
|
|
122
|
+
coordinateToHash: props.coordinateToHash,
|
|
123
|
+
resolveHashesForSymbols,
|
|
124
|
+
resolveHashListForSymbols,
|
|
125
|
+
sync: props.sync,
|
|
126
|
+
isEntryRecentlyKnownByPeer: props.isEntryRecentlyKnownByPeer,
|
|
127
|
+
peerSupportsRawExchangeHeads: props.peerSupportsRawExchangeHeads,
|
|
128
|
+
sendRawExchangeHeads: props.sendRawExchangeHeads,
|
|
129
|
+
});
|
|
130
|
+
} else {
|
|
131
|
+
if (props.resolution === "u32") {
|
|
132
|
+
props.warn(
|
|
133
|
+
"u32 resolution is not recommended for RatelessIBLTSynchronizer",
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
return new RatelessIBLTSynchronizer<R>({
|
|
138
|
+
numbers: props.numbers,
|
|
139
|
+
entryIndex: props.entryIndex,
|
|
140
|
+
log: props.log,
|
|
141
|
+
rangeIndex: props.rangeIndex,
|
|
142
|
+
rpc: props.rpc,
|
|
143
|
+
coordinateToHash: props.coordinateToHash,
|
|
144
|
+
resolveHashesForSymbols,
|
|
145
|
+
resolveHashListForSymbols,
|
|
146
|
+
resolveHashNumbersInRange,
|
|
147
|
+
sync: props.sync,
|
|
148
|
+
isEntryRecentlyKnownByPeer: props.isEntryRecentlyKnownByPeer,
|
|
149
|
+
peerSupportsRawExchangeHeads: props.peerSupportsRawExchangeHeads,
|
|
150
|
+
sendRawExchangeHeads: props.sendRawExchangeHeads,
|
|
151
|
+
}) as Syncronizer<R>;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|