@helia/bitswap 3.1.4 → 3.2.1

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/src/pb/message.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { decodeMessage, encodeMessage, enumeration, MaxLengthError, message } from 'protons-runtime'
1
+ import { decodeMessage, encodeMessage, enumeration, MaxLengthError, message, streamMessage } from 'protons-runtime'
2
2
  import { alloc as uint8ArrayAlloc } from 'uint8arrays/alloc'
3
3
  import type { Codec, DecodeOptions } from 'protons-runtime'
4
4
  import type { Uint8ArrayList } from 'uint8arraylist'
@@ -18,6 +18,7 @@ export namespace WantType {
18
18
  return enumeration<WantType>(__WantTypeValues)
19
19
  }
20
20
  }
21
+
21
22
  export interface WantlistEntry {
22
23
  cid: Uint8Array
23
24
  priority: number
@@ -104,19 +105,96 @@ export namespace WantlistEntry {
104
105
  }
105
106
 
106
107
  return obj
108
+ }, function * (reader, length, prefix, opts = {}) {
109
+ const end = length == null ? reader.len : reader.pos + length
110
+
111
+ while (reader.pos < end) {
112
+ const tag = reader.uint32()
113
+
114
+ switch (tag >>> 3) {
115
+ case 1: {
116
+ yield {
117
+ field: `${prefix}.cid`,
118
+ value: reader.bytes()
119
+ }
120
+ break
121
+ }
122
+ case 2: {
123
+ yield {
124
+ field: `${prefix}.priority`,
125
+ value: reader.int32()
126
+ }
127
+ break
128
+ }
129
+ case 3: {
130
+ yield {
131
+ field: `${prefix}.cancel`,
132
+ value: reader.bool()
133
+ }
134
+ break
135
+ }
136
+ case 4: {
137
+ yield {
138
+ field: `${prefix}.wantType`,
139
+ value: WantType.codec().decode(reader)
140
+ }
141
+ break
142
+ }
143
+ case 5: {
144
+ yield {
145
+ field: `${prefix}.sendDontHave`,
146
+ value: reader.bool()
147
+ }
148
+ break
149
+ }
150
+ default: {
151
+ reader.skipType(tag & 7)
152
+ break
153
+ }
154
+ }
155
+ }
107
156
  })
108
157
  }
109
158
 
110
159
  return _codec
111
160
  }
112
161
 
113
- export const encode = (obj: Partial<WantlistEntry>): Uint8Array => {
162
+ export interface WantlistEntryCidFieldEvent {
163
+ field: '$.cid'
164
+ value: Uint8Array
165
+ }
166
+
167
+ export interface WantlistEntryPriorityFieldEvent {
168
+ field: '$.priority'
169
+ value: number
170
+ }
171
+
172
+ export interface WantlistEntryCancelFieldEvent {
173
+ field: '$.cancel'
174
+ value: boolean
175
+ }
176
+
177
+ export interface WantlistEntryWantTypeFieldEvent {
178
+ field: '$.wantType'
179
+ value: WantType
180
+ }
181
+
182
+ export interface WantlistEntrySendDontHaveFieldEvent {
183
+ field: '$.sendDontHave'
184
+ value: boolean
185
+ }
186
+
187
+ export function encode (obj: Partial<WantlistEntry>): Uint8Array {
114
188
  return encodeMessage(obj, WantlistEntry.codec())
115
189
  }
116
190
 
117
- export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<WantlistEntry>): WantlistEntry => {
191
+ export function decode (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<WantlistEntry>): WantlistEntry {
118
192
  return decodeMessage(buf, WantlistEntry.codec(), opts)
119
193
  }
194
+
195
+ export function stream (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<WantlistEntry>): Generator<WantlistEntryCidFieldEvent | WantlistEntryPriorityFieldEvent | WantlistEntryCancelFieldEvent | WantlistEntryWantTypeFieldEvent | WantlistEntrySendDontHaveFieldEvent> {
196
+ return streamMessage(buf, WantlistEntry.codec(), opts)
197
+ }
120
198
  }
121
199
 
122
200
  export interface Wantlist {
@@ -134,7 +212,7 @@ export namespace Wantlist {
134
212
  w.fork()
135
213
  }
136
214
 
137
- if (obj.entries != null) {
215
+ if (obj.entries != null && obj.entries.length > 0) {
138
216
  for (const value of obj.entries) {
139
217
  w.uint32(10)
140
218
  WantlistEntry.codec().encode(value, w)
@@ -162,7 +240,7 @@ export namespace Wantlist {
162
240
  switch (tag >>> 3) {
163
241
  case 1: {
164
242
  if (opts.limits?.entries != null && obj.entries.length === opts.limits.entries) {
165
- throw new MaxLengthError('Decode error - map field "entries" had too many elements')
243
+ throw new MaxLengthError('Decode error - repeated field "entries" had too many elements')
166
244
  }
167
245
 
168
246
  obj.entries.push(WantlistEntry.codec().decode(reader, reader.uint32(), {
@@ -182,19 +260,100 @@ export namespace Wantlist {
182
260
  }
183
261
 
184
262
  return obj
263
+ }, function * (reader, length, prefix, opts = {}) {
264
+ const obj = {
265
+ entries: 0
266
+ }
267
+
268
+ const end = length == null ? reader.len : reader.pos + length
269
+
270
+ while (reader.pos < end) {
271
+ const tag = reader.uint32()
272
+
273
+ switch (tag >>> 3) {
274
+ case 1: {
275
+ if (opts.limits?.entries != null && obj.entries === opts.limits.entries) {
276
+ throw new MaxLengthError('Streaming decode error - repeated field "entries" had too many elements')
277
+ }
278
+
279
+ for (const evt of WantlistEntry.codec().stream(reader, reader.uint32(), `${prefix}.entries[]`, {
280
+ limits: opts.limits?.entries$
281
+ })) {
282
+ yield {
283
+ ...evt,
284
+ index: obj.entries
285
+ }
286
+ }
287
+
288
+ obj.entries++
289
+
290
+ break
291
+ }
292
+ case 2: {
293
+ yield {
294
+ field: `${prefix}.full`,
295
+ value: reader.bool()
296
+ }
297
+ break
298
+ }
299
+ default: {
300
+ reader.skipType(tag & 7)
301
+ break
302
+ }
303
+ }
304
+ }
185
305
  })
186
306
  }
187
307
 
188
308
  return _codec
189
309
  }
190
310
 
191
- export const encode = (obj: Partial<Wantlist>): Uint8Array => {
311
+ export interface WantlistEntriesCidFieldEvent {
312
+ field: '$.entries[].cid'
313
+ value: Uint8Array
314
+ index: number
315
+ }
316
+
317
+ export interface WantlistEntriesPriorityFieldEvent {
318
+ field: '$.entries[].priority'
319
+ value: number
320
+ index: number
321
+ }
322
+
323
+ export interface WantlistEntriesCancelFieldEvent {
324
+ field: '$.entries[].cancel'
325
+ value: boolean
326
+ index: number
327
+ }
328
+
329
+ export interface WantlistEntriesWantTypeFieldEvent {
330
+ field: '$.entries[].wantType'
331
+ value: WantType
332
+ index: number
333
+ }
334
+
335
+ export interface WantlistEntriesSendDontHaveFieldEvent {
336
+ field: '$.entries[].sendDontHave'
337
+ value: boolean
338
+ index: number
339
+ }
340
+
341
+ export interface WantlistFullFieldEvent {
342
+ field: '$.full'
343
+ value: boolean
344
+ }
345
+
346
+ export function encode (obj: Partial<Wantlist>): Uint8Array {
192
347
  return encodeMessage(obj, Wantlist.codec())
193
348
  }
194
349
 
195
- export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Wantlist>): Wantlist => {
350
+ export function decode (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Wantlist>): Wantlist {
196
351
  return decodeMessage(buf, Wantlist.codec(), opts)
197
352
  }
353
+
354
+ export function stream (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Wantlist>): Generator<WantlistEntriesCidFieldEvent | WantlistEntriesPriorityFieldEvent | WantlistEntriesCancelFieldEvent | WantlistEntriesWantTypeFieldEvent | WantlistEntriesSendDontHaveFieldEvent | WantlistFullFieldEvent> {
355
+ return streamMessage(buf, Wantlist.codec(), opts)
356
+ }
198
357
  }
199
358
 
200
359
  export interface Block {
@@ -253,19 +412,60 @@ export namespace Block {
253
412
  }
254
413
 
255
414
  return obj
415
+ }, function * (reader, length, prefix, opts = {}) {
416
+ const end = length == null ? reader.len : reader.pos + length
417
+
418
+ while (reader.pos < end) {
419
+ const tag = reader.uint32()
420
+
421
+ switch (tag >>> 3) {
422
+ case 1: {
423
+ yield {
424
+ field: `${prefix}.prefix`,
425
+ value: reader.bytes()
426
+ }
427
+ break
428
+ }
429
+ case 2: {
430
+ yield {
431
+ field: `${prefix}.data`,
432
+ value: reader.bytes()
433
+ }
434
+ break
435
+ }
436
+ default: {
437
+ reader.skipType(tag & 7)
438
+ break
439
+ }
440
+ }
441
+ }
256
442
  })
257
443
  }
258
444
 
259
445
  return _codec
260
446
  }
261
447
 
262
- export const encode = (obj: Partial<Block>): Uint8Array => {
448
+ export interface BlockPrefixFieldEvent {
449
+ field: '$.prefix'
450
+ value: Uint8Array
451
+ }
452
+
453
+ export interface BlockDataFieldEvent {
454
+ field: '$.data'
455
+ value: Uint8Array
456
+ }
457
+
458
+ export function encode (obj: Partial<Block>): Uint8Array {
263
459
  return encodeMessage(obj, Block.codec())
264
460
  }
265
461
 
266
- export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Block>): Block => {
462
+ export function decode (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Block>): Block {
267
463
  return decodeMessage(buf, Block.codec(), opts)
268
464
  }
465
+
466
+ export function stream (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Block>): Generator<BlockPrefixFieldEvent | BlockDataFieldEvent> {
467
+ return streamMessage(buf, Block.codec(), opts)
468
+ }
269
469
  }
270
470
 
271
471
  export enum BlockPresenceType {
@@ -283,6 +483,7 @@ export namespace BlockPresenceType {
283
483
  return enumeration<BlockPresenceType>(__BlockPresenceTypeValues)
284
484
  }
285
485
  }
486
+
286
487
  export interface BlockPresence {
287
488
  cid: Uint8Array
288
489
  type: BlockPresenceType
@@ -339,19 +540,60 @@ export namespace BlockPresence {
339
540
  }
340
541
 
341
542
  return obj
543
+ }, function * (reader, length, prefix, opts = {}) {
544
+ const end = length == null ? reader.len : reader.pos + length
545
+
546
+ while (reader.pos < end) {
547
+ const tag = reader.uint32()
548
+
549
+ switch (tag >>> 3) {
550
+ case 1: {
551
+ yield {
552
+ field: `${prefix}.cid`,
553
+ value: reader.bytes()
554
+ }
555
+ break
556
+ }
557
+ case 2: {
558
+ yield {
559
+ field: `${prefix}.type`,
560
+ value: BlockPresenceType.codec().decode(reader)
561
+ }
562
+ break
563
+ }
564
+ default: {
565
+ reader.skipType(tag & 7)
566
+ break
567
+ }
568
+ }
569
+ }
342
570
  })
343
571
  }
344
572
 
345
573
  return _codec
346
574
  }
347
575
 
348
- export const encode = (obj: Partial<BlockPresence>): Uint8Array => {
576
+ export interface BlockPresenceCidFieldEvent {
577
+ field: '$.cid'
578
+ value: Uint8Array
579
+ }
580
+
581
+ export interface BlockPresenceTypeFieldEvent {
582
+ field: '$.type'
583
+ value: BlockPresenceType
584
+ }
585
+
586
+ export function encode (obj: Partial<BlockPresence>): Uint8Array {
349
587
  return encodeMessage(obj, BlockPresence.codec())
350
588
  }
351
589
 
352
- export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<BlockPresence>): BlockPresence => {
590
+ export function decode (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<BlockPresence>): BlockPresence {
353
591
  return decodeMessage(buf, BlockPresence.codec(), opts)
354
592
  }
593
+
594
+ export function stream (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<BlockPresence>): Generator<BlockPresenceCidFieldEvent | BlockPresenceTypeFieldEvent> {
595
+ return streamMessage(buf, BlockPresence.codec(), opts)
596
+ }
355
597
  }
356
598
 
357
599
  export interface BitswapMessage {
@@ -376,14 +618,14 @@ export namespace BitswapMessage {
376
618
  Wantlist.codec().encode(obj.wantlist, w)
377
619
  }
378
620
 
379
- if (obj.blocks != null) {
621
+ if (obj.blocks != null && obj.blocks.length > 0) {
380
622
  for (const value of obj.blocks) {
381
623
  w.uint32(26)
382
624
  Block.codec().encode(value, w)
383
625
  }
384
626
  }
385
627
 
386
- if (obj.blockPresences != null) {
628
+ if (obj.blockPresences != null && obj.blockPresences.length > 0) {
387
629
  for (const value of obj.blockPresences) {
388
630
  w.uint32(34)
389
631
  BlockPresence.codec().encode(value, w)
@@ -419,7 +661,7 @@ export namespace BitswapMessage {
419
661
  }
420
662
  case 3: {
421
663
  if (opts.limits?.blocks != null && obj.blocks.length === opts.limits.blocks) {
422
- throw new MaxLengthError('Decode error - map field "blocks" had too many elements')
664
+ throw new MaxLengthError('Decode error - repeated field "blocks" had too many elements')
423
665
  }
424
666
 
425
667
  obj.blocks.push(Block.codec().decode(reader, reader.uint32(), {
@@ -429,7 +671,7 @@ export namespace BitswapMessage {
429
671
  }
430
672
  case 4: {
431
673
  if (opts.limits?.blockPresences != null && obj.blockPresences.length === opts.limits.blockPresences) {
432
- throw new MaxLengthError('Decode error - map field "blockPresences" had too many elements')
674
+ throw new MaxLengthError('Decode error - repeated field "blockPresences" had too many elements')
433
675
  }
434
676
 
435
677
  obj.blockPresences.push(BlockPresence.codec().decode(reader, reader.uint32(), {
@@ -449,17 +691,153 @@ export namespace BitswapMessage {
449
691
  }
450
692
 
451
693
  return obj
694
+ }, function * (reader, length, prefix, opts = {}) {
695
+ const obj = {
696
+ blocks: 0,
697
+ blockPresences: 0
698
+ }
699
+
700
+ const end = length == null ? reader.len : reader.pos + length
701
+
702
+ while (reader.pos < end) {
703
+ const tag = reader.uint32()
704
+
705
+ switch (tag >>> 3) {
706
+ case 1: {
707
+ yield * Wantlist.codec().stream(reader, reader.uint32(), `${prefix}.wantlist`, {
708
+ limits: opts.limits?.wantlist
709
+ })
710
+
711
+ break
712
+ }
713
+ case 3: {
714
+ if (opts.limits?.blocks != null && obj.blocks === opts.limits.blocks) {
715
+ throw new MaxLengthError('Streaming decode error - repeated field "blocks" had too many elements')
716
+ }
717
+
718
+ for (const evt of Block.codec().stream(reader, reader.uint32(), `${prefix}.blocks[]`, {
719
+ limits: opts.limits?.blocks$
720
+ })) {
721
+ yield {
722
+ ...evt,
723
+ index: obj.blocks
724
+ }
725
+ }
726
+
727
+ obj.blocks++
728
+
729
+ break
730
+ }
731
+ case 4: {
732
+ if (opts.limits?.blockPresences != null && obj.blockPresences === opts.limits.blockPresences) {
733
+ throw new MaxLengthError('Streaming decode error - repeated field "blockPresences" had too many elements')
734
+ }
735
+
736
+ for (const evt of BlockPresence.codec().stream(reader, reader.uint32(), `${prefix}.blockPresences[]`, {
737
+ limits: opts.limits?.blockPresences$
738
+ })) {
739
+ yield {
740
+ ...evt,
741
+ index: obj.blockPresences
742
+ }
743
+ }
744
+
745
+ obj.blockPresences++
746
+
747
+ break
748
+ }
749
+ case 5: {
750
+ yield {
751
+ field: `${prefix}.pendingBytes`,
752
+ value: reader.int32()
753
+ }
754
+ break
755
+ }
756
+ default: {
757
+ reader.skipType(tag & 7)
758
+ break
759
+ }
760
+ }
761
+ }
452
762
  })
453
763
  }
454
764
 
455
765
  return _codec
456
766
  }
457
767
 
458
- export const encode = (obj: Partial<BitswapMessage>): Uint8Array => {
768
+ export interface BitswapMessageWantlistEntriesCidFieldEvent {
769
+ field: '$.wantlist.entries[].cid'
770
+ value: Uint8Array
771
+ index: number
772
+ }
773
+
774
+ export interface BitswapMessageWantlistEntriesPriorityFieldEvent {
775
+ field: '$.wantlist.entries[].priority'
776
+ value: number
777
+ index: number
778
+ }
779
+
780
+ export interface BitswapMessageWantlistEntriesCancelFieldEvent {
781
+ field: '$.wantlist.entries[].cancel'
782
+ value: boolean
783
+ index: number
784
+ }
785
+
786
+ export interface BitswapMessageWantlistEntriesWantTypeFieldEvent {
787
+ field: '$.wantlist.entries[].wantType'
788
+ value: WantType
789
+ index: number
790
+ }
791
+
792
+ export interface BitswapMessageWantlistEntriesSendDontHaveFieldEvent {
793
+ field: '$.wantlist.entries[].sendDontHave'
794
+ value: boolean
795
+ index: number
796
+ }
797
+
798
+ export interface BitswapMessageWantlistFullFieldEvent {
799
+ field: '$.wantlist.full'
800
+ value: boolean
801
+ }
802
+
803
+ export interface BitswapMessageBlocksPrefixFieldEvent {
804
+ field: '$.blocks[].prefix'
805
+ value: Uint8Array
806
+ index: number
807
+ }
808
+
809
+ export interface BitswapMessageBlocksDataFieldEvent {
810
+ field: '$.blocks[].data'
811
+ value: Uint8Array
812
+ index: number
813
+ }
814
+
815
+ export interface BitswapMessageBlockPresencesCidFieldEvent {
816
+ field: '$.blockPresences[].cid'
817
+ value: Uint8Array
818
+ index: number
819
+ }
820
+
821
+ export interface BitswapMessageBlockPresencesTypeFieldEvent {
822
+ field: '$.blockPresences[].type'
823
+ value: BlockPresenceType
824
+ index: number
825
+ }
826
+
827
+ export interface BitswapMessagePendingBytesFieldEvent {
828
+ field: '$.pendingBytes'
829
+ value: number
830
+ }
831
+
832
+ export function encode (obj: Partial<BitswapMessage>): Uint8Array {
459
833
  return encodeMessage(obj, BitswapMessage.codec())
460
834
  }
461
835
 
462
- export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<BitswapMessage>): BitswapMessage => {
836
+ export function decode (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<BitswapMessage>): BitswapMessage {
463
837
  return decodeMessage(buf, BitswapMessage.codec(), opts)
464
838
  }
839
+
840
+ export function stream (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<BitswapMessage>): Generator<BitswapMessageWantlistEntriesCidFieldEvent | BitswapMessageWantlistEntriesPriorityFieldEvent | BitswapMessageWantlistEntriesCancelFieldEvent | BitswapMessageWantlistEntriesWantTypeFieldEvent | BitswapMessageWantlistEntriesSendDontHaveFieldEvent | BitswapMessageWantlistFullFieldEvent | BitswapMessageBlocksPrefixFieldEvent | BitswapMessageBlocksDataFieldEvent | BitswapMessageBlockPresencesCidFieldEvent | BitswapMessageBlockPresencesTypeFieldEvent | BitswapMessagePendingBytesFieldEvent> {
841
+ return streamMessage(buf, BitswapMessage.codec(), opts)
842
+ }
465
843
  }
@@ -56,9 +56,9 @@ export class PeerWantLists {
56
56
  })
57
57
 
58
58
  this.network.addEventListener('bitswap:message', (evt) => {
59
- this.receiveMessage(evt.detail.peer, evt.detail.message)
59
+ this.receiveMessage(evt.detail.connection.remotePeer, evt.detail.message)
60
60
  .catch(err => {
61
- this.log.error('error receiving bitswap message from %p - %e', evt.detail.peer, err)
61
+ this.log.error('error receiving bitswap message from %p - %e', evt.detail.connection.remotePeer, err)
62
62
  })
63
63
  })
64
64
  this.network.addEventListener('peer:disconnected', evt => {