@peerbit/program 6.0.10 → 6.0.12

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.
@@ -73,6 +73,7 @@ export declare abstract class Program<Args = any, Events extends ProgramEvents =
73
73
  private peerHasAllTopics;
74
74
  private getAllTopicsIncludingThis;
75
75
  private seedPeerTopicsSnapshot;
76
+ private emitJoinIfReady;
76
77
  private _emitJoinNetworkEvents;
77
78
  private _emitLeaveNetworkEvents;
78
79
  private _subscriptionEventListener;
@@ -1 +1 @@
1
- {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/program.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/program.ts"],"names":[],"mappings":"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"}
@@ -309,18 +309,18 @@ let Program = (() => {
309
309
  continue;
310
310
  for (const subscriber of subscribers) {
311
311
  this.recordPeerSubscription(subscriber, [topic]);
312
+ this.emitJoinIfReady(subscriber);
312
313
  }
313
314
  }
314
315
  })();
315
316
  return this._seedPeerTopicsFromSubscribers;
316
317
  }
317
- _emitJoinNetworkEvents(s) {
318
+ emitJoinIfReady(from) {
318
319
  const allTopics = this.getAllTopicsIncludingThis();
319
320
  if (allTopics.length === 0) {
320
- return; // this is important (see events.spec.ts)
321
+ return;
321
322
  }
322
- this.recordPeerSubscription(s.from, s.topics);
323
- const fromHash = s.from.hashcode();
323
+ const fromHash = from.hashcode();
324
324
  if (this.emittedEventsFor.has(fromHash)) {
325
325
  return;
326
326
  }
@@ -330,7 +330,11 @@ let Program = (() => {
330
330
  if (!this.peerHasAllTopics(entry, allTopics))
331
331
  return;
332
332
  this.emittedEventsFor.add(fromHash);
333
- this.events.dispatchEvent(new CustomEvent("join", { detail: s.from }));
333
+ this.events.dispatchEvent(new CustomEvent("join", { detail: from }));
334
+ }
335
+ _emitJoinNetworkEvents(s) {
336
+ this.recordPeerSubscription(s.from, s.topics);
337
+ this.emitJoinIfReady(s.from);
334
338
  }
335
339
  _emitLeaveNetworkEvents(s) {
336
340
  const allTopics = this.getAllTopicsIncludingThis();
@@ -465,6 +469,35 @@ let Program = (() => {
465
469
  throw new Error("Program has no topics, cannot get ready");
466
470
  }
467
471
  const pubsub = this.node.services.pubsub;
472
+ const collectProvidedPublicKeys = (refs) => {
473
+ const providedPublicKeysByHash = new Map();
474
+ const rememberPublicKey = (ref) => {
475
+ if (ref instanceof PublicSignKey) {
476
+ providedPublicKeysByHash.set(ref.hashcode(), ref);
477
+ }
478
+ };
479
+ if (refs instanceof PublicSignKey || typeof refs === "string") {
480
+ rememberPublicKey(refs);
481
+ return providedPublicKeysByHash;
482
+ }
483
+ if (refs instanceof Array || refs instanceof Set) {
484
+ for (const ref of refs) {
485
+ rememberPublicKey(ref);
486
+ }
487
+ return providedPublicKeysByHash;
488
+ }
489
+ if (typeof refs?.[Symbol.iterator] === "function") {
490
+ for (const ref of refs) {
491
+ rememberPublicKey(ref);
492
+ }
493
+ }
494
+ return providedPublicKeysByHash;
495
+ };
496
+ const providedKeysByHash = collectProvidedPublicKeys(other);
497
+ // Seed a current subscriber snapshot after reachability is established so callers
498
+ // don't depend solely on edge-triggered subscribe events or follow-up snapshot
499
+ // requests to observe peers that were already ready.
500
+ await this.seedPeerTopicsSnapshot(allTopics);
468
501
  // Prefer a direct neighbour stream when available. This avoids cases where
469
502
  // peers are "reachable" via the routing table but we haven't established
470
503
  // a writable protocol stream yet (initial control-plane gossip can be dropped).
@@ -479,12 +512,15 @@ let Program = (() => {
479
512
  // snapshots while waiting, but rate-limit to avoid fanout in larger overlays.
480
513
  const REQUEST_MIN_INTERVAL_MS = 500;
481
514
  const lastRequestAtByPeer = new Map();
482
- const publicKeyByHash = new Map();
483
- const resolvePublicKey = (hash) => {
484
- let existing = publicKeyByHash.get(hash);
515
+ const publicKeyPromisesByHash = new Map();
516
+ const getPublicKeyForHash = (hash) => {
517
+ let existing = publicKeyPromisesByHash.get(hash);
485
518
  if (!existing) {
486
- existing = Promise.resolve(pubsub.getPublicKey(hash)).catch(() => undefined);
487
- publicKeyByHash.set(hash, existing);
519
+ const providedKey = providedKeysByHash.get(hash);
520
+ existing = providedKey
521
+ ? Promise.resolve(providedKey)
522
+ : Promise.resolve(pubsub.getPublicKey(hash)).catch(() => undefined);
523
+ publicKeyPromisesByHash.set(hash, existing);
488
524
  }
489
525
  return existing;
490
526
  };
@@ -494,7 +530,7 @@ let Program = (() => {
494
530
  if (now - last < REQUEST_MIN_INTERVAL_MS)
495
531
  return;
496
532
  lastRequestAtByPeer.set(hash, now);
497
- void resolvePublicKey(hash).then((publicKey) => {
533
+ void getPublicKeyForHash(hash).then((publicKey) => {
498
534
  for (const topic of allTopics) {
499
535
  void Promise.resolve(pubsub.requestSubscribers(topic, publicKey)).catch(() => {
500
536
  // best-effort; the wait loop will retry and/or time out
@@ -563,6 +599,7 @@ let Program = (() => {
563
599
  options?.signal?.addEventListener("abort", abortListener, { once: true });
564
600
  this.events.addEventListener("close", closeListener, { once: true });
565
601
  this.events.addEventListener("drop", dropListener, { once: true });
602
+ const pubsubTopicIndex = pubsub;
566
603
  const isPeerReady = async (hash) => {
567
604
  const cached = this._peerTopicsByHash?.get(hash);
568
605
  if (cached && this.peerHasAllTopics(cached, allTopics)) {
@@ -571,29 +608,37 @@ let Program = (() => {
571
608
  // Subscription events are edge-triggered: we may have missed earlier subscribe
572
609
  // events (e.g. if they arrived during program open). Fall back to best-effort
573
610
  // pubsub snapshots to avoid false timeouts.
574
- const pubsubAny = this.node.services.pubsub;
575
- let key;
611
+ let key = providedKeysByHash.get(hash);
612
+ const observedTopics = [];
613
+ const recordObservedTopics = () => {
614
+ if (key && observedTopics.length > 0) {
615
+ this.recordPeerSubscription(key, observedTopics);
616
+ this.emitJoinIfReady(key);
617
+ }
618
+ };
576
619
  for (const topic of allTopics) {
577
620
  // Fast path for TopicControlPlane: O(1) membership check without allocations.
578
- const topicPeers = pubsubAny?.topics?.get?.(topic);
621
+ const topicPeers = pubsubTopicIndex.topics?.get(topic);
579
622
  if (topicPeers?.has?.(hash)) {
580
623
  key ||= topicPeers.get(hash)?.publicKey;
624
+ observedTopics.push(topic);
581
625
  continue;
582
626
  }
583
627
  const subscribers = await this.node.services.pubsub.getSubscribers(topic);
584
628
  if (!subscribers || subscribers.length === 0) {
629
+ recordObservedTopics();
585
630
  return false;
586
631
  }
587
632
  const found = subscribers.find((x) => x.hashcode() === hash);
588
633
  if (!found) {
634
+ recordObservedTopics();
589
635
  return false;
590
636
  }
591
637
  key ||= found;
638
+ observedTopics.push(topic);
592
639
  }
593
- if (key) {
594
- this.recordPeerSubscription(key, allTopics);
595
- }
596
- return true;
640
+ recordObservedTopics();
641
+ return observedTopics.length === allTopics.length;
597
642
  };
598
643
  const checkReady = async () => {
599
644
  if (settled) {
@@ -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": "6.0.10",
3
+ "version": "6.0.12",
4
4
  "description": "Program interface",
5
5
  "sideEffects": false,
6
6
  "type": "module",
@@ -60,15 +60,15 @@
60
60
  "@peerbit/crypto": "3.1.0",
61
61
  "@peerbit/keychain": "1.2.7",
62
62
  "@peerbit/blocks-interface": "2.0.6",
63
- "@peerbit/pubsub-interface": "5.0.7",
64
63
  "@peerbit/any-store-interface": "1.1.0",
64
+ "@peerbit/pubsub-interface": "5.1.0",
65
65
  "@peerbit/libp2p-test-utils": "3.0.2",
66
66
  "@peerbit/indexer-interface": "3.0.2",
67
- "@peerbit/stream-interface": "6.0.6",
68
67
  "@peerbit/time": "3.0.0",
69
68
  "@peerbit/logger": "2.0.0",
70
- "@peerbit/blocks": "4.0.8",
71
- "@peerbit/pubsub": "5.0.8"
69
+ "@peerbit/stream-interface": "6.0.6",
70
+ "@peerbit/blocks": "4.0.9",
71
+ "@peerbit/pubsub": "5.1.1"
72
72
  },
73
73
  "scripts": {
74
74
  "clean": "aegir clean",
package/src/program.ts CHANGED
@@ -355,20 +355,19 @@ export abstract class Program<
355
355
  if (!subscribers || subscribers.length === 0) continue;
356
356
  for (const subscriber of subscribers) {
357
357
  this.recordPeerSubscription(subscriber, [topic]);
358
+ this.emitJoinIfReady(subscriber);
358
359
  }
359
360
  }
360
361
  })();
361
362
  return this._seedPeerTopicsFromSubscribers;
362
363
  }
363
- private _emitJoinNetworkEvents(s: SubscriptionEvent) {
364
+ private emitJoinIfReady(from: PublicSignKey) {
364
365
  const allTopics = this.getAllTopicsIncludingThis();
365
366
  if (allTopics.length === 0) {
366
- return; // this is important (see events.spec.ts)
367
+ return;
367
368
  }
368
369
 
369
- this.recordPeerSubscription(s.from, s.topics);
370
-
371
- const fromHash = s.from.hashcode();
370
+ const fromHash = from.hashcode();
372
371
  if (this.emittedEventsFor.has(fromHash)) {
373
372
  return;
374
373
  }
@@ -378,7 +377,11 @@ export abstract class Program<
378
377
  if (!this.peerHasAllTopics(entry, allTopics)) return;
379
378
 
380
379
  this.emittedEventsFor.add(fromHash);
381
- this.events.dispatchEvent(new CustomEvent("join", { detail: s.from }));
380
+ this.events.dispatchEvent(new CustomEvent("join", { detail: from }));
381
+ }
382
+ private _emitJoinNetworkEvents(s: SubscriptionEvent) {
383
+ this.recordPeerSubscription(s.from, s.topics);
384
+ this.emitJoinIfReady(s.from);
382
385
  }
383
386
 
384
387
  private _emitLeaveNetworkEvents(s: UnsubcriptionEvent) {
@@ -544,6 +547,38 @@ export abstract class Program<
544
547
  throw new Error("Program has no topics, cannot get ready");
545
548
  }
546
549
  const pubsub = this.node.services.pubsub;
550
+ const collectProvidedPublicKeys = (refs: PeerRefs): Map<string, PublicSignKey> => {
551
+ const providedPublicKeysByHash = new Map<string, PublicSignKey>();
552
+ const rememberPublicKey = (ref: unknown) => {
553
+ if (ref instanceof PublicSignKey) {
554
+ providedPublicKeysByHash.set(ref.hashcode(), ref);
555
+ }
556
+ };
557
+
558
+ if (refs instanceof PublicSignKey || typeof refs === "string") {
559
+ rememberPublicKey(refs);
560
+ return providedPublicKeysByHash;
561
+ }
562
+ if (refs instanceof Array || refs instanceof Set) {
563
+ for (const ref of refs) {
564
+ rememberPublicKey(ref);
565
+ }
566
+ return providedPublicKeysByHash;
567
+ }
568
+ if (typeof (refs as Iterable<unknown>)?.[Symbol.iterator] === "function") {
569
+ for (const ref of refs as Iterable<unknown>) {
570
+ rememberPublicKey(ref);
571
+ }
572
+ }
573
+
574
+ return providedPublicKeysByHash;
575
+ };
576
+ const providedKeysByHash = collectProvidedPublicKeys(other);
577
+
578
+ // Seed a current subscriber snapshot after reachability is established so callers
579
+ // don't depend solely on edge-triggered subscribe events or follow-up snapshot
580
+ // requests to observe peers that were already ready.
581
+ await this.seedPeerTopicsSnapshot(allTopics);
547
582
 
548
583
  // Prefer a direct neighbour stream when available. This avoids cases where
549
584
  // peers are "reachable" via the routing table but we haven't established
@@ -564,19 +599,22 @@ export abstract class Program<
564
599
  // snapshots while waiting, but rate-limit to avoid fanout in larger overlays.
565
600
  const REQUEST_MIN_INTERVAL_MS = 500;
566
601
  const lastRequestAtByPeer = new Map<string, number>();
567
- const publicKeyByHash = new Map<
602
+ const publicKeyPromisesByHash = new Map<
568
603
  string,
569
604
  Promise<PublicSignKey | undefined>
570
605
  >();
571
- const resolvePublicKey = (
606
+ const getPublicKeyForHash = (
572
607
  hash: string,
573
608
  ): Promise<PublicSignKey | undefined> => {
574
- let existing = publicKeyByHash.get(hash);
609
+ let existing = publicKeyPromisesByHash.get(hash);
575
610
  if (!existing) {
576
- existing = Promise.resolve(pubsub.getPublicKey(hash)).catch(
577
- (): PublicSignKey | undefined => undefined,
578
- );
579
- publicKeyByHash.set(hash, existing);
611
+ const providedKey = providedKeysByHash.get(hash);
612
+ existing = providedKey
613
+ ? Promise.resolve(providedKey)
614
+ : Promise.resolve(pubsub.getPublicKey(hash)).catch(
615
+ (): PublicSignKey | undefined => undefined,
616
+ );
617
+ publicKeyPromisesByHash.set(hash, existing);
580
618
  }
581
619
  return existing;
582
620
  };
@@ -586,7 +624,7 @@ export abstract class Program<
586
624
  if (now - last < REQUEST_MIN_INTERVAL_MS) return;
587
625
  lastRequestAtByPeer.set(hash, now);
588
626
 
589
- void resolvePublicKey(hash).then((publicKey) => {
627
+ void getPublicKeyForHash(hash).then((publicKey) => {
590
628
  for (const topic of allTopics) {
591
629
  void Promise.resolve(
592
630
  pubsub.requestSubscribers(topic, publicKey),
@@ -670,6 +708,11 @@ export abstract class Program<
670
708
  this.events.addEventListener("close", closeListener, { once: true });
671
709
  this.events.addEventListener("drop", dropListener, { once: true });
672
710
 
711
+ type PubSubTopicIndex = {
712
+ topics?: Map<string, Map<string, { publicKey: PublicSignKey }>>;
713
+ };
714
+ const pubsubTopicIndex = pubsub as PubSubTopicIndex;
715
+
673
716
  const isPeerReady = async (hash: string) => {
674
717
  const cached = this._peerTopicsByHash?.get(hash);
675
718
  if (cached && this.peerHasAllTopics(cached, allTopics)) {
@@ -679,35 +722,41 @@ export abstract class Program<
679
722
  // Subscription events are edge-triggered: we may have missed earlier subscribe
680
723
  // events (e.g. if they arrived during program open). Fall back to best-effort
681
724
  // pubsub snapshots to avoid false timeouts.
682
- const pubsubAny = this.node.services.pubsub as any;
683
- let key: PublicSignKey | undefined;
725
+ let key: PublicSignKey | undefined = providedKeysByHash.get(hash);
726
+ const observedTopics: string[] = [];
727
+ const recordObservedTopics = () => {
728
+ if (key && observedTopics.length > 0) {
729
+ this.recordPeerSubscription(key, observedTopics);
730
+ this.emitJoinIfReady(key);
731
+ }
732
+ };
684
733
 
685
734
  for (const topic of allTopics) {
686
735
  // Fast path for TopicControlPlane: O(1) membership check without allocations.
687
- const topicPeers:
688
- | Map<string, { publicKey: PublicSignKey }>
689
- | undefined = pubsubAny?.topics?.get?.(topic);
736
+ const topicPeers = pubsubTopicIndex.topics?.get(topic);
690
737
  if (topicPeers?.has?.(hash)) {
691
738
  key ||= topicPeers.get(hash)?.publicKey;
739
+ observedTopics.push(topic);
692
740
  continue;
693
741
  }
694
742
 
695
743
  const subscribers =
696
744
  await this.node.services.pubsub.getSubscribers(topic);
697
745
  if (!subscribers || subscribers.length === 0) {
746
+ recordObservedTopics();
698
747
  return false;
699
748
  }
700
749
  const found = subscribers.find((x) => x.hashcode() === hash);
701
750
  if (!found) {
751
+ recordObservedTopics();
702
752
  return false;
703
753
  }
704
754
  key ||= found;
755
+ observedTopics.push(topic);
705
756
  }
706
757
 
707
- if (key) {
708
- this.recordPeerSubscription(key, allTopics);
709
- }
710
- return true;
758
+ recordObservedTopics();
759
+ return observedTopics.length === allTopics.length;
711
760
  };
712
761
 
713
762
  const checkReady = async () => {