@libp2p/gossipsub 14.1.1-6059227cb

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.
Files changed (160) hide show
  1. package/README.md +85 -0
  2. package/dist/index.min.js +19 -0
  3. package/dist/index.min.js.map +7 -0
  4. package/dist/src/config.d.ts +32 -0
  5. package/dist/src/config.d.ts.map +1 -0
  6. package/dist/src/config.js +2 -0
  7. package/dist/src/config.js.map +1 -0
  8. package/dist/src/constants.d.ts +213 -0
  9. package/dist/src/constants.d.ts.map +1 -0
  10. package/dist/src/constants.js +217 -0
  11. package/dist/src/constants.js.map +1 -0
  12. package/dist/src/errors.d.ts +9 -0
  13. package/dist/src/errors.d.ts.map +1 -0
  14. package/dist/src/errors.js +15 -0
  15. package/dist/src/errors.js.map +1 -0
  16. package/dist/src/gossipsub.d.ts +419 -0
  17. package/dist/src/gossipsub.d.ts.map +1 -0
  18. package/dist/src/gossipsub.js +2520 -0
  19. package/dist/src/gossipsub.js.map +1 -0
  20. package/dist/src/index.d.ts +344 -0
  21. package/dist/src/index.d.ts.map +1 -0
  22. package/dist/src/index.js +43 -0
  23. package/dist/src/index.js.map +1 -0
  24. package/dist/src/message/decodeRpc.d.ts +11 -0
  25. package/dist/src/message/decodeRpc.d.ts.map +1 -0
  26. package/dist/src/message/decodeRpc.js +10 -0
  27. package/dist/src/message/decodeRpc.js.map +1 -0
  28. package/dist/src/message/index.d.ts +2 -0
  29. package/dist/src/message/index.d.ts.map +1 -0
  30. package/dist/src/message/index.js +2 -0
  31. package/dist/src/message/index.js.map +1 -0
  32. package/dist/src/message/rpc.d.ts +99 -0
  33. package/dist/src/message/rpc.d.ts.map +1 -0
  34. package/dist/src/message/rpc.js +663 -0
  35. package/dist/src/message/rpc.js.map +1 -0
  36. package/dist/src/message-cache.d.ts +80 -0
  37. package/dist/src/message-cache.d.ts.map +1 -0
  38. package/dist/src/message-cache.js +144 -0
  39. package/dist/src/message-cache.js.map +1 -0
  40. package/dist/src/metrics.d.ts +467 -0
  41. package/dist/src/metrics.d.ts.map +1 -0
  42. package/dist/src/metrics.js +896 -0
  43. package/dist/src/metrics.js.map +1 -0
  44. package/dist/src/score/compute-score.d.ts +4 -0
  45. package/dist/src/score/compute-score.d.ts.map +1 -0
  46. package/dist/src/score/compute-score.js +75 -0
  47. package/dist/src/score/compute-score.js.map +1 -0
  48. package/dist/src/score/index.d.ts +4 -0
  49. package/dist/src/score/index.d.ts.map +1 -0
  50. package/dist/src/score/index.js +4 -0
  51. package/dist/src/score/index.js.map +1 -0
  52. package/dist/src/score/message-deliveries.d.ts +45 -0
  53. package/dist/src/score/message-deliveries.d.ts.map +1 -0
  54. package/dist/src/score/message-deliveries.js +75 -0
  55. package/dist/src/score/message-deliveries.js.map +1 -0
  56. package/dist/src/score/peer-score-params.d.ts +125 -0
  57. package/dist/src/score/peer-score-params.d.ts.map +1 -0
  58. package/dist/src/score/peer-score-params.js +159 -0
  59. package/dist/src/score/peer-score-params.js.map +1 -0
  60. package/dist/src/score/peer-score-thresholds.d.ts +31 -0
  61. package/dist/src/score/peer-score-thresholds.d.ts.map +1 -0
  62. package/dist/src/score/peer-score-thresholds.js +32 -0
  63. package/dist/src/score/peer-score-thresholds.js.map +1 -0
  64. package/dist/src/score/peer-score.d.ts +119 -0
  65. package/dist/src/score/peer-score.d.ts.map +1 -0
  66. package/dist/src/score/peer-score.js +459 -0
  67. package/dist/src/score/peer-score.js.map +1 -0
  68. package/dist/src/score/peer-stats.d.ts +32 -0
  69. package/dist/src/score/peer-stats.d.ts.map +1 -0
  70. package/dist/src/score/peer-stats.js +2 -0
  71. package/dist/src/score/peer-stats.js.map +1 -0
  72. package/dist/src/score/scoreMetrics.d.ts +23 -0
  73. package/dist/src/score/scoreMetrics.d.ts.map +1 -0
  74. package/dist/src/score/scoreMetrics.js +155 -0
  75. package/dist/src/score/scoreMetrics.js.map +1 -0
  76. package/dist/src/stream.d.ts +30 -0
  77. package/dist/src/stream.d.ts.map +1 -0
  78. package/dist/src/stream.js +55 -0
  79. package/dist/src/stream.js.map +1 -0
  80. package/dist/src/tracer.d.ts +53 -0
  81. package/dist/src/tracer.d.ts.map +1 -0
  82. package/dist/src/tracer.js +155 -0
  83. package/dist/src/tracer.js.map +1 -0
  84. package/dist/src/types.d.ts +148 -0
  85. package/dist/src/types.d.ts.map +1 -0
  86. package/dist/src/types.js +90 -0
  87. package/dist/src/types.js.map +1 -0
  88. package/dist/src/utils/buildRawMessage.d.ts +20 -0
  89. package/dist/src/utils/buildRawMessage.d.ts.map +1 -0
  90. package/dist/src/utils/buildRawMessage.js +151 -0
  91. package/dist/src/utils/buildRawMessage.js.map +1 -0
  92. package/dist/src/utils/create-gossip-rpc.d.ts +7 -0
  93. package/dist/src/utils/create-gossip-rpc.d.ts.map +1 -0
  94. package/dist/src/utils/create-gossip-rpc.js +31 -0
  95. package/dist/src/utils/create-gossip-rpc.js.map +1 -0
  96. package/dist/src/utils/index.d.ts +4 -0
  97. package/dist/src/utils/index.d.ts.map +1 -0
  98. package/dist/src/utils/index.js +4 -0
  99. package/dist/src/utils/index.js.map +1 -0
  100. package/dist/src/utils/messageIdToString.d.ts +5 -0
  101. package/dist/src/utils/messageIdToString.d.ts.map +1 -0
  102. package/dist/src/utils/messageIdToString.js +8 -0
  103. package/dist/src/utils/messageIdToString.js.map +1 -0
  104. package/dist/src/utils/msgIdFn.d.ts +10 -0
  105. package/dist/src/utils/msgIdFn.d.ts.map +1 -0
  106. package/dist/src/utils/msgIdFn.js +23 -0
  107. package/dist/src/utils/msgIdFn.js.map +1 -0
  108. package/dist/src/utils/multiaddr.d.ts +3 -0
  109. package/dist/src/utils/multiaddr.d.ts.map +1 -0
  110. package/dist/src/utils/multiaddr.js +15 -0
  111. package/dist/src/utils/multiaddr.js.map +1 -0
  112. package/dist/src/utils/publishConfig.d.ts +8 -0
  113. package/dist/src/utils/publishConfig.d.ts.map +1 -0
  114. package/dist/src/utils/publishConfig.js +25 -0
  115. package/dist/src/utils/publishConfig.js.map +1 -0
  116. package/dist/src/utils/set.d.ts +14 -0
  117. package/dist/src/utils/set.d.ts.map +1 -0
  118. package/dist/src/utils/set.js +41 -0
  119. package/dist/src/utils/set.js.map +1 -0
  120. package/dist/src/utils/shuffle.d.ts +7 -0
  121. package/dist/src/utils/shuffle.d.ts.map +1 -0
  122. package/dist/src/utils/shuffle.js +21 -0
  123. package/dist/src/utils/shuffle.js.map +1 -0
  124. package/dist/src/utils/time-cache.d.ts +22 -0
  125. package/dist/src/utils/time-cache.d.ts.map +1 -0
  126. package/dist/src/utils/time-cache.js +54 -0
  127. package/dist/src/utils/time-cache.js.map +1 -0
  128. package/package.json +142 -0
  129. package/src/config.ts +31 -0
  130. package/src/constants.ts +261 -0
  131. package/src/errors.ts +17 -0
  132. package/src/gossipsub.ts +3061 -0
  133. package/src/index.ts +404 -0
  134. package/src/message/decodeRpc.ts +19 -0
  135. package/src/message/index.ts +1 -0
  136. package/src/message/rpc.proto +58 -0
  137. package/src/message/rpc.ts +848 -0
  138. package/src/message-cache.ts +196 -0
  139. package/src/metrics.ts +1014 -0
  140. package/src/score/compute-score.ts +98 -0
  141. package/src/score/index.ts +3 -0
  142. package/src/score/message-deliveries.ts +95 -0
  143. package/src/score/peer-score-params.ts +316 -0
  144. package/src/score/peer-score-thresholds.ts +70 -0
  145. package/src/score/peer-score.ts +565 -0
  146. package/src/score/peer-stats.ts +33 -0
  147. package/src/score/scoreMetrics.ts +215 -0
  148. package/src/stream.ts +79 -0
  149. package/src/tracer.ts +177 -0
  150. package/src/types.ts +178 -0
  151. package/src/utils/buildRawMessage.ts +174 -0
  152. package/src/utils/create-gossip-rpc.ts +34 -0
  153. package/src/utils/index.ts +3 -0
  154. package/src/utils/messageIdToString.ts +8 -0
  155. package/src/utils/msgIdFn.ts +24 -0
  156. package/src/utils/multiaddr.ts +19 -0
  157. package/src/utils/publishConfig.ts +33 -0
  158. package/src/utils/set.ts +43 -0
  159. package/src/utils/shuffle.ts +21 -0
  160. package/src/utils/time-cache.ts +71 -0
@@ -0,0 +1,848 @@
1
+ /* eslint-disable complexity */
2
+
3
+ import { decodeMessage, encodeMessage, MaxLengthError, message } from 'protons-runtime'
4
+ import type { Codec, DecodeOptions } from 'protons-runtime'
5
+ import type { Uint8ArrayList } from 'uint8arraylist'
6
+
7
+ export interface RPC {
8
+ subscriptions: RPC.SubOpts[]
9
+ messages: RPC.Message[]
10
+ control?: RPC.ControlMessage
11
+ }
12
+
13
+ export namespace RPC {
14
+ export interface SubOpts {
15
+ subscribe?: boolean
16
+ topic?: string
17
+ }
18
+
19
+ export namespace SubOpts {
20
+ let _codec: Codec<SubOpts>
21
+
22
+ export const codec = (): Codec<SubOpts> => {
23
+ if (_codec == null) {
24
+ _codec = message<SubOpts>((obj, w, opts = {}) => {
25
+ if (opts.lengthDelimited !== false) {
26
+ w.fork()
27
+ }
28
+
29
+ if (obj.subscribe != null) {
30
+ w.uint32(8)
31
+ w.bool(obj.subscribe)
32
+ }
33
+
34
+ if (obj.topic != null) {
35
+ w.uint32(18)
36
+ w.string(obj.topic)
37
+ }
38
+
39
+ if (opts.lengthDelimited !== false) {
40
+ w.ldelim()
41
+ }
42
+ }, (reader, length, opts = {}) => {
43
+ const obj: any = {}
44
+
45
+ const end = length == null ? reader.len : reader.pos + length
46
+
47
+ while (reader.pos < end) {
48
+ const tag = reader.uint32()
49
+
50
+ switch (tag >>> 3) {
51
+ case 1: {
52
+ obj.subscribe = reader.bool()
53
+ break
54
+ }
55
+ case 2: {
56
+ obj.topic = reader.string()
57
+ break
58
+ }
59
+ default: {
60
+ reader.skipType(tag & 7)
61
+ break
62
+ }
63
+ }
64
+ }
65
+
66
+ return obj
67
+ })
68
+ }
69
+
70
+ return _codec
71
+ }
72
+
73
+ export const encode = (obj: Partial<SubOpts>): Uint8Array => {
74
+ return encodeMessage(obj, SubOpts.codec())
75
+ }
76
+
77
+ export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<SubOpts>): SubOpts => {
78
+ return decodeMessage(buf, SubOpts.codec(), opts)
79
+ }
80
+ }
81
+
82
+ export interface Message {
83
+ from?: Uint8Array
84
+ data?: Uint8Array
85
+ seqno?: Uint8Array
86
+ topic: string
87
+ signature?: Uint8Array
88
+ key?: Uint8Array
89
+ }
90
+
91
+ export namespace Message {
92
+ let _codec: Codec<Message>
93
+
94
+ export const codec = (): Codec<Message> => {
95
+ if (_codec == null) {
96
+ _codec = message<Message>((obj, w, opts = {}) => {
97
+ if (opts.lengthDelimited !== false) {
98
+ w.fork()
99
+ }
100
+
101
+ if (obj.from != null) {
102
+ w.uint32(10)
103
+ w.bytes(obj.from)
104
+ }
105
+
106
+ if (obj.data != null) {
107
+ w.uint32(18)
108
+ w.bytes(obj.data)
109
+ }
110
+
111
+ if (obj.seqno != null) {
112
+ w.uint32(26)
113
+ w.bytes(obj.seqno)
114
+ }
115
+
116
+ if ((obj.topic != null && obj.topic !== '')) {
117
+ w.uint32(34)
118
+ w.string(obj.topic)
119
+ }
120
+
121
+ if (obj.signature != null) {
122
+ w.uint32(42)
123
+ w.bytes(obj.signature)
124
+ }
125
+
126
+ if (obj.key != null) {
127
+ w.uint32(50)
128
+ w.bytes(obj.key)
129
+ }
130
+
131
+ if (opts.lengthDelimited !== false) {
132
+ w.ldelim()
133
+ }
134
+ }, (reader, length, opts = {}) => {
135
+ const obj: any = {
136
+ topic: ''
137
+ }
138
+
139
+ const end = length == null ? reader.len : reader.pos + length
140
+
141
+ while (reader.pos < end) {
142
+ const tag = reader.uint32()
143
+
144
+ switch (tag >>> 3) {
145
+ case 1: {
146
+ obj.from = reader.bytes()
147
+ break
148
+ }
149
+ case 2: {
150
+ obj.data = reader.bytes()
151
+ break
152
+ }
153
+ case 3: {
154
+ obj.seqno = reader.bytes()
155
+ break
156
+ }
157
+ case 4: {
158
+ obj.topic = reader.string()
159
+ break
160
+ }
161
+ case 5: {
162
+ obj.signature = reader.bytes()
163
+ break
164
+ }
165
+ case 6: {
166
+ obj.key = reader.bytes()
167
+ break
168
+ }
169
+ default: {
170
+ reader.skipType(tag & 7)
171
+ break
172
+ }
173
+ }
174
+ }
175
+
176
+ return obj
177
+ })
178
+ }
179
+
180
+ return _codec
181
+ }
182
+
183
+ export const encode = (obj: Partial<Message>): Uint8Array => {
184
+ return encodeMessage(obj, Message.codec())
185
+ }
186
+
187
+ export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Message>): Message => {
188
+ return decodeMessage(buf, Message.codec(), opts)
189
+ }
190
+ }
191
+
192
+ export interface ControlMessage {
193
+ ihave: RPC.ControlIHave[]
194
+ iwant: RPC.ControlIWant[]
195
+ graft: RPC.ControlGraft[]
196
+ prune: RPC.ControlPrune[]
197
+ idontwant: RPC.ControlIDontWant[]
198
+ }
199
+
200
+ export namespace ControlMessage {
201
+ let _codec: Codec<ControlMessage>
202
+
203
+ export const codec = (): Codec<ControlMessage> => {
204
+ if (_codec == null) {
205
+ _codec = message<ControlMessage>((obj, w, opts = {}) => {
206
+ if (opts.lengthDelimited !== false) {
207
+ w.fork()
208
+ }
209
+
210
+ if (obj.ihave != null) {
211
+ for (const value of obj.ihave) {
212
+ w.uint32(10)
213
+ RPC.ControlIHave.codec().encode(value, w)
214
+ }
215
+ }
216
+
217
+ if (obj.iwant != null) {
218
+ for (const value of obj.iwant) {
219
+ w.uint32(18)
220
+ RPC.ControlIWant.codec().encode(value, w)
221
+ }
222
+ }
223
+
224
+ if (obj.graft != null) {
225
+ for (const value of obj.graft) {
226
+ w.uint32(26)
227
+ RPC.ControlGraft.codec().encode(value, w)
228
+ }
229
+ }
230
+
231
+ if (obj.prune != null) {
232
+ for (const value of obj.prune) {
233
+ w.uint32(34)
234
+ RPC.ControlPrune.codec().encode(value, w)
235
+ }
236
+ }
237
+
238
+ if (obj.idontwant != null) {
239
+ for (const value of obj.idontwant) {
240
+ w.uint32(42)
241
+ RPC.ControlIDontWant.codec().encode(value, w)
242
+ }
243
+ }
244
+
245
+ if (opts.lengthDelimited !== false) {
246
+ w.ldelim()
247
+ }
248
+ }, (reader, length, opts = {}) => {
249
+ const obj: any = {
250
+ ihave: [],
251
+ iwant: [],
252
+ graft: [],
253
+ prune: [],
254
+ idontwant: []
255
+ }
256
+
257
+ const end = length == null ? reader.len : reader.pos + length
258
+
259
+ while (reader.pos < end) {
260
+ const tag = reader.uint32()
261
+
262
+ switch (tag >>> 3) {
263
+ case 1: {
264
+ if (opts.limits?.ihave != null && obj.ihave.length === opts.limits.ihave) {
265
+ throw new MaxLengthError('Decode error - map field "ihave" had too many elements')
266
+ }
267
+
268
+ obj.ihave.push(RPC.ControlIHave.codec().decode(reader, reader.uint32(), {
269
+ limits: opts.limits?.ihave$
270
+ }))
271
+ break
272
+ }
273
+ case 2: {
274
+ if (opts.limits?.iwant != null && obj.iwant.length === opts.limits.iwant) {
275
+ throw new MaxLengthError('Decode error - map field "iwant" had too many elements')
276
+ }
277
+
278
+ obj.iwant.push(RPC.ControlIWant.codec().decode(reader, reader.uint32(), {
279
+ limits: opts.limits?.iwant$
280
+ }))
281
+ break
282
+ }
283
+ case 3: {
284
+ if (opts.limits?.graft != null && obj.graft.length === opts.limits.graft) {
285
+ throw new MaxLengthError('Decode error - map field "graft" had too many elements')
286
+ }
287
+
288
+ obj.graft.push(RPC.ControlGraft.codec().decode(reader, reader.uint32(), {
289
+ limits: opts.limits?.graft$
290
+ }))
291
+ break
292
+ }
293
+ case 4: {
294
+ if (opts.limits?.prune != null && obj.prune.length === opts.limits.prune) {
295
+ throw new MaxLengthError('Decode error - map field "prune" had too many elements')
296
+ }
297
+
298
+ obj.prune.push(RPC.ControlPrune.codec().decode(reader, reader.uint32(), {
299
+ limits: opts.limits?.prune$
300
+ }))
301
+ break
302
+ }
303
+ case 5: {
304
+ if (opts.limits?.idontwant != null && obj.idontwant.length === opts.limits.idontwant) {
305
+ throw new MaxLengthError('Decode error - map field "idontwant" had too many elements')
306
+ }
307
+
308
+ obj.idontwant.push(RPC.ControlIDontWant.codec().decode(reader, reader.uint32(), {
309
+ limits: opts.limits?.idontwant$
310
+ }))
311
+ break
312
+ }
313
+ default: {
314
+ reader.skipType(tag & 7)
315
+ break
316
+ }
317
+ }
318
+ }
319
+
320
+ return obj
321
+ })
322
+ }
323
+
324
+ return _codec
325
+ }
326
+
327
+ export const encode = (obj: Partial<ControlMessage>): Uint8Array => {
328
+ return encodeMessage(obj, ControlMessage.codec())
329
+ }
330
+
331
+ export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<ControlMessage>): ControlMessage => {
332
+ return decodeMessage(buf, ControlMessage.codec(), opts)
333
+ }
334
+ }
335
+
336
+ export interface ControlIHave {
337
+ topicID?: string
338
+ messageIDs: Uint8Array[]
339
+ }
340
+
341
+ export namespace ControlIHave {
342
+ let _codec: Codec<ControlIHave>
343
+
344
+ export const codec = (): Codec<ControlIHave> => {
345
+ if (_codec == null) {
346
+ _codec = message<ControlIHave>((obj, w, opts = {}) => {
347
+ if (opts.lengthDelimited !== false) {
348
+ w.fork()
349
+ }
350
+
351
+ if (obj.topicID != null) {
352
+ w.uint32(10)
353
+ w.string(obj.topicID)
354
+ }
355
+
356
+ if (obj.messageIDs != null) {
357
+ for (const value of obj.messageIDs) {
358
+ w.uint32(18)
359
+ w.bytes(value)
360
+ }
361
+ }
362
+
363
+ if (opts.lengthDelimited !== false) {
364
+ w.ldelim()
365
+ }
366
+ }, (reader, length, opts = {}) => {
367
+ const obj: any = {
368
+ messageIDs: []
369
+ }
370
+
371
+ const end = length == null ? reader.len : reader.pos + length
372
+
373
+ while (reader.pos < end) {
374
+ const tag = reader.uint32()
375
+
376
+ switch (tag >>> 3) {
377
+ case 1: {
378
+ obj.topicID = reader.string()
379
+ break
380
+ }
381
+ case 2: {
382
+ if (opts.limits?.messageIDs != null && obj.messageIDs.length === opts.limits.messageIDs) {
383
+ throw new MaxLengthError('Decode error - map field "messageIDs" had too many elements')
384
+ }
385
+
386
+ obj.messageIDs.push(reader.bytes())
387
+ break
388
+ }
389
+ default: {
390
+ reader.skipType(tag & 7)
391
+ break
392
+ }
393
+ }
394
+ }
395
+
396
+ return obj
397
+ })
398
+ }
399
+
400
+ return _codec
401
+ }
402
+
403
+ export const encode = (obj: Partial<ControlIHave>): Uint8Array => {
404
+ return encodeMessage(obj, ControlIHave.codec())
405
+ }
406
+
407
+ export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<ControlIHave>): ControlIHave => {
408
+ return decodeMessage(buf, ControlIHave.codec(), opts)
409
+ }
410
+ }
411
+
412
+ export interface ControlIWant {
413
+ messageIDs: Uint8Array[]
414
+ }
415
+
416
+ export namespace ControlIWant {
417
+ let _codec: Codec<ControlIWant>
418
+
419
+ export const codec = (): Codec<ControlIWant> => {
420
+ if (_codec == null) {
421
+ _codec = message<ControlIWant>((obj, w, opts = {}) => {
422
+ if (opts.lengthDelimited !== false) {
423
+ w.fork()
424
+ }
425
+
426
+ if (obj.messageIDs != null) {
427
+ for (const value of obj.messageIDs) {
428
+ w.uint32(10)
429
+ w.bytes(value)
430
+ }
431
+ }
432
+
433
+ if (opts.lengthDelimited !== false) {
434
+ w.ldelim()
435
+ }
436
+ }, (reader, length, opts = {}) => {
437
+ const obj: any = {
438
+ messageIDs: []
439
+ }
440
+
441
+ const end = length == null ? reader.len : reader.pos + length
442
+
443
+ while (reader.pos < end) {
444
+ const tag = reader.uint32()
445
+
446
+ switch (tag >>> 3) {
447
+ case 1: {
448
+ if (opts.limits?.messageIDs != null && obj.messageIDs.length === opts.limits.messageIDs) {
449
+ throw new MaxLengthError('Decode error - map field "messageIDs" had too many elements')
450
+ }
451
+
452
+ obj.messageIDs.push(reader.bytes())
453
+ break
454
+ }
455
+ default: {
456
+ reader.skipType(tag & 7)
457
+ break
458
+ }
459
+ }
460
+ }
461
+
462
+ return obj
463
+ })
464
+ }
465
+
466
+ return _codec
467
+ }
468
+
469
+ export const encode = (obj: Partial<ControlIWant>): Uint8Array => {
470
+ return encodeMessage(obj, ControlIWant.codec())
471
+ }
472
+
473
+ export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<ControlIWant>): ControlIWant => {
474
+ return decodeMessage(buf, ControlIWant.codec(), opts)
475
+ }
476
+ }
477
+
478
+ export interface ControlGraft {
479
+ topicID?: string
480
+ }
481
+
482
+ export namespace ControlGraft {
483
+ let _codec: Codec<ControlGraft>
484
+
485
+ export const codec = (): Codec<ControlGraft> => {
486
+ if (_codec == null) {
487
+ _codec = message<ControlGraft>((obj, w, opts = {}) => {
488
+ if (opts.lengthDelimited !== false) {
489
+ w.fork()
490
+ }
491
+
492
+ if (obj.topicID != null) {
493
+ w.uint32(10)
494
+ w.string(obj.topicID)
495
+ }
496
+
497
+ if (opts.lengthDelimited !== false) {
498
+ w.ldelim()
499
+ }
500
+ }, (reader, length, opts = {}) => {
501
+ const obj: any = {}
502
+
503
+ const end = length == null ? reader.len : reader.pos + length
504
+
505
+ while (reader.pos < end) {
506
+ const tag = reader.uint32()
507
+
508
+ switch (tag >>> 3) {
509
+ case 1: {
510
+ obj.topicID = reader.string()
511
+ break
512
+ }
513
+ default: {
514
+ reader.skipType(tag & 7)
515
+ break
516
+ }
517
+ }
518
+ }
519
+
520
+ return obj
521
+ })
522
+ }
523
+
524
+ return _codec
525
+ }
526
+
527
+ export const encode = (obj: Partial<ControlGraft>): Uint8Array => {
528
+ return encodeMessage(obj, ControlGraft.codec())
529
+ }
530
+
531
+ export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<ControlGraft>): ControlGraft => {
532
+ return decodeMessage(buf, ControlGraft.codec(), opts)
533
+ }
534
+ }
535
+
536
+ export interface ControlPrune {
537
+ topicID?: string
538
+ peers: RPC.PeerInfo[]
539
+ backoff?: number
540
+ }
541
+
542
+ export namespace ControlPrune {
543
+ let _codec: Codec<ControlPrune>
544
+
545
+ export const codec = (): Codec<ControlPrune> => {
546
+ if (_codec == null) {
547
+ _codec = message<ControlPrune>((obj, w, opts = {}) => {
548
+ if (opts.lengthDelimited !== false) {
549
+ w.fork()
550
+ }
551
+
552
+ if (obj.topicID != null) {
553
+ w.uint32(10)
554
+ w.string(obj.topicID)
555
+ }
556
+
557
+ if (obj.peers != null) {
558
+ for (const value of obj.peers) {
559
+ w.uint32(18)
560
+ RPC.PeerInfo.codec().encode(value, w)
561
+ }
562
+ }
563
+
564
+ if (obj.backoff != null) {
565
+ w.uint32(24)
566
+ w.uint64Number(obj.backoff)
567
+ }
568
+
569
+ if (opts.lengthDelimited !== false) {
570
+ w.ldelim()
571
+ }
572
+ }, (reader, length, opts = {}) => {
573
+ const obj: any = {
574
+ peers: []
575
+ }
576
+
577
+ const end = length == null ? reader.len : reader.pos + length
578
+
579
+ while (reader.pos < end) {
580
+ const tag = reader.uint32()
581
+
582
+ switch (tag >>> 3) {
583
+ case 1: {
584
+ obj.topicID = reader.string()
585
+ break
586
+ }
587
+ case 2: {
588
+ if (opts.limits?.peers != null && obj.peers.length === opts.limits.peers) {
589
+ throw new MaxLengthError('Decode error - map field "peers" had too many elements')
590
+ }
591
+
592
+ obj.peers.push(RPC.PeerInfo.codec().decode(reader, reader.uint32(), {
593
+ limits: opts.limits?.peers$
594
+ }))
595
+ break
596
+ }
597
+ case 3: {
598
+ obj.backoff = reader.uint64Number()
599
+ break
600
+ }
601
+ default: {
602
+ reader.skipType(tag & 7)
603
+ break
604
+ }
605
+ }
606
+ }
607
+
608
+ return obj
609
+ })
610
+ }
611
+
612
+ return _codec
613
+ }
614
+
615
+ export const encode = (obj: Partial<ControlPrune>): Uint8Array => {
616
+ return encodeMessage(obj, ControlPrune.codec())
617
+ }
618
+
619
+ export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<ControlPrune>): ControlPrune => {
620
+ return decodeMessage(buf, ControlPrune.codec(), opts)
621
+ }
622
+ }
623
+
624
+ export interface PeerInfo {
625
+ peerID?: Uint8Array
626
+ signedPeerRecord?: Uint8Array
627
+ }
628
+
629
+ export namespace PeerInfo {
630
+ let _codec: Codec<PeerInfo>
631
+
632
+ export const codec = (): Codec<PeerInfo> => {
633
+ if (_codec == null) {
634
+ _codec = message<PeerInfo>((obj, w, opts = {}) => {
635
+ if (opts.lengthDelimited !== false) {
636
+ w.fork()
637
+ }
638
+
639
+ if (obj.peerID != null) {
640
+ w.uint32(10)
641
+ w.bytes(obj.peerID)
642
+ }
643
+
644
+ if (obj.signedPeerRecord != null) {
645
+ w.uint32(18)
646
+ w.bytes(obj.signedPeerRecord)
647
+ }
648
+
649
+ if (opts.lengthDelimited !== false) {
650
+ w.ldelim()
651
+ }
652
+ }, (reader, length, opts = {}) => {
653
+ const obj: any = {}
654
+
655
+ const end = length == null ? reader.len : reader.pos + length
656
+
657
+ while (reader.pos < end) {
658
+ const tag = reader.uint32()
659
+
660
+ switch (tag >>> 3) {
661
+ case 1: {
662
+ obj.peerID = reader.bytes()
663
+ break
664
+ }
665
+ case 2: {
666
+ obj.signedPeerRecord = reader.bytes()
667
+ break
668
+ }
669
+ default: {
670
+ reader.skipType(tag & 7)
671
+ break
672
+ }
673
+ }
674
+ }
675
+
676
+ return obj
677
+ })
678
+ }
679
+
680
+ return _codec
681
+ }
682
+
683
+ export const encode = (obj: Partial<PeerInfo>): Uint8Array => {
684
+ return encodeMessage(obj, PeerInfo.codec())
685
+ }
686
+
687
+ export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<PeerInfo>): PeerInfo => {
688
+ return decodeMessage(buf, PeerInfo.codec(), opts)
689
+ }
690
+ }
691
+
692
+ export interface ControlIDontWant {
693
+ messageIDs: Uint8Array[]
694
+ }
695
+
696
+ export namespace ControlIDontWant {
697
+ let _codec: Codec<ControlIDontWant>
698
+
699
+ export const codec = (): Codec<ControlIDontWant> => {
700
+ if (_codec == null) {
701
+ _codec = message<ControlIDontWant>((obj, w, opts = {}) => {
702
+ if (opts.lengthDelimited !== false) {
703
+ w.fork()
704
+ }
705
+
706
+ if (obj.messageIDs != null) {
707
+ for (const value of obj.messageIDs) {
708
+ w.uint32(10)
709
+ w.bytes(value)
710
+ }
711
+ }
712
+
713
+ if (opts.lengthDelimited !== false) {
714
+ w.ldelim()
715
+ }
716
+ }, (reader, length, opts = {}) => {
717
+ const obj: any = {
718
+ messageIDs: []
719
+ }
720
+
721
+ const end = length == null ? reader.len : reader.pos + length
722
+
723
+ while (reader.pos < end) {
724
+ const tag = reader.uint32()
725
+
726
+ switch (tag >>> 3) {
727
+ case 1: {
728
+ if (opts.limits?.messageIDs != null && obj.messageIDs.length === opts.limits.messageIDs) {
729
+ throw new MaxLengthError('Decode error - map field "messageIDs" had too many elements')
730
+ }
731
+
732
+ obj.messageIDs.push(reader.bytes())
733
+ break
734
+ }
735
+ default: {
736
+ reader.skipType(tag & 7)
737
+ break
738
+ }
739
+ }
740
+ }
741
+
742
+ return obj
743
+ })
744
+ }
745
+
746
+ return _codec
747
+ }
748
+
749
+ export const encode = (obj: Partial<ControlIDontWant>): Uint8Array => {
750
+ return encodeMessage(obj, ControlIDontWant.codec())
751
+ }
752
+
753
+ export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<ControlIDontWant>): ControlIDontWant => {
754
+ return decodeMessage(buf, ControlIDontWant.codec(), opts)
755
+ }
756
+ }
757
+
758
+ let _codec: Codec<RPC>
759
+
760
+ export const codec = (): Codec<RPC> => {
761
+ if (_codec == null) {
762
+ _codec = message<RPC>((obj, w, opts = {}) => {
763
+ if (opts.lengthDelimited !== false) {
764
+ w.fork()
765
+ }
766
+
767
+ if (obj.subscriptions != null) {
768
+ for (const value of obj.subscriptions) {
769
+ w.uint32(10)
770
+ RPC.SubOpts.codec().encode(value, w)
771
+ }
772
+ }
773
+
774
+ if (obj.messages != null) {
775
+ for (const value of obj.messages) {
776
+ w.uint32(18)
777
+ RPC.Message.codec().encode(value, w)
778
+ }
779
+ }
780
+
781
+ if (obj.control != null) {
782
+ w.uint32(26)
783
+ RPC.ControlMessage.codec().encode(obj.control, w)
784
+ }
785
+
786
+ if (opts.lengthDelimited !== false) {
787
+ w.ldelim()
788
+ }
789
+ }, (reader, length, opts = {}) => {
790
+ const obj: any = {
791
+ subscriptions: [],
792
+ messages: []
793
+ }
794
+
795
+ const end = length == null ? reader.len : reader.pos + length
796
+
797
+ while (reader.pos < end) {
798
+ const tag = reader.uint32()
799
+
800
+ switch (tag >>> 3) {
801
+ case 1: {
802
+ if (opts.limits?.subscriptions != null && obj.subscriptions.length === opts.limits.subscriptions) {
803
+ throw new MaxLengthError('Decode error - map field "subscriptions" had too many elements')
804
+ }
805
+
806
+ obj.subscriptions.push(RPC.SubOpts.codec().decode(reader, reader.uint32(), {
807
+ limits: opts.limits?.subscriptions$
808
+ }))
809
+ break
810
+ }
811
+ case 2: {
812
+ if (opts.limits?.messages != null && obj.messages.length === opts.limits.messages) {
813
+ throw new MaxLengthError('Decode error - map field "messages" had too many elements')
814
+ }
815
+
816
+ obj.messages.push(RPC.Message.codec().decode(reader, reader.uint32(), {
817
+ limits: opts.limits?.messages$
818
+ }))
819
+ break
820
+ }
821
+ case 3: {
822
+ obj.control = RPC.ControlMessage.codec().decode(reader, reader.uint32(), {
823
+ limits: opts.limits?.control
824
+ })
825
+ break
826
+ }
827
+ default: {
828
+ reader.skipType(tag & 7)
829
+ break
830
+ }
831
+ }
832
+ }
833
+
834
+ return obj
835
+ })
836
+ }
837
+
838
+ return _codec
839
+ }
840
+
841
+ export const encode = (obj: Partial<RPC>): Uint8Array => {
842
+ return encodeMessage(obj, RPC.codec())
843
+ }
844
+
845
+ export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<RPC>): RPC => {
846
+ return decodeMessage(buf, RPC.codec(), opts)
847
+ }
848
+ }