@peerbit/shared-log 9.2.13 → 10.0.0
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/benchmark/get-samples.js +190 -64
- package/dist/benchmark/get-samples.js.map +1 -1
- package/dist/benchmark/index.js +16 -38
- package/dist/benchmark/index.js.map +1 -1
- package/dist/benchmark/memory/child.js.map +1 -1
- package/dist/benchmark/partial-sync.d.ts +3 -0
- package/dist/benchmark/partial-sync.d.ts.map +1 -0
- package/dist/benchmark/partial-sync.js +121 -0
- package/dist/benchmark/partial-sync.js.map +1 -0
- package/dist/benchmark/replication-prune.js.map +1 -1
- package/dist/benchmark/replication.js.map +1 -1
- package/dist/benchmark/to-rebalance.d.ts +2 -0
- package/dist/benchmark/to-rebalance.d.ts.map +1 -0
- package/dist/benchmark/to-rebalance.js +117 -0
- package/dist/benchmark/to-rebalance.js.map +1 -0
- package/dist/benchmark/utils.d.ts +24 -0
- package/dist/benchmark/utils.d.ts.map +1 -0
- package/dist/benchmark/utils.js +47 -0
- package/dist/benchmark/utils.js.map +1 -0
- package/dist/src/debounce.d.ts +2 -2
- package/dist/src/debounce.d.ts.map +1 -1
- package/dist/src/debounce.js +17 -47
- package/dist/src/debounce.js.map +1 -1
- package/dist/src/exchange-heads.d.ts +1 -13
- package/dist/src/exchange-heads.d.ts.map +1 -1
- package/dist/src/exchange-heads.js +0 -32
- package/dist/src/exchange-heads.js.map +1 -1
- package/dist/src/index.d.ts +119 -60
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1116 -762
- package/dist/src/index.js.map +1 -1
- package/dist/src/integers.d.ts +22 -0
- package/dist/src/integers.d.ts.map +1 -0
- package/dist/src/integers.js +76 -0
- package/dist/src/integers.js.map +1 -0
- package/dist/src/pid.d.ts.map +1 -1
- package/dist/src/pid.js +22 -22
- package/dist/src/pid.js.map +1 -1
- package/dist/src/ranges.d.ts +168 -38
- package/dist/src/ranges.d.ts.map +1 -1
- package/dist/src/ranges.js +869 -272
- package/dist/src/ranges.js.map +1 -1
- package/dist/src/replication-domain-hash.d.ts +2 -3
- package/dist/src/replication-domain-hash.d.ts.map +1 -1
- package/dist/src/replication-domain-hash.js +40 -15
- package/dist/src/replication-domain-hash.js.map +1 -1
- package/dist/src/replication-domain-time.d.ts +5 -5
- package/dist/src/replication-domain-time.d.ts.map +1 -1
- package/dist/src/replication-domain-time.js +2 -0
- package/dist/src/replication-domain-time.js.map +1 -1
- package/dist/src/replication-domain.d.ts +17 -19
- package/dist/src/replication-domain.d.ts.map +1 -1
- package/dist/src/replication-domain.js +2 -6
- package/dist/src/replication-domain.js.map +1 -1
- package/dist/src/replication.d.ts +6 -6
- package/dist/src/replication.d.ts.map +1 -1
- package/dist/src/replication.js +4 -4
- package/dist/src/replication.js.map +1 -1
- package/dist/src/role.d.ts +3 -6
- package/dist/src/role.d.ts.map +1 -1
- package/dist/src/role.js +4 -5
- package/dist/src/role.js.map +1 -1
- package/dist/src/sync/index.d.ts +40 -0
- package/dist/src/sync/index.d.ts.map +1 -0
- package/dist/src/sync/index.js +2 -0
- package/dist/src/sync/index.js.map +1 -0
- package/dist/src/sync/rateless-iblt.d.ts +124 -0
- package/dist/src/sync/rateless-iblt.d.ts.map +1 -0
- package/dist/src/sync/rateless-iblt.js +495 -0
- package/dist/src/sync/rateless-iblt.js.map +1 -0
- package/dist/src/sync/simple.d.ts +69 -0
- package/dist/src/sync/simple.d.ts.map +1 -0
- package/dist/src/sync/simple.js +338 -0
- package/dist/src/sync/simple.js.map +1 -0
- package/dist/src/sync/wasm-init.browser.d.ts +1 -0
- package/dist/src/sync/wasm-init.browser.d.ts.map +1 -0
- package/dist/src/sync/wasm-init.browser.js +3 -0
- package/dist/src/sync/wasm-init.browser.js.map +1 -0
- package/dist/src/sync/wasm-init.d.ts +2 -0
- package/dist/src/sync/wasm-init.d.ts.map +1 -0
- package/dist/src/sync/wasm-init.js +13 -0
- package/dist/src/sync/wasm-init.js.map +1 -0
- package/dist/src/utils.d.ts +3 -3
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/src/utils.js +2 -2
- package/dist/src/utils.js.map +1 -1
- package/package.json +10 -6
- package/src/debounce.ts +16 -51
- package/src/exchange-heads.ts +1 -23
- package/src/index.ts +1532 -1038
- package/src/integers.ts +102 -0
- package/src/pid.ts +23 -22
- package/src/ranges.ts +1204 -413
- package/src/replication-domain-hash.ts +43 -18
- package/src/replication-domain-time.ts +9 -9
- package/src/replication-domain.ts +21 -31
- package/src/replication.ts +10 -9
- package/src/role.ts +4 -6
- package/src/sync/index.ts +51 -0
- package/src/sync/rateless-iblt.ts +617 -0
- package/src/sync/simple.ts +403 -0
- package/src/sync/wasm-init.browser.ts +1 -0
- package/src/sync/wasm-init.ts +14 -0
- package/src/utils.ts +10 -4
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { field, variant, vec } from "@dao-xyz/borsh";
|
|
11
|
+
import { Cache } from "@peerbit/cache";
|
|
12
|
+
import { Compare, IntegerCompare, Or, } from "@peerbit/indexer-interface";
|
|
13
|
+
import { Entry, Log } from "@peerbit/log";
|
|
14
|
+
import { SilentDelivery } from "@peerbit/stream-interface";
|
|
15
|
+
import { EntryWithRefs, createExchangeHeadsMessages, } from "../exchange-heads.js";
|
|
16
|
+
import { TransportMessage } from "../message.js";
|
|
17
|
+
let RequestMaybeSync = class RequestMaybeSync extends TransportMessage {
|
|
18
|
+
hashes;
|
|
19
|
+
constructor(props) {
|
|
20
|
+
super();
|
|
21
|
+
this.hashes = props.hashes;
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
__decorate([
|
|
25
|
+
field({ type: vec("string") }),
|
|
26
|
+
__metadata("design:type", Array)
|
|
27
|
+
], RequestMaybeSync.prototype, "hashes", void 0);
|
|
28
|
+
RequestMaybeSync = __decorate([
|
|
29
|
+
variant([0, 1]),
|
|
30
|
+
__metadata("design:paramtypes", [Object])
|
|
31
|
+
], RequestMaybeSync);
|
|
32
|
+
export { RequestMaybeSync };
|
|
33
|
+
let ResponseMaybeSync = class ResponseMaybeSync extends TransportMessage {
|
|
34
|
+
hashes;
|
|
35
|
+
constructor(props) {
|
|
36
|
+
super();
|
|
37
|
+
this.hashes = props.hashes;
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
__decorate([
|
|
41
|
+
field({ type: vec("string") }),
|
|
42
|
+
__metadata("design:type", Array)
|
|
43
|
+
], ResponseMaybeSync.prototype, "hashes", void 0);
|
|
44
|
+
ResponseMaybeSync = __decorate([
|
|
45
|
+
variant([0, 2]),
|
|
46
|
+
__metadata("design:paramtypes", [Object])
|
|
47
|
+
], ResponseMaybeSync);
|
|
48
|
+
export { ResponseMaybeSync };
|
|
49
|
+
let RequestMaybeSyncCoordinate = class RequestMaybeSyncCoordinate extends TransportMessage {
|
|
50
|
+
coordinates;
|
|
51
|
+
constructor(props) {
|
|
52
|
+
super();
|
|
53
|
+
this.coordinates = props.coordinates;
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
__decorate([
|
|
57
|
+
field({ type: vec("u64") }),
|
|
58
|
+
__metadata("design:type", Array)
|
|
59
|
+
], RequestMaybeSyncCoordinate.prototype, "coordinates", void 0);
|
|
60
|
+
RequestMaybeSyncCoordinate = __decorate([
|
|
61
|
+
variant([0, 5]),
|
|
62
|
+
__metadata("design:paramtypes", [Object])
|
|
63
|
+
], RequestMaybeSyncCoordinate);
|
|
64
|
+
export { RequestMaybeSyncCoordinate };
|
|
65
|
+
const getHashesFromSymbols = async (symbols, entryIndex, coordinateToHash) => {
|
|
66
|
+
let queries = [];
|
|
67
|
+
let batchSize = 1; // TODO arg
|
|
68
|
+
let results = new Set();
|
|
69
|
+
const handleBatch = async (end = false) => {
|
|
70
|
+
if (queries.length >= batchSize || (end && queries.length > 0)) {
|
|
71
|
+
const entries = await entryIndex
|
|
72
|
+
.iterate({ query: queries.length > 1 ? new Or(queries) : queries }, { shape: { hash: true, coordinates: true } })
|
|
73
|
+
.all();
|
|
74
|
+
queries = [];
|
|
75
|
+
for (const entry of entries) {
|
|
76
|
+
results.add(entry.value.hash);
|
|
77
|
+
for (const coordinate of entry.value.coordinates) {
|
|
78
|
+
coordinateToHash.add(coordinate, entry.value.hash);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
for (let i = 0; i < symbols.length; i++) {
|
|
84
|
+
const fromCache = coordinateToHash.get(symbols[i]);
|
|
85
|
+
if (fromCache) {
|
|
86
|
+
results.add(fromCache);
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
const matchQuery = new IntegerCompare({
|
|
90
|
+
key: "coordinates",
|
|
91
|
+
compare: Compare.Equal,
|
|
92
|
+
value: symbols[i],
|
|
93
|
+
});
|
|
94
|
+
queries.push(matchQuery);
|
|
95
|
+
await handleBatch();
|
|
96
|
+
}
|
|
97
|
+
await handleBatch(true);
|
|
98
|
+
return results;
|
|
99
|
+
};
|
|
100
|
+
export class SimpleSyncronizer {
|
|
101
|
+
// map of hash to public keys that we can ask for entries
|
|
102
|
+
syncInFlightQueue;
|
|
103
|
+
syncInFlightQueueInverted;
|
|
104
|
+
// map of hash to public keys that we have asked for entries
|
|
105
|
+
syncInFlight;
|
|
106
|
+
rpc;
|
|
107
|
+
log;
|
|
108
|
+
entryIndex;
|
|
109
|
+
coordinateToHash;
|
|
110
|
+
// Syncing and dedeplucation work
|
|
111
|
+
syncMoreInterval;
|
|
112
|
+
closed;
|
|
113
|
+
constructor(properties) {
|
|
114
|
+
this.syncInFlightQueue = new Map();
|
|
115
|
+
this.syncInFlightQueueInverted = new Map();
|
|
116
|
+
this.syncInFlight = new Map();
|
|
117
|
+
this.rpc = properties.rpc;
|
|
118
|
+
this.log = properties.log;
|
|
119
|
+
this.entryIndex = properties.entryIndex;
|
|
120
|
+
this.coordinateToHash = properties.coordinateToHash;
|
|
121
|
+
}
|
|
122
|
+
onMaybeMissingEntries(properties) {
|
|
123
|
+
return this.rpc.send(new RequestMaybeSync({ hashes: [...properties.entries.keys()] }), {
|
|
124
|
+
priority: 1,
|
|
125
|
+
mode: new SilentDelivery({ to: properties.targets, redundancy: 1 }),
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
async onMessage(msg, context) {
|
|
129
|
+
const from = context.from;
|
|
130
|
+
if (msg instanceof RequestMaybeSync) {
|
|
131
|
+
await this.queueSync(msg.hashes, from);
|
|
132
|
+
return true;
|
|
133
|
+
}
|
|
134
|
+
else if (msg instanceof ResponseMaybeSync) {
|
|
135
|
+
// TODO perhaps send less messages to more receivers for performance reasons?
|
|
136
|
+
// TODO wait for previous send to target before trying to send more?
|
|
137
|
+
for await (const message of createExchangeHeadsMessages(this.log, msg.hashes)) {
|
|
138
|
+
await this.rpc.send(message, {
|
|
139
|
+
mode: new SilentDelivery({ to: [context.from], redundancy: 1 }),
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
else if (msg instanceof RequestMaybeSyncCoordinate) {
|
|
145
|
+
const hashes = await getHashesFromSymbols(msg.coordinates, this.entryIndex, this.coordinateToHash);
|
|
146
|
+
for await (const message of createExchangeHeadsMessages(this.log, hashes)) {
|
|
147
|
+
await this.rpc.send(message, {
|
|
148
|
+
mode: new SilentDelivery({ to: [context.from], redundancy: 1 }),
|
|
149
|
+
priority: 1,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
return true;
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
return false; // no message was consumed
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
onReceivedEntries(properties) {
|
|
159
|
+
for (const entry of properties.entries) {
|
|
160
|
+
const set = this.syncInFlight.get(properties.from.hashcode());
|
|
161
|
+
if (set) {
|
|
162
|
+
set.delete(entry.entry.hash);
|
|
163
|
+
if (set?.size === 0) {
|
|
164
|
+
this.syncInFlight.delete(properties.from.hashcode());
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
async queueSync(keys, from, options) {
|
|
170
|
+
const requestHashes = [];
|
|
171
|
+
for (const coordinateOrHash of keys) {
|
|
172
|
+
const inFlight = this.syncInFlightQueue.get(coordinateOrHash);
|
|
173
|
+
if (inFlight) {
|
|
174
|
+
if (!inFlight.find((x) => x.hashcode() === from.hashcode())) {
|
|
175
|
+
inFlight.push(from);
|
|
176
|
+
let inverted = this.syncInFlightQueueInverted.get(from.hashcode());
|
|
177
|
+
if (!inverted) {
|
|
178
|
+
inverted = new Set();
|
|
179
|
+
this.syncInFlightQueueInverted.set(from.hashcode(), inverted);
|
|
180
|
+
}
|
|
181
|
+
inverted.add(coordinateOrHash);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
else if (options?.skipCheck ||
|
|
185
|
+
!(await this.checkHasCoordinateOrHash(coordinateOrHash))) {
|
|
186
|
+
this.syncInFlightQueue.set(coordinateOrHash, []);
|
|
187
|
+
requestHashes.push(coordinateOrHash); // request immediately (first time we have seen this hash)
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
requestHashes.length > 0 &&
|
|
191
|
+
(await this.requestSync(requestHashes, [
|
|
192
|
+
from.hashcode(),
|
|
193
|
+
]));
|
|
194
|
+
}
|
|
195
|
+
async requestSync(hashes, to) {
|
|
196
|
+
if (hashes.length === 0) {
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
const now = +new Date();
|
|
200
|
+
for (const node of to) {
|
|
201
|
+
let map = this.syncInFlight.get(node);
|
|
202
|
+
if (!map) {
|
|
203
|
+
map = new Map();
|
|
204
|
+
this.syncInFlight.set(node, map);
|
|
205
|
+
}
|
|
206
|
+
for (const hash of hashes) {
|
|
207
|
+
map.set(hash, { timestamp: now });
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
const isBigInt = typeof hashes[0] === "bigint";
|
|
211
|
+
await this.rpc.send(isBigInt
|
|
212
|
+
? new RequestMaybeSyncCoordinate({ coordinates: hashes })
|
|
213
|
+
: new ResponseMaybeSync({ hashes: hashes }), {
|
|
214
|
+
mode: new SilentDelivery({ to, redundancy: 1 }),
|
|
215
|
+
priority: 1,
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
async checkHasCoordinateOrHash(key) {
|
|
219
|
+
return typeof key === "bigint"
|
|
220
|
+
? (await this.entryIndex.count({ query: { coordinates: key } })) > 0
|
|
221
|
+
: this.log.has(key);
|
|
222
|
+
}
|
|
223
|
+
async open() {
|
|
224
|
+
this.closed = false;
|
|
225
|
+
const requestSyncLoop = async () => {
|
|
226
|
+
/**
|
|
227
|
+
* This method fetches entries that we potentially want.
|
|
228
|
+
* In a case in which we become replicator of a segment,
|
|
229
|
+
* multiple remote peers might want to send us entries
|
|
230
|
+
* This method makes sure that we only request on entry from the remotes at a time
|
|
231
|
+
* so we don't get flooded with the same entry
|
|
232
|
+
*/
|
|
233
|
+
const requestHashes = [];
|
|
234
|
+
const from = new Set();
|
|
235
|
+
for (const [key, value] of this.syncInFlightQueue) {
|
|
236
|
+
if (this.closed) {
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
const has = await this.checkHasCoordinateOrHash(key);
|
|
240
|
+
if (!has) {
|
|
241
|
+
// TODO test that this if statement actually does anymeaningfull
|
|
242
|
+
if (value.length > 0) {
|
|
243
|
+
requestHashes.push(key);
|
|
244
|
+
const publicKeyHash = value.shift().hashcode();
|
|
245
|
+
from.add(publicKeyHash);
|
|
246
|
+
const invertedSet = this.syncInFlightQueueInverted.get(publicKeyHash);
|
|
247
|
+
if (invertedSet) {
|
|
248
|
+
if (invertedSet.delete(key)) {
|
|
249
|
+
if (invertedSet.size === 0) {
|
|
250
|
+
this.syncInFlightQueueInverted.delete(publicKeyHash);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
if (value.length === 0) {
|
|
256
|
+
this.syncInFlightQueue.delete(key); // no-one more to ask for this entry
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
this.syncInFlightQueue.delete(key);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
const nowMin10s = +new Date() - 2e4;
|
|
264
|
+
for (const [key, map] of this.syncInFlight) {
|
|
265
|
+
// cleanup "old" missing syncs
|
|
266
|
+
for (const [hash, { timestamp }] of map) {
|
|
267
|
+
if (timestamp < nowMin10s) {
|
|
268
|
+
map.delete(hash);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
if (map.size === 0) {
|
|
272
|
+
this.syncInFlight.delete(key);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
this.requestSync(requestHashes, from).finally(() => {
|
|
276
|
+
if (this.closed) {
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
this.syncMoreInterval = setTimeout(requestSyncLoop, 3e3);
|
|
280
|
+
});
|
|
281
|
+
};
|
|
282
|
+
requestSyncLoop();
|
|
283
|
+
}
|
|
284
|
+
async close() {
|
|
285
|
+
this.closed = true;
|
|
286
|
+
this.syncInFlightQueue.clear();
|
|
287
|
+
this.syncInFlightQueueInverted.clear();
|
|
288
|
+
this.syncInFlight.clear();
|
|
289
|
+
clearTimeout(this.syncMoreInterval);
|
|
290
|
+
}
|
|
291
|
+
onEntryAdded(entry) {
|
|
292
|
+
return this.clearSyncProcess(entry.hash);
|
|
293
|
+
}
|
|
294
|
+
onEntryRemoved(hash) {
|
|
295
|
+
return this.clearSyncProcess(hash);
|
|
296
|
+
}
|
|
297
|
+
clearSyncProcess(hash) {
|
|
298
|
+
const inflight = this.syncInFlightQueue.get(hash);
|
|
299
|
+
if (inflight) {
|
|
300
|
+
for (const key of inflight) {
|
|
301
|
+
const map = this.syncInFlightQueueInverted.get(key.hashcode());
|
|
302
|
+
if (map) {
|
|
303
|
+
map.delete(hash);
|
|
304
|
+
if (map.size === 0) {
|
|
305
|
+
this.syncInFlightQueueInverted.delete(key.hashcode());
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
this.syncInFlightQueue.delete(hash);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
onPeerDisconnected(key) {
|
|
313
|
+
return this.clearSyncProcessPublicKey(key);
|
|
314
|
+
}
|
|
315
|
+
clearSyncProcessPublicKey(publicKey) {
|
|
316
|
+
this.syncInFlight.delete(publicKey.hashcode());
|
|
317
|
+
const map = this.syncInFlightQueueInverted.get(publicKey.hashcode());
|
|
318
|
+
if (map) {
|
|
319
|
+
for (const hash of map) {
|
|
320
|
+
const arr = this.syncInFlightQueue.get(hash);
|
|
321
|
+
if (arr) {
|
|
322
|
+
const filtered = arr.filter((x) => !x.equals(publicKey));
|
|
323
|
+
if (filtered.length > 0) {
|
|
324
|
+
this.syncInFlightQueue.set(hash, filtered);
|
|
325
|
+
}
|
|
326
|
+
else {
|
|
327
|
+
this.syncInFlightQueue.delete(hash);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
this.syncInFlightQueueInverted.delete(publicKey.hashcode());
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
get pending() {
|
|
335
|
+
return this.syncInFlightQueue.size;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
//# sourceMappingURL=simple.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple.js","sourceRoot":"","sources":["../../../src/sync/simple.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=wasm-init.browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm-init.browser.d.ts","sourceRoot":"","sources":["../../../src/sync/wasm-init.browser.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm-init.browser.js","sourceRoot":"","sources":["../../../src/sync/wasm-init.browser.ts"],"names":[],"mappings":";AAAA,gEAAgE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm-init.d.ts","sourceRoot":"","sources":["../../../src/sync/wasm-init.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Override globalThis.fetch to intercept .wasm requests
|
|
2
|
+
import { readFile } from "fs/promises";
|
|
3
|
+
const defaultFetch = globalThis.fetch.bind(globalThis);
|
|
4
|
+
globalThis.fetch = async (url, options) => {
|
|
5
|
+
// If you have multiple wasm files, you might use some logic to handle them.
|
|
6
|
+
// Here, we assume any request ending in `.wasm` is local on disk at the same path.
|
|
7
|
+
if (url.toString().endsWith(".wasm")) {
|
|
8
|
+
// Return a NodeResponse that looks enough like a fetch Response
|
|
9
|
+
return readFile(url);
|
|
10
|
+
}
|
|
11
|
+
return defaultFetch(url, options);
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=wasm-init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm-init.js","sourceRoot":"","sources":["../../../src/sync/wasm-init.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACtD,UAAU,CAAC,KAAa,GAAG,KAAK,EAAE,GAAQ,EAAE,OAAY,EAAE,EAAE;IAC5D,4EAA4E;IAC5E,mFAAmF;IACnF,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,gEAAgE;QAChE,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AACnC,CAAC,CAAC"}
|
package/dist/src/utils.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Entry, ShallowEntry } from "@peerbit/log";
|
|
2
2
|
import type { EntryWithRefs } from "./exchange-heads.js";
|
|
3
|
-
import { EntryReplicated } from "./ranges.js";
|
|
4
|
-
export declare const groupByGid: <T extends ShallowEntry | Entry<any> | EntryWithRefs<any> | EntryReplicated
|
|
5
|
-
export declare const groupByGidSync: <T extends ShallowEntry | EntryReplicated
|
|
3
|
+
import { type EntryReplicated } from "./ranges.js";
|
|
4
|
+
export declare const groupByGid: <T extends ShallowEntry | Entry<any> | EntryWithRefs<any> | EntryReplicated<any>>(entries: T[]) => Promise<Map<string, T[]>>;
|
|
5
|
+
export declare const groupByGidSync: <T extends ShallowEntry | EntryReplicated<any>>(entries: T[]) => Promise<Map<string, T[]>>;
|
|
6
6
|
//# sourceMappingURL=utils.d.ts.map
|
package/dist/src/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,KAAK,eAAe,EAAqB,MAAM,aAAa,CAAC;AAEtE,eAAO,MAAM,UAAU,GACtB,CAAC,SACE,YAAY,GACZ,KAAK,CAAC,GAAG,CAAC,GACV,aAAa,CAAC,GAAG,CAAC,GAClB,eAAe,CAAC,GAAG,CAAC,WAEd,CAAC,EAAE,KACV,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAmB1B,CAAC;AAEF,eAAO,MAAM,cAAc,GAC1B,CAAC,SAAS,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,WAEpC,CAAC,EAAE,KACV,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAiB1B,CAAC"}
|
package/dist/src/utils.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Entry, ShallowEntry } from "@peerbit/log";
|
|
2
|
-
import {
|
|
2
|
+
import { isEntryReplicated } from "./ranges.js";
|
|
3
3
|
export const groupByGid = async (entries) => {
|
|
4
4
|
const groupByGid = new Map();
|
|
5
5
|
for (const head of entries) {
|
|
@@ -7,7 +7,7 @@ export const groupByGid = async (entries) => {
|
|
|
7
7
|
? (await head.getMeta()).gid
|
|
8
8
|
: head instanceof ShallowEntry
|
|
9
9
|
? head.meta.gid
|
|
10
|
-
: head
|
|
10
|
+
: isEntryReplicated(head)
|
|
11
11
|
? head.gid
|
|
12
12
|
: (await head.entry.getMeta()).gid;
|
|
13
13
|
let value = groupByGid.get(gid);
|
package/dist/src/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAwB,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEtE,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAO9B,OAAY,EACgB,EAAE;IAC9B,MAAM,UAAU,GAAqB,IAAI,GAAG,EAAE,CAAC;IAC/C,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,GAAG,GACR,IAAI,YAAY,KAAK;YACpB,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG;YAC5B,CAAC,CAAC,IAAI,YAAY,YAAY;gBAC7B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACf,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC;oBACxB,CAAC,CAAC,IAAI,CAAC,GAAG;oBACV,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC;QACvC,IAAI,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,KAAK,GAAG,EAAE,CAAC;YACX,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,UAAU,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAGlC,OAAY,EACgB,EAAE;IAC9B,MAAM,UAAU,GAAqB,IAAI,GAAG,EAAE,CAAC;IAC/C,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,GAAG,GACR,IAAI,YAAY,KAAK;YACpB,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG;YAC5B,CAAC,CAAC,IAAI,YAAY,YAAY;gBAC7B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACf,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QACd,IAAI,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,KAAK,GAAG,EAAE,CAAC;YACX,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,UAAU,CAAC;AACnB,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@peerbit/shared-log",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "10.0.0",
|
|
4
4
|
"description": "Shared log",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"type": "module",
|
|
@@ -28,6 +28,9 @@
|
|
|
28
28
|
"!dist/test",
|
|
29
29
|
"!**/*.tsbuildinfo"
|
|
30
30
|
],
|
|
31
|
+
"browser": {
|
|
32
|
+
"./dist/src/sync/wasm-init.js": "./dist/src/sync/wasm-init.browser.js"
|
|
33
|
+
},
|
|
31
34
|
"exports": {
|
|
32
35
|
".": {
|
|
33
36
|
"types": "./dist/src/index.d.ts",
|
|
@@ -60,12 +63,13 @@
|
|
|
60
63
|
"dependencies": {
|
|
61
64
|
"@dao-xyz/borsh": "^5.2.3",
|
|
62
65
|
"@peerbit/logger": "1.0.3",
|
|
63
|
-
"@peerbit/program": "5.0
|
|
64
|
-
"@peerbit/log": "4.0.
|
|
65
|
-
"@peerbit/rpc": "5.0.
|
|
66
|
-
"@peerbit/time": "2.0.7"
|
|
66
|
+
"@peerbit/program": "5.1.0",
|
|
67
|
+
"@peerbit/log": "4.0.22",
|
|
68
|
+
"@peerbit/rpc": "5.0.20",
|
|
69
|
+
"@peerbit/time": "2.0.7",
|
|
70
|
+
"@peerbit/riblt": "1.0.0"
|
|
67
71
|
},
|
|
68
72
|
"devDependencies": {
|
|
69
|
-
"@peerbit/test-utils": "^2.1.
|
|
73
|
+
"@peerbit/test-utils": "^2.1.10"
|
|
70
74
|
}
|
|
71
75
|
}
|
package/src/debounce.ts
CHANGED
|
@@ -1,46 +1,3 @@
|
|
|
1
|
-
/* export const debounceFixedInterval = <
|
|
2
|
-
T extends (...args: any[]) => any | Promise<any>,
|
|
3
|
-
>(
|
|
4
|
-
fn: T,
|
|
5
|
-
delay: number,
|
|
6
|
-
options?: { debug?: boolean, onError?: (error: Error) => void },
|
|
7
|
-
) => {
|
|
8
|
-
// a debounce function that will always wait for the delay to pass before invoking the function
|
|
9
|
-
// though if delay time has passed it will call the function immediately instead of resetting the timer
|
|
10
|
-
|
|
11
|
-
let onError = options?.onError || ((error: Error) => console.error(error));
|
|
12
|
-
let timeout: NodeJS.Timeout | null = null;
|
|
13
|
-
let lastArgs: any[] = [];
|
|
14
|
-
let lastThis: any;
|
|
15
|
-
let invokePromise = Promise.resolve();
|
|
16
|
-
const invoke = async () => {
|
|
17
|
-
const fnCall = fn.apply(lastThis, lastArgs);
|
|
18
|
-
invokePromise = Promise.resolve(fnCall ?? {});
|
|
19
|
-
await invokePromise.then((res) => {
|
|
20
|
-
|
|
21
|
-
timeout = null;
|
|
22
|
-
return res;
|
|
23
|
-
}).catch(onError);
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
const debounced = (...args: Parameters<T>) => {
|
|
27
|
-
lastArgs = args;
|
|
28
|
-
lastThis = this;
|
|
29
|
-
if (timeout) {
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
invokePromise.then(() => {
|
|
33
|
-
timeout && clearTimeout(timeout);
|
|
34
|
-
timeout = setTimeout(invoke, delay);
|
|
35
|
-
if (options?.debug) {
|
|
36
|
-
console.log("debounceFixedInterval: timeout set", timeout);
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
return debounced as T;
|
|
42
|
-
};
|
|
43
|
-
*/
|
|
44
1
|
export const debounceFixedInterval = <
|
|
45
2
|
T extends (...args: any[]) => any | Promise<any>,
|
|
46
3
|
>(
|
|
@@ -109,7 +66,7 @@ export const debounceFixedInterval = <
|
|
|
109
66
|
return debounced as T;
|
|
110
67
|
};
|
|
111
68
|
|
|
112
|
-
export const
|
|
69
|
+
export const debounceAccumulator = <K, T, V>(
|
|
113
70
|
fn: (args: V) => any,
|
|
114
71
|
create: () => {
|
|
115
72
|
delete: (string: K) => void;
|
|
@@ -145,18 +102,26 @@ export const debounceAcculmulator = <K, T, V>(
|
|
|
145
102
|
export const debouncedAccumulatorMap = <T>(
|
|
146
103
|
fn: (args: Map<string, T>) => any,
|
|
147
104
|
delay: number,
|
|
105
|
+
merge?: (into: T, from: T) => void,
|
|
148
106
|
) => {
|
|
149
|
-
return
|
|
150
|
-
string,
|
|
151
|
-
{ key: string; value: T },
|
|
152
|
-
Map<string, T>
|
|
153
|
-
>(
|
|
107
|
+
return debounceAccumulator<string, { key: string; value: T }, Map<string, T>>(
|
|
154
108
|
fn,
|
|
155
109
|
() => {
|
|
156
110
|
const map = new Map();
|
|
111
|
+
let add = merge
|
|
112
|
+
? (props: { key: string; value: T }) => {
|
|
113
|
+
let prev = map.get(props.key);
|
|
114
|
+
if (prev != null) {
|
|
115
|
+
merge(prev, props.value);
|
|
116
|
+
} else {
|
|
117
|
+
map.set(props.key, props.value);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
: (props: { key: string; value: T }) => {
|
|
121
|
+
map.set(props.key, props.value);
|
|
122
|
+
};
|
|
157
123
|
return {
|
|
158
|
-
add
|
|
159
|
-
map.set(props.key, props.value),
|
|
124
|
+
add,
|
|
160
125
|
delete: (key: string) => map.delete(key),
|
|
161
126
|
size: () => map.size,
|
|
162
127
|
value: map,
|
package/src/exchange-heads.ts
CHANGED
|
@@ -39,28 +39,6 @@ export class ExchangeHeadsMessage<T> extends TransportMessage {
|
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
@variant([0, 1])
|
|
43
|
-
export class RequestMaybeSync extends TransportMessage {
|
|
44
|
-
@field({ type: vec("string") })
|
|
45
|
-
hashes: string[];
|
|
46
|
-
|
|
47
|
-
constructor(props: { hashes: string[] }) {
|
|
48
|
-
super();
|
|
49
|
-
this.hashes = props.hashes;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
@variant([0, 2])
|
|
54
|
-
export class ResponseMaybeSync extends TransportMessage {
|
|
55
|
-
@field({ type: vec("string") })
|
|
56
|
-
hashes: string[];
|
|
57
|
-
|
|
58
|
-
constructor(props: { hashes: string[] }) {
|
|
59
|
-
super();
|
|
60
|
-
this.hashes = props.hashes;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
42
|
@variant([0, 3])
|
|
65
43
|
export class RequestIPrune extends TransportMessage {
|
|
66
44
|
// Hashes which I want to prune
|
|
@@ -89,7 +67,7 @@ const MAX_EXCHANGE_MESSAGE_SIZE = 1e5; // 100kb. Too large size might not be fas
|
|
|
89
67
|
|
|
90
68
|
export const createExchangeHeadsMessages = async function* (
|
|
91
69
|
log: Log<any>,
|
|
92
|
-
heads: Entry<any>[] | string[]
|
|
70
|
+
heads: Entry<any>[] | string[] | Set<string>,
|
|
93
71
|
): AsyncGenerator<ExchangeHeadsMessage<any>, void, void> {
|
|
94
72
|
let size = 0;
|
|
95
73
|
let current: EntryWithRefs<any>[] = [];
|