@peerbit/program 5.6.2 → 5.6.3-000e3f1
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/handler.d.ts.map +1 -1
- package/dist/src/handler.js +19 -10
- package/dist/src/handler.js.map +1 -1
- package/dist/src/program.d.ts +7 -0
- package/dist/src/program.d.ts.map +1 -1
- package/dist/src/program.js +194 -59
- package/dist/src/program.js.map +1 -1
- package/package.json +14 -14
- package/src/handler.ts +25 -21
- package/src/program.ts +222 -73
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/handler.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/handler.ts"],"names":[],"mappings":"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"}
|
package/dist/src/handler.js
CHANGED
|
@@ -64,21 +64,30 @@ export class Handler {
|
|
|
64
64
|
// TODO add locks for store lifecycle, e.g. what happens if we try to open and close a store at the same time?
|
|
65
65
|
let program = storeOrAddress;
|
|
66
66
|
if (typeof storeOrAddress === "string") {
|
|
67
|
+
const address = storeOrAddress.toString();
|
|
67
68
|
try {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
69
|
+
const existing = this.items.get(address);
|
|
70
|
+
if (existing) {
|
|
71
|
+
// Be defensive: stale handles shouldn't be returned from the cache.
|
|
72
|
+
if (existing.closed) {
|
|
73
|
+
this.items.delete(address);
|
|
74
|
+
}
|
|
75
|
+
else if (options?.existing === "reuse") {
|
|
71
76
|
return existing;
|
|
72
77
|
}
|
|
78
|
+
else if (options?.existing === "replace") {
|
|
79
|
+
await existing.close();
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
throw new Error(`Program at ${address} is already open`);
|
|
83
|
+
}
|
|
73
84
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
if (!
|
|
77
|
-
|
|
78
|
-
throw new Error("Failed to resolve program with address: " + storeOrAddress);
|
|
79
|
-
}
|
|
80
|
-
throw new Error(`Failed to open program because program is of type ${program?.constructor.name} `);
|
|
85
|
+
program = (await this.properties.load(address, this.properties.client.services.blocks, options)); // TODO fix typings
|
|
86
|
+
if (!this.properties.shouldMonitor(program)) {
|
|
87
|
+
if (!program) {
|
|
88
|
+
throw new Error("Failed to resolve program with address: " + address);
|
|
81
89
|
}
|
|
90
|
+
throw new Error(`Failed to open program because program is of type ${program?.constructor.name} `);
|
|
82
91
|
}
|
|
83
92
|
}
|
|
84
93
|
catch (error) {
|
package/dist/src/handler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/handler.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/handler.ts"],"names":[],"mappings":"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"}
|
package/dist/src/program.d.ts
CHANGED
|
@@ -64,8 +64,15 @@ export declare abstract class Program<Args = any, Events extends ProgramEvents =
|
|
|
64
64
|
abstract open(args?: Args): Promise<void>;
|
|
65
65
|
private _clear;
|
|
66
66
|
private _emittedEventsFor;
|
|
67
|
+
private _peerTopicsByHash;
|
|
68
|
+
private _seedPeerTopicsFromSubscribers?;
|
|
67
69
|
private get emittedEventsFor();
|
|
70
|
+
private get peerTopicsByHash();
|
|
71
|
+
private recordPeerSubscription;
|
|
72
|
+
private recordPeerUnsubscription;
|
|
73
|
+
private peerHasAllTopics;
|
|
68
74
|
private getAllTopicsIncludingThis;
|
|
75
|
+
private seedPeerTopicsSnapshot;
|
|
69
76
|
private _emitJoinNetworkEvents;
|
|
70
77
|
private _emitLeaveNetworkEvents;
|
|
71
78
|
private _subscriptionEventListener;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAsB,MAAM,gBAAgB,CAAC;AAEtE,OAAO,EAAqB,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,KAAK,MAAM,EAAmB,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAKhD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAEN,OAAO,EACP,KAAK,UAAU,EACf,KAAK,4BAA4B,EAEjC,MAAM,cAAc,CAAC;AAGtB,qBAAa,WAAY,SAAQ,KAAK;gBAEpC,OAAO,GAAE,MAAgF;CAI1F;AAED,qBAAa,mBAAoB,SAAQ,KAAK;;CAM7C;
|
|
1
|
+
{"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/program.ts"],"names":[],"mappings":"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"}
|
package/dist/src/program.js
CHANGED
|
@@ -54,24 +54,6 @@ export class MissingAddressError extends Error {
|
|
|
54
54
|
super("Address does not exist, please open or save this program once to obtain it");
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
|
-
const intersection = (a, b) => {
|
|
58
|
-
const newSet = new Map();
|
|
59
|
-
if (Array.isArray(b)) {
|
|
60
|
-
for (const el of b) {
|
|
61
|
-
if (!a || a.has(el.hashcode())) {
|
|
62
|
-
newSet.set(el.hashcode(), el);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
for (const [key, el] of b) {
|
|
68
|
-
if (!a || a.has(key)) {
|
|
69
|
-
newSet.set(key, el);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
return newSet;
|
|
74
|
-
};
|
|
75
57
|
const getAllParentAddresses = (p) => {
|
|
76
58
|
return getAllParent(p, [])
|
|
77
59
|
.filter((x) => x instanceof Program)
|
|
@@ -255,9 +237,50 @@ let Program = (() => {
|
|
|
255
237
|
this._allPrograms = undefined;
|
|
256
238
|
}
|
|
257
239
|
_emittedEventsFor;
|
|
240
|
+
_peerTopicsByHash;
|
|
241
|
+
_seedPeerTopicsFromSubscribers;
|
|
258
242
|
get emittedEventsFor() {
|
|
259
243
|
return (this._emittedEventsFor = this._emittedEventsFor || new Set());
|
|
260
244
|
}
|
|
245
|
+
get peerTopicsByHash() {
|
|
246
|
+
return (this._peerTopicsByHash =
|
|
247
|
+
this._peerTopicsByHash ||
|
|
248
|
+
new Map());
|
|
249
|
+
}
|
|
250
|
+
recordPeerSubscription(from, topics) {
|
|
251
|
+
if (!topics || topics.length === 0)
|
|
252
|
+
return;
|
|
253
|
+
const fromHash = from.hashcode();
|
|
254
|
+
const existing = this.peerTopicsByHash.get(fromHash);
|
|
255
|
+
if (!existing) {
|
|
256
|
+
const set = new Set();
|
|
257
|
+
for (const topic of topics)
|
|
258
|
+
set.add(topic);
|
|
259
|
+
this.peerTopicsByHash.set(fromHash, { publicKey: from, topics: set });
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
for (const topic of topics)
|
|
263
|
+
existing.topics.add(topic);
|
|
264
|
+
}
|
|
265
|
+
recordPeerUnsubscription(from, topics) {
|
|
266
|
+
if (!topics || topics.length === 0)
|
|
267
|
+
return;
|
|
268
|
+
const fromHash = from.hashcode();
|
|
269
|
+
const existing = this.peerTopicsByHash.get(fromHash);
|
|
270
|
+
if (!existing)
|
|
271
|
+
return;
|
|
272
|
+
for (const topic of topics)
|
|
273
|
+
existing.topics.delete(topic);
|
|
274
|
+
if (existing.topics.size === 0)
|
|
275
|
+
this.peerTopicsByHash.delete(fromHash);
|
|
276
|
+
}
|
|
277
|
+
peerHasAllTopics(entry, allTopics) {
|
|
278
|
+
for (const topic of allTopics) {
|
|
279
|
+
if (!entry.topics.has(topic))
|
|
280
|
+
return false;
|
|
281
|
+
}
|
|
282
|
+
return true;
|
|
283
|
+
}
|
|
261
284
|
getAllTopicsIncludingThis() {
|
|
262
285
|
const allTopics = [this, ...this.allPrograms]
|
|
263
286
|
// TODO test this code path closed true/false
|
|
@@ -266,49 +289,66 @@ let Program = (() => {
|
|
|
266
289
|
.flat();
|
|
267
290
|
return allTopics;
|
|
268
291
|
}
|
|
269
|
-
async
|
|
270
|
-
if
|
|
271
|
-
|
|
272
|
-
|
|
292
|
+
async seedPeerTopicsSnapshot(allTopics) {
|
|
293
|
+
// Subscription events are edge-triggered: if a peer subscribed before this program
|
|
294
|
+
// attached its listeners, we'd miss it and `waitFor()` could hang. Seed an initial
|
|
295
|
+
// snapshot from `pubsub.getSubscribers()` once, then keep it up to date via events.
|
|
296
|
+
//
|
|
297
|
+
// This is best-effort and does not imply the system has global membership knowledge
|
|
298
|
+
// (implementations may only return known peers).
|
|
299
|
+
if (this._seedPeerTopicsFromSubscribers) {
|
|
300
|
+
return this._seedPeerTopicsFromSubscribers;
|
|
301
|
+
}
|
|
302
|
+
this._seedPeerTopicsFromSubscribers = (async () => {
|
|
303
|
+
if (!this.node)
|
|
304
|
+
return;
|
|
305
|
+
const pubsub = this.node.services.pubsub;
|
|
306
|
+
for (const topic of allTopics) {
|
|
307
|
+
const subscribers = await pubsub.getSubscribers(topic);
|
|
308
|
+
if (!subscribers || subscribers.length === 0)
|
|
309
|
+
continue;
|
|
310
|
+
for (const subscriber of subscribers) {
|
|
311
|
+
this.recordPeerSubscription(subscriber, [topic]);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
})();
|
|
315
|
+
return this._seedPeerTopicsFromSubscribers;
|
|
316
|
+
}
|
|
317
|
+
_emitJoinNetworkEvents(s) {
|
|
273
318
|
const allTopics = this.getAllTopicsIncludingThis();
|
|
274
319
|
if (allTopics.length === 0) {
|
|
275
320
|
return; // this is important (see events.spec.ts)
|
|
276
321
|
}
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
return;
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
if (this.emittedEventsFor.has(s.from.hashcode())) {
|
|
322
|
+
this.recordPeerSubscription(s.from, s.topics);
|
|
323
|
+
const fromHash = s.from.hashcode();
|
|
324
|
+
if (this.emittedEventsFor.has(fromHash)) {
|
|
284
325
|
return;
|
|
285
326
|
}
|
|
286
|
-
this.
|
|
327
|
+
const entry = this.peerTopicsByHash.get(fromHash);
|
|
328
|
+
if (!entry)
|
|
329
|
+
return;
|
|
330
|
+
if (!this.peerHasAllTopics(entry, allTopics))
|
|
331
|
+
return;
|
|
332
|
+
this.emittedEventsFor.add(fromHash);
|
|
287
333
|
this.events.dispatchEvent(new CustomEvent("join", { detail: s.from }));
|
|
288
334
|
}
|
|
289
|
-
|
|
290
|
-
if (!this.emittedEventsFor.has(s.from.hashcode())) {
|
|
291
|
-
return;
|
|
292
|
-
}
|
|
335
|
+
_emitLeaveNetworkEvents(s) {
|
|
293
336
|
const allTopics = this.getAllTopicsIncludingThis();
|
|
294
337
|
if (allTopics.length === 0) {
|
|
295
338
|
return; // this is important (see events.spec.ts)
|
|
296
339
|
}
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
340
|
+
this.recordPeerUnsubscription(s.from, s.topics);
|
|
341
|
+
const fromHash = s.from.hashcode();
|
|
342
|
+
if (!this.emittedEventsFor.has(fromHash))
|
|
343
|
+
return;
|
|
344
|
+
const entry = this.peerTopicsByHash.get(fromHash);
|
|
345
|
+
const hasAllTopics = entry
|
|
346
|
+
? this.peerHasAllTopics(entry, allTopics)
|
|
347
|
+
: false;
|
|
305
348
|
if (hasAllTopics) {
|
|
306
349
|
return; // still here!?
|
|
307
350
|
}
|
|
308
|
-
|
|
309
|
-
return;
|
|
310
|
-
}
|
|
311
|
-
this.emittedEventsFor.delete(s.from.hashcode());
|
|
351
|
+
this.emittedEventsFor.delete(fromHash);
|
|
312
352
|
this.events.dispatchEvent(new CustomEvent("leave", { detail: s.from }));
|
|
313
353
|
}
|
|
314
354
|
_subscriptionEventListener;
|
|
@@ -375,6 +415,11 @@ let Program = (() => {
|
|
|
375
415
|
if (end) {
|
|
376
416
|
this.node?.services.pubsub.removeEventListener("subscribe", this._subscriptionEventListener);
|
|
377
417
|
this.node?.services.pubsub.removeEventListener("unsubscribe", this._unsubscriptionEventListener);
|
|
418
|
+
this._emittedEventsFor?.clear();
|
|
419
|
+
this._emittedEventsFor = undefined;
|
|
420
|
+
this._peerTopicsByHash?.clear();
|
|
421
|
+
this._peerTopicsByHash = undefined;
|
|
422
|
+
this._seedPeerTopicsFromSubscribers = undefined;
|
|
378
423
|
this._eventOptions = undefined;
|
|
379
424
|
if (parentIdx !== -1) {
|
|
380
425
|
this.parents.splice(parentIdx, 1); // We splice this here because this._end depends on this parent to exist
|
|
@@ -415,12 +460,61 @@ let Program = (() => {
|
|
|
415
460
|
signal: options?.signal,
|
|
416
461
|
timeout: options?.timeout,
|
|
417
462
|
});
|
|
463
|
+
const allTopics = this.getAllTopicsIncludingThis();
|
|
464
|
+
if (allTopics.length === 0) {
|
|
465
|
+
throw new Error("Program has no topics, cannot get ready");
|
|
466
|
+
}
|
|
467
|
+
const pubsub = this.node.services.pubsub;
|
|
468
|
+
// Prefer a direct neighbour stream when available. This avoids cases where
|
|
469
|
+
// peers are "reachable" via the routing table but we haven't established
|
|
470
|
+
// a writable protocol stream yet (initial control-plane gossip can be dropped).
|
|
471
|
+
const neighborProbeTimeout = Math.min(options?.timeout ?? 10_000, 3_000);
|
|
472
|
+
await Promise.all(expectedHashes.map((hash) => pubsub
|
|
473
|
+
.waitFor(hash, { target: "neighbor", timeout: neighborProbeTimeout })
|
|
474
|
+
.catch(() => {
|
|
475
|
+
// Multi-hop overlays may never be direct neighbours; best-effort only.
|
|
476
|
+
})));
|
|
477
|
+
// Best-effort seeding: subscribe events are edge-triggered and can be missed if a peer
|
|
478
|
+
// subscribed before this program attached listeners. Actively ask for subscriber
|
|
479
|
+
// snapshots while waiting, but rate-limit to avoid fanout in larger overlays.
|
|
480
|
+
const REQUEST_MIN_INTERVAL_MS = 500;
|
|
481
|
+
const lastRequestAtByPeer = new Map();
|
|
482
|
+
const publicKeyByHash = new Map();
|
|
483
|
+
const resolvePublicKey = (hash) => {
|
|
484
|
+
let existing = publicKeyByHash.get(hash);
|
|
485
|
+
if (!existing) {
|
|
486
|
+
existing = Promise.resolve(pubsub.getPublicKey(hash)).catch(() => undefined);
|
|
487
|
+
publicKeyByHash.set(hash, existing);
|
|
488
|
+
}
|
|
489
|
+
return existing;
|
|
490
|
+
};
|
|
491
|
+
const requestSubscriberSnapshots = (hash) => {
|
|
492
|
+
const now = Date.now();
|
|
493
|
+
const last = lastRequestAtByPeer.get(hash) ?? 0;
|
|
494
|
+
if (now - last < REQUEST_MIN_INTERVAL_MS)
|
|
495
|
+
return;
|
|
496
|
+
lastRequestAtByPeer.set(hash, now);
|
|
497
|
+
void resolvePublicKey(hash).then((publicKey) => {
|
|
498
|
+
for (const topic of allTopics) {
|
|
499
|
+
void Promise.resolve(pubsub.requestSubscribers(topic, publicKey)).catch(() => {
|
|
500
|
+
// best-effort; the wait loop will retry and/or time out
|
|
501
|
+
});
|
|
502
|
+
}
|
|
503
|
+
});
|
|
504
|
+
};
|
|
505
|
+
for (const hash of expectedHashes) {
|
|
506
|
+
requestSubscriberSnapshots(hash);
|
|
507
|
+
}
|
|
418
508
|
// wait for subscribing to topics
|
|
419
509
|
return new Promise((resolve, reject) => {
|
|
420
510
|
let settled = false;
|
|
421
|
-
|
|
511
|
+
// Historically this was ~20s; keep enough headroom for initial control-plane
|
|
512
|
+
// convergence (stream establishment + subscription gossip) in sparse overlays.
|
|
513
|
+
const timeoutMs = options?.timeout || 20 * 1000;
|
|
422
514
|
let timeout = undefined;
|
|
423
515
|
let listener = undefined;
|
|
516
|
+
let poll = undefined;
|
|
517
|
+
let checking = false;
|
|
424
518
|
const clear = () => {
|
|
425
519
|
if (listener) {
|
|
426
520
|
this.node.services.pubsub.removeEventListener("subscribe", listener);
|
|
@@ -429,7 +523,9 @@ let Program = (() => {
|
|
|
429
523
|
this.events.removeEventListener("close", closeListener);
|
|
430
524
|
this.events.removeEventListener("drop", dropListener);
|
|
431
525
|
timeout && clearTimeout(timeout);
|
|
526
|
+
poll && clearInterval(poll);
|
|
432
527
|
timeout = undefined;
|
|
528
|
+
poll = undefined;
|
|
433
529
|
};
|
|
434
530
|
const resolveOnce = (hashes) => {
|
|
435
531
|
if (settled)
|
|
@@ -467,15 +563,51 @@ let Program = (() => {
|
|
|
467
563
|
options?.signal?.addEventListener("abort", abortListener, { once: true });
|
|
468
564
|
this.events.addEventListener("close", closeListener, { once: true });
|
|
469
565
|
this.events.addEventListener("drop", dropListener, { once: true });
|
|
566
|
+
const isPeerReady = async (hash) => {
|
|
567
|
+
const cached = this._peerTopicsByHash?.get(hash);
|
|
568
|
+
if (cached && this.peerHasAllTopics(cached, allTopics)) {
|
|
569
|
+
return true;
|
|
570
|
+
}
|
|
571
|
+
// Subscription events are edge-triggered: we may have missed earlier subscribe
|
|
572
|
+
// events (e.g. if they arrived during program open). Fall back to best-effort
|
|
573
|
+
// pubsub snapshots to avoid false timeouts.
|
|
574
|
+
const pubsubAny = this.node.services.pubsub;
|
|
575
|
+
let key;
|
|
576
|
+
for (const topic of allTopics) {
|
|
577
|
+
// Fast path for TopicControlPlane: O(1) membership check without allocations.
|
|
578
|
+
const topicPeers = pubsubAny?.topics?.get?.(topic);
|
|
579
|
+
if (topicPeers?.has?.(hash)) {
|
|
580
|
+
key ||= topicPeers.get(hash)?.publicKey;
|
|
581
|
+
continue;
|
|
582
|
+
}
|
|
583
|
+
const subscribers = await this.node.services.pubsub.getSubscribers(topic);
|
|
584
|
+
if (!subscribers || subscribers.length === 0) {
|
|
585
|
+
return false;
|
|
586
|
+
}
|
|
587
|
+
const found = subscribers.find((x) => x.hashcode() === hash);
|
|
588
|
+
if (!found) {
|
|
589
|
+
return false;
|
|
590
|
+
}
|
|
591
|
+
key ||= found;
|
|
592
|
+
}
|
|
593
|
+
if (key) {
|
|
594
|
+
this.recordPeerSubscription(key, allTopics);
|
|
595
|
+
}
|
|
596
|
+
return true;
|
|
597
|
+
};
|
|
470
598
|
const checkReady = async () => {
|
|
471
599
|
if (settled) {
|
|
472
600
|
return;
|
|
473
601
|
}
|
|
602
|
+
if (checking) {
|
|
603
|
+
return;
|
|
604
|
+
}
|
|
605
|
+
checking = true;
|
|
474
606
|
let ready = true;
|
|
475
607
|
try {
|
|
476
|
-
const allReadyHashes = await this.getReady();
|
|
477
608
|
for (const hash of expectedHashes) {
|
|
478
|
-
if (!
|
|
609
|
+
if (!(await isPeerReady(hash))) {
|
|
610
|
+
requestSubscriberSnapshots(hash);
|
|
479
611
|
ready = false;
|
|
480
612
|
break;
|
|
481
613
|
}
|
|
@@ -487,30 +619,33 @@ let Program = (() => {
|
|
|
487
619
|
catch (error) {
|
|
488
620
|
rejectOnce(error);
|
|
489
621
|
}
|
|
622
|
+
finally {
|
|
623
|
+
checking = false;
|
|
624
|
+
}
|
|
490
625
|
};
|
|
491
626
|
listener = () => {
|
|
492
627
|
void checkReady();
|
|
493
628
|
};
|
|
494
629
|
this.node.services.pubsub.addEventListener("subscribe", listener);
|
|
630
|
+
poll = setInterval(() => void checkReady(), 200);
|
|
631
|
+
poll.unref?.();
|
|
495
632
|
checkReady();
|
|
496
633
|
});
|
|
497
634
|
}
|
|
498
635
|
async getReady() {
|
|
499
|
-
//
|
|
500
|
-
|
|
636
|
+
// Observed peers that subscribe to all topics.
|
|
637
|
+
// We intentionally do not depend on `pubsub.getSubscribers()` since that implies
|
|
638
|
+
// global membership knowledge which does not scale for large overlays.
|
|
501
639
|
const allTopics = this.getAllTopicsIncludingThis();
|
|
502
640
|
if (allTopics.length === 0) {
|
|
503
641
|
throw new Error("Program has no topics, cannot get ready");
|
|
504
642
|
}
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
643
|
+
const ready = new Map();
|
|
644
|
+
await this.seedPeerTopicsSnapshot(allTopics);
|
|
645
|
+
for (const [hash, entry] of this.peerTopicsByHash) {
|
|
646
|
+
if (!this.peerHasAllTopics(entry, allTopics))
|
|
508
647
|
continue;
|
|
509
|
-
|
|
510
|
-
ready = intersection(ready, subscribers);
|
|
511
|
-
}
|
|
512
|
-
if (ready == null) {
|
|
513
|
-
return new Map();
|
|
648
|
+
ready.set(hash, entry.publicKey);
|
|
514
649
|
}
|
|
515
650
|
return ready;
|
|
516
651
|
}
|
package/dist/src/program.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"program.js","sourceRoot":"","sources":["../../src/program.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"program.js","sourceRoot":"","sources":["../../src/program.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@peerbit/program",
|
|
3
|
-
"version": "5.6.
|
|
3
|
+
"version": "5.6.3-000e3f1",
|
|
4
4
|
"description": "Program interface",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"type": "module",
|
|
@@ -53,22 +53,22 @@
|
|
|
53
53
|
"license": "MIT",
|
|
54
54
|
"dependencies": {
|
|
55
55
|
"@dao-xyz/borsh": "^6.0.0",
|
|
56
|
+
"@peerbit/crypto": "2.4.1-000e3f1",
|
|
57
|
+
"@peerbit/keychain": "1.2.4-000e3f1",
|
|
58
|
+
"@peerbit/blocks-interface": "1.5.2-000e3f1",
|
|
59
|
+
"@peerbit/pubsub-interface": "4.1.2-000e3f1",
|
|
60
|
+
"@peerbit/any-store-interface": "1.1.0-000e3f1",
|
|
61
|
+
"@peerbit/libp2p-test-utils": "2.2.0-000e3f1",
|
|
62
|
+
"@peerbit/indexer-interface": "2.1.1-000e3f1",
|
|
63
|
+
"@peerbit/stream-interface": "5.4.0-000e3f1",
|
|
64
|
+
"@peerbit/time": "2.3.0-000e3f1",
|
|
65
|
+
"@peerbit/logger": "2.0.0-000e3f1",
|
|
66
|
+
"@peerbit/blocks": "3.1.8-000e3f1",
|
|
67
|
+
"@peerbit/pubsub": "4.1.4-000e3f1",
|
|
56
68
|
"@libp2p/interface": "^3.1.0",
|
|
57
69
|
"@multiformats/multiaddr": "^13.0.1",
|
|
58
70
|
"multiformats": "^13.4.1",
|
|
59
|
-
"p-queue": "^8.0.1"
|
|
60
|
-
"@peerbit/crypto": "2.4.1",
|
|
61
|
-
"@peerbit/keychain": "1.2.4",
|
|
62
|
-
"@peerbit/blocks-interface": "1.5.2",
|
|
63
|
-
"@peerbit/pubsub-interface": "4.1.2",
|
|
64
|
-
"@peerbit/any-store-interface": "1.1.0",
|
|
65
|
-
"@peerbit/libp2p-test-utils": "2.2.0",
|
|
66
|
-
"@peerbit/indexer-interface": "2.1.1",
|
|
67
|
-
"@peerbit/stream-interface": "5.4.0",
|
|
68
|
-
"@peerbit/logger": "2.0.0",
|
|
69
|
-
"@peerbit/time": "2.3.0",
|
|
70
|
-
"@peerbit/blocks": "3.1.8",
|
|
71
|
-
"@peerbit/pubsub": "4.1.4"
|
|
71
|
+
"p-queue": "^8.0.1"
|
|
72
72
|
},
|
|
73
73
|
"scripts": {
|
|
74
74
|
"clean": "aegir clean",
|
package/src/handler.ts
CHANGED
|
@@ -157,33 +157,37 @@ export class Handler<T extends Manageable<any>> {
|
|
|
157
157
|
// TODO add locks for store lifecycle, e.g. what happens if we try to open and close a store at the same time?
|
|
158
158
|
let program = storeOrAddress as S;
|
|
159
159
|
if (typeof storeOrAddress === "string") {
|
|
160
|
+
const address = storeOrAddress.toString();
|
|
160
161
|
try {
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
)
|
|
167
|
-
if (existing) {
|
|
162
|
+
const existing = this.items.get(address);
|
|
163
|
+
if (existing) {
|
|
164
|
+
// Be defensive: stale handles shouldn't be returned from the cache.
|
|
165
|
+
if (existing.closed) {
|
|
166
|
+
this.items.delete(address);
|
|
167
|
+
} else if (options?.existing === "reuse") {
|
|
168
168
|
return existing as S;
|
|
169
|
+
} else if (options?.existing === "replace") {
|
|
170
|
+
await existing.close();
|
|
171
|
+
} else {
|
|
172
|
+
throw new Error(`Program at ${address} is already open`);
|
|
169
173
|
}
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
"Failed to resolve program with address: " + storeOrAddress,
|
|
181
|
-
);
|
|
182
|
-
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
program = (await this.properties.load(
|
|
177
|
+
address,
|
|
178
|
+
this.properties.client.services.blocks,
|
|
179
|
+
options,
|
|
180
|
+
)) as S; // TODO fix typings
|
|
181
|
+
|
|
182
|
+
if (!this.properties.shouldMonitor(program)) {
|
|
183
|
+
if (!program) {
|
|
183
184
|
throw new Error(
|
|
184
|
-
|
|
185
|
+
"Failed to resolve program with address: " + address,
|
|
185
186
|
);
|
|
186
187
|
}
|
|
188
|
+
throw new Error(
|
|
189
|
+
`Failed to open program because program is of type ${program?.constructor.name} `,
|
|
190
|
+
);
|
|
187
191
|
}
|
|
188
192
|
} catch (error) {
|
|
189
193
|
logger.error(
|
package/src/program.ts
CHANGED
|
@@ -37,28 +37,6 @@ export class MissingAddressError extends Error {
|
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
const intersection = (
|
|
41
|
-
a: Map<string, PublicSignKey> | undefined,
|
|
42
|
-
b: Map<string, PublicSignKey> | PublicSignKey[],
|
|
43
|
-
) => {
|
|
44
|
-
const newSet = new Map<string, PublicSignKey>();
|
|
45
|
-
|
|
46
|
-
if (Array.isArray(b)) {
|
|
47
|
-
for (const el of b) {
|
|
48
|
-
if (!a || a.has(el.hashcode())) {
|
|
49
|
-
newSet.set(el.hashcode(), el);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
} else {
|
|
53
|
-
for (const [key, el] of b) {
|
|
54
|
-
if (!a || a.has(key)) {
|
|
55
|
-
newSet.set(key, el);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
return newSet;
|
|
60
|
-
};
|
|
61
|
-
|
|
62
40
|
export type OpenProgram = (program: Program) => Promise<Program>;
|
|
63
41
|
|
|
64
42
|
export interface NetworkEvents {
|
|
@@ -302,9 +280,53 @@ export abstract class Program<
|
|
|
302
280
|
this._allPrograms = undefined;
|
|
303
281
|
}
|
|
304
282
|
private _emittedEventsFor: Set<string> | undefined;
|
|
283
|
+
private _peerTopicsByHash:
|
|
284
|
+
| Map<string, { publicKey: PublicSignKey; topics: Set<string> }>
|
|
285
|
+
| undefined;
|
|
286
|
+
private _seedPeerTopicsFromSubscribers?: Promise<void>;
|
|
305
287
|
private get emittedEventsFor(): Set<string> {
|
|
306
288
|
return (this._emittedEventsFor = this._emittedEventsFor || new Set());
|
|
307
289
|
}
|
|
290
|
+
private get peerTopicsByHash(): Map<
|
|
291
|
+
string,
|
|
292
|
+
{ publicKey: PublicSignKey; topics: Set<string> }
|
|
293
|
+
> {
|
|
294
|
+
return (this._peerTopicsByHash =
|
|
295
|
+
this._peerTopicsByHash ||
|
|
296
|
+
new Map<string, { publicKey: PublicSignKey; topics: Set<string> }>());
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
private recordPeerSubscription(from: PublicSignKey, topics: string[]) {
|
|
300
|
+
if (!topics || topics.length === 0) return;
|
|
301
|
+
const fromHash = from.hashcode();
|
|
302
|
+
const existing = this.peerTopicsByHash.get(fromHash);
|
|
303
|
+
if (!existing) {
|
|
304
|
+
const set = new Set<string>();
|
|
305
|
+
for (const topic of topics) set.add(topic);
|
|
306
|
+
this.peerTopicsByHash.set(fromHash, { publicKey: from, topics: set });
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
for (const topic of topics) existing.topics.add(topic);
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
private recordPeerUnsubscription(from: PublicSignKey, topics: string[]) {
|
|
313
|
+
if (!topics || topics.length === 0) return;
|
|
314
|
+
const fromHash = from.hashcode();
|
|
315
|
+
const existing = this.peerTopicsByHash.get(fromHash);
|
|
316
|
+
if (!existing) return;
|
|
317
|
+
for (const topic of topics) existing.topics.delete(topic);
|
|
318
|
+
if (existing.topics.size === 0) this.peerTopicsByHash.delete(fromHash);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
private peerHasAllTopics(
|
|
322
|
+
entry: { topics: Set<string> },
|
|
323
|
+
allTopics: string[],
|
|
324
|
+
): boolean {
|
|
325
|
+
for (const topic of allTopics) {
|
|
326
|
+
if (!entry.topics.has(topic)) return false;
|
|
327
|
+
}
|
|
328
|
+
return true;
|
|
329
|
+
}
|
|
308
330
|
|
|
309
331
|
private getAllTopicsIncludingThis(): string[] {
|
|
310
332
|
const allTopics = [this, ...this.allPrograms]
|
|
@@ -314,64 +336,72 @@ export abstract class Program<
|
|
|
314
336
|
.flat() as string[];
|
|
315
337
|
return allTopics;
|
|
316
338
|
}
|
|
317
|
-
private async _emitJoinNetworkEvents(s: SubscriptionEvent) {
|
|
318
|
-
if (this.emittedEventsFor.has(s.from.hashcode())) {
|
|
319
|
-
return;
|
|
320
|
-
}
|
|
321
339
|
|
|
340
|
+
private async seedPeerTopicsSnapshot(allTopics: string[]) {
|
|
341
|
+
// Subscription events are edge-triggered: if a peer subscribed before this program
|
|
342
|
+
// attached its listeners, we'd miss it and `waitFor()` could hang. Seed an initial
|
|
343
|
+
// snapshot from `pubsub.getSubscribers()` once, then keep it up to date via events.
|
|
344
|
+
//
|
|
345
|
+
// This is best-effort and does not imply the system has global membership knowledge
|
|
346
|
+
// (implementations may only return known peers).
|
|
347
|
+
if (this._seedPeerTopicsFromSubscribers) {
|
|
348
|
+
return this._seedPeerTopicsFromSubscribers;
|
|
349
|
+
}
|
|
350
|
+
this._seedPeerTopicsFromSubscribers = (async () => {
|
|
351
|
+
if (!this.node) return;
|
|
352
|
+
const pubsub = this.node.services.pubsub;
|
|
353
|
+
for (const topic of allTopics) {
|
|
354
|
+
const subscribers = await pubsub.getSubscribers(topic);
|
|
355
|
+
if (!subscribers || subscribers.length === 0) continue;
|
|
356
|
+
for (const subscriber of subscribers) {
|
|
357
|
+
this.recordPeerSubscription(subscriber, [topic]);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
})();
|
|
361
|
+
return this._seedPeerTopicsFromSubscribers;
|
|
362
|
+
}
|
|
363
|
+
private _emitJoinNetworkEvents(s: SubscriptionEvent) {
|
|
322
364
|
const allTopics = this.getAllTopicsIncludingThis();
|
|
323
365
|
if (allTopics.length === 0) {
|
|
324
366
|
return; // this is important (see events.spec.ts)
|
|
325
367
|
}
|
|
326
368
|
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
s.from.equals(x),
|
|
332
|
-
)
|
|
333
|
-
) {
|
|
334
|
-
return;
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
if (this.emittedEventsFor.has(s.from.hashcode())) {
|
|
369
|
+
this.recordPeerSubscription(s.from, s.topics);
|
|
370
|
+
|
|
371
|
+
const fromHash = s.from.hashcode();
|
|
372
|
+
if (this.emittedEventsFor.has(fromHash)) {
|
|
338
373
|
return;
|
|
339
374
|
}
|
|
340
|
-
|
|
375
|
+
|
|
376
|
+
const entry = this.peerTopicsByHash.get(fromHash);
|
|
377
|
+
if (!entry) return;
|
|
378
|
+
if (!this.peerHasAllTopics(entry, allTopics)) return;
|
|
379
|
+
|
|
380
|
+
this.emittedEventsFor.add(fromHash);
|
|
341
381
|
this.events.dispatchEvent(new CustomEvent("join", { detail: s.from }));
|
|
342
382
|
}
|
|
343
383
|
|
|
344
|
-
private
|
|
345
|
-
if (!this.emittedEventsFor.has(s.from.hashcode())) {
|
|
346
|
-
return;
|
|
347
|
-
}
|
|
348
|
-
|
|
384
|
+
private _emitLeaveNetworkEvents(s: UnsubcriptionEvent) {
|
|
349
385
|
const allTopics = this.getAllTopicsIncludingThis();
|
|
350
386
|
if (allTopics.length === 0) {
|
|
351
387
|
return; // this is important (see events.spec.ts)
|
|
352
388
|
}
|
|
353
389
|
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
)
|
|
362
|
-
|
|
363
|
-
break;
|
|
364
|
-
}
|
|
365
|
-
}
|
|
390
|
+
this.recordPeerUnsubscription(s.from, s.topics);
|
|
391
|
+
|
|
392
|
+
const fromHash = s.from.hashcode();
|
|
393
|
+
if (!this.emittedEventsFor.has(fromHash)) return;
|
|
394
|
+
|
|
395
|
+
const entry = this.peerTopicsByHash.get(fromHash);
|
|
396
|
+
const hasAllTopics = entry
|
|
397
|
+
? this.peerHasAllTopics(entry, allTopics)
|
|
398
|
+
: false;
|
|
366
399
|
|
|
367
400
|
if (hasAllTopics) {
|
|
368
401
|
return; // still here!?
|
|
369
402
|
}
|
|
370
403
|
|
|
371
|
-
|
|
372
|
-
return;
|
|
373
|
-
}
|
|
374
|
-
this.emittedEventsFor.delete(s.from.hashcode());
|
|
404
|
+
this.emittedEventsFor.delete(fromHash);
|
|
375
405
|
this.events.dispatchEvent(new CustomEvent("leave", { detail: s.from }));
|
|
376
406
|
}
|
|
377
407
|
|
|
@@ -451,6 +481,11 @@ export abstract class Program<
|
|
|
451
481
|
"unsubscribe",
|
|
452
482
|
this._unsubscriptionEventListener,
|
|
453
483
|
);
|
|
484
|
+
this._emittedEventsFor?.clear();
|
|
485
|
+
this._emittedEventsFor = undefined;
|
|
486
|
+
this._peerTopicsByHash?.clear();
|
|
487
|
+
this._peerTopicsByHash = undefined;
|
|
488
|
+
this._seedPeerTopicsFromSubscribers = undefined;
|
|
454
489
|
|
|
455
490
|
this._eventOptions = undefined;
|
|
456
491
|
|
|
@@ -504,12 +539,78 @@ export abstract class Program<
|
|
|
504
539
|
timeout: options?.timeout,
|
|
505
540
|
});
|
|
506
541
|
|
|
542
|
+
const allTopics = this.getAllTopicsIncludingThis();
|
|
543
|
+
if (allTopics.length === 0) {
|
|
544
|
+
throw new Error("Program has no topics, cannot get ready");
|
|
545
|
+
}
|
|
546
|
+
const pubsub = this.node.services.pubsub;
|
|
547
|
+
|
|
548
|
+
// Prefer a direct neighbour stream when available. This avoids cases where
|
|
549
|
+
// peers are "reachable" via the routing table but we haven't established
|
|
550
|
+
// a writable protocol stream yet (initial control-plane gossip can be dropped).
|
|
551
|
+
const neighborProbeTimeout = Math.min(options?.timeout ?? 10_000, 3_000);
|
|
552
|
+
await Promise.all(
|
|
553
|
+
expectedHashes.map((hash) =>
|
|
554
|
+
pubsub
|
|
555
|
+
.waitFor(hash, { target: "neighbor", timeout: neighborProbeTimeout })
|
|
556
|
+
.catch(() => {
|
|
557
|
+
// Multi-hop overlays may never be direct neighbours; best-effort only.
|
|
558
|
+
}),
|
|
559
|
+
),
|
|
560
|
+
);
|
|
561
|
+
|
|
562
|
+
// Best-effort seeding: subscribe events are edge-triggered and can be missed if a peer
|
|
563
|
+
// subscribed before this program attached listeners. Actively ask for subscriber
|
|
564
|
+
// snapshots while waiting, but rate-limit to avoid fanout in larger overlays.
|
|
565
|
+
const REQUEST_MIN_INTERVAL_MS = 500;
|
|
566
|
+
const lastRequestAtByPeer = new Map<string, number>();
|
|
567
|
+
const publicKeyByHash = new Map<
|
|
568
|
+
string,
|
|
569
|
+
Promise<PublicSignKey | undefined>
|
|
570
|
+
>();
|
|
571
|
+
const resolvePublicKey = (
|
|
572
|
+
hash: string,
|
|
573
|
+
): Promise<PublicSignKey | undefined> => {
|
|
574
|
+
let existing = publicKeyByHash.get(hash);
|
|
575
|
+
if (!existing) {
|
|
576
|
+
existing = Promise.resolve(pubsub.getPublicKey(hash)).catch(
|
|
577
|
+
(): PublicSignKey | undefined => undefined,
|
|
578
|
+
);
|
|
579
|
+
publicKeyByHash.set(hash, existing);
|
|
580
|
+
}
|
|
581
|
+
return existing;
|
|
582
|
+
};
|
|
583
|
+
const requestSubscriberSnapshots = (hash: string): void => {
|
|
584
|
+
const now = Date.now();
|
|
585
|
+
const last = lastRequestAtByPeer.get(hash) ?? 0;
|
|
586
|
+
if (now - last < REQUEST_MIN_INTERVAL_MS) return;
|
|
587
|
+
lastRequestAtByPeer.set(hash, now);
|
|
588
|
+
|
|
589
|
+
void resolvePublicKey(hash).then((publicKey) => {
|
|
590
|
+
for (const topic of allTopics) {
|
|
591
|
+
void Promise.resolve(
|
|
592
|
+
pubsub.requestSubscribers(topic, publicKey),
|
|
593
|
+
).catch(() => {
|
|
594
|
+
// best-effort; the wait loop will retry and/or time out
|
|
595
|
+
});
|
|
596
|
+
}
|
|
597
|
+
});
|
|
598
|
+
};
|
|
599
|
+
|
|
600
|
+
for (const hash of expectedHashes) {
|
|
601
|
+
requestSubscriberSnapshots(hash);
|
|
602
|
+
}
|
|
603
|
+
|
|
507
604
|
// wait for subscribing to topics
|
|
508
605
|
return new Promise<string[]>((resolve, reject) => {
|
|
509
606
|
let settled = false;
|
|
510
|
-
|
|
607
|
+
// Historically this was ~20s; keep enough headroom for initial control-plane
|
|
608
|
+
// convergence (stream establishment + subscription gossip) in sparse overlays.
|
|
609
|
+
const timeoutMs = options?.timeout || 20 * 1000;
|
|
511
610
|
let timeout: ReturnType<typeof setTimeout> | undefined = undefined;
|
|
512
611
|
let listener: (() => void) | undefined = undefined;
|
|
612
|
+
let poll: ReturnType<typeof setInterval> | undefined = undefined;
|
|
613
|
+
let checking = false;
|
|
513
614
|
|
|
514
615
|
const clear = () => {
|
|
515
616
|
if (listener) {
|
|
@@ -519,7 +620,9 @@ export abstract class Program<
|
|
|
519
620
|
this.events.removeEventListener("close", closeListener);
|
|
520
621
|
this.events.removeEventListener("drop", dropListener);
|
|
521
622
|
timeout && clearTimeout(timeout);
|
|
623
|
+
poll && clearInterval(poll);
|
|
522
624
|
timeout = undefined;
|
|
625
|
+
poll = undefined;
|
|
523
626
|
};
|
|
524
627
|
|
|
525
628
|
const resolveOnce = (hashes: string[]) => {
|
|
@@ -567,15 +670,59 @@ export abstract class Program<
|
|
|
567
670
|
this.events.addEventListener("close", closeListener, { once: true });
|
|
568
671
|
this.events.addEventListener("drop", dropListener, { once: true });
|
|
569
672
|
|
|
673
|
+
const isPeerReady = async (hash: string) => {
|
|
674
|
+
const cached = this._peerTopicsByHash?.get(hash);
|
|
675
|
+
if (cached && this.peerHasAllTopics(cached, allTopics)) {
|
|
676
|
+
return true;
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
// Subscription events are edge-triggered: we may have missed earlier subscribe
|
|
680
|
+
// events (e.g. if they arrived during program open). Fall back to best-effort
|
|
681
|
+
// pubsub snapshots to avoid false timeouts.
|
|
682
|
+
const pubsubAny = this.node.services.pubsub as any;
|
|
683
|
+
let key: PublicSignKey | undefined;
|
|
684
|
+
|
|
685
|
+
for (const topic of allTopics) {
|
|
686
|
+
// Fast path for TopicControlPlane: O(1) membership check without allocations.
|
|
687
|
+
const topicPeers:
|
|
688
|
+
| Map<string, { publicKey: PublicSignKey }>
|
|
689
|
+
| undefined = pubsubAny?.topics?.get?.(topic);
|
|
690
|
+
if (topicPeers?.has?.(hash)) {
|
|
691
|
+
key ||= topicPeers.get(hash)?.publicKey;
|
|
692
|
+
continue;
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
const subscribers =
|
|
696
|
+
await this.node.services.pubsub.getSubscribers(topic);
|
|
697
|
+
if (!subscribers || subscribers.length === 0) {
|
|
698
|
+
return false;
|
|
699
|
+
}
|
|
700
|
+
const found = subscribers.find((x) => x.hashcode() === hash);
|
|
701
|
+
if (!found) {
|
|
702
|
+
return false;
|
|
703
|
+
}
|
|
704
|
+
key ||= found;
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
if (key) {
|
|
708
|
+
this.recordPeerSubscription(key, allTopics);
|
|
709
|
+
}
|
|
710
|
+
return true;
|
|
711
|
+
};
|
|
712
|
+
|
|
570
713
|
const checkReady = async () => {
|
|
571
714
|
if (settled) {
|
|
572
715
|
return;
|
|
573
716
|
}
|
|
717
|
+
if (checking) {
|
|
718
|
+
return;
|
|
719
|
+
}
|
|
720
|
+
checking = true;
|
|
574
721
|
let ready = true;
|
|
575
722
|
try {
|
|
576
|
-
const allReadyHashes = await this.getReady();
|
|
577
723
|
for (const hash of expectedHashes) {
|
|
578
|
-
if (!
|
|
724
|
+
if (!(await isPeerReady(hash))) {
|
|
725
|
+
requestSubscriberSnapshots(hash);
|
|
579
726
|
ready = false;
|
|
580
727
|
break;
|
|
581
728
|
}
|
|
@@ -585,33 +732,35 @@ export abstract class Program<
|
|
|
585
732
|
}
|
|
586
733
|
} catch (error) {
|
|
587
734
|
rejectOnce(error);
|
|
735
|
+
} finally {
|
|
736
|
+
checking = false;
|
|
588
737
|
}
|
|
589
738
|
};
|
|
590
739
|
listener = () => {
|
|
591
740
|
void checkReady();
|
|
592
741
|
};
|
|
593
742
|
this.node.services.pubsub.addEventListener("subscribe", listener);
|
|
743
|
+
poll = setInterval(() => void checkReady(), 200);
|
|
744
|
+
poll.unref?.();
|
|
594
745
|
checkReady();
|
|
595
746
|
});
|
|
596
747
|
}
|
|
597
748
|
|
|
598
749
|
async getReady(): Promise<Map<string, PublicSignKey>> {
|
|
599
|
-
//
|
|
600
|
-
|
|
750
|
+
// Observed peers that subscribe to all topics.
|
|
751
|
+
// We intentionally do not depend on `pubsub.getSubscribers()` since that implies
|
|
752
|
+
// global membership knowledge which does not scale for large overlays.
|
|
601
753
|
const allTopics = this.getAllTopicsIncludingThis();
|
|
602
754
|
if (allTopics.length === 0) {
|
|
603
755
|
throw new Error("Program has no topics, cannot get ready");
|
|
604
756
|
}
|
|
605
757
|
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
ready
|
|
612
|
-
}
|
|
613
|
-
if (ready == null) {
|
|
614
|
-
return new Map();
|
|
758
|
+
const ready = new Map<string, PublicSignKey>();
|
|
759
|
+
await this.seedPeerTopicsSnapshot(allTopics);
|
|
760
|
+
|
|
761
|
+
for (const [hash, entry] of this.peerTopicsByHash) {
|
|
762
|
+
if (!this.peerHasAllTopics(entry, allTopics)) continue;
|
|
763
|
+
ready.set(hash, entry.publicKey);
|
|
615
764
|
}
|
|
616
765
|
return ready;
|
|
617
766
|
}
|