@libp2p/kad-dht 16.1.6 → 16.1.7

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,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'
@@ -86,19 +86,96 @@ export namespace Record {
86
86
  }
87
87
 
88
88
  return obj
89
+ }, function * (reader, length, prefix, opts = {}) {
90
+ const end = length == null ? reader.len : reader.pos + length
91
+
92
+ while (reader.pos < end) {
93
+ const tag = reader.uint32()
94
+
95
+ switch (tag >>> 3) {
96
+ case 1: {
97
+ yield {
98
+ field: `${prefix}.key`,
99
+ value: reader.bytes()
100
+ }
101
+ break
102
+ }
103
+ case 2: {
104
+ yield {
105
+ field: `${prefix}.value`,
106
+ value: reader.bytes()
107
+ }
108
+ break
109
+ }
110
+ case 3: {
111
+ yield {
112
+ field: `${prefix}.author`,
113
+ value: reader.bytes()
114
+ }
115
+ break
116
+ }
117
+ case 4: {
118
+ yield {
119
+ field: `${prefix}.signature`,
120
+ value: reader.bytes()
121
+ }
122
+ break
123
+ }
124
+ case 5: {
125
+ yield {
126
+ field: `${prefix}.timeReceived`,
127
+ value: reader.string()
128
+ }
129
+ break
130
+ }
131
+ default: {
132
+ reader.skipType(tag & 7)
133
+ break
134
+ }
135
+ }
136
+ }
89
137
  })
90
138
  }
91
139
 
92
140
  return _codec
93
141
  }
94
142
 
95
- export const encode = (obj: Partial<Record>): Uint8Array => {
143
+ export interface RecordKeyFieldEvent {
144
+ field: '$.key'
145
+ value: Uint8Array
146
+ }
147
+
148
+ export interface RecordValueFieldEvent {
149
+ field: '$.value'
150
+ value: Uint8Array
151
+ }
152
+
153
+ export interface RecordAuthorFieldEvent {
154
+ field: '$.author'
155
+ value: Uint8Array
156
+ }
157
+
158
+ export interface RecordSignatureFieldEvent {
159
+ field: '$.signature'
160
+ value: Uint8Array
161
+ }
162
+
163
+ export interface RecordTimeReceivedFieldEvent {
164
+ field: '$.timeReceived'
165
+ value: string
166
+ }
167
+
168
+ export function encode (obj: Partial<Record>): Uint8Array {
96
169
  return encodeMessage(obj, Record.codec())
97
170
  }
98
171
 
99
- export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Record>): Record => {
172
+ export function decode (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Record>): Record {
100
173
  return decodeMessage(buf, Record.codec(), opts)
101
174
  }
175
+
176
+ export function stream (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Record>): Generator<RecordKeyFieldEvent | RecordValueFieldEvent | RecordAuthorFieldEvent | RecordSignatureFieldEvent | RecordTimeReceivedFieldEvent> {
177
+ return streamMessage(buf, Record.codec(), opts)
178
+ }
102
179
  }
103
180
 
104
181
  export enum MessageType {
@@ -124,6 +201,7 @@ export namespace MessageType {
124
201
  return enumeration<MessageType>(__MessageTypeValues)
125
202
  }
126
203
  }
204
+
127
205
  export enum ConnectionType {
128
206
  NOT_CONNECTED = 'NOT_CONNECTED',
129
207
  CONNECTED = 'CONNECTED',
@@ -143,6 +221,7 @@ export namespace ConnectionType {
143
221
  return enumeration<ConnectionType>(__ConnectionTypeValues)
144
222
  }
145
223
  }
224
+
146
225
  export interface PeerInfo {
147
226
  id: Uint8Array
148
227
  multiaddrs: Uint8Array[]
@@ -164,7 +243,7 @@ export namespace PeerInfo {
164
243
  w.bytes(obj.id)
165
244
  }
166
245
 
167
- if (obj.multiaddrs != null) {
246
+ if (obj.multiaddrs != null && obj.multiaddrs.length > 0) {
168
247
  for (const value of obj.multiaddrs) {
169
248
  w.uint32(18)
170
249
  w.bytes(value)
@@ -197,7 +276,7 @@ export namespace PeerInfo {
197
276
  }
198
277
  case 2: {
199
278
  if (opts.limits?.multiaddrs != null && obj.multiaddrs.length === opts.limits.multiaddrs) {
200
- throw new MaxLengthError('Decode error - map field "multiaddrs" had too many elements')
279
+ throw new MaxLengthError('Decode error - repeated field "multiaddrs" had too many elements')
201
280
  }
202
281
 
203
282
  obj.multiaddrs.push(reader.bytes())
@@ -215,19 +294,85 @@ export namespace PeerInfo {
215
294
  }
216
295
 
217
296
  return obj
297
+ }, function * (reader, length, prefix, opts = {}) {
298
+ const obj = {
299
+ multiaddrs: 0
300
+ }
301
+
302
+ const end = length == null ? reader.len : reader.pos + length
303
+
304
+ while (reader.pos < end) {
305
+ const tag = reader.uint32()
306
+
307
+ switch (tag >>> 3) {
308
+ case 1: {
309
+ yield {
310
+ field: `${prefix}.id`,
311
+ value: reader.bytes()
312
+ }
313
+ break
314
+ }
315
+ case 2: {
316
+ if (opts.limits?.multiaddrs != null && obj.multiaddrs === opts.limits.multiaddrs) {
317
+ throw new MaxLengthError('Streaming decode error - repeated field "multiaddrs" had too many elements')
318
+ }
319
+
320
+ yield {
321
+ field: `${prefix}.multiaddrs[]`,
322
+ index: obj.multiaddrs,
323
+ value: reader.bytes()
324
+ }
325
+
326
+ obj.multiaddrs++
327
+
328
+ break
329
+ }
330
+ case 3: {
331
+ yield {
332
+ field: `${prefix}.connection`,
333
+ value: ConnectionType.codec().decode(reader)
334
+ }
335
+ break
336
+ }
337
+ default: {
338
+ reader.skipType(tag & 7)
339
+ break
340
+ }
341
+ }
342
+ }
218
343
  })
219
344
  }
220
345
 
221
346
  return _codec
222
347
  }
223
348
 
224
- export const encode = (obj: Partial<PeerInfo>): Uint8Array => {
349
+ export interface PeerInfoIdFieldEvent {
350
+ field: '$.id'
351
+ value: Uint8Array
352
+ }
353
+
354
+ export interface PeerInfoMultiaddrsFieldEvent {
355
+ field: '$.multiaddrs[]'
356
+ index: number
357
+ value: Uint8Array
358
+ }
359
+
360
+ export interface PeerInfoConnectionFieldEvent {
361
+ field: '$.connection'
362
+ value: ConnectionType
363
+ }
364
+
365
+ export function encode (obj: Partial<PeerInfo>): Uint8Array {
225
366
  return encodeMessage(obj, PeerInfo.codec())
226
367
  }
227
368
 
228
- export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<PeerInfo>): PeerInfo => {
369
+ export function decode (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<PeerInfo>): PeerInfo {
229
370
  return decodeMessage(buf, PeerInfo.codec(), opts)
230
371
  }
372
+
373
+ export function stream (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<PeerInfo>): Generator<PeerInfoIdFieldEvent | PeerInfoMultiaddrsFieldEvent | PeerInfoConnectionFieldEvent> {
374
+ return streamMessage(buf, PeerInfo.codec(), opts)
375
+ }
231
376
  }
232
377
 
233
378
  export interface Message {
@@ -269,14 +414,14 @@ export namespace Message {
269
414
  w.bytes(obj.record)
270
415
  }
271
416
 
272
- if (obj.closer != null) {
417
+ if (obj.closer != null && obj.closer.length > 0) {
273
418
  for (const value of obj.closer) {
274
419
  w.uint32(66)
275
420
  PeerInfo.codec().encode(value, w)
276
421
  }
277
422
  }
278
423
 
279
- if (obj.providers != null) {
424
+ if (obj.providers != null && obj.providers.length > 0) {
280
425
  for (const value of obj.providers) {
281
426
  w.uint32(74)
282
427
  PeerInfo.codec().encode(value, w)
@@ -317,7 +462,7 @@ export namespace Message {
317
462
  }
318
463
  case 8: {
319
464
  if (opts.limits?.closer != null && obj.closer.length === opts.limits.closer) {
320
- throw new MaxLengthError('Decode error - map field "closer" had too many elements')
465
+ throw new MaxLengthError('Decode error - repeated field "closer" had too many elements')
321
466
  }
322
467
 
323
468
  obj.closer.push(PeerInfo.codec().decode(reader, reader.uint32(), {
@@ -327,7 +472,7 @@ export namespace Message {
327
472
  }
328
473
  case 9: {
329
474
  if (opts.limits?.providers != null && obj.providers.length === opts.limits.providers) {
330
- throw new MaxLengthError('Decode error - map field "providers" had too many elements')
475
+ throw new MaxLengthError('Decode error - repeated field "providers" had too many elements')
331
476
  }
332
477
 
333
478
  obj.providers.push(PeerInfo.codec().decode(reader, reader.uint32(), {
@@ -343,17 +488,159 @@ export namespace Message {
343
488
  }
344
489
 
345
490
  return obj
491
+ }, function * (reader, length, prefix, opts = {}) {
492
+ const obj = {
493
+ closer: 0,
494
+ providers: 0
495
+ }
496
+
497
+ const end = length == null ? reader.len : reader.pos + length
498
+
499
+ while (reader.pos < end) {
500
+ const tag = reader.uint32()
501
+
502
+ switch (tag >>> 3) {
503
+ case 1: {
504
+ yield {
505
+ field: `${prefix}.type`,
506
+ value: MessageType.codec().decode(reader)
507
+ }
508
+ break
509
+ }
510
+ case 10: {
511
+ yield {
512
+ field: `${prefix}.clusterLevel`,
513
+ value: reader.int32()
514
+ }
515
+ break
516
+ }
517
+ case 2: {
518
+ yield {
519
+ field: `${prefix}.key`,
520
+ value: reader.bytes()
521
+ }
522
+ break
523
+ }
524
+ case 3: {
525
+ yield {
526
+ field: `${prefix}.record`,
527
+ value: reader.bytes()
528
+ }
529
+ break
530
+ }
531
+ case 8: {
532
+ if (opts.limits?.closer != null && obj.closer === opts.limits.closer) {
533
+ throw new MaxLengthError('Streaming decode error - repeated field "closer" had too many elements')
534
+ }
535
+
536
+ for (const evt of PeerInfo.codec().stream(reader, reader.uint32(), `${prefix}.closer[]`, {
537
+ limits: opts.limits?.closer$
538
+ })) {
539
+ yield {
540
+ ...evt,
541
+ index: obj.closer
542
+ }
543
+ }
544
+
545
+ obj.closer++
546
+
547
+ break
548
+ }
549
+ case 9: {
550
+ if (opts.limits?.providers != null && obj.providers === opts.limits.providers) {
551
+ throw new MaxLengthError('Streaming decode error - repeated field "providers" had too many elements')
552
+ }
553
+
554
+ for (const evt of PeerInfo.codec().stream(reader, reader.uint32(), `${prefix}.providers[]`, {
555
+ limits: opts.limits?.providers$
556
+ })) {
557
+ yield {
558
+ ...evt,
559
+ index: obj.providers
560
+ }
561
+ }
562
+
563
+ obj.providers++
564
+
565
+ break
566
+ }
567
+ default: {
568
+ reader.skipType(tag & 7)
569
+ break
570
+ }
571
+ }
572
+ }
346
573
  })
347
574
  }
348
575
 
349
576
  return _codec
350
577
  }
351
578
 
352
- export const encode = (obj: Partial<Message>): Uint8Array => {
579
+ export interface MessageTypeFieldEvent {
580
+ field: '$.type'
581
+ value: MessageType
582
+ }
583
+
584
+ export interface MessageClusterLevelFieldEvent {
585
+ field: '$.clusterLevel'
586
+ value: number
587
+ }
588
+
589
+ export interface MessageKeyFieldEvent {
590
+ field: '$.key'
591
+ value: Uint8Array
592
+ }
593
+
594
+ export interface MessageRecordFieldEvent {
595
+ field: '$.record'
596
+ value: Uint8Array
597
+ }
598
+
599
+ export interface MessageCloserIdFieldEvent {
600
+ field: '$.closer[].id'
601
+ value: Uint8Array
602
+ index: number
603
+ }
604
+
605
+ export interface MessageCloserMultiaddrsFieldEvent {
606
+ field: '$.closer[].multiaddrs[]'
607
+ index: number
608
+ value: Uint8Array
609
+ }
610
+
611
+ export interface MessageCloserConnectionFieldEvent {
612
+ field: '$.closer[].connection'
613
+ value: ConnectionType
614
+ index: number
615
+ }
616
+
617
+ export interface MessageProvidersIdFieldEvent {
618
+ field: '$.providers[].id'
619
+ value: Uint8Array
620
+ index: number
621
+ }
622
+
623
+ export interface MessageProvidersMultiaddrsFieldEvent {
624
+ field: '$.providers[].multiaddrs[]'
625
+ index: number
626
+ value: Uint8Array
627
+ }
628
+
629
+ export interface MessageProvidersConnectionFieldEvent {
630
+ field: '$.providers[].connection'
631
+ value: ConnectionType
632
+ index: number
633
+ }
634
+
635
+ export function encode (obj: Partial<Message>): Uint8Array {
353
636
  return encodeMessage(obj, Message.codec())
354
637
  }
355
638
 
356
- export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Message>): Message => {
639
+ export function decode (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Message>): Message {
357
640
  return decodeMessage(buf, Message.codec(), opts)
358
641
  }
642
+
643
+ export function stream (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Message>): Generator<MessageTypeFieldEvent | MessageClusterLevelFieldEvent | MessageKeyFieldEvent | MessageRecordFieldEvent | MessageCloserIdFieldEvent | MessageCloserMultiaddrsFieldEvent | MessageCloserConnectionFieldEvent | MessageProvidersIdFieldEvent | MessageProvidersMultiaddrsFieldEvent | MessageProvidersConnectionFieldEvent> {
644
+ return streamMessage(buf, Message.codec(), opts)
645
+ }
359
646
  }