@libp2p/floodsub 11.0.14 → 11.0.15

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.
@@ -1,6 +1,4 @@
1
- /* eslint-disable complexity */
2
-
3
- import { decodeMessage, encodeMessage, MaxLengthError, message } from 'protons-runtime'
1
+ import { decodeMessage, encodeMessage, MaxLengthError, message, streamMessage } from 'protons-runtime'
4
2
  import type { Codec, DecodeOptions } from 'protons-runtime'
5
3
  import type { Uint8ArrayList } from 'uint8arraylist'
6
4
 
@@ -64,19 +62,60 @@ export namespace RPC {
64
62
  }
65
63
 
66
64
  return obj
65
+ }, function * (reader, length, prefix, opts = {}) {
66
+ const end = length == null ? reader.len : reader.pos + length
67
+
68
+ while (reader.pos < end) {
69
+ const tag = reader.uint32()
70
+
71
+ switch (tag >>> 3) {
72
+ case 1: {
73
+ yield {
74
+ field: `${prefix}.subscribe`,
75
+ value: reader.bool()
76
+ }
77
+ break
78
+ }
79
+ case 2: {
80
+ yield {
81
+ field: `${prefix}.topic`,
82
+ value: reader.string()
83
+ }
84
+ break
85
+ }
86
+ default: {
87
+ reader.skipType(tag & 7)
88
+ break
89
+ }
90
+ }
91
+ }
67
92
  })
68
93
  }
69
94
 
70
95
  return _codec
71
96
  }
72
97
 
73
- export const encode = (obj: Partial<SubOpts>): Uint8Array => {
98
+ export interface SubOptsSubscribeFieldEvent {
99
+ field: '$.subscribe'
100
+ value: boolean
101
+ }
102
+
103
+ export interface SubOptsTopicFieldEvent {
104
+ field: '$.topic'
105
+ value: string
106
+ }
107
+
108
+ export function encode (obj: Partial<SubOpts>): Uint8Array {
74
109
  return encodeMessage(obj, SubOpts.codec())
75
110
  }
76
111
 
77
- export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<SubOpts>): SubOpts => {
112
+ export function decode (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<SubOpts>): SubOpts {
78
113
  return decodeMessage(buf, SubOpts.codec(), opts)
79
114
  }
115
+
116
+ export function stream (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<SubOpts>): Generator<SubOptsSubscribeFieldEvent | SubOptsTopicFieldEvent> {
117
+ return streamMessage(buf, SubOpts.codec(), opts)
118
+ }
80
119
  }
81
120
 
82
121
  export interface Message {
@@ -172,19 +211,108 @@ export namespace RPC {
172
211
  }
173
212
 
174
213
  return obj
214
+ }, function * (reader, length, prefix, opts = {}) {
215
+ const end = length == null ? reader.len : reader.pos + length
216
+
217
+ while (reader.pos < end) {
218
+ const tag = reader.uint32()
219
+
220
+ switch (tag >>> 3) {
221
+ case 1: {
222
+ yield {
223
+ field: `${prefix}.from`,
224
+ value: reader.bytes()
225
+ }
226
+ break
227
+ }
228
+ case 2: {
229
+ yield {
230
+ field: `${prefix}.data`,
231
+ value: reader.bytes()
232
+ }
233
+ break
234
+ }
235
+ case 3: {
236
+ yield {
237
+ field: `${prefix}.sequenceNumber`,
238
+ value: reader.bytes()
239
+ }
240
+ break
241
+ }
242
+ case 4: {
243
+ yield {
244
+ field: `${prefix}.topic`,
245
+ value: reader.string()
246
+ }
247
+ break
248
+ }
249
+ case 5: {
250
+ yield {
251
+ field: `${prefix}.signature`,
252
+ value: reader.bytes()
253
+ }
254
+ break
255
+ }
256
+ case 6: {
257
+ yield {
258
+ field: `${prefix}.key`,
259
+ value: reader.bytes()
260
+ }
261
+ break
262
+ }
263
+ default: {
264
+ reader.skipType(tag & 7)
265
+ break
266
+ }
267
+ }
268
+ }
175
269
  })
176
270
  }
177
271
 
178
272
  return _codec
179
273
  }
180
274
 
181
- export const encode = (obj: Partial<Message>): Uint8Array => {
275
+ export interface MessageFromFieldEvent {
276
+ field: '$.from'
277
+ value: Uint8Array
278
+ }
279
+
280
+ export interface MessageDataFieldEvent {
281
+ field: '$.data'
282
+ value: Uint8Array
283
+ }
284
+
285
+ export interface MessageSequenceNumberFieldEvent {
286
+ field: '$.sequenceNumber'
287
+ value: Uint8Array
288
+ }
289
+
290
+ export interface MessageTopicFieldEvent {
291
+ field: '$.topic'
292
+ value: string
293
+ }
294
+
295
+ export interface MessageSignatureFieldEvent {
296
+ field: '$.signature'
297
+ value: Uint8Array
298
+ }
299
+
300
+ export interface MessageKeyFieldEvent {
301
+ field: '$.key'
302
+ value: Uint8Array
303
+ }
304
+
305
+ export function encode (obj: Partial<Message>): Uint8Array {
182
306
  return encodeMessage(obj, Message.codec())
183
307
  }
184
308
 
185
- export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Message>): Message => {
309
+ export function decode (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Message>): Message {
186
310
  return decodeMessage(buf, Message.codec(), opts)
187
311
  }
312
+
313
+ export function stream (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Message>): Generator<MessageFromFieldEvent | MessageDataFieldEvent | MessageSequenceNumberFieldEvent | MessageTopicFieldEvent | MessageSignatureFieldEvent | MessageKeyFieldEvent> {
314
+ return streamMessage(buf, Message.codec(), opts)
315
+ }
188
316
  }
189
317
 
190
318
  let _codec: Codec<RPC>
@@ -196,14 +324,14 @@ export namespace RPC {
196
324
  w.fork()
197
325
  }
198
326
 
199
- if (obj.subscriptions != null) {
327
+ if (obj.subscriptions != null && obj.subscriptions.length > 0) {
200
328
  for (const value of obj.subscriptions) {
201
329
  w.uint32(10)
202
330
  RPC.SubOpts.codec().encode(value, w)
203
331
  }
204
332
  }
205
333
 
206
- if (obj.messages != null) {
334
+ if (obj.messages != null && obj.messages.length > 0) {
207
335
  for (const value of obj.messages) {
208
336
  w.uint32(18)
209
337
  RPC.Message.codec().encode(value, w)
@@ -232,7 +360,7 @@ export namespace RPC {
232
360
  switch (tag >>> 3) {
233
361
  case 1: {
234
362
  if (opts.limits?.subscriptions != null && obj.subscriptions.length === opts.limits.subscriptions) {
235
- throw new MaxLengthError('Decode error - map field "subscriptions" had too many elements')
363
+ throw new MaxLengthError('Decode error - repeated field "subscriptions" had too many elements')
236
364
  }
237
365
 
238
366
  obj.subscriptions.push(RPC.SubOpts.codec().decode(reader, reader.uint32(), {
@@ -242,7 +370,7 @@ export namespace RPC {
242
370
  }
243
371
  case 2: {
244
372
  if (opts.limits?.messages != null && obj.messages.length === opts.limits.messages) {
245
- throw new MaxLengthError('Decode error - map field "messages" had too many elements')
373
+ throw new MaxLengthError('Decode error - repeated field "messages" had too many elements')
246
374
  }
247
375
 
248
376
  obj.messages.push(RPC.Message.codec().decode(reader, reader.uint32(), {
@@ -264,19 +392,180 @@ export namespace RPC {
264
392
  }
265
393
 
266
394
  return obj
395
+ }, function * (reader, length, prefix, opts = {}) {
396
+ const obj = {
397
+ subscriptions: 0,
398
+ messages: 0
399
+ }
400
+
401
+ const end = length == null ? reader.len : reader.pos + length
402
+
403
+ while (reader.pos < end) {
404
+ const tag = reader.uint32()
405
+
406
+ switch (tag >>> 3) {
407
+ case 1: {
408
+ if (opts.limits?.subscriptions != null && obj.subscriptions === opts.limits.subscriptions) {
409
+ throw new MaxLengthError('Streaming decode error - repeated field "subscriptions" had too many elements')
410
+ }
411
+
412
+ for (const evt of RPC.SubOpts.codec().stream(reader, reader.uint32(), `${prefix}.subscriptions[]`, {
413
+ limits: opts.limits?.subscriptions$
414
+ })) {
415
+ yield {
416
+ ...evt,
417
+ index: obj.subscriptions
418
+ }
419
+ }
420
+
421
+ obj.subscriptions++
422
+
423
+ break
424
+ }
425
+ case 2: {
426
+ if (opts.limits?.messages != null && obj.messages === opts.limits.messages) {
427
+ throw new MaxLengthError('Streaming decode error - repeated field "messages" had too many elements')
428
+ }
429
+
430
+ for (const evt of RPC.Message.codec().stream(reader, reader.uint32(), `${prefix}.messages[]`, {
431
+ limits: opts.limits?.messages$
432
+ })) {
433
+ yield {
434
+ ...evt,
435
+ index: obj.messages
436
+ }
437
+ }
438
+
439
+ obj.messages++
440
+
441
+ break
442
+ }
443
+ case 3: {
444
+ yield * ControlMessage.codec().stream(reader, reader.uint32(), `${prefix}.control`, {
445
+ limits: opts.limits?.control
446
+ })
447
+
448
+ break
449
+ }
450
+ default: {
451
+ reader.skipType(tag & 7)
452
+ break
453
+ }
454
+ }
455
+ }
267
456
  })
268
457
  }
269
458
 
270
459
  return _codec
271
460
  }
272
461
 
273
- export const encode = (obj: Partial<RPC>): Uint8Array => {
462
+ export interface RPCSubscriptionsSubscribeFieldEvent {
463
+ field: '$.subscriptions[].subscribe'
464
+ value: boolean
465
+ index: number
466
+ }
467
+
468
+ export interface RPCSubscriptionsTopicFieldEvent {
469
+ field: '$.subscriptions[].topic'
470
+ value: string
471
+ index: number
472
+ }
473
+
474
+ export interface RPCMessagesFromFieldEvent {
475
+ field: '$.messages[].from'
476
+ value: Uint8Array
477
+ index: number
478
+ }
479
+
480
+ export interface RPCMessagesDataFieldEvent {
481
+ field: '$.messages[].data'
482
+ value: Uint8Array
483
+ index: number
484
+ }
485
+
486
+ export interface RPCMessagesSequenceNumberFieldEvent {
487
+ field: '$.messages[].sequenceNumber'
488
+ value: Uint8Array
489
+ index: number
490
+ }
491
+
492
+ export interface RPCMessagesTopicFieldEvent {
493
+ field: '$.messages[].topic'
494
+ value: string
495
+ index: number
496
+ }
497
+
498
+ export interface RPCMessagesSignatureFieldEvent {
499
+ field: '$.messages[].signature'
500
+ value: Uint8Array
501
+ index: number
502
+ }
503
+
504
+ export interface RPCMessagesKeyFieldEvent {
505
+ field: '$.messages[].key'
506
+ value: Uint8Array
507
+ index: number
508
+ }
509
+
510
+ export interface RPCControlIhaveTopicFieldEvent {
511
+ field: '$.control.ihave[].topic'
512
+ value: string
513
+ index: number
514
+ }
515
+
516
+ export interface RPCControlIhaveMessageIDsFieldEvent {
517
+ field: '$.control.ihave[].messageIDs[]'
518
+ index: number
519
+ value: Uint8Array
520
+ }
521
+
522
+ export interface RPCControlIwantMessageIDsFieldEvent {
523
+ field: '$.control.iwant[].messageIDs[]'
524
+ index: number
525
+ value: Uint8Array
526
+ }
527
+
528
+ export interface RPCControlGraftTopicFieldEvent {
529
+ field: '$.control.graft[].topic'
530
+ value: string
531
+ index: number
532
+ }
533
+
534
+ export interface RPCControlPruneTopicFieldEvent {
535
+ field: '$.control.prune[].topic'
536
+ value: string
537
+ index: number
538
+ }
539
+
540
+ export interface RPCControlPrunePeersPeerIDFieldEvent {
541
+ field: '$.control.prune[].peers[].peerID'
542
+ value: Uint8Array
543
+ index: number
544
+ }
545
+
546
+ export interface RPCControlPrunePeersSignedPeerRecordFieldEvent {
547
+ field: '$.control.prune[].peers[].signedPeerRecord'
548
+ value: Uint8Array
549
+ index: number
550
+ }
551
+
552
+ export interface RPCControlPruneBackoffFieldEvent {
553
+ field: '$.control.prune[].backoff'
554
+ value: bigint
555
+ index: number
556
+ }
557
+
558
+ export function encode (obj: Partial<RPC>): Uint8Array {
274
559
  return encodeMessage(obj, RPC.codec())
275
560
  }
276
561
 
277
- export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<RPC>): RPC => {
562
+ export function decode (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<RPC>): RPC {
278
563
  return decodeMessage(buf, RPC.codec(), opts)
279
564
  }
565
+
566
+ export function stream (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<RPC>): Generator<RPCSubscriptionsSubscribeFieldEvent | RPCSubscriptionsTopicFieldEvent | RPCMessagesFromFieldEvent | RPCMessagesDataFieldEvent | RPCMessagesSequenceNumberFieldEvent | RPCMessagesTopicFieldEvent | RPCMessagesSignatureFieldEvent | RPCMessagesKeyFieldEvent | RPCControlIhaveTopicFieldEvent | RPCControlIhaveMessageIDsFieldEvent | RPCControlIwantMessageIDsFieldEvent | RPCControlGraftTopicFieldEvent | RPCControlPruneTopicFieldEvent | RPCControlPrunePeersPeerIDFieldEvent | RPCControlPrunePeersSignedPeerRecordFieldEvent | RPCControlPruneBackoffFieldEvent> {
567
+ return streamMessage(buf, RPC.codec(), opts)
568
+ }
280
569
  }
281
570
 
282
571
  export interface ControlMessage {
@@ -296,28 +585,28 @@ export namespace ControlMessage {
296
585
  w.fork()
297
586
  }
298
587
 
299
- if (obj.ihave != null) {
588
+ if (obj.ihave != null && obj.ihave.length > 0) {
300
589
  for (const value of obj.ihave) {
301
590
  w.uint32(10)
302
591
  ControlIHave.codec().encode(value, w)
303
592
  }
304
593
  }
305
594
 
306
- if (obj.iwant != null) {
595
+ if (obj.iwant != null && obj.iwant.length > 0) {
307
596
  for (const value of obj.iwant) {
308
597
  w.uint32(18)
309
598
  ControlIWant.codec().encode(value, w)
310
599
  }
311
600
  }
312
601
 
313
- if (obj.graft != null) {
602
+ if (obj.graft != null && obj.graft.length > 0) {
314
603
  for (const value of obj.graft) {
315
604
  w.uint32(26)
316
605
  ControlGraft.codec().encode(value, w)
317
606
  }
318
607
  }
319
608
 
320
- if (obj.prune != null) {
609
+ if (obj.prune != null && obj.prune.length > 0) {
321
610
  for (const value of obj.prune) {
322
611
  w.uint32(34)
323
612
  ControlPrune.codec().encode(value, w)
@@ -343,7 +632,7 @@ export namespace ControlMessage {
343
632
  switch (tag >>> 3) {
344
633
  case 1: {
345
634
  if (opts.limits?.ihave != null && obj.ihave.length === opts.limits.ihave) {
346
- throw new MaxLengthError('Decode error - map field "ihave" had too many elements')
635
+ throw new MaxLengthError('Decode error - repeated field "ihave" had too many elements')
347
636
  }
348
637
 
349
638
  obj.ihave.push(ControlIHave.codec().decode(reader, reader.uint32(), {
@@ -353,7 +642,7 @@ export namespace ControlMessage {
353
642
  }
354
643
  case 2: {
355
644
  if (opts.limits?.iwant != null && obj.iwant.length === opts.limits.iwant) {
356
- throw new MaxLengthError('Decode error - map field "iwant" had too many elements')
645
+ throw new MaxLengthError('Decode error - repeated field "iwant" had too many elements')
357
646
  }
358
647
 
359
648
  obj.iwant.push(ControlIWant.codec().decode(reader, reader.uint32(), {
@@ -363,7 +652,7 @@ export namespace ControlMessage {
363
652
  }
364
653
  case 3: {
365
654
  if (opts.limits?.graft != null && obj.graft.length === opts.limits.graft) {
366
- throw new MaxLengthError('Decode error - map field "graft" had too many elements')
655
+ throw new MaxLengthError('Decode error - repeated field "graft" had too many elements')
367
656
  }
368
657
 
369
658
  obj.graft.push(ControlGraft.codec().decode(reader, reader.uint32(), {
@@ -373,7 +662,7 @@ export namespace ControlMessage {
373
662
  }
374
663
  case 4: {
375
664
  if (opts.limits?.prune != null && obj.prune.length === opts.limits.prune) {
376
- throw new MaxLengthError('Decode error - map field "prune" had too many elements')
665
+ throw new MaxLengthError('Decode error - repeated field "prune" had too many elements')
377
666
  }
378
667
 
379
668
  obj.prune.push(ControlPrune.codec().decode(reader, reader.uint32(), {
@@ -389,19 +678,163 @@ export namespace ControlMessage {
389
678
  }
390
679
 
391
680
  return obj
681
+ }, function * (reader, length, prefix, opts = {}) {
682
+ const obj = {
683
+ ihave: 0,
684
+ iwant: 0,
685
+ graft: 0,
686
+ prune: 0
687
+ }
688
+
689
+ const end = length == null ? reader.len : reader.pos + length
690
+
691
+ while (reader.pos < end) {
692
+ const tag = reader.uint32()
693
+
694
+ switch (tag >>> 3) {
695
+ case 1: {
696
+ if (opts.limits?.ihave != null && obj.ihave === opts.limits.ihave) {
697
+ throw new MaxLengthError('Streaming decode error - repeated field "ihave" had too many elements')
698
+ }
699
+
700
+ for (const evt of ControlIHave.codec().stream(reader, reader.uint32(), `${prefix}.ihave[]`, {
701
+ limits: opts.limits?.ihave$
702
+ })) {
703
+ yield {
704
+ ...evt,
705
+ index: obj.ihave
706
+ }
707
+ }
708
+
709
+ obj.ihave++
710
+
711
+ break
712
+ }
713
+ case 2: {
714
+ if (opts.limits?.iwant != null && obj.iwant === opts.limits.iwant) {
715
+ throw new MaxLengthError('Streaming decode error - repeated field "iwant" had too many elements')
716
+ }
717
+
718
+ for (const evt of ControlIWant.codec().stream(reader, reader.uint32(), `${prefix}.iwant[]`, {
719
+ limits: opts.limits?.iwant$
720
+ })) {
721
+ yield {
722
+ ...evt,
723
+ index: obj.iwant
724
+ }
725
+ }
726
+
727
+ obj.iwant++
728
+
729
+ break
730
+ }
731
+ case 3: {
732
+ if (opts.limits?.graft != null && obj.graft === opts.limits.graft) {
733
+ throw new MaxLengthError('Streaming decode error - repeated field "graft" had too many elements')
734
+ }
735
+
736
+ for (const evt of ControlGraft.codec().stream(reader, reader.uint32(), `${prefix}.graft[]`, {
737
+ limits: opts.limits?.graft$
738
+ })) {
739
+ yield {
740
+ ...evt,
741
+ index: obj.graft
742
+ }
743
+ }
744
+
745
+ obj.graft++
746
+
747
+ break
748
+ }
749
+ case 4: {
750
+ if (opts.limits?.prune != null && obj.prune === opts.limits.prune) {
751
+ throw new MaxLengthError('Streaming decode error - repeated field "prune" had too many elements')
752
+ }
753
+
754
+ for (const evt of ControlPrune.codec().stream(reader, reader.uint32(), `${prefix}.prune[]`, {
755
+ limits: opts.limits?.prune$
756
+ })) {
757
+ yield {
758
+ ...evt,
759
+ index: obj.prune
760
+ }
761
+ }
762
+
763
+ obj.prune++
764
+
765
+ break
766
+ }
767
+ default: {
768
+ reader.skipType(tag & 7)
769
+ break
770
+ }
771
+ }
772
+ }
392
773
  })
393
774
  }
394
775
 
395
776
  return _codec
396
777
  }
397
778
 
398
- export const encode = (obj: Partial<ControlMessage>): Uint8Array => {
779
+ export interface ControlMessageIhaveTopicFieldEvent {
780
+ field: '$.ihave[].topic'
781
+ value: string
782
+ index: number
783
+ }
784
+
785
+ export interface ControlMessageIhaveMessageIDsFieldEvent {
786
+ field: '$.ihave[].messageIDs[]'
787
+ index: number
788
+ value: Uint8Array
789
+ }
790
+
791
+ export interface ControlMessageIwantMessageIDsFieldEvent {
792
+ field: '$.iwant[].messageIDs[]'
793
+ index: number
794
+ value: Uint8Array
795
+ }
796
+
797
+ export interface ControlMessageGraftTopicFieldEvent {
798
+ field: '$.graft[].topic'
799
+ value: string
800
+ index: number
801
+ }
802
+
803
+ export interface ControlMessagePruneTopicFieldEvent {
804
+ field: '$.prune[].topic'
805
+ value: string
806
+ index: number
807
+ }
808
+
809
+ export interface ControlMessagePrunePeersPeerIDFieldEvent {
810
+ field: '$.prune[].peers[].peerID'
811
+ value: Uint8Array
812
+ index: number
813
+ }
814
+
815
+ export interface ControlMessagePrunePeersSignedPeerRecordFieldEvent {
816
+ field: '$.prune[].peers[].signedPeerRecord'
817
+ value: Uint8Array
818
+ index: number
819
+ }
820
+
821
+ export interface ControlMessagePruneBackoffFieldEvent {
822
+ field: '$.prune[].backoff'
823
+ value: bigint
824
+ index: number
825
+ }
826
+
827
+ export function encode (obj: Partial<ControlMessage>): Uint8Array {
399
828
  return encodeMessage(obj, ControlMessage.codec())
400
829
  }
401
830
 
402
- export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<ControlMessage>): ControlMessage => {
831
+ export function decode (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<ControlMessage>): ControlMessage {
403
832
  return decodeMessage(buf, ControlMessage.codec(), opts)
404
833
  }
834
+
835
+ export function stream (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<ControlMessage>): Generator<ControlMessageIhaveTopicFieldEvent | ControlMessageIhaveMessageIDsFieldEvent | ControlMessageIwantMessageIDsFieldEvent | ControlMessageGraftTopicFieldEvent | ControlMessagePruneTopicFieldEvent | ControlMessagePrunePeersPeerIDFieldEvent | ControlMessagePrunePeersSignedPeerRecordFieldEvent | ControlMessagePruneBackoffFieldEvent> {
836
+ return streamMessage(buf, ControlMessage.codec(), opts)
837
+ }
405
838
  }
406
839
 
407
840
  export interface ControlIHave {
@@ -424,7 +857,7 @@ export namespace ControlIHave {
424
857
  w.string(obj.topic)
425
858
  }
426
859
 
427
- if (obj.messageIDs != null) {
860
+ if (obj.messageIDs != null && obj.messageIDs.length > 0) {
428
861
  for (const value of obj.messageIDs) {
429
862
  w.uint32(18)
430
863
  w.bytes(value)
@@ -451,7 +884,7 @@ export namespace ControlIHave {
451
884
  }
452
885
  case 2: {
453
886
  if (opts.limits?.messageIDs != null && obj.messageIDs.length === opts.limits.messageIDs) {
454
- throw new MaxLengthError('Decode error - map field "messageIDs" had too many elements')
887
+ throw new MaxLengthError('Decode error - repeated field "messageIDs" had too many elements')
455
888
  }
456
889
 
457
890
  obj.messageIDs.push(reader.bytes())
@@ -465,19 +898,73 @@ export namespace ControlIHave {
465
898
  }
466
899
 
467
900
  return obj
901
+ }, function * (reader, length, prefix, opts = {}) {
902
+ const obj = {
903
+ messageIDs: 0
904
+ }
905
+
906
+ const end = length == null ? reader.len : reader.pos + length
907
+
908
+ while (reader.pos < end) {
909
+ const tag = reader.uint32()
910
+
911
+ switch (tag >>> 3) {
912
+ case 1: {
913
+ yield {
914
+ field: `${prefix}.topic`,
915
+ value: reader.string()
916
+ }
917
+ break
918
+ }
919
+ case 2: {
920
+ if (opts.limits?.messageIDs != null && obj.messageIDs === opts.limits.messageIDs) {
921
+ throw new MaxLengthError('Streaming decode error - repeated field "messageIDs" had too many elements')
922
+ }
923
+
924
+ yield {
925
+ field: `${prefix}.messageIDs[]`,
926
+ index: obj.messageIDs,
927
+ value: reader.bytes()
928
+ }
929
+
930
+ obj.messageIDs++
931
+
932
+ break
933
+ }
934
+ default: {
935
+ reader.skipType(tag & 7)
936
+ break
937
+ }
938
+ }
939
+ }
468
940
  })
469
941
  }
470
942
 
471
943
  return _codec
472
944
  }
473
945
 
474
- export const encode = (obj: Partial<ControlIHave>): Uint8Array => {
946
+ export interface ControlIHaveTopicFieldEvent {
947
+ field: '$.topic'
948
+ value: string
949
+ }
950
+
951
+ export interface ControlIHaveMessageIDsFieldEvent {
952
+ field: '$.messageIDs[]'
953
+ index: number
954
+ value: Uint8Array
955
+ }
956
+
957
+ export function encode (obj: Partial<ControlIHave>): Uint8Array {
475
958
  return encodeMessage(obj, ControlIHave.codec())
476
959
  }
477
960
 
478
- export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<ControlIHave>): ControlIHave => {
961
+ export function decode (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<ControlIHave>): ControlIHave {
479
962
  return decodeMessage(buf, ControlIHave.codec(), opts)
480
963
  }
964
+
965
+ export function stream (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<ControlIHave>): Generator<ControlIHaveTopicFieldEvent | ControlIHaveMessageIDsFieldEvent> {
966
+ return streamMessage(buf, ControlIHave.codec(), opts)
967
+ }
481
968
  }
482
969
 
483
970
  export interface ControlIWant {
@@ -494,7 +981,7 @@ export namespace ControlIWant {
494
981
  w.fork()
495
982
  }
496
983
 
497
- if (obj.messageIDs != null) {
984
+ if (obj.messageIDs != null && obj.messageIDs.length > 0) {
498
985
  for (const value of obj.messageIDs) {
499
986
  w.uint32(10)
500
987
  w.bytes(value)
@@ -517,7 +1004,7 @@ export namespace ControlIWant {
517
1004
  switch (tag >>> 3) {
518
1005
  case 1: {
519
1006
  if (opts.limits?.messageIDs != null && obj.messageIDs.length === opts.limits.messageIDs) {
520
- throw new MaxLengthError('Decode error - map field "messageIDs" had too many elements')
1007
+ throw new MaxLengthError('Decode error - repeated field "messageIDs" had too many elements')
521
1008
  }
522
1009
 
523
1010
  obj.messageIDs.push(reader.bytes())
@@ -531,19 +1018,61 @@ export namespace ControlIWant {
531
1018
  }
532
1019
 
533
1020
  return obj
1021
+ }, function * (reader, length, prefix, opts = {}) {
1022
+ const obj = {
1023
+ messageIDs: 0
1024
+ }
1025
+
1026
+ const end = length == null ? reader.len : reader.pos + length
1027
+
1028
+ while (reader.pos < end) {
1029
+ const tag = reader.uint32()
1030
+
1031
+ switch (tag >>> 3) {
1032
+ case 1: {
1033
+ if (opts.limits?.messageIDs != null && obj.messageIDs === opts.limits.messageIDs) {
1034
+ throw new MaxLengthError('Streaming decode error - repeated field "messageIDs" had too many elements')
1035
+ }
1036
+
1037
+ yield {
1038
+ field: `${prefix}.messageIDs[]`,
1039
+ index: obj.messageIDs,
1040
+ value: reader.bytes()
1041
+ }
1042
+
1043
+ obj.messageIDs++
1044
+
1045
+ break
1046
+ }
1047
+ default: {
1048
+ reader.skipType(tag & 7)
1049
+ break
1050
+ }
1051
+ }
1052
+ }
534
1053
  })
535
1054
  }
536
1055
 
537
1056
  return _codec
538
1057
  }
539
1058
 
540
- export const encode = (obj: Partial<ControlIWant>): Uint8Array => {
1059
+ export interface ControlIWantMessageIDsFieldEvent {
1060
+ field: '$.messageIDs[]'
1061
+ index: number
1062
+ value: Uint8Array
1063
+ }
1064
+
1065
+ export function encode (obj: Partial<ControlIWant>): Uint8Array {
541
1066
  return encodeMessage(obj, ControlIWant.codec())
542
1067
  }
543
1068
 
544
- export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<ControlIWant>): ControlIWant => {
1069
+ export function decode (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<ControlIWant>): ControlIWant {
545
1070
  return decodeMessage(buf, ControlIWant.codec(), opts)
546
1071
  }
1072
+
1073
+ export function stream (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<ControlIWant>): Generator<ControlIWantMessageIDsFieldEvent> {
1074
+ return streamMessage(buf, ControlIWant.codec(), opts)
1075
+ }
547
1076
  }
548
1077
 
549
1078
  export interface ControlGraft {
@@ -589,19 +1118,48 @@ export namespace ControlGraft {
589
1118
  }
590
1119
 
591
1120
  return obj
1121
+ }, function * (reader, length, prefix, opts = {}) {
1122
+ const end = length == null ? reader.len : reader.pos + length
1123
+
1124
+ while (reader.pos < end) {
1125
+ const tag = reader.uint32()
1126
+
1127
+ switch (tag >>> 3) {
1128
+ case 1: {
1129
+ yield {
1130
+ field: `${prefix}.topic`,
1131
+ value: reader.string()
1132
+ }
1133
+ break
1134
+ }
1135
+ default: {
1136
+ reader.skipType(tag & 7)
1137
+ break
1138
+ }
1139
+ }
1140
+ }
592
1141
  })
593
1142
  }
594
1143
 
595
1144
  return _codec
596
1145
  }
597
1146
 
598
- export const encode = (obj: Partial<ControlGraft>): Uint8Array => {
1147
+ export interface ControlGraftTopicFieldEvent {
1148
+ field: '$.topic'
1149
+ value: string
1150
+ }
1151
+
1152
+ export function encode (obj: Partial<ControlGraft>): Uint8Array {
599
1153
  return encodeMessage(obj, ControlGraft.codec())
600
1154
  }
601
1155
 
602
- export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<ControlGraft>): ControlGraft => {
1156
+ export function decode (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<ControlGraft>): ControlGraft {
603
1157
  return decodeMessage(buf, ControlGraft.codec(), opts)
604
1158
  }
1159
+
1160
+ export function stream (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<ControlGraft>): Generator<ControlGraftTopicFieldEvent> {
1161
+ return streamMessage(buf, ControlGraft.codec(), opts)
1162
+ }
605
1163
  }
606
1164
 
607
1165
  export interface ControlPrune {
@@ -625,7 +1183,7 @@ export namespace ControlPrune {
625
1183
  w.string(obj.topic)
626
1184
  }
627
1185
 
628
- if (obj.peers != null) {
1186
+ if (obj.peers != null && obj.peers.length > 0) {
629
1187
  for (const value of obj.peers) {
630
1188
  w.uint32(18)
631
1189
  PeerInfo.codec().encode(value, w)
@@ -657,7 +1215,7 @@ export namespace ControlPrune {
657
1215
  }
658
1216
  case 2: {
659
1217
  if (opts.limits?.peers != null && obj.peers.length === opts.limits.peers) {
660
- throw new MaxLengthError('Decode error - map field "peers" had too many elements')
1218
+ throw new MaxLengthError('Decode error - repeated field "peers" had too many elements')
661
1219
  }
662
1220
 
663
1221
  obj.peers.push(PeerInfo.codec().decode(reader, reader.uint32(), {
@@ -677,19 +1235,94 @@ export namespace ControlPrune {
677
1235
  }
678
1236
 
679
1237
  return obj
1238
+ }, function * (reader, length, prefix, opts = {}) {
1239
+ const obj = {
1240
+ peers: 0
1241
+ }
1242
+
1243
+ const end = length == null ? reader.len : reader.pos + length
1244
+
1245
+ while (reader.pos < end) {
1246
+ const tag = reader.uint32()
1247
+
1248
+ switch (tag >>> 3) {
1249
+ case 1: {
1250
+ yield {
1251
+ field: `${prefix}.topic`,
1252
+ value: reader.string()
1253
+ }
1254
+ break
1255
+ }
1256
+ case 2: {
1257
+ if (opts.limits?.peers != null && obj.peers === opts.limits.peers) {
1258
+ throw new MaxLengthError('Streaming decode error - repeated field "peers" had too many elements')
1259
+ }
1260
+
1261
+ for (const evt of PeerInfo.codec().stream(reader, reader.uint32(), `${prefix}.peers[]`, {
1262
+ limits: opts.limits?.peers$
1263
+ })) {
1264
+ yield {
1265
+ ...evt,
1266
+ index: obj.peers
1267
+ }
1268
+ }
1269
+
1270
+ obj.peers++
1271
+
1272
+ break
1273
+ }
1274
+ case 3: {
1275
+ yield {
1276
+ field: `${prefix}.backoff`,
1277
+ value: reader.uint64()
1278
+ }
1279
+ break
1280
+ }
1281
+ default: {
1282
+ reader.skipType(tag & 7)
1283
+ break
1284
+ }
1285
+ }
1286
+ }
680
1287
  })
681
1288
  }
682
1289
 
683
1290
  return _codec
684
1291
  }
685
1292
 
686
- export const encode = (obj: Partial<ControlPrune>): Uint8Array => {
1293
+ export interface ControlPruneTopicFieldEvent {
1294
+ field: '$.topic'
1295
+ value: string
1296
+ }
1297
+
1298
+ export interface ControlPrunePeersPeerIDFieldEvent {
1299
+ field: '$.peers[].peerID'
1300
+ value: Uint8Array
1301
+ index: number
1302
+ }
1303
+
1304
+ export interface ControlPrunePeersSignedPeerRecordFieldEvent {
1305
+ field: '$.peers[].signedPeerRecord'
1306
+ value: Uint8Array
1307
+ index: number
1308
+ }
1309
+
1310
+ export interface ControlPruneBackoffFieldEvent {
1311
+ field: '$.backoff'
1312
+ value: bigint
1313
+ }
1314
+
1315
+ export function encode (obj: Partial<ControlPrune>): Uint8Array {
687
1316
  return encodeMessage(obj, ControlPrune.codec())
688
1317
  }
689
1318
 
690
- export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<ControlPrune>): ControlPrune => {
1319
+ export function decode (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<ControlPrune>): ControlPrune {
691
1320
  return decodeMessage(buf, ControlPrune.codec(), opts)
692
1321
  }
1322
+
1323
+ export function stream (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<ControlPrune>): Generator<ControlPruneTopicFieldEvent | ControlPrunePeersPeerIDFieldEvent | ControlPrunePeersSignedPeerRecordFieldEvent | ControlPruneBackoffFieldEvent> {
1324
+ return streamMessage(buf, ControlPrune.codec(), opts)
1325
+ }
693
1326
  }
694
1327
 
695
1328
  export interface PeerInfo {
@@ -745,17 +1378,58 @@ export namespace PeerInfo {
745
1378
  }
746
1379
 
747
1380
  return obj
1381
+ }, function * (reader, length, prefix, opts = {}) {
1382
+ const end = length == null ? reader.len : reader.pos + length
1383
+
1384
+ while (reader.pos < end) {
1385
+ const tag = reader.uint32()
1386
+
1387
+ switch (tag >>> 3) {
1388
+ case 1: {
1389
+ yield {
1390
+ field: `${prefix}.peerID`,
1391
+ value: reader.bytes()
1392
+ }
1393
+ break
1394
+ }
1395
+ case 2: {
1396
+ yield {
1397
+ field: `${prefix}.signedPeerRecord`,
1398
+ value: reader.bytes()
1399
+ }
1400
+ break
1401
+ }
1402
+ default: {
1403
+ reader.skipType(tag & 7)
1404
+ break
1405
+ }
1406
+ }
1407
+ }
748
1408
  })
749
1409
  }
750
1410
 
751
1411
  return _codec
752
1412
  }
753
1413
 
754
- export const encode = (obj: Partial<PeerInfo>): Uint8Array => {
1414
+ export interface PeerInfoPeerIDFieldEvent {
1415
+ field: '$.peerID'
1416
+ value: Uint8Array
1417
+ }
1418
+
1419
+ export interface PeerInfoSignedPeerRecordFieldEvent {
1420
+ field: '$.signedPeerRecord'
1421
+ value: Uint8Array
1422
+ }
1423
+
1424
+ export function encode (obj: Partial<PeerInfo>): Uint8Array {
755
1425
  return encodeMessage(obj, PeerInfo.codec())
756
1426
  }
757
1427
 
758
- export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<PeerInfo>): PeerInfo => {
1428
+ export function decode (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<PeerInfo>): PeerInfo {
759
1429
  return decodeMessage(buf, PeerInfo.codec(), opts)
760
1430
  }
1431
+
1432
+ export function stream (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<PeerInfo>): Generator<PeerInfoPeerIDFieldEvent | PeerInfoSignedPeerRecordFieldEvent> {
1433
+ return streamMessage(buf, PeerInfo.codec(), opts)
1434
+ }
761
1435
  }