@peerbit/shared-log 13.2.23 → 13.2.25

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 (175) 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 +139 -133
  14. package/dist/src/index.d.ts.map +1 -1
  15. package/dist/src/index.js +1491 -4265
  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/leader-plan-cache.d.ts +33 -0
  26. package/dist/src/leader-plan-cache.d.ts.map +1 -0
  27. package/dist/src/leader-plan-cache.js +49 -0
  28. package/dist/src/leader-plan-cache.js.map +1 -0
  29. package/dist/src/native-write-through-block-store.d.ts +123 -0
  30. package/dist/src/native-write-through-block-store.d.ts.map +1 -0
  31. package/dist/src/native-write-through-block-store.js +989 -0
  32. package/dist/src/native-write-through-block-store.js.map +1 -0
  33. package/dist/src/peer-session.d.ts +117 -0
  34. package/dist/src/peer-session.d.ts.map +1 -0
  35. package/dist/src/peer-session.js +259 -0
  36. package/dist/src/peer-session.js.map +1 -0
  37. package/dist/src/ranges.d.ts +2 -2
  38. package/dist/src/ranges.d.ts.map +1 -1
  39. package/dist/src/ranges.js +10 -8
  40. package/dist/src/ranges.js.map +1 -1
  41. package/dist/src/replication-announcement.d.ts +116 -0
  42. package/dist/src/replication-announcement.d.ts.map +1 -0
  43. package/dist/src/replication-announcement.js +515 -0
  44. package/dist/src/replication-announcement.js.map +1 -0
  45. package/dist/src/replicator-liveness.d.ts +59 -0
  46. package/dist/src/replicator-liveness.d.ts.map +1 -0
  47. package/dist/src/replicator-liveness.js +304 -0
  48. package/dist/src/replicator-liveness.js.map +1 -0
  49. package/dist/src/sync/dispatch-lifecycle.d.ts +48 -0
  50. package/dist/src/sync/dispatch-lifecycle.d.ts.map +1 -0
  51. package/dist/src/sync/dispatch-lifecycle.js +141 -0
  52. package/dist/src/sync/dispatch-lifecycle.js.map +1 -0
  53. package/dist/src/sync/factory.d.ts +29 -0
  54. package/dist/src/sync/factory.d.ts.map +1 -0
  55. package/dist/src/sync/factory.js +87 -0
  56. package/dist/src/sync/factory.js.map +1 -0
  57. package/dist/src/sync/pending-sync-store.d.ts +105 -0
  58. package/dist/src/sync/pending-sync-store.d.ts.map +1 -0
  59. package/dist/src/sync/pending-sync-store.js +877 -0
  60. package/dist/src/sync/pending-sync-store.js.map +1 -0
  61. package/dist/src/sync/rateless-iblt.d.ts +4 -1
  62. package/dist/src/sync/rateless-iblt.d.ts.map +1 -1
  63. package/dist/src/sync/rateless-iblt.js +102 -106
  64. package/dist/src/sync/rateless-iblt.js.map +1 -1
  65. package/dist/src/sync/simple.d.ts +10 -41
  66. package/dist/src/sync/simple.d.ts.map +1 -1
  67. package/dist/src/sync/simple.js +259 -952
  68. package/dist/src/sync/simple.js.map +1 -1
  69. package/dist/src/sync/sync-peer-state.d.ts +16 -0
  70. package/dist/src/sync/sync-peer-state.d.ts.map +1 -0
  71. package/dist/src/sync/sync-peer-state.js +82 -0
  72. package/dist/src/sync/sync-peer-state.js.map +1 -0
  73. package/package.json +22 -21
  74. package/src/checked-prune.ts +35 -0
  75. package/src/coordinate-persistence.ts +1796 -0
  76. package/src/errors.ts +21 -0
  77. package/src/index.ts +6367 -10052
  78. package/src/instance-lifecycle.ts +351 -0
  79. package/src/join-warmup.ts +507 -0
  80. package/src/leader-plan-cache.ts +61 -0
  81. package/src/native-write-through-block-store.ts +1170 -0
  82. package/src/peer-session.ts +336 -0
  83. package/src/ranges.ts +22 -16
  84. package/src/replication-announcement.ts +744 -0
  85. package/src/replicator-liveness.ts +439 -0
  86. package/src/sync/dispatch-lifecycle.ts +230 -0
  87. package/src/sync/factory.ts +154 -0
  88. package/src/sync/pending-sync-store.ts +1085 -0
  89. package/src/sync/rateless-iblt.ts +122 -132
  90. package/src/sync/simple.ts +334 -1144
  91. package/src/sync/sync-peer-state.ts +107 -0
  92. package/dist/benchmark/adaptive-ingest.d.ts +0 -2
  93. package/dist/benchmark/adaptive-ingest.d.ts.map +0 -1
  94. package/dist/benchmark/adaptive-ingest.js +0 -275
  95. package/dist/benchmark/adaptive-ingest.js.map +0 -1
  96. package/dist/benchmark/get-samples.d.ts +0 -2
  97. package/dist/benchmark/get-samples.d.ts.map +0 -1
  98. package/dist/benchmark/get-samples.js +0 -194
  99. package/dist/benchmark/get-samples.js.map +0 -1
  100. package/dist/benchmark/index.d.ts +0 -2
  101. package/dist/benchmark/index.d.ts.map +0 -1
  102. package/dist/benchmark/index.js +0 -224
  103. package/dist/benchmark/index.js.map +0 -1
  104. package/dist/benchmark/join-backfill-repair.d.ts +0 -2
  105. package/dist/benchmark/join-backfill-repair.d.ts.map +0 -1
  106. package/dist/benchmark/join-backfill-repair.js +0 -288
  107. package/dist/benchmark/join-backfill-repair.js.map +0 -1
  108. package/dist/benchmark/memory/child.d.ts +0 -2
  109. package/dist/benchmark/memory/child.d.ts.map +0 -1
  110. package/dist/benchmark/memory/child.js +0 -204
  111. package/dist/benchmark/memory/child.js.map +0 -1
  112. package/dist/benchmark/memory/index.d.ts +0 -2
  113. package/dist/benchmark/memory/index.d.ts.map +0 -1
  114. package/dist/benchmark/memory/index.js +0 -81
  115. package/dist/benchmark/memory/index.js.map +0 -1
  116. package/dist/benchmark/memory/utils.d.ts +0 -13
  117. package/dist/benchmark/memory/utils.d.ts.map +0 -1
  118. package/dist/benchmark/memory/utils.js +0 -2
  119. package/dist/benchmark/memory/utils.js.map +0 -1
  120. package/dist/benchmark/native-graph.d.ts +0 -2
  121. package/dist/benchmark/native-graph.d.ts.map +0 -1
  122. package/dist/benchmark/native-graph.js +0 -359
  123. package/dist/benchmark/native-graph.js.map +0 -1
  124. package/dist/benchmark/network-preset-e2e.d.ts +0 -2
  125. package/dist/benchmark/network-preset-e2e.d.ts.map +0 -1
  126. package/dist/benchmark/network-preset-e2e.js +0 -497
  127. package/dist/benchmark/network-preset-e2e.js.map +0 -1
  128. package/dist/benchmark/partial-sync.d.ts +0 -3
  129. package/dist/benchmark/partial-sync.d.ts.map +0 -1
  130. package/dist/benchmark/partial-sync.js +0 -121
  131. package/dist/benchmark/partial-sync.js.map +0 -1
  132. package/dist/benchmark/pid-convergence.d.ts +0 -2
  133. package/dist/benchmark/pid-convergence.d.ts.map +0 -1
  134. package/dist/benchmark/pid-convergence.js +0 -138
  135. package/dist/benchmark/pid-convergence.js.map +0 -1
  136. package/dist/benchmark/rateless-iblt-sender-startsync.d.ts +0 -2
  137. package/dist/benchmark/rateless-iblt-sender-startsync.d.ts.map +0 -1
  138. package/dist/benchmark/rateless-iblt-sender-startsync.js +0 -104
  139. package/dist/benchmark/rateless-iblt-sender-startsync.js.map +0 -1
  140. package/dist/benchmark/rateless-iblt-startsync-cache.d.ts +0 -2
  141. package/dist/benchmark/rateless-iblt-startsync-cache.d.ts.map +0 -1
  142. package/dist/benchmark/rateless-iblt-startsync-cache.js +0 -112
  143. package/dist/benchmark/rateless-iblt-startsync-cache.js.map +0 -1
  144. package/dist/benchmark/receive-prune.d.ts +0 -2
  145. package/dist/benchmark/receive-prune.d.ts.map +0 -1
  146. package/dist/benchmark/receive-prune.js +0 -818
  147. package/dist/benchmark/receive-prune.js.map +0 -1
  148. package/dist/benchmark/replication-prune.d.ts +0 -2
  149. package/dist/benchmark/replication-prune.d.ts.map +0 -1
  150. package/dist/benchmark/replication-prune.js +0 -105
  151. package/dist/benchmark/replication-prune.js.map +0 -1
  152. package/dist/benchmark/replication.d.ts +0 -2
  153. package/dist/benchmark/replication.d.ts.map +0 -1
  154. package/dist/benchmark/replication.js +0 -88
  155. package/dist/benchmark/replication.js.map +0 -1
  156. package/dist/benchmark/sync-batch-sweep.d.ts +0 -2
  157. package/dist/benchmark/sync-batch-sweep.d.ts.map +0 -1
  158. package/dist/benchmark/sync-batch-sweep.js +0 -353
  159. package/dist/benchmark/sync-batch-sweep.js.map +0 -1
  160. package/dist/benchmark/sync-catchup.d.ts +0 -2
  161. package/dist/benchmark/sync-catchup.d.ts.map +0 -1
  162. package/dist/benchmark/sync-catchup.js +0 -277
  163. package/dist/benchmark/sync-catchup.js.map +0 -1
  164. package/dist/benchmark/sync-phase-profile.d.ts +0 -2
  165. package/dist/benchmark/sync-phase-profile.d.ts.map +0 -1
  166. package/dist/benchmark/sync-phase-profile.js +0 -303
  167. package/dist/benchmark/sync-phase-profile.js.map +0 -1
  168. package/dist/benchmark/to-rebalance.d.ts +0 -2
  169. package/dist/benchmark/to-rebalance.d.ts.map +0 -1
  170. package/dist/benchmark/to-rebalance.js +0 -117
  171. package/dist/benchmark/to-rebalance.js.map +0 -1
  172. package/dist/benchmark/utils.d.ts +0 -24
  173. package/dist/benchmark/utils.d.ts.map +0 -1
  174. package/dist/benchmark/utils.js +0 -47
  175. package/dist/benchmark/utils.js.map +0 -1
@@ -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
+ }