@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,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
+ }