@libp2p/peer-store 12.0.13 → 12.0.14

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@libp2p/peer-store",
3
- "version": "12.0.13",
3
+ "version": "12.0.14",
4
4
  "description": "Stores information about peers libp2p knows on the network",
5
5
  "license": "Apache-2.0 OR MIT",
6
6
  "homepage": "https://github.com/libp2p/js-libp2p/tree/main/packages/peer-store#readme",
@@ -48,23 +48,23 @@
48
48
  "test:electron-main": "aegir test -t electron-main"
49
49
  },
50
50
  "dependencies": {
51
- "@libp2p/crypto": "^5.1.13",
52
- "@libp2p/interface": "^3.1.0",
53
- "@libp2p/peer-collections": "^7.0.13",
54
- "@libp2p/peer-id": "^6.0.4",
55
- "@libp2p/peer-record": "^9.0.5",
51
+ "@libp2p/crypto": "^5.1.14",
52
+ "@libp2p/interface": "^3.1.1",
53
+ "@libp2p/peer-collections": "^7.0.14",
54
+ "@libp2p/peer-id": "^6.0.5",
55
+ "@libp2p/peer-record": "^9.0.6",
56
56
  "@multiformats/multiaddr": "^13.0.1",
57
57
  "interface-datastore": "^9.0.1",
58
58
  "it-all": "^3.0.9",
59
59
  "main-event": "^1.0.1",
60
60
  "mortice": "^3.3.1",
61
61
  "multiformats": "^13.4.0",
62
- "protons-runtime": "^5.6.0",
62
+ "protons-runtime": "^6.0.1",
63
63
  "uint8arraylist": "^2.4.8",
64
64
  "uint8arrays": "^5.1.0"
65
65
  },
66
66
  "devDependencies": {
67
- "@libp2p/logger": "^6.2.2",
67
+ "@libp2p/logger": "^6.2.3",
68
68
  "@types/sinon": "^20.0.0",
69
69
  "aegir": "^47.0.22",
70
70
  "benchmark": "^2.1.4",
@@ -72,7 +72,7 @@
72
72
  "delay": "^7.0.0",
73
73
  "p-defer": "^4.0.1",
74
74
  "p-event": "^7.0.0",
75
- "protons": "^7.7.0",
75
+ "protons": "^8.1.1",
76
76
  "sinon": "^21.0.0"
77
77
  },
78
78
  "sideEffects": false
package/src/pb/peer.ts CHANGED
@@ -1,6 +1,4 @@
1
- /* eslint-disable complexity */
2
-
3
- import { decodeMessage, encodeMessage, MaxLengthError, MaxSizeError, message } from 'protons-runtime'
1
+ import { decodeMessage, encodeMessage, MaxLengthError, MaxSizeError, message, streamMessage } from 'protons-runtime'
4
2
  import { alloc as uint8ArrayAlloc } from 'uint8arrays/alloc'
5
3
  import type { Codec, DecodeOptions } from 'protons-runtime'
6
4
  import type { Uint8ArrayList } from 'uint8arraylist'
@@ -72,19 +70,60 @@ export namespace Peer {
72
70
  }
73
71
 
74
72
  return obj
73
+ }, function * (reader, length, prefix, opts = {}) {
74
+ const end = length == null ? reader.len : reader.pos + length
75
+
76
+ while (reader.pos < end) {
77
+ const tag = reader.uint32()
78
+
79
+ switch (tag >>> 3) {
80
+ case 1: {
81
+ yield {
82
+ field: `${prefix}.key`,
83
+ value: reader.string()
84
+ }
85
+ break
86
+ }
87
+ case 2: {
88
+ yield {
89
+ field: `${prefix}.value`,
90
+ value: reader.bytes()
91
+ }
92
+ break
93
+ }
94
+ default: {
95
+ reader.skipType(tag & 7)
96
+ break
97
+ }
98
+ }
99
+ }
75
100
  })
76
101
  }
77
102
 
78
103
  return _codec
79
104
  }
80
105
 
81
- export const encode = (obj: Partial<Peer$metadataEntry>): Uint8Array => {
106
+ export interface Peer$metadataEntryKeyFieldEvent {
107
+ field: '$.key'
108
+ value: string
109
+ }
110
+
111
+ export interface Peer$metadataEntryValueFieldEvent {
112
+ field: '$.value'
113
+ value: Uint8Array
114
+ }
115
+
116
+ export function encode (obj: Partial<Peer$metadataEntry>): Uint8Array {
82
117
  return encodeMessage(obj, Peer$metadataEntry.codec())
83
118
  }
84
119
 
85
- export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Peer$metadataEntry>): Peer$metadataEntry => {
120
+ export function decode (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Peer$metadataEntry>): Peer$metadataEntry {
86
121
  return decodeMessage(buf, Peer$metadataEntry.codec(), opts)
87
122
  }
123
+
124
+ export function stream (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Peer$metadataEntry>): Generator<Peer$metadataEntryKeyFieldEvent | Peer$metadataEntryValueFieldEvent> {
125
+ return streamMessage(buf, Peer$metadataEntry.codec(), opts)
126
+ }
88
127
  }
89
128
 
90
129
  export interface Peer$tagsEntry {
@@ -144,19 +183,65 @@ export namespace Peer {
144
183
  }
145
184
 
146
185
  return obj
186
+ }, function * (reader, length, prefix, opts = {}) {
187
+ const end = length == null ? reader.len : reader.pos + length
188
+
189
+ while (reader.pos < end) {
190
+ const tag = reader.uint32()
191
+
192
+ switch (tag >>> 3) {
193
+ case 1: {
194
+ yield {
195
+ field: `${prefix}.key`,
196
+ value: reader.string()
197
+ }
198
+ break
199
+ }
200
+ case 2: {
201
+ yield * Tag.codec().stream(reader, reader.uint32(), `${prefix}.value`, {
202
+ limits: opts.limits?.value
203
+ })
204
+
205
+ break
206
+ }
207
+ default: {
208
+ reader.skipType(tag & 7)
209
+ break
210
+ }
211
+ }
212
+ }
147
213
  })
148
214
  }
149
215
 
150
216
  return _codec
151
217
  }
152
218
 
153
- export const encode = (obj: Partial<Peer$tagsEntry>): Uint8Array => {
219
+ export interface Peer$tagsEntryKeyFieldEvent {
220
+ field: '$.key'
221
+ value: string
222
+ }
223
+
224
+ export interface Peer$tagsEntryValueValueFieldEvent {
225
+ field: '$.value.value'
226
+ value: number
227
+ }
228
+
229
+ export interface Peer$tagsEntryValueExpiryFieldEvent {
230
+ field: '$.value.expiry'
231
+ value: bigint
232
+ }
233
+
234
+ export function encode (obj: Partial<Peer$tagsEntry>): Uint8Array {
154
235
  return encodeMessage(obj, Peer$tagsEntry.codec())
155
236
  }
156
237
 
157
- export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Peer$tagsEntry>): Peer$tagsEntry => {
238
+ export function decode (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Peer$tagsEntry>): Peer$tagsEntry {
158
239
  return decodeMessage(buf, Peer$tagsEntry.codec(), opts)
159
240
  }
241
+
242
+ export function stream (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Peer$tagsEntry>): Generator<Peer$tagsEntryKeyFieldEvent | Peer$tagsEntryValueValueFieldEvent | Peer$tagsEntryValueExpiryFieldEvent> {
243
+ return streamMessage(buf, Peer$tagsEntry.codec(), opts)
244
+ }
160
245
  }
161
246
 
162
247
  let _codec: Codec<Peer>
@@ -168,14 +253,14 @@ export namespace Peer {
168
253
  w.fork()
169
254
  }
170
255
 
171
- if (obj.addresses != null) {
256
+ if (obj.addresses != null && obj.addresses.length > 0) {
172
257
  for (const value of obj.addresses) {
173
258
  w.uint32(10)
174
259
  Address.codec().encode(value, w)
175
260
  }
176
261
  }
177
262
 
178
- if (obj.protocols != null) {
263
+ if (obj.protocols != null && obj.protocols.length > 0) {
179
264
  for (const value of obj.protocols) {
180
265
  w.uint32(18)
181
266
  w.string(value)
@@ -192,14 +277,14 @@ export namespace Peer {
192
277
  w.bytes(obj.peerRecordEnvelope)
193
278
  }
194
279
 
195
- if (obj.metadata != null && obj.metadata.size !== 0) {
280
+ if (obj.metadata != null && obj.metadata.size > 0) {
196
281
  for (const [key, value] of obj.metadata.entries()) {
197
282
  w.uint32(50)
198
283
  Peer.Peer$metadataEntry.codec().encode({ key, value }, w)
199
284
  }
200
285
  }
201
286
 
202
- if (obj.tags != null && obj.tags.size !== 0) {
287
+ if (obj.tags != null && obj.tags.size > 0) {
203
288
  for (const [key, value] of obj.tags.entries()) {
204
289
  w.uint32(58)
205
290
  Peer.Peer$tagsEntry.codec().encode({ key, value }, w)
@@ -219,7 +304,7 @@ export namespace Peer {
219
304
  addresses: [],
220
305
  protocols: [],
221
306
  metadata: new Map<string, Uint8Array>(),
222
- tags: new Map<string, undefined>()
307
+ tags: new Map<string, Tag>()
223
308
  }
224
309
 
225
310
  const end = length == null ? reader.len : reader.pos + length
@@ -230,7 +315,7 @@ export namespace Peer {
230
315
  switch (tag >>> 3) {
231
316
  case 1: {
232
317
  if (opts.limits?.addresses != null && obj.addresses.length === opts.limits.addresses) {
233
- throw new MaxLengthError('Decode error - map field "addresses" had too many elements')
318
+ throw new MaxLengthError('Decode error - repeated field "addresses" had too many elements')
234
319
  }
235
320
 
236
321
  obj.addresses.push(Address.codec().decode(reader, reader.uint32(), {
@@ -240,7 +325,7 @@ export namespace Peer {
240
325
  }
241
326
  case 2: {
242
327
  if (opts.limits?.protocols != null && obj.protocols.length === opts.limits.protocols) {
243
- throw new MaxLengthError('Decode error - map field "protocols" had too many elements')
328
+ throw new MaxLengthError('Decode error - repeated field "protocols" had too many elements')
244
329
  }
245
330
 
246
331
  obj.protocols.push(reader.string())
@@ -259,7 +344,11 @@ export namespace Peer {
259
344
  throw new MaxSizeError('Decode error - map field "metadata" had too many elements')
260
345
  }
261
346
 
262
- const entry = Peer.Peer$metadataEntry.codec().decode(reader, reader.uint32())
347
+ const entry = Peer.Peer$metadataEntry.codec().decode(reader, reader.uint32(), {
348
+ limits: {
349
+ value: opts.limits?.metadata$value
350
+ }
351
+ })
263
352
  obj.metadata.set(entry.key, entry.value)
264
353
  break
265
354
  }
@@ -288,19 +377,184 @@ export namespace Peer {
288
377
  }
289
378
 
290
379
  return obj
380
+ }, function * (reader, length, prefix, opts = {}) {
381
+ const obj = {
382
+ addresses: 0,
383
+ protocols: 0,
384
+ metadata: 0,
385
+ tags: 0
386
+ }
387
+
388
+ const end = length == null ? reader.len : reader.pos + length
389
+
390
+ while (reader.pos < end) {
391
+ const tag = reader.uint32()
392
+
393
+ switch (tag >>> 3) {
394
+ case 1: {
395
+ if (opts.limits?.addresses != null && obj.addresses === opts.limits.addresses) {
396
+ throw new MaxLengthError('Streaming decode error - repeated field "addresses" had too many elements')
397
+ }
398
+
399
+ for (const evt of Address.codec().stream(reader, reader.uint32(), `${prefix}.addresses[]`, {
400
+ limits: opts.limits?.addresses$
401
+ })) {
402
+ yield {
403
+ ...evt,
404
+ index: obj.addresses
405
+ }
406
+ }
407
+
408
+ obj.addresses++
409
+
410
+ break
411
+ }
412
+ case 2: {
413
+ if (opts.limits?.protocols != null && obj.protocols === opts.limits.protocols) {
414
+ throw new MaxLengthError('Streaming decode error - repeated field "protocols" had too many elements')
415
+ }
416
+
417
+ yield {
418
+ field: `${prefix}.protocols[]`,
419
+ index: obj.protocols,
420
+ value: reader.string()
421
+ }
422
+
423
+ obj.protocols++
424
+
425
+ break
426
+ }
427
+ case 4: {
428
+ yield {
429
+ field: `${prefix}.publicKey`,
430
+ value: reader.bytes()
431
+ }
432
+ break
433
+ }
434
+ case 5: {
435
+ yield {
436
+ field: `${prefix}.peerRecordEnvelope`,
437
+ value: reader.bytes()
438
+ }
439
+ break
440
+ }
441
+ case 6: {
442
+ if (opts.limits?.metadata != null && obj.metadata === opts.limits.metadata) {
443
+ throw new MaxLengthError('Decode error - map field "metadata" had too many elements')
444
+ }
445
+
446
+ yield * Peer.Peer$metadataEntry.codec().stream(reader, reader.uint32(), `${prefix}.metadata{}`, {
447
+ limits: {
448
+ value: opts.limits?.metadata$value
449
+ }
450
+ })
451
+
452
+ obj.metadata++
453
+
454
+ break
455
+ }
456
+ case 7: {
457
+ if (opts.limits?.tags != null && obj.tags === opts.limits.tags) {
458
+ throw new MaxLengthError('Decode error - map field "tags" had too many elements')
459
+ }
460
+
461
+ yield * Peer.Peer$tagsEntry.codec().stream(reader, reader.uint32(), `${prefix}.tags{}`, {
462
+ limits: {
463
+ value: opts.limits?.tags$value
464
+ }
465
+ })
466
+
467
+ obj.tags++
468
+
469
+ break
470
+ }
471
+ case 8: {
472
+ yield {
473
+ field: `${prefix}.updated`,
474
+ value: reader.uint64Number()
475
+ }
476
+ break
477
+ }
478
+ default: {
479
+ reader.skipType(tag & 7)
480
+ break
481
+ }
482
+ }
483
+ }
291
484
  })
292
485
  }
293
486
 
294
487
  return _codec
295
488
  }
296
489
 
297
- export const encode = (obj: Partial<Peer>): Uint8Array => {
490
+ export interface PeerAddressesMultiaddrFieldEvent {
491
+ field: '$.addresses[].multiaddr'
492
+ value: Uint8Array
493
+ index: number
494
+ }
495
+
496
+ export interface PeerAddressesIsCertifiedFieldEvent {
497
+ field: '$.addresses[].isCertified'
498
+ value: boolean
499
+ index: number
500
+ }
501
+
502
+ export interface PeerAddressesObservedFieldEvent {
503
+ field: '$.addresses[].observed'
504
+ value: number
505
+ index: number
506
+ }
507
+
508
+ export interface PeerProtocolsFieldEvent {
509
+ field: '$.protocols[]'
510
+ index: number
511
+ value: string
512
+ }
513
+
514
+ export interface PeerPublicKeyFieldEvent {
515
+ field: '$.publicKey'
516
+ value: Uint8Array
517
+ }
518
+
519
+ export interface PeerPeerRecordEnvelopeFieldEvent {
520
+ field: '$.peerRecordEnvelope'
521
+ value: Uint8Array
522
+ }
523
+
524
+ export interface PeerMetadataFieldEvent {
525
+ field: '$.metadata{}'
526
+ key: string
527
+ value: Uint8Array
528
+ }
529
+
530
+ export interface PeerTagsValueFieldEvent {
531
+ field: '$.tags{}.value'
532
+ value: Tag
533
+ key: string
534
+ }
535
+
536
+ export interface PeerTagsExpiryFieldEvent {
537
+ field: '$.tags{}.expiry'
538
+ value: Tag
539
+ key: string
540
+ }
541
+
542
+ export interface PeerUpdatedFieldEvent {
543
+ field: '$.updated'
544
+ value: number
545
+ }
546
+
547
+ export function encode (obj: Partial<Peer>): Uint8Array {
298
548
  return encodeMessage(obj, Peer.codec())
299
549
  }
300
550
 
301
- export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Peer>): Peer => {
551
+ export function decode (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Peer>): Peer {
302
552
  return decodeMessage(buf, Peer.codec(), opts)
303
553
  }
554
+
555
+ export function stream (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Peer>): Generator<PeerAddressesMultiaddrFieldEvent | PeerAddressesIsCertifiedFieldEvent | PeerAddressesObservedFieldEvent | PeerProtocolsFieldEvent | PeerPublicKeyFieldEvent | PeerPeerRecordEnvelopeFieldEvent | PeerMetadataFieldEvent | PeerTagsValueFieldEvent | PeerTagsExpiryFieldEvent | PeerUpdatedFieldEvent> {
556
+ return streamMessage(buf, Peer.codec(), opts)
557
+ }
304
558
  }
305
559
 
306
560
  export interface Address {
@@ -368,19 +622,72 @@ export namespace Address {
368
622
  }
369
623
 
370
624
  return obj
625
+ }, function * (reader, length, prefix, opts = {}) {
626
+ const end = length == null ? reader.len : reader.pos + length
627
+
628
+ while (reader.pos < end) {
629
+ const tag = reader.uint32()
630
+
631
+ switch (tag >>> 3) {
632
+ case 1: {
633
+ yield {
634
+ field: `${prefix}.multiaddr`,
635
+ value: reader.bytes()
636
+ }
637
+ break
638
+ }
639
+ case 2: {
640
+ yield {
641
+ field: `${prefix}.isCertified`,
642
+ value: reader.bool()
643
+ }
644
+ break
645
+ }
646
+ case 3: {
647
+ yield {
648
+ field: `${prefix}.observed`,
649
+ value: reader.uint64Number()
650
+ }
651
+ break
652
+ }
653
+ default: {
654
+ reader.skipType(tag & 7)
655
+ break
656
+ }
657
+ }
658
+ }
371
659
  })
372
660
  }
373
661
 
374
662
  return _codec
375
663
  }
376
664
 
377
- export const encode = (obj: Partial<Address>): Uint8Array => {
665
+ export interface AddressMultiaddrFieldEvent {
666
+ field: '$.multiaddr'
667
+ value: Uint8Array
668
+ }
669
+
670
+ export interface AddressIsCertifiedFieldEvent {
671
+ field: '$.isCertified'
672
+ value: boolean
673
+ }
674
+
675
+ export interface AddressObservedFieldEvent {
676
+ field: '$.observed'
677
+ value: number
678
+ }
679
+
680
+ export function encode (obj: Partial<Address>): Uint8Array {
378
681
  return encodeMessage(obj, Address.codec())
379
682
  }
380
683
 
381
- export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Address>): Address => {
684
+ export function decode (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Address>): Address {
382
685
  return decodeMessage(buf, Address.codec(), opts)
383
686
  }
687
+
688
+ export function stream (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Address>): Generator<AddressMultiaddrFieldEvent | AddressIsCertifiedFieldEvent | AddressObservedFieldEvent> {
689
+ return streamMessage(buf, Address.codec(), opts)
690
+ }
384
691
  }
385
692
 
386
693
  export interface Tag {
@@ -438,17 +745,58 @@ export namespace Tag {
438
745
  }
439
746
 
440
747
  return obj
748
+ }, function * (reader, length, prefix, opts = {}) {
749
+ const end = length == null ? reader.len : reader.pos + length
750
+
751
+ while (reader.pos < end) {
752
+ const tag = reader.uint32()
753
+
754
+ switch (tag >>> 3) {
755
+ case 1: {
756
+ yield {
757
+ field: `${prefix}.value`,
758
+ value: reader.uint32()
759
+ }
760
+ break
761
+ }
762
+ case 2: {
763
+ yield {
764
+ field: `${prefix}.expiry`,
765
+ value: reader.uint64()
766
+ }
767
+ break
768
+ }
769
+ default: {
770
+ reader.skipType(tag & 7)
771
+ break
772
+ }
773
+ }
774
+ }
441
775
  })
442
776
  }
443
777
 
444
778
  return _codec
445
779
  }
446
780
 
447
- export const encode = (obj: Partial<Tag>): Uint8Array => {
781
+ export interface TagValueFieldEvent {
782
+ field: '$.value'
783
+ value: number
784
+ }
785
+
786
+ export interface TagExpiryFieldEvent {
787
+ field: '$.expiry'
788
+ value: bigint
789
+ }
790
+
791
+ export function encode (obj: Partial<Tag>): Uint8Array {
448
792
  return encodeMessage(obj, Tag.codec())
449
793
  }
450
794
 
451
- export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Tag>): Tag => {
795
+ export function decode (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Tag>): Tag {
452
796
  return decodeMessage(buf, Tag.codec(), opts)
453
797
  }
798
+
799
+ export function stream (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Tag>): Generator<TagValueFieldEvent | TagExpiryFieldEvent> {
800
+ return streamMessage(buf, Tag.codec(), opts)
801
+ }
454
802
  }