@peerbit/pubsub 2.0.3 → 2.0.5

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.
@@ -46,7 +46,7 @@ export declare class DirectSub extends DirectStream<PubSubEvents> implements Pub
46
46
  getPeersOnTopics(topics: string[]): Set<string>;
47
47
  publish(data: Uint8Array | undefined, options?: ({
48
48
  topics: string[];
49
- to?: (string | PublicSignKey | PeerId)[];
49
+ mode?: SilentDelivery | SeekDelivery | AcknowledgeDelivery;
50
50
  } | {
51
51
  topics: string[];
52
52
  mode?: SilentDelivery | SeekDelivery | AcknowledgeDelivery;
package/lib/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { logger as logFn } from "@peerbit/logger";
2
- import { AcknowledgeDelivery, AnyWhere, DataMessage, MessageHeader, SeekDelivery, SilentDelivery } from "@peerbit/stream-interface";
2
+ import { AcknowledgeDelivery, AnyWhere, DataMessage, MessageHeader, SeekDelivery, SilentDelivery, deliveryModeHasReceiver } from "@peerbit/stream-interface";
3
3
  import { DirectStream } from "@peerbit/stream";
4
4
  import { CodeError } from "@libp2p/interface";
5
5
  import { PubSubMessage, Subscribe, PubSubData, toUint8Array, Unsubscribe, GetSubscribers, UnsubcriptionEvent, SubscriptionEvent, DataEvent, SubscriptionData, PublishEvent } from "@peerbit/pubsub-interface";
@@ -57,7 +57,8 @@ export class DirectSub extends DirectStream {
57
57
  if (newTopicsForTopicData.length > 0) {
58
58
  const message = new DataMessage({
59
59
  data: toUint8Array(new Subscribe({
60
- topics: newTopicsForTopicData
60
+ topics: newTopicsForTopicData,
61
+ requestSubscribers: true
61
62
  }).bytes()),
62
63
  header: new MessageHeader({ mode: new SeekDelivery({ redundancy: 2 }) })
63
64
  });
@@ -168,17 +169,16 @@ export class DirectSub extends DirectStream {
168
169
  throw new Error("Not started");
169
170
  }
170
171
  const topics = options.topics?.map((x) => x.toString()) || [];
171
- const tos = options?.to?.map((x) => x instanceof PublicSignKey
172
- ? x.hashcode()
173
- : typeof x === "string"
174
- ? x
175
- : getPublicKeyFromPeerId(x).hashcode()) || this.getPeersOnTopics(topics);
172
+ const hasExplicitTOs = options?.mode && deliveryModeHasReceiver(options.mode);
173
+ const tos = hasExplicitTOs
174
+ ? options.mode?.to
175
+ : this.getPeersOnTopics(topics);
176
176
  // Embedd topic info before the data so that peers/relays can also use topic info to route messages efficiently
177
177
  const dataMessage = data
178
178
  ? new PubSubData({
179
179
  topics: topics.map((x) => x.toString()),
180
180
  data,
181
- strict: !!options?.to
181
+ strict: hasExplicitTOs
182
182
  })
183
183
  : undefined;
184
184
  const bytes = dataMessage?.bytes();
@@ -221,7 +221,8 @@ export class DirectSub extends DirectStream {
221
221
  // tell the peer about all topics we subscribe to
222
222
  this.publishMessage(this.publicKey, await new DataMessage({
223
223
  data: toUint8Array(new Subscribe({
224
- topics: [...this.subscriptions.keys()]
224
+ topics: [...this.subscriptions.keys()],
225
+ requestSubscribers: true
225
226
  }).bytes()),
226
227
  header: new MessageHeader({
227
228
  mode: new SeekDelivery({ redundancy: 2 })
@@ -293,23 +294,27 @@ export class DirectSub extends DirectStream {
293
294
  /**
294
295
  * See if we know more subscribers of the message topics. If so, add aditional end receivers of the message
295
296
  */
297
+ const meInTOs = !!message.header.mode.to?.find((x) => this.publicKeyHash === x);
296
298
  let isForMe;
297
299
  if (pubsubMessage.strict) {
298
300
  isForMe =
299
- !!pubsubMessage.topics.find((topic) => this.subscriptions.has(topic)) && !!message.header.mode.to?.find((x) => this.publicKeyHash === x);
301
+ !!pubsubMessage.topics.find((topic) => this.subscriptions.has(topic)) && meInTOs;
300
302
  }
301
303
  else {
302
304
  isForMe =
303
305
  !!pubsubMessage.topics.find((topic) => this.subscriptions.has(topic)) ||
304
- (pubsubMessage.topics.length === 0 &&
305
- !!message.header.mode.to?.find((x) => this.publicKeyHash === x));
306
+ (pubsubMessage.topics.length === 0 && meInTOs);
306
307
  }
307
308
  if (isForMe) {
308
309
  if ((await this.maybeVerifyMessage(message)) === false) {
309
310
  logger.warn("Recieved message that did not verify PubSubData");
310
311
  return false;
311
312
  }
313
+ }
314
+ if (meInTOs) {
312
315
  await this.acknowledgeMessage(stream, message, seenBefore);
316
+ }
317
+ if (isForMe) {
313
318
  if (seenBefore === 0) {
314
319
  this.dispatchEvent(new CustomEvent("data", {
315
320
  detail: new DataEvent({
@@ -354,41 +359,38 @@ export class DirectSub extends DirectStream {
354
359
  logger.info("Recieved subscription message with no topics");
355
360
  return false;
356
361
  }
357
- if (!this.subscriptionMessageIsLatest(message, pubsubMessage)) {
358
- logger.trace("Recieved old subscription message");
359
- return false;
360
- }
361
- this.initializePeer(sender);
362
- const changed = [];
363
- pubsubMessage.topics.forEach((topic) => {
364
- const peers = this.topics.get(topic);
365
- if (peers == null) {
366
- return;
367
- }
368
- // if no subscription data, or new subscription has data (and is newer) then overwrite it.
369
- // subscription where data is undefined is not intended to replace existing data
370
- const existingSubscription = peers.get(senderKey);
371
- if (!existingSubscription ||
372
- existingSubscription.timestamp < message.header.timetamp) {
373
- peers.set(senderKey, new SubscriptionData({
374
- timestamp: message.header.timetamp, // TODO update timestamps on all messages?
375
- publicKey: sender
376
- }));
377
- if (!existingSubscription) {
378
- changed.push(topic);
362
+ if (this.subscriptionMessageIsLatest(message, pubsubMessage)) {
363
+ const changed = [];
364
+ pubsubMessage.topics.forEach((topic) => {
365
+ const peers = this.topics.get(topic);
366
+ if (peers == null) {
367
+ return;
368
+ }
369
+ this.initializePeer(sender);
370
+ // if no subscription data, or new subscription has data (and is newer) then overwrite it.
371
+ // subscription where data is undefined is not intended to replace existing data
372
+ const existingSubscription = peers.get(senderKey);
373
+ if (!existingSubscription ||
374
+ existingSubscription.timestamp < message.header.timetamp) {
375
+ peers.set(senderKey, new SubscriptionData({
376
+ timestamp: message.header.timetamp, // TODO update timestamps on all messages?
377
+ publicKey: sender
378
+ }));
379
+ if (!existingSubscription) {
380
+ changed.push(topic);
381
+ }
379
382
  }
383
+ this.topicsToPeers.get(topic)?.add(senderKey);
384
+ this.peerToTopic.get(senderKey)?.add(topic);
385
+ });
386
+ if (changed.length > 0 && seenBefore === 0) {
387
+ this.dispatchEvent(new CustomEvent("subscribe", {
388
+ detail: new SubscriptionEvent(sender, changed)
389
+ }));
380
390
  }
381
- this.topicsToPeers.get(topic)?.add(senderKey);
382
- this.peerToTopic.get(senderKey)?.add(topic);
383
- });
384
- if (changed.length > 0) {
385
- this.dispatchEvent(new CustomEvent("subscribe", {
386
- detail: new SubscriptionEvent(sender, changed)
387
- }));
388
- // also send back a message telling the remote whether we are subsbscring
389
- if (message.header.mode instanceof SeekDelivery) {
390
- // only if Subscribe message is of 'seek' type we will respond with our subscriptions
391
- const mySubscriptions = changed
391
+ if (pubsubMessage.requestSubscribers) {
392
+ // respond if we are subscribing
393
+ const mySubscriptions = pubsubMessage.topics
392
394
  .map((x) => {
393
395
  const subscription = this.subscriptions.get(x);
394
396
  return subscription ? x : undefined;
@@ -397,13 +399,14 @@ export class DirectSub extends DirectStream {
397
399
  if (mySubscriptions.length > 0) {
398
400
  const response = new DataMessage({
399
401
  data: toUint8Array(new Subscribe({
400
- topics: mySubscriptions
402
+ topics: mySubscriptions,
403
+ requestSubscribers: false
401
404
  }).bytes()),
402
405
  // needs to be Ack or Silent else we will run into a infite message loop
403
406
  header: new MessageHeader({
404
- mode: new AcknowledgeDelivery({
407
+ mode: new SeekDelivery({
405
408
  redundancy: 2,
406
- to: [sender.hashcode()]
409
+ to: [senderKey]
407
410
  })
408
411
  })
409
412
  });
@@ -416,27 +419,25 @@ export class DirectSub extends DirectStream {
416
419
  this.relayMessage(from, message).catch(logError);
417
420
  }
418
421
  else if (pubsubMessage instanceof Unsubscribe) {
419
- if (!this.subscriptionMessageIsLatest(message, pubsubMessage)) {
420
- logger.trace("Recieved old subscription message");
421
- return false;
422
- }
423
- const changed = [];
424
- for (const unsubscription of pubsubMessage.topics) {
425
- const change = this.deletePeerFromTopic(unsubscription, senderKey);
426
- if (change) {
427
- changed.push(unsubscription);
422
+ if (this.subscriptionMessageIsLatest(message, pubsubMessage)) {
423
+ const changed = [];
424
+ for (const unsubscription of pubsubMessage.topics) {
425
+ const change = this.deletePeerFromTopic(unsubscription, senderKey);
426
+ if (change) {
427
+ changed.push(unsubscription);
428
+ }
429
+ }
430
+ if (changed.length > 0 && seenBefore === 0) {
431
+ this.dispatchEvent(new CustomEvent("unsubscribe", {
432
+ detail: new UnsubcriptionEvent(sender, changed)
433
+ }));
434
+ }
435
+ // Forwarding
436
+ if (message.header.mode instanceof SeekDelivery ||
437
+ message.header.mode instanceof SilentDelivery ||
438
+ message.header.mode instanceof AcknowledgeDelivery) {
439
+ this.addPeersOnTopic(message, pubsubMessage.topics);
428
440
  }
429
- }
430
- if (changed.length > 0) {
431
- this.dispatchEvent(new CustomEvent("unsubscribe", {
432
- detail: new UnsubcriptionEvent(sender, changed)
433
- }));
434
- }
435
- // Forward
436
- if (message.header.mode instanceof SeekDelivery ||
437
- message.header.mode instanceof SilentDelivery ||
438
- message.header.mode instanceof AcknowledgeDelivery) {
439
- this.addPeersOnTopic(message, pubsubMessage.topics);
440
441
  }
441
442
  // DONT await this since it might introduce a dead-lock
442
443
  this.relayMessage(from, message).catch(logError);
@@ -453,7 +454,8 @@ export class DirectSub extends DirectStream {
453
454
  // respond
454
455
  this.publishMessage(this.publicKey, await new DataMessage({
455
456
  data: toUint8Array(new Subscribe({
456
- topics: subscriptionsToSend
457
+ topics: subscriptionsToSend,
458
+ requestSubscribers: false
457
459
  }).bytes()),
458
460
  header: new MessageHeader({
459
461
  mode: new SilentDelivery({
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@peerbit/pubsub",
3
- "version": "2.0.3",
3
+ "version": "2.0.5",
4
4
  "description": "Direct streaming for libp2p",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -49,13 +49,13 @@
49
49
  "dao.xyz"
50
50
  ],
51
51
  "devDependencies": {
52
- "@peerbit/libp2p-test-utils": "2.0.0"
52
+ "@peerbit/libp2p-test-utils": "2.0.1"
53
53
  },
54
54
  "dependencies": {
55
55
  "@peerbit/logger": "1.0.2",
56
- "@peerbit/stream": "2.0.3",
56
+ "@peerbit/stream": "2.0.5",
57
57
  "@peerbit/uint8arrays": "3.0.1",
58
58
  "libp2p": "^1.1.0"
59
59
  },
60
- "gitHead": "6ad79dad90921f7a2ad27117e5160f3826c08e60"
60
+ "gitHead": "f4cb6a526d26e98360c32fd28dcdf9eb7ea10551"
61
61
  }
package/src/index.ts CHANGED
@@ -8,7 +8,8 @@ import {
8
8
  Message,
9
9
  MessageHeader,
10
10
  SeekDelivery,
11
- SilentDelivery
11
+ SilentDelivery,
12
+ deliveryModeHasReceiver
12
13
  } from "@peerbit/stream-interface";
13
14
  import {
14
15
  DirectStream,
@@ -110,7 +111,8 @@ export class DirectSub extends DirectStream<PubSubEvents> implements PubSub {
110
111
  const message = new DataMessage({
111
112
  data: toUint8Array(
112
113
  new Subscribe({
113
- topics: newTopicsForTopicData
114
+ topics: newTopicsForTopicData,
115
+ requestSubscribers: true
114
116
  }).bytes()
115
117
  ),
116
118
  header: new MessageHeader({ mode: new SeekDelivery({ redundancy: 2 }) })
@@ -255,7 +257,7 @@ export class DirectSub extends DirectStream<PubSubEvents> implements PubSub {
255
257
  options?: (
256
258
  | {
257
259
  topics: string[];
258
- to?: (string | PublicSignKey | PeerId)[];
260
+ mode?: SilentDelivery | SeekDelivery | AcknowledgeDelivery;
259
261
  }
260
262
  | {
261
263
  topics: string[];
@@ -270,21 +272,18 @@ export class DirectSub extends DirectStream<PubSubEvents> implements PubSub {
270
272
  const topics =
271
273
  (options as { topics: string[] }).topics?.map((x) => x.toString()) || [];
272
274
 
273
- const tos =
274
- (options as { to: (string | PublicSignKey | PeerId)[] })?.to?.map((x) =>
275
- x instanceof PublicSignKey
276
- ? x.hashcode()
277
- : typeof x === "string"
278
- ? x
279
- : getPublicKeyFromPeerId(x).hashcode()
280
- ) || this.getPeersOnTopics(topics);
275
+ const hasExplicitTOs =
276
+ options?.mode && deliveryModeHasReceiver(options.mode);
277
+ const tos = hasExplicitTOs
278
+ ? options.mode?.to
279
+ : this.getPeersOnTopics(topics);
281
280
 
282
281
  // Embedd topic info before the data so that peers/relays can also use topic info to route messages efficiently
283
282
  const dataMessage = data
284
283
  ? new PubSubData({
285
284
  topics: topics.map((x) => x.toString()),
286
285
  data,
287
- strict: !!(options as { to: string[] })?.to
286
+ strict: hasExplicitTOs
288
287
  })
289
288
  : undefined;
290
289
 
@@ -344,7 +343,8 @@ export class DirectSub extends DirectStream<PubSubEvents> implements PubSub {
344
343
  await new DataMessage({
345
344
  data: toUint8Array(
346
345
  new Subscribe({
347
- topics: [...this.subscriptions.keys()]
346
+ topics: [...this.subscriptions.keys()],
347
+ requestSubscribers: true
348
348
  }).bytes()
349
349
  ),
350
350
  header: new MessageHeader({
@@ -450,28 +450,35 @@ export class DirectSub extends DirectStream<PubSubEvents> implements PubSub {
450
450
  * See if we know more subscribers of the message topics. If so, add aditional end receivers of the message
451
451
  */
452
452
 
453
+ const meInTOs = !!message.header.mode.to?.find(
454
+ (x) => this.publicKeyHash === x
455
+ );
456
+
453
457
  let isForMe: boolean;
454
458
  if (pubsubMessage.strict) {
455
459
  isForMe =
456
460
  !!pubsubMessage.topics.find((topic) =>
457
461
  this.subscriptions.has(topic)
458
- ) && !!message.header.mode.to?.find((x) => this.publicKeyHash === x);
462
+ ) && meInTOs;
459
463
  } else {
460
464
  isForMe =
461
465
  !!pubsubMessage.topics.find((topic) =>
462
466
  this.subscriptions.has(topic)
463
467
  ) ||
464
- (pubsubMessage.topics.length === 0 &&
465
- !!message.header.mode.to?.find((x) => this.publicKeyHash === x));
468
+ (pubsubMessage.topics.length === 0 && meInTOs);
466
469
  }
470
+
467
471
  if (isForMe) {
468
472
  if ((await this.maybeVerifyMessage(message)) === false) {
469
473
  logger.warn("Recieved message that did not verify PubSubData");
470
474
  return false;
471
475
  }
472
-
476
+ }
477
+ if (meInTOs) {
473
478
  await this.acknowledgeMessage(stream, message, seenBefore);
479
+ }
474
480
 
481
+ if (isForMe) {
475
482
  if (seenBefore === 0) {
476
483
  this.dispatchEvent(
477
484
  new CustomEvent("data", {
@@ -534,54 +541,51 @@ export class DirectSub extends DirectStream<PubSubEvents> implements PubSub {
534
541
  return false;
535
542
  }
536
543
 
537
- if (!this.subscriptionMessageIsLatest(message, pubsubMessage)) {
538
- logger.trace("Recieved old subscription message");
539
- return false;
540
- }
541
-
542
- this.initializePeer(sender);
544
+ if (this.subscriptionMessageIsLatest(message, pubsubMessage)) {
545
+ const changed: string[] = [];
546
+ pubsubMessage.topics.forEach((topic) => {
547
+ const peers = this.topics.get(topic);
548
+ if (peers == null) {
549
+ return;
550
+ }
543
551
 
544
- const changed: string[] = [];
545
- pubsubMessage.topics.forEach((topic) => {
546
- const peers = this.topics.get(topic);
547
- if (peers == null) {
548
- return;
549
- }
552
+ this.initializePeer(sender);
553
+
554
+ // if no subscription data, or new subscription has data (and is newer) then overwrite it.
555
+ // subscription where data is undefined is not intended to replace existing data
556
+ const existingSubscription = peers.get(senderKey);
557
+
558
+ if (
559
+ !existingSubscription ||
560
+ existingSubscription.timestamp < message.header.timetamp
561
+ ) {
562
+ peers.set(
563
+ senderKey,
564
+ new SubscriptionData({
565
+ timestamp: message.header.timetamp, // TODO update timestamps on all messages?
566
+ publicKey: sender
567
+ })
568
+ );
569
+ if (!existingSubscription) {
570
+ changed.push(topic);
571
+ }
572
+ }
550
573
 
551
- // if no subscription data, or new subscription has data (and is newer) then overwrite it.
552
- // subscription where data is undefined is not intended to replace existing data
553
- const existingSubscription = peers.get(senderKey);
574
+ this.topicsToPeers.get(topic)?.add(senderKey);
575
+ this.peerToTopic.get(senderKey)?.add(topic);
576
+ });
554
577
 
555
- if (
556
- !existingSubscription ||
557
- existingSubscription.timestamp < message.header.timetamp
558
- ) {
559
- peers.set(
560
- senderKey,
561
- new SubscriptionData({
562
- timestamp: message.header.timetamp, // TODO update timestamps on all messages?
563
- publicKey: sender
578
+ if (changed.length > 0 && seenBefore === 0) {
579
+ this.dispatchEvent(
580
+ new CustomEvent<SubscriptionEvent>("subscribe", {
581
+ detail: new SubscriptionEvent(sender, changed)
564
582
  })
565
583
  );
566
- if (!existingSubscription) {
567
- changed.push(topic);
568
- }
569
584
  }
570
585
 
571
- this.topicsToPeers.get(topic)?.add(senderKey);
572
- this.peerToTopic.get(senderKey)?.add(topic);
573
- });
574
- if (changed.length > 0) {
575
- this.dispatchEvent(
576
- new CustomEvent<SubscriptionEvent>("subscribe", {
577
- detail: new SubscriptionEvent(sender, changed)
578
- })
579
- );
580
-
581
- // also send back a message telling the remote whether we are subsbscring
582
- if (message.header.mode instanceof SeekDelivery) {
583
- // only if Subscribe message is of 'seek' type we will respond with our subscriptions
584
- const mySubscriptions = changed
586
+ if (pubsubMessage.requestSubscribers) {
587
+ // respond if we are subscribing
588
+ const mySubscriptions = pubsubMessage.topics
585
589
  .map((x) => {
586
590
  const subscription = this.subscriptions.get(x);
587
591
  return subscription ? x : undefined;
@@ -592,14 +596,15 @@ export class DirectSub extends DirectStream<PubSubEvents> implements PubSub {
592
596
  const response = new DataMessage({
593
597
  data: toUint8Array(
594
598
  new Subscribe({
595
- topics: mySubscriptions
599
+ topics: mySubscriptions,
600
+ requestSubscribers: false
596
601
  }).bytes()
597
602
  ),
598
603
  // needs to be Ack or Silent else we will run into a infite message loop
599
604
  header: new MessageHeader({
600
- mode: new AcknowledgeDelivery({
605
+ mode: new SeekDelivery({
601
606
  redundancy: 2,
602
- to: [sender.hashcode()]
607
+ to: [senderKey]
603
608
  })
604
609
  })
605
610
  });
@@ -616,40 +621,37 @@ export class DirectSub extends DirectStream<PubSubEvents> implements PubSub {
616
621
  // DONT await this since it might introduce a dead-lock
617
622
  this.relayMessage(from, message).catch(logError);
618
623
  } else if (pubsubMessage instanceof Unsubscribe) {
619
- if (!this.subscriptionMessageIsLatest(message, pubsubMessage)) {
620
- logger.trace("Recieved old subscription message");
621
- return false;
622
- }
623
-
624
- const changed: string[] = [];
624
+ if (this.subscriptionMessageIsLatest(message, pubsubMessage)) {
625
+ const changed: string[] = [];
625
626
 
626
- for (const unsubscription of pubsubMessage.topics) {
627
- const change = this.deletePeerFromTopic(unsubscription, senderKey);
628
- if (change) {
629
- changed.push(unsubscription);
627
+ for (const unsubscription of pubsubMessage.topics) {
628
+ const change = this.deletePeerFromTopic(unsubscription, senderKey);
629
+ if (change) {
630
+ changed.push(unsubscription);
631
+ }
630
632
  }
631
- }
632
633
 
633
- if (changed.length > 0) {
634
- this.dispatchEvent(
635
- new CustomEvent<UnsubcriptionEvent>("unsubscribe", {
636
- detail: new UnsubcriptionEvent(sender, changed)
637
- })
638
- );
639
- }
634
+ if (changed.length > 0 && seenBefore === 0) {
635
+ this.dispatchEvent(
636
+ new CustomEvent<UnsubcriptionEvent>("unsubscribe", {
637
+ detail: new UnsubcriptionEvent(sender, changed)
638
+ })
639
+ );
640
+ }
640
641
 
641
- // Forward
642
- if (
643
- message.header.mode instanceof SeekDelivery ||
644
- message.header.mode instanceof SilentDelivery ||
645
- message.header.mode instanceof AcknowledgeDelivery
646
- ) {
647
- this.addPeersOnTopic(
648
- message as DataMessage<
649
- SeekDelivery | SilentDelivery | AcknowledgeDelivery
650
- >,
651
- pubsubMessage.topics
652
- );
642
+ // Forwarding
643
+ if (
644
+ message.header.mode instanceof SeekDelivery ||
645
+ message.header.mode instanceof SilentDelivery ||
646
+ message.header.mode instanceof AcknowledgeDelivery
647
+ ) {
648
+ this.addPeersOnTopic(
649
+ message as DataMessage<
650
+ SeekDelivery | SilentDelivery | AcknowledgeDelivery
651
+ >,
652
+ pubsubMessage.topics
653
+ );
654
+ }
653
655
  }
654
656
 
655
657
  // DONT await this since it might introduce a dead-lock
@@ -670,7 +672,8 @@ export class DirectSub extends DirectStream<PubSubEvents> implements PubSub {
670
672
  await new DataMessage({
671
673
  data: toUint8Array(
672
674
  new Subscribe({
673
- topics: subscriptionsToSend
675
+ topics: subscriptionsToSend,
676
+ requestSubscribers: false
674
677
  }).bytes()
675
678
  ),
676
679
  header: new MessageHeader({